{"id":367699,"date":"2024-05-21T03:26:37","date_gmt":"2024-05-21T03:26:37","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=367699"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T03:26:37","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=367699","title":{"rendered":"<span>\u00ab\u041c\u0430\u0448\u0438\u043d\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435\u00bb \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0431\u0435\u0437 \u0418\u0418 \u0438 \u043d\u0435\u0439\u0440\u043e\u043d\u043e\u043a \u043d\u0430 Python<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u0437\u00a0\u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0441\u00a0\u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u043c\u0438 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5b3\/0a3\/4a3\/5b30a34a3af9ff5994e13a15eb6ec710.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432\" width=\"1373\" height=\"284\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5b3\/0a3\/4a3\/5b30a34a3af9ff5994e13a15eb6ec710.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439, \u0430\u00a0\u0434\u043b\u044f\u00a0\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Python \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<h2>\u0417\u0430\u0434\u0430\u0447\u0430<\/h2>\n<p>\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432 \u0441\u00a0\u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c\u0438 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438. \u0414\u043b\u044f\u00a0\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u0443\u0447\u043d\u044b\u0435\u00a0\u0431\u044b\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0438 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b, \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f CO\u00b2.<\/p>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441\u00a0\u043d\u0430\u0448\u0435\u0439 \u00ab\u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438\u00bb \u043b\u044e\u0431\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0441\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0442\u0430\u0439\u043c\u043b\u0430\u043f\u0441. \u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043c\u0435\u0436\u0434\u0443 \u0441\u043d\u0438\u043c\u043a\u0430\u043c\u0438 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0432 2\u20135%.<\/p>\n<p>\u00ab\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\u00bb \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0420\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0432\u00a0\u043e\u0434\u043d\u043e\u043c \u043a\u0430\u0434\u0440\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432 \u0434\u043b\u044f\u00a0\u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u0432\u00a0\u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438. \u0412\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0442\u0430\u0439\u043c\u043b\u0430\u043f\u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0436\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b 1\u00a0\u043c\u0438\u043d\u0443\u0442\u0430, \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c 2\u00a0\u0447\u0430\u0441\u0430, \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0434\u0440\u0430 640\u00d7480px \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441\u0432\u0435\u0434\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u043e\u0446\u0435\u043d\u0438\u043c \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u00a0\u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u0445 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432 \u043d\u0430\u00a0\u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0445. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/a6a\/d24\/daf\/a6ad24daf98ce1aba416cf9345da5888.jpg\" width=\"640\" height=\"480\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a6a\/d24\/daf\/a6ad24daf98ce1aba416cf9345da5888.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0418\u0442\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c.<\/p>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439: <\/p>\n<ol>\n<li>\n<p>\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442\u00a0\u043d\u0430\u043a\u043b\u043e\u043d\u0430 \u043a\u0430\u043c\u0435\u0440\u044b \u043f\u043e\u00a0\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043a\u00a0\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0443;<\/p>\n<\/li>\n<li>\n<p>\u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u044d\u0442\u0430\u043f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0442\u0430\u043a\u0438\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438, \u043a\u0430\u043a\u00a0\u043a\u043e\u043d\u0442\u0440\u0430\u0441\u0442, \u0446\u0432\u0435\u0442\u043d\u043e\u0441\u0442\u044c, \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u00a0\u0434\u043e\u043b\u0436\u043d\u044b \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u043d\u0430\u00a0\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435;<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u043b\u0436\u043d\u0430\u00a0\u0431\u044b\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f\u00a0\u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0437\u043e\u043d \u043d\u0430\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u0433\u0434\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0438 \u0437\u043e\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0433\u043e \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430.<\/p>\n<\/li>\n<\/ol>\n<h2>\u0420\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0414\u043b\u044f\u00a0\u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043d\u0430\u00a0\u0441\u043d\u0438\u043c\u043a\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u043b\u044e\u0431\u043e\u0439 \u0444\u0430\u0439\u043b \u0438\u0437\u00a0\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0442\u0430\u0439\u043c\u043b\u0430\u043f\u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1a3\/052\/3bf\/1a30523bf3af7d3d548f5eada9a1d4a4.png\" width=\"1168\" height=\"426\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1a3\/052\/3bf\/1a30523bf3af7d3d548f5eada9a1d4a4.png\"\/><\/figure>\n<h2>\u0420\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u0437\u043e\u043d<\/h2>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438:<\/p>\n<pre><code class=\"python\"># \u0440\u0430\u0437\u043c\u0435\u0447\u0430\u0435\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438   import glob import matplotlib.pyplot as plt import matplotlib.image as mpimg from matplotlib.patches import Rectangle from scipy import ndimage   #   [id, top, bottom, width, height, rotation, description]  indicator_areas = [     [0, 176, 134, 22, 14, 0, \"\u0444\u043e\u043d\"],     [1, 216, 134, 81, 29, 0, \"1_CO2\"],     [2, 234, 169, 18, 10, 0, \"1_Temp\"],     [3, 277, 167, 20, 12, 0, \"1_Hum\"],     [4, 240, 212, 38, 35, -3, \"2_Temp\"],     [5, 283, 211, 24, 20, -4, \"2_Hum\"],     [6, 418, 106, 19, 12, 0, \"3_Temp\"],     [7, 418, 115, 19, 19, -5, \"3_Hum\"],     [8, 413, 130, 19, 19, -3, \"3_CO2\"],     [9, 390, 293, 31, 25, -5, \"4_Temp\"],     [10, 393, 328, 31, 25, -5, \"4_Hum\"], ]  _fmask =  r\"src\/20240131\/2024.01.31_11.14.27\/*.jpg\" # \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043d\u0438\u043c\u043a\u043e\u0432  image_files = glob.glob( _fmask , recursive=True )     fig, ax = plt.subplots(1, 1, figsize=(10, 5))  _img = mpimg.imread(image_files[1])             # \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u0431\u0435\u0440\u0435\u043c \u043b\u044e\u0431\u043e\u0439 \u0444\u0430\u0439\u043b _img = ndimage.rotate(_img, 90, reshape=True )  # \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435  for ii, s in enumerate(indicator_areas):     id, x, y, w, h, a, n = s     ax.add_patch(         Rectangle((x, y), w, h, edgecolor=\"#f00\", facecolor=\"blue\", fill=False, lw=1)     ) ax.imshow(_img)<\/code><\/pre>\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u043a\u043e\u043b\u0434\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0434 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 indicator_areas, \u043d\u043e\u00a0\u0432\u00a0\u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/84b\/1f0\/717\/84b1f0717e665a882ffc48d5b8f4f79d.png\" width=\"938\" height=\"733\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/84b\/1f0\/717\/84b1f0717e665a882ffc48d5b8f4f79d.png\"\/><\/figure>\n<h2>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 <\/h2>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u00a0\u0437\u043e\u043d\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0432\u00a0\u043e\u0434\u043d\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443.<\/p>\n<pre><code class=\"python\"># \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u043d\u0434\u0438\u043a\u0442\u043e\u0440\u043e\u0432 \u0432 \u0441\u0432\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435  import glob import matplotlib.pyplot as plt import matplotlib.image as mpimg import scipy.ndimage as ndimage  images = []  image_files = glob.glob(r'src\\20240131\\2024.01.31_11.14.27\\*.jpg')  for f in image_files[:5]:     _img = mpimg.imread(f)     _img = ndimage.rotate(_img, 90, reshape=True)     images.append(_img)       #     [id, top, bottom, left, rigth, rotation, desctiption]  indicator_areas = [     [0,176,134,22,14,0, \"\u0444\u043e\u043d\"],     [1,216,134,81,29,0, \"1_CO2\"],        [2,234,169,18,10,0, \"1_Temp\"],        [3,277,167,20,12,0,  \"1_Hum\"],        [4,240,212,38,35,-3, \"2_Temp\"],       [5,283,211,24,20,-4, \"2_Hum\"],        [6,418,106,19,12,0,\"3_Temp\"],     [7,418,115,19,19,-5,\"3_Hum\"],     [8,413,130,19,19,-3,\"3_CO2\"],     [9,390,293,31,25,-5,\"4_Temp\"],     [10,393,328,31,25,-5,\"4_Hum\"], ]  n_cols =  len(indicator_areas) n_img = len(images)   fig, axs = plt.subplots(nrows=len(images), ncols=n_cols+1, figsize=(8, int(n_img\/1.5))) plt.setp(plt.gcf().get_axes(), xticks=[], yticks=[]);     plt.subplots_adjust(  top=0.7,bottom=0, wspace=0, hspace=0.5)    for i, image in enumerate(images):          for ii, ia in enumerate(indicator_areas):                  n,x,y,w,h,a,n = ia   # ID, x,y, width, height, rotation angle                  _image = image[y:y+h,x:x+w]  # ? Numpy \u0437\u0430 \u0442\u0430\u043a\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439                   if a != 0:              _image = ndimage.rotate(_image, a, reshape=True)              _image = _image[6:-3,1:-2]  # \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0440\u0435\u0437\u0430\u0435\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u043e\u043c                  # \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f, \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0430 \u0432\u0435\u0440\u043d\u043e         axs[i,ii].text(0,-2, n, **{\"color\":'#f00', \"size\":9 })                    if(ii == 0 ): axs[i,ii].text(10,8, i, color='#ff0')         axs[i,ii].imshow(_image)  fig.savefig(f'co_2_{n_img}.png',bbox_inches='tight')<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f 5 \u0444\u0430\u0439\u043b\u043e\u0432:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a06\/6cb\/916\/a066cb916bb5996a94a2a5996d22e782.png\" width=\"1054\" height=\"392\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a06\/6cb\/916\/a066cb916bb5996a94a2a5996d22e782.png\"\/><\/figure>\n<p>\u041d\u0430\u00a0\u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0435\u043c\u043d\u043e\u0433\u043e, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0445 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0434\u043b\u044f\u00a0\u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0438 \u043e\u0446\u0435\u043d\u043a\u0438 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0439. \u0422.\u043a. \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u044f\u0434\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0435\u0440\u0435\u043f\u0435\u0447\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0441\u044f \u0438 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u0441\u044f, \u0434\u0430\u00a0\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438\u00a0\u0432\u0432\u043e\u0434\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u0441\u044f.<\/p>\n<p>\u041d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u043e\u00a0\u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437\u00a0\u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432, \u0432\u00a0\u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0434\u043b\u044f\u00a0\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 CO\u00b2 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8d8\/785\/d2f\/8d8785d2ff732679c0608b056a39f9fe.png\" width=\"1050\" height=\"849\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8d8\/785\/d2f\/8d8785d2ff732679c0608b056a39f9fe.png\"\/><\/figure>\n<p>\u0421\u00a0\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c.<\/p>\n<h2>\u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0446\u0438\u0444\u0440 \u043d\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435<\/h2>\n<p>\u0417\u0430\u0434\u0443\u043c\u043a\u0430 \u0432\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c, \u0442.\u043a. \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 7<sup>1<\/sup> \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f\u00a0\u043b\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043e\u0442\u00a0\u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430, \u0433\u0434\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442, \u0442.\u00a0\u0435. \u0444\u043e\u043d\u0430. <\/p>\n<p><sup>1<\/sup> \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c 8\u00a0\u0438\u043b\u0438 9, \u0435\u0441\u043b\u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u043d\u0430\u00a0\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u0445 \u0441\u00a0\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u0434\u0440\u043e\u0431\u0435\u0439 \u0438\u043b\u0438\u00a0\u0432\u00a0\u044d\u043a\u0437\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0437\u043d\u0430\u0447\u043a\u043e\u0432 \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f +\/\u2011 <\/p>\n<p>\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e 10\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437\u00a0\u0446\u0438\u0444\u0440.<\/p>\n<pre><code class=\"python\"># \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0446\u0438\u0444\u0440\u0430\u0445   import glob import pandas  as pd import numpy as df from PIL import Image, ImageChops from matplotlib.patches import Rectangle   # \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043b\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u043e\u0442 \u0444\u043e\u043d\u0430,  # \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0435\u043d \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0438\u043b\u0438 \u043d\u0435\u0442   def calcdiff(im1, im2):     dif = ImageChops.difference(im1, im2)     return np.mean(np.array(dif))   # \u044d\u0442\u043e\u0442 \u043a\u043e\u043b\u0431\u044d\u043a \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0437\u0430\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043a\u0440\u0430\u0441\u043e\u0442\u044b  def make_pretty(styler):     styler.background_gradient(axis=None, vmin=0, vmax=100, cmap=\"Blues\")      return styler   # \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0446\u0442\u0444\u0440\u044b   img_samples = glob.glob(r'numsample\\src\\nums\\*.png', recursive=True)   # \u0437\u0430\u0434\u0430\u0435\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430  segs = [       [8,5,4,5], # \u0444\u043e\u043d \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430       [1,6,4,4], # \u0441\u0435\u0433\u043c\u0435\u043d\u0442 1       [9,0,4,5], # \u0441\u0435\u0433\u043c\u0435\u043d\u0442 2       [14,6,4,4],        [13,16,4,4],        [7,22,4,5],       [1,16,4,4],       [8,11,4,5], # \u0441\u0435\u0433\u043c\u0435\u043d\u0442 N         ]  fig, axs = plt.subplots(ncols=len(img_samples), nrows=1, figsize=(15,4)) plt.setp(plt.gcf().get_axes(), xticks=[], yticks=[]);    plt.axis('off');  x,y,w,h = segs[0] img_empty = Image.open(img_samples[0]) img_empty = np.array(img_empty)[y:y+h, x:x+w]  plt.imshow(img_empty)  num_segs_array = []  num_signature = {}              for i,im in enumerate(img_samples):     image_2=Image.open(im)          num_segs = []      img_num = Image.open(img_nums[i])           for ii, s in enumerate(segs):         x,y,w,h = s         axs[i].add_patch (Rectangle((x,y), w, h, edgecolor = '#f00', facecolor = 'blue', fill= False , lw= 1 ))         axs[i].text (x+1,y+3, ii, **{\"color\":\"yellow\"} )                  if ii > 0:             im_cmp_1 = Image.fromarray(img_empty, 'RGB')             im_cmp_2 = Image.fromarray(np.array(img_num)[y:y+h, x:x+w])             num_segs  += [int(f'{calcdiff(im_cmp_1, im_cmp_2):.0f}') ]                  num_segs_array += [num_segs ]               # \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u0435\u043d \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0438\u043b\u0438 \u043d\u0435\u0442      num_signature[\"\".join(['1' if int(n) > 50 else '0' for n in num_segs])] = i            axs[i].imshow(img_num)      df = pd.DataFrame(data=num_segs_array)  # \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0430\u0432\u0442\u043e\u0440\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0438, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044d\u0442\u0438 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e  # \u0431\u044b \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0432 1 \u0434\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430, \u0430 0 \u0434\u043b\u044f \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e )   print (num_signature)    # \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 (\u0441\u0442\u043e\u043b\u0431\u0446\u044b) \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0446\u0438\u0444\u0440 (\u0441\u0442\u0440\u043e\u043a\u0438) df.style.pipe(make_pretty)  <\/code><\/pre>\n<p>\u0417\u043e\u043d\u044b (segs) \u043d\u0430\u00a0\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0434\u043b\u044f\u00a0\u043f\u043e\u0434\u0431\u043e\u0440\u0430 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1ce\/371\/37a\/1ce37137ad7af817b447e18e3564d55e.png\" width=\"1961\" height=\"261\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1ce\/371\/37a\/1ce37137ad7af817b447e18e3564d55e.png\"\/><\/figure>\n<p>\u0412\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0443\u0440\u043e\u0432\u043d\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0439 \u043e\u0442\u00a0\u0444\u043e\u043d\u0430 \u0434\u043b\u044f\u00a0\u0437\u043e\u043d \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0435 ImageChops.difference(im1, im2). \u0412\u00a0\u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043e\u0442 0\u00a0\u0434\u043e 100\u00a0\u043d\u0435\u00a0\u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u0434\u043b\u044f\u00a0\u0446\u0438\u0444\u0440\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0440\u043e\u0433\u043e\u043c \u0432 50\u00a0\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f 0\u00a0\u0438 1, \u0447\u0442\u043e\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u0435\u043d \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0438\u043b\u0438\u00a0\u043d\u0435\u0442 \u0434\u043b\u044f\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0446\u0438\u0444\u0440\u044b.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1de\/7a9\/aa1\/1de7a9aa147567257082d68b50370308.png\" width=\"392\" height=\"498\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1de\/7a9\/aa1\/1de7a9aa147567257082d68b50370308.png\"\/><\/figure>\n<p>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0446\u0438\u0444\u0440 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"python\">num_signature = {'1111110': 0,  '0011000': 1,  '0110111': 2,  '0111101': 3,  '1011001': 4,  '1101101': 5,  '1101111': 6,  '0111000': 7,  '1111111': 8,  '1111101': 9}<\/code><\/pre>\n<p>\u041c\u044b \u043c\u043e\u0433\u043b\u0438\u00a0\u0431\u044b \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u0431\u0435\u0437\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u043e \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u044f (\u043e\u0442 0\u00a0\u0434\u043e 100) \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0442\u00a0\u0444\u043e\u043d\u0430, \u043d\u043e\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c (\u043f\u043e\u0440\u043e\u0433 \u043c\u0435\u0436\u0434\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 0\/1\u00a0\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u0438\u0439), \u0447\u0442\u043e\u00a0\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u043c.<\/p>\n<h2>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/h2>\n<p>\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f\u00a0\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0440\u0435\u0437\u0430\u0442\u044c \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u00a0\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0430\u0448 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c.<\/p>\n<pre><code class=\"python\"># \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443 \u043d\u0430\u0441 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445   #  \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430  import random  def randImgs(sample_size=10, _mask=r\"E:\\tmp\\\u0441\u043e2\\20240131\\2024.01.31_11.14.27\\*.jpg\"):     glob_files = glob.glob(_mask, recursive=True)     sample_size = sample_size if sample_size &lt;= len(glob_files) else len(glob_files)     _sample = [         glob_files[i]         for i in sorted(random.sample(range(len(glob_files)), sample_size))     ]      return _sample   segs = [     [8, 5, 4, 5],  # \u0444\u043e\u043d \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430     [1, 6, 4, 4],  # \u0441\u0435\u0433\u043c\u0435\u043d\u0442 1     [9, 0, 4, 5],  # \u0441\u0435\u0433\u043c\u0435\u043d\u0442 2     [14, 6, 4, 4],     [13, 16, 4, 4],     [7, 22, 4, 5],     [1, 16, 4, 4],     [8, 11, 4, 5],  # \u0441\u0435\u0433\u043c\u0435\u043d\u0442 N ]  num_signature = {     \"1111110\": 0,     \"0011000\": 1,     \"0110111\": 2,     \"0111101\": 3,     \"1011001\": 4,     \"1101101\": 5,     \"1101111\": 6,     \"0111000\": 7,     \"1111111\": 8,     \"1111101\": 9, }   def recoNum(img_path, segs):      x, y, w, h = segs[0]      _img = Image.open(img_path)     img_empty = np.array(_img)[y : y + h, x : x + w]      num_segs = []      for ii, s in enumerate(segs):         x, y, w, h = s         if ii > 0:             im_cmp_1 = Image.fromarray(img_empty, \"RGB\")             im_cmp_2 = Image.fromarray(np.array(_img)[y : y + h, x : x + w])             num_segs += [int(f\"{calcdiff(im_cmp_1, im_cmp_2):.0f}\")]     sig = \"\".join([\"1\" if int(n) > 50 else \"0\" for n in num_segs])      res = (         num_signature[sig] if sig in num_signature else \"x\"     )  # x - \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0432 num_signature      return res   sample_size = 180 colnum = 20  img_samples = randImgs(sample_size=sample_size, _mask=r\"numsample\\src\\*.png\")  results = []  fig, axs = plt.subplots(nrows=int(sample_size \/ colnum), ncols=colnum, figsize=(10, 8)) plt.setp(plt.gcf().get_axes(), xticks=[], yticks=[])  for i, img_path in enumerate(img_samples):     _n = str(recoNum(img_path, segs))      r = int(i \/ colnum)     c = i % colnum      axs[r, c].text(6, -1, _n, **{\"size\": 10, \"color\": \"#f0f\"})     axs[r, c].imshow(Image.open(img_path))     results += [_n]<\/code><\/pre>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043d\u0435\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0437\u0446\u043e\u0432\u043e\u043c\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044e, \u0442\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e 100% \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e. \u0414\u043b\u044f \u043d\u0435\u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430, \u043a\u0430\u043c\u0435\u0440\u0430 \u0438\u043b\u0438 \u043f\u0440\u0438\u0431\u043e\u0440 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u044a\u0435\u043c\u043a\u0438, \u0442\u043e \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f. \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0438 \u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f (\u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u0440\u0430\u043c\u043a\u043e\u0439) :<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d1c\/a71\/d25\/d1ca71d2576f34110b6d9562c4ecbf1c.png\" width=\"1357\" height=\"1070\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d1c\/a71\/d25\/d1ca71d2576f34110b6d9562c4ecbf1c.png\"\/><\/figure>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 8 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430, \u0438 \u0447\u0442\u043e\u0431\u044b \u0435\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u043a\u043e\u0434\u0435<\/p>\n<p>\u0422\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0446\u0438\u0444\u0440 \u043f\u043e\u00a0\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0441\u0435\u044f\u0434\u043d\u044b\u0439, \u0442.\u043a. \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0441\u00a0\u0444\u043e\u043d\u043e\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u044c, \u0446\u0432\u0435\u0442, \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043f\u0430\u043b\u0438\u0442\u0440\u044b \u0444\u0430\u0439\u043b\u0430 \u043d\u0435\u00a0\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u043b\u0438\u044f\u043d\u0438\u044f.<br \/>\u0414\u043b\u044f\u00a0\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c (\u043f\u043e\u0432\u043e\u0440\u043e\u0442, \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043d\u0430\u043a\u043b\u043e\u043d, \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0430) \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u043a\u00a0\u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043d\u0435\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/40f\/e3f\/68d\/40fe3f68d2ff996eafa4c4e085a48fc9.png\" width=\"132\" height=\"194\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/40f\/e3f\/68d\/40fe3f68d2ff996eafa4c4e085a48fc9.png\"\/><\/figure>\n<p>\u041d\u043e\u00a0\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438 \u0431\u0435\u0437\u00a0\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0414\u043b\u044f\u00a0\u043d\u0435\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c. <\/p>\n<p>\u0412\u00a0\u043f\u0435\u0440\u0432\u043e\u043c \u0438 \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432, \u0432\u00a0\u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0438 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u043c \u0437\u0430\u0434\u0430\u043d\u0430 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/346\/96f\/40c\/34696f40cbd1c5777fb35cb092d2b173.png\" width=\"1347\" height=\"549\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/346\/96f\/40c\/34696f40cbd1c5777fb35cb092d2b173.png\"\/><\/figure>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0434\u043b\u044f\u00a0\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u00a0\u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u043c, \u0438\u043b\u0438\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f\u00a0\u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u0434\u0430\u0436\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0437\u043e\u043d\u044b \u043d\u0430\u00a0\u0448\u043a\u0430\u043b\u0435 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f\u00a0\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/064\/9d8\/132\/0649d8132205d9a39bd92f65e674ed8a.png\" alt=\"\u0448\u043a\u0430\u043b\u0430 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\" title=\"\u0448\u043a\u0430\u043b\u0430 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\" width=\"849\" height=\"196\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/064\/9d8\/132\/0649d8132205d9a39bd92f65e674ed8a.png\"\/><\/p>\n<div><figcaption>\u0448\u043a\u0430\u043b\u0430 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/525\/7e9\/8ac\/5257e98ac21304046616e54f34348393.png\" width=\"1108\" height=\"374\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/525\/7e9\/8ac\/5257e98ac21304046616e54f34348393.png\"\/><\/figure>\n<p>\u0421\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u043e \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043d\u0430\u00a0\u0441\u043d\u0438\u043c\u043a\u0435. \u041d\u043e\u00a0\u044d\u0442\u043e \u0443\u0436\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u0430\u00a0\u0432\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u0431\u0435\u0437\u00a0ML, \u043f\u0440\u0438\u0447\u0435\u043c, \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043e. \u041d\u0430\u00a0\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0441\u00a0tesseract\u00a0\u0431\u044b\u043b\u043e \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043e \u0432\u0440\u0435\u043c\u044f, \u043d\u043e\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0437\u043e\u0447\u0430\u0440\u043e\u0432\u0430\u043b.<br \/>\u041f\u043e\u0442\u043e\u043c\u00a0\u0431\u044b\u043b\u0430 \u0442\u0430\u043a\u0430\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0430 (\u0443\u0437\u043d\u0430\u0435\u0442\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438?) \u0438\u0437\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9c6\/fa9\/ee4\/9c6fa9ee455dd07d0b0137498d01b20a.png\" width=\"1875\" height=\"1010\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9c6\/fa9\/ee4\/9c6fa9ee455dd07d0b0137498d01b20a.png\"\/><\/figure>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043a\u0430\u043a\u00a0\u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043b\u044f\u00a0\u0446\u0438\u0444\u0440 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0445 \u0448\u0440\u0438\u0444\u0442\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u043a\u0440\u0435\u0430\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0434\u043b\u044f\u00a0\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u0443\u044e \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u041d\u043e\u00a0\u044d\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0432\u0430\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439, \u043f\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043e\u0442\u043c\u0435\u0442\u043a\u0443.<br \/>\u0412\u043e\u043f\u0440\u043e\u0441\u044b \u0438 \u0432\u0430\u0448\u0438 \u043a\u0435\u0439\u0441\u044b \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442\u0441\u044f \u0432\u00a0\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. <\/p>\n<p>\u0421\u00a0\u0443\u0432\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0438 \u0443\u0441\u043f\u0435\u0445\u043e\u0432! <\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/792376\/\"> https:\/\/habr.com\/ru\/articles\/792376\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u0437\u00a0\u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0441\u00a0\u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u043c\u0438 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432. <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0439, \u0430\u00a0\u0434\u043b\u044f\u00a0\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Python \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<h2>\u0417\u0430\u0434\u0430\u0447\u0430<\/h2>\n<p>\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432 \u0441\u00a0\u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c\u0438 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438. \u0414\u043b\u044f\u00a0\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u0443\u0447\u043d\u044b\u0435\u00a0\u0431\u044b\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0438 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b, \u0432\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f CO\u00b2.<\/p>\n<p>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441\u00a0\u043d\u0430\u0448\u0435\u0439 \u00ab\u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438\u00bb \u043b\u044e\u0431\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0441\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0442\u0430\u0439\u043c\u043b\u0430\u043f\u0441. \u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043c\u0435\u0436\u0434\u0443 \u0441\u043d\u0438\u043c\u043a\u0430\u043c\u0438 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0432 2\u20135%.<\/p>\n<p>\u00ab\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\u00bb \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0420\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0432\u00a0\u043e\u0434\u043d\u043e\u043c \u043a\u0430\u0434\u0440\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432 \u0434\u043b\u044f\u00a0\u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u0432\u00a0\u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438. \u0412\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0442\u0430\u0439\u043c\u043b\u0430\u043f\u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0436\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b 1\u00a0\u043c\u0438\u043d\u0443\u0442\u0430, \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c 2\u00a0\u0447\u0430\u0441\u0430, \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0434\u0440\u0430 640\u00d7480px \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441\u0432\u0435\u0434\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u043e\u0446\u0435\u043d\u0438\u043c \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u00a0\u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u0445 \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432 \u043d\u0430\u00a0\u0433\u0440\u0430\u0444\u0438\u043a\u0430\u0445. <\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0418\u0442\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c.<\/p>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439: <\/p>\n<ol>\n<li>\n<p>\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442\u00a0\u043d\u0430\u043a\u043b\u043e\u043d\u0430 \u043a\u0430\u043c\u0435\u0440\u044b \u043f\u043e\u00a0\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043a\u00a0\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0443;<\/p>\n<\/li>\n<li>\n<p>\u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u044d\u0442\u0430\u043f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0442\u0430\u043a\u0438\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438, \u043a\u0430\u043a\u00a0\u043a\u043e\u043d\u0442\u0440\u0430\u0441\u0442, \u0446\u0432\u0435\u0442\u043d\u043e\u0441\u0442\u044c, \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u00a0\u0434\u043e\u043b\u0436\u043d\u044b \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u043d\u0430\u00a0\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435;<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u043b\u0436\u043d\u0430\u00a0\u0431\u044b\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f\u00a0\u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0437\u043e\u043d \u043d\u0430\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u0433\u0434\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0438 \u0437\u043e\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0433\u043e \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430.<\/p>\n<\/li>\n<\/ol>\n<h2>\u0420\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0414\u043b\u044f\u00a0\u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043d\u0430\u00a0\u0441\u043d\u0438\u043c\u043a\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u043b\u044e\u0431\u043e\u0439 \u0444\u0430\u0439\u043b \u0438\u0437\u00a0\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0442\u0430\u0439\u043c\u043b\u0430\u043f\u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<\/p>\n<figure class=\"full-width\"><\/figure>\n<h2>\u0420\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u0437\u043e\u043d<\/h2>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438:<\/p>\n<pre><code class=\"python\"># \u0440\u0430\u0437\u043c\u0435\u0447\u0430\u0435\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438   import glob import matplotlib.pyplot as plt import matplotlib.image as mpimg from matplotlib.patches import Rectangle from scipy import ndimage   #   [id, top, bottom, width, height, rotation, description]  indicator_areas = [     [0, 176, 134, 22, 14, 0, \"\u0444\u043e\u043d\"],     [1, 216, 134, 81, 29, 0, \"1_CO2\"],     [2, 234, 169, 18, 10, 0, \"1_Temp\"],     [3, 277, 167, 20, 12, 0, \"1_Hum\"],     [4, 240, 212, 38, 35, -3, \"2_Temp\"],     [5, 283, 211, 24, 20, -4, \"2_Hum\"],     [6, 418, 106, 19, 12, 0, \"3_Temp\"],     [7, 418, 115, 19, 19, -5, \"3_Hum\"],     [8, 413, 130, 19, 19, -3, \"3_CO2\"],     [9, 390, 293, 31, 25, -5, \"4_Temp\"],     [10, 393, 328, 31, 25, -5, \"4_Hum\"], ]  _fmask =  r\"src\/20240131\/2024.01.31_11.14.27\/*.jpg\" # \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043d\u0438\u043c\u043a\u043e\u0432  image_files = glob.glob( _fmask , recursive=True )     fig, ax = plt.subplots(1, 1, figsize=(10, 5))  _img = mpimg.imread(image_files[1])             # \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u0431\u0435\u0440\u0435\u043c \u043b\u044e\u0431\u043e\u0439 \u0444\u0430\u0439\u043b _img = ndimage.rotate(_img, 90, reshape=True )  # \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435  for ii, s in enumerate(indicator_areas):     id, x, y, w, h, a, n = s     ax.add_patch(         Rectangle((x, y), w, h, edgecolor=\"#f00\", facecolor=\"blue\", fill=False, lw=1)     ) ax.imshow(_img)<\/code><\/pre>\n<p>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u043a\u043e\u043b\u0434\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0434 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 indicator_areas, \u043d\u043e\u00a0\u0432\u00a0\u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<figure class=\"full-width\"><\/figure>\n<h2>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 <\/h2>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u00a0\u0437\u043e\u043d\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0432\u00a0\u043e\u0434\u043d\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443.<\/p>\n<pre><code class=\"python\"># \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u043d\u0434\u0438\u043a\u0442\u043e\u0440\u043e\u0432 \u0432 \u0441\u0432\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435  import glob import matplotlib.pyplot as plt import matplotlib.image as mpimg import scipy.ndimage as ndimage  images = []  image_files = glob.glob(r'src\\20240131\\2024.01.31_11.14.27\\*.jpg')  for f in image_files[:5]:     _img = mpimg.imread(f)     _img = ndimage.rotate(_img, 90, reshape=True)     images.append(_img)       #     [id, top, bottom, left, rigth, rotation, desctiption]  indicator_areas = [     [0,176,134,22,14,0, \"\u0444\u043e\u043d\"],     [1,216,134,81,29,0, \"1_CO2\"],        [2,234,169,18,10,0, \"1_Temp\"],        [3,277,167,20,12,0,  \"1_Hum\"],        [4,240,212,38,35,-3, \"2_Temp\"],       [5,283,211,24,20,-4, \"2_Hum\"],        [6,418,106,19,12,0,\"3_Temp\"],     [7,418,115,19,19,-5,\"3_Hum\"],     [8,413,130,19,19,-3,\"3_CO2\"],     [9,390,293,31,25,-5,\"4_Temp\"],     [10,393,328,31,25,-5,\"4_Hum\"], ]  n_cols =  len(indicator_areas) n_img = len(images)   fig, axs = plt.subplots(nrows=len(images), ncols=n_cols+1, figsize=(8, int(n_img\/1.5))) plt.setp(plt.gcf().get_axes(), xticks=[], yticks=[]);     plt.subplots_adjust(  top=0.7,bottom=0, wspace=0, hspace=0.5)    for i, image in enumerate(images):          for ii, ia in enumerate(indicator_areas):                  n,x,y,w,h,a,n = ia   # ID, x,y, width, height, rotation angle                  _image = image[y:y+h,x:x+w]  # ? Numpy \u0437\u0430 \u0442\u0430\u043a\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439                   if a != 0:              _image = ndimage.rotate(_image, a, reshape=True)              _image = _image[6:-3,1:-2]  # \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0440\u0435\u0437\u0430\u0435\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u043e\u043c                  # \u0432\u044b\u0432\u043e\u0434 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f, \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0430 \u0432\u0435\u0440\u043d\u043e         axs[i,ii].text(0,-2, n, **{\"color\":'#f00', \"size\":9 })                    if(ii == 0 ): axs[i,ii].text(10,8, i, color='#ff0')         axs[i,ii].imshow(_image)  fig.savefig(f'co_2_{n_img}.png',bbox_inches='tight')<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f 5 \u0444\u0430\u0439\u043b\u043e\u0432:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041d\u0430\u00a0\u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0435\u043c\u043d\u043e\u0433\u043e, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0445 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0434\u043b\u044f\u00a0\u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0438 \u043e\u0446\u0435\u043d\u043a\u0438 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0439. \u0422.\u043a. \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u044f\u0434\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0435\u0440\u0435\u043f\u0435\u0447\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0441\u044f \u0438 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u0441\u044f, \u0434\u0430\u00a0\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438\u00a0\u0432\u0432\u043e\u0434\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u0441\u044f.<\/p>\n<p>\u041d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u043e\u00a0\u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437\u00a0\u043f\u0440\u0438\u0431\u043e\u0440\u043e\u0432, \u0432\u00a0\u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0434\u043b\u044f\u00a0\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 CO\u00b2 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0421\u00a0\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c.<\/p>\n<h2>\u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0446\u0438\u0444\u0440 \u043d\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435<\/h2>\n<p>\u0417\u0430\u0434\u0443\u043c\u043a\u0430 \u0432\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c, \u0442.\u043a. \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 7<sup>1<\/sup> \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f\u00a0\u043b\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043e\u0442\u00a0\u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430, \u0433\u0434\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442, \u0442.\u00a0\u0435. \u0444\u043e\u043d\u0430. <\/p>\n<p><sup>1<\/sup> \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c 8\u00a0\u0438\u043b\u0438 9, \u0435\u0441\u043b\u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u043d\u0430\u00a0\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u0445 \u0441\u00a0\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u0434\u0440\u043e\u0431\u0435\u0439 \u0438\u043b\u0438\u00a0\u0432\u00a0\u044d\u043a\u0437\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0437\u043d\u0430\u0447\u043a\u043e\u0432 \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f +\/\u2011 <\/p>\n<p>\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e 10\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437\u00a0\u0446\u0438\u0444\u0440.<\/p>\n<pre><code class=\"python\"># \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0446\u0438\u0444\u0440\u0430\u0445   import glob import pandas  as pd import numpy as df from PIL import Image, ImageChops from matplotlib.patches import Rectangle   # \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043b\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u043e\u0442 \u0444\u043e\u043d\u0430,  # \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0435\u043d \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0438\u043b\u0438 \u043d\u0435\u0442   def calcdiff(im1, im2):     dif = ImageChops.difference(im1, im2)     return np.mean(np.array(dif))   # \u044d\u0442\u043e\u0442 \u043a\u043e\u043b\u0431\u044d\u043a \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0437\u0430\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043a\u0440\u0430\u0441\u043e\u0442\u044b  def make_pretty(styler):     styler.background_gradient(axis=None, vmin=0, vmax=100, cmap=\"Blues\")      return styler   # \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0446\u0442\u0444\u0440\u044b   img_samples = glob.glob(r'numsample\\src\\nums\\*.png', recursive=True)   # \u0437\u0430\u0434\u0430\u0435\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430  segs = [       [8,5,4,5], # \u0444\u043e\u043d \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430       [1,6,4,4], # \u0441\u0435\u0433\u043c\u0435\u043d\u0442 1       [9,0,4,5], # \u0441\u0435\u0433\u043c\u0435\u043d\u0442 2       [14,6,4,4],        [13,16,4,4],        [7,22,4,5],       [1,16,4,4],       [8,11,4,5], # \u0441\u0435\u0433\u043c\u0435\u043d\u0442 N         ]  fig, axs = plt.subplots(ncols=len(img_samples), nrows=1, figsize=(15,4)) plt.setp(plt.gcf().get_axes(), xticks=[], yticks=[]);    plt.axis('off');  x,y,w,h = segs[0] img_empty = Image.open(img_samples[0]) img_empty = np.array(img_empty)[y:y+h, x:x+w]  plt.imshow(img_empty)  num_segs_array = []  num_signature = {}              for i,im in enumerate(img_samples):     image_2=Image.open(im)          num_segs = []      img_num = Image.open(img_nums[i])           for ii, s in enumerate(segs):         x,y,w,h = s         axs[i].add_patch (Rectangle((x,y), w, h, edgecolor = '#f00', facecolor = 'blue', fill= False , lw= 1 ))         axs[i].text (x+1,y+3, ii, **{\"color\":\"yellow\"} )                  if ii > 0:             im_cmp_1 = Image.fromarray(img_empty, 'RGB')             im_cmp_2 = Image.fromarray(np.array(img_num)[y:y+h, x:x+w])             num_segs  += [int(f'{calcdiff(im_cmp_1, im_cmp_2):.0f}') ]                  num_segs_array += [num_segs ]               # \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u0435\u043d \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0438\u043b\u0438 \u043d\u0435\u0442      num_signature[\"\".join(['1' if int(n) > 50 else '0' for n in num_segs])] = i            axs[i].imshow(img_num)      df = pd.DataFrame(data=num_segs_array)  # \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0430\u0432\u0442\u043e\u0440\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0438, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044d\u0442\u0438 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e  # \u0431\u044b \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0432 1 \u0434\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430, \u0430 0 \u0434\u043b\u044f \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e )   print (num_signature)    # \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 (\u0441\u0442\u043e\u043b\u0431\u0446\u044b) \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0446\u0438\u0444\u0440 (\u0441\u0442\u0440\u043e\u043a\u0438) df.style.pipe(make_pretty)  <\/code><\/pre>\n<p>\u0417\u043e\u043d\u044b (segs) \u043d\u0430\u00a0\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0434\u043b\u044f\u00a0\u043f\u043e\u0434\u0431\u043e\u0440\u0430 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0412\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0443\u0440\u043e\u0432\u043d\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0439 \u043e\u0442\u00a0\u0444\u043e\u043d\u0430 \u0434\u043b\u044f\u00a0\u0437\u043e\u043d \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0435 ImageChops.difference(im1, im2). \u0412\u00a0\u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043e\u0442 0\u00a0\u0434\u043e 100\u00a0\u043d\u0435\u00a0\u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u0434\u043b\u044f\u00a0\u0446\u0438\u0444\u0440\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0440\u043e\u0433\u043e\u043c \u0432 50\u00a0\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f 0\u00a0\u0438 1, \u0447\u0442\u043e\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u0435\u043d \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0438\u043b\u0438\u00a0\u043d\u0435\u0442 \u0434\u043b\u044f\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0446\u0438\u0444\u0440\u044b.<\/p>\n<figure class=\"\"><\/figure>\n<p>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0446\u0438\u0444\u0440 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"python\">num_signature = {'1111110': 0,  '0011000': 1,  '0110111': 2,  '0111101': 3,  '1011001': 4,  '1101101': 5,  '1101111': 6,  '0111000': 7,  '1111111': 8,  '1111101': 9}<\/code><\/pre>\n<p>\u041c\u044b \u043c\u043e\u0433\u043b\u0438\u00a0\u0431\u044b \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u0431\u0435\u0437\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u043e \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u044f (\u043e\u0442 0\u00a0\u0434\u043e 100) \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0442\u00a0\u0444\u043e\u043d\u0430, \u043d\u043e\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c (\u043f\u043e\u0440\u043e\u0433 \u043c\u0435\u0436\u0434\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 0\/1\u00a0\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u0438\u0439), \u0447\u0442\u043e\u00a0\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u043c.<\/p>\n<h2>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/h2>\n<p>\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f\u00a0\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0440\u0435\u0437\u0430\u0442\u044c \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u00a0\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0430\u0448 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c.<\/p>\n<pre><code class=\"python\"># \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443 \u043d\u0430\u0441 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445   #  \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430  import random  def randImgs(sample_size=10, _mask=r\"E:\\tmp\\\u0441\u043e2\\20240131\\2024.01.31_11.14.27\\*.jpg\"):     glob_files = glob.glob(_mask, recursive=True)     sample_size = sample_size if sample_size &lt;= len(glob_files)<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-367699","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/367699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=367699"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/367699\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=367699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=367699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=367699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}