{"id":284360,"date":"2017-04-03T15:40:06","date_gmt":"2017-04-03T11:40:06","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=284360"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=284360","title":{"rendered":"\u041d\u0443\u0436\u043d\u044b \u043b\u0438 \u043d\u0430\u043c \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438?"},"content":{"rendered":"<p>\u0418\u043b\u0438 \u043f\u043e\u0432\u0435\u0441\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u0451\u0440\u0442\u043e\u0447\u043d\u043e\u0439 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u0431\u0435\u0437 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e? \u0422\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0434 \u043a\u0430\u0442.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u041f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f<\/h2>\n<p>  \u041e\u0434\u043d\u0438\u043c \u043b\u0435\u0442\u043d\u0438\u043c \u0432\u0435\u0447\u0435\u0440\u043e\u043c \u0438\u0433\u0440\u0430\u044f \u0432 Dota 2, \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435 \u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439 \u0432 \u0438\u0433\u0440\u0435, \u0438 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u0430\u0447\u043d\u043e\u043c\u0443 \u0432\u044b\u0431\u043e\u0440\u0443 \u043a\u043e\u043d\u0442\u0440\u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430. \u041f\u0435\u0440\u0432\u0430\u044f \u043c\u044b\u0441\u043b\u044c, \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u0442\u044f\u043d\u0443\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043c\u0430\u0442\u0447\u0430 \u0438 \u0442\u0443\u0442 \u0436\u0435 \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c. \u041d\u043e \u044f \u044d\u0442\u0443 \u0437\u0430\u0442\u0435\u044e \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u043b, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435\u0442 \u0443 \u043c\u0435\u043d\u044f \u043e\u043f\u044b\u0442\u0430 \u0432\u043e \u0432\u0437\u043b\u043e\u043c\u0435 \u0438\u0433\u0440. \u0422\u043e\u0433\u0434\u0430 \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0433\u0440\u044b, \u0431\u044b\u0441\u0442\u0440\u043e \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c, \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.<\/p>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h2>\n<p>  \u0418 \u0442\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u044d\u043a\u0440\u0430\u043d\u0430.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">ScreenShot<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/7b7\/ff2\/fc4\/7b7ff2fc452145e89672c76047287675.png\" alt=\"image\"\/><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c04\/801\/393\/c048013931c046d7ab30e820780b476f.png\" alt=\"image\"\/><\/p><\/div>\n<\/div>\n<p>  \u041d\u0430 \u0432\u0438\u0434 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u0441\u0435 \u043f\u043e\u0445\u043e\u0436\u0438, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0440\u0430\u0442\u044c hash \u043e\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u0435\u0433\u043e.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0425\u043c.<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/2ec\/ee2\/bc9\/2ecee2bc9a654ad19057c4ca1bc8c76c.gif\" alt=\"image\"\/><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b64\/0af\/11b\/b640af11b7234b4183a81bf99898a7da.gif\" alt=\"image\"\/>  <\/div>\n<\/div>\n<p>  \u00ab\u041e \u0413\u0435\u0439\u0431! \u041d\u0443 \u0437\u0430, \u0447\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u043c\u0443\u043a\u0438 \u043c\u043d\u0435.\u00bb \u041d\u0435\u0442 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f. \u041e\u0434\u043d\u043e\u043c\u0443 \u0413\u0435\u0439\u0431\u0443 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439 \u0442\u0430\u043a \u043a\u0440\u0438\u0432\u043b\u044f\u044e\u0442\u0441\u044f (\u0445\u043e\u0442\u044f \u043d\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u043c\u0443, \u0435\u0441\u0442\u044c \u0443 \u043c\u0435\u043d\u044f \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0445\u043e\u0434\u0443 resize(\u0442\u0441\u044f), \u043f\u0440\u0438\u0447\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0437\u0430\u0434\u0430\u043d\u044b \u0434\u0440\u043e\u0431\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c). \u0417\u043d\u0430\u0447\u0438\u0442 \u043d\u0430\u0434\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c. \u0421\u0435\u0439\u0447\u0430\u0441 \u0432 \u043c\u043e\u0434\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438. \u0412\u043e\u0442 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0438\u0445 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c. \u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u0451\u0440\u0442\u043e\u0447\u043d\u044b\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438. \u0422\u0430\u043a \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f:<\/p>\n<ol>\n<li>\u0421\u0432\u0451\u0440\u0442\u043e\u0447\u043d\u043e\u0435 \u044f\u0434\u0440\u043e.<\/li>\n<li>\u041f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 \u0445\u0430\u0430\u0440\u0430.<\/li>\n<li>\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. 1000 \u2014 \u0434\u0440\u0443\u0433\u0430\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u2026<\/li>\n<li>\u2026<\/li>\n<\/ol>\n<p>  \u041f\u043e\u0433\u043e\u0434\u0438 \u0442\u0435 \u043a\u0430 \u0447\u0442\u043e \u043e \u043e \u043e \u043e \u043e!<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/ebc\/f1f\/ff5\/ebcf1fff52fd4bbbbe56d71312a170ea.png\" alt=\"image\"\/><\/p>\n<p>  \u041c\u043d\u0435 \u0436\u0438\u0437\u043d\u0438 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u0442 \u0447\u0442\u043e \u0431\u044b \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0431\u0430\u0437\u0443. \u042f \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u043d\u0430\u0434\u043e \u043a\u0430\u043a-\u0442\u043e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0439 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0432 \u0443\u0449\u0435\u0440\u0431 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f. \u0415\u0441\u0442\u044c \u0438\u0441\u0447\u0435\u0440\u043f\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043e \u0421\u041d\u0421 (\u0421\u0432\u0451\u0440\u0442\u043e\u0447\u043d\u043e\u0439 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438) \u043d\u0430 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/\u0421\u0432\u0451\u0440\u0442\u043e\u0447\u043d\u0430\u044f_\u043d\u0435\u0439\u0440\u043e\u043d\u043d\u0430\u044f_\u0441\u0435\u0442\u044c\">\u0432\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438<\/a>. \u0412\u043a\u0440\u0430\u0442\u0446\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0421\u041d\u0421 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a. \u041d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u0434\u0430\u0451\u0442\u0441\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u044f\u0440\u043a\u043e\u0441\u0442\u0435\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u0432 \u0433\u0440\u0430\u0434\u0430\u0446\u0438\u044f\u0445 \u0441\u0435\u0440\u043e\u0433\u043e. \u0418 \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0432\u0451\u0440\u0442\u043e\u0447\u043d\u043e\u0435 \u044f\u0434\u0440\u043e, \u0437\u0430\u0442\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f. \u0421\u0432\u0451\u0440\u0442\u043e\u0447\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043e\u0431\u044b\u0447\u043d\u043e -1 \u0438 1, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u0435 \u0447\u0435\u0440\u043d\u044b\u0435 \u0438 \u0431\u0435\u043b\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043b\u0438\u0431\u043e \u043d\u0430 \u043e\u0431\u043e\u0440\u043e\u0442.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/0db\/b10\/097\/0dbb100979204a1385d174aaf8eb6ff2.png\" alt=\"image\" \/><\/div>\n<p>  \u0415\u0441\u0442\u044c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u044f\u0434\u0435\u0440, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 \u0425\u0430\u0430\u0440\u0430. \u0414\u0430\u043b\u0435\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 \u0425\u0430\u0430\u0440\u0430. \u0417\u0430\u0442\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u0451\u0440\u0442\u043e\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u043f\u043e \u0432\u0445\u043e\u0434\u043d\u044b\u043c \u0441\u0432\u044f\u0437\u044f\u043c \u043d\u0435\u0439\u0440\u043e\u043d\u0430, \u0443\u043c\u043d\u043e\u0436\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0432\u0435\u0441\u0430 \u0441\u0432\u044f\u0437\u0435\u0439, \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u0438 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u043d\u0435\u0439\u0440\u043e\u043d\u0430. \u041d\u043e \u044d\u0442\u043e \u0436\u0435 \u0447\u0438\u0441\u0442\u043e\u0439 \u0432\u043e\u0434\u044b \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435, \u0438\u043b\u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0441\u0432\u0451\u0440\u0442\u043e\u043a, \u0432\u043e\u0442 \u041e\u041d\u041e. \u041d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0432\u0435\u0440\u0442\u043a\u0438 \u0441\u043e \u0441\u0432\u0435\u0440\u0442\u043a\u0430\u043c\u0438 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439, \u0447\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0440\u0430\u0437\u043d\u0438\u0446\u0430, \u0442\u0435\u043c \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u043f\u043e\u0445\u043e\u0436\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430. \u0412 \u043d\u0435\u0439 \u043d\u0435\u0442 \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0441\u043b\u043e\u0435\u0432, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u043c \u043d\u0435\u0442 \u043d\u0443\u0436\u0434\u044b \u0432 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u044b\u0448\u0435 \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435.<\/p>\n<h2>\u041f\u0438\u0448\u0435\u043c \u043a\u043e\u0434<\/h2>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 78&#215;53 px. \u0412 \u0433\u0440\u0430\u0434\u0430\u0446\u0438\u044f\u0445 \u0441\u0435\u0440\u043e\u0433\u043e. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 78&#215;53 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 0\u2026 255. \u042f\u0434\u0440\u043e \u0431\u0443\u0434\u0435\u043c \u0431\u0440\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 10&#215;10. \u0428\u0430\u0433 \u044f\u0434\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0441 \u044f\u0434\u0440\u043e \u2013 10. \u041a\u0430\u043a \u043f\u043e x \u0442\u0430\u043a \u0438 \u043f\u043e y. (\u041d\u0430\u043c \u043c\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0435 \u043d\u0430\u0434\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430). \u0418\u0442\u043e\u0433\u043e 48 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u043a\u043e\u0434\u0443. \u041d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044f\u0434\u0440\u043e \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430\u043c\u0438 \u0425\u0430\u0430\u0440\u0430. \u0412\u043e\u0437\u044c\u043c\u0451\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/2b1\/a28\/c24\/2b1a28c24ec24ac1af1e9ce6cb2fd1ab.png\" alt=\"image\" \/><\/div>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441 ConvolutionCore \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u0451\u0440\u0442\u043e\u0447\u043d\u043e\u0435 \u044f\u0434\u0440\u043e.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043b\u0430\u0441\u0441 ConvolutionCore<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">package com.kuldiegor.recognize;  \/**  * Created by aeterneus on 17.03.2017.  *\/ public class ConvolutionCore {     public int unitMin; \/\/\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e -1     public int unitMax; \/\/\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e 1     public  int matrix[][];     public ConvolutionCore(int width,int height,int haar){         matrix = new int[height][width];         unitMax=0;         unitMin=0;         switch (haar){             case 0:{                 \/\/ -1 = \u0447\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c                 \/\/  1 = \u0431\u0435\u043b\u0430\u044f \u0447\u0430\u0441\u0442\u044c                 \/*                     -1  -1  -1  1 1 1                     -1  -1  -1  1 1 1                     -1  -1  -1  1 1 1                 *\/                 for (int y=0;y&lt;height;y++){                     for (int x=0;x&lt;(width\/2);x++){                         matrix[y][x]=-1;                         unitMin++;                     }                     for (int x=width\/2;x&lt;width;x++){                         matrix[y][x]=1;                         unitMax++;                     }                 }                 break;             }             case 1:{                 \/\/ -1 = \u0447\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c                 \/\/  1 = \u0431\u0435\u043b\u0430\u044f \u0447\u0430\u0441\u0442\u044c                 \/*                     1  1  1  1  1  1                     1  1  1  1  1  1                     1  1  1  1  1  1                    -1 -1 -1 -1 -1 -1                    -1 -1 -1 -1 -1 -1                    -1 -1 -1 -1 -1 -1                 *\/                 for (int y=0;y&lt;(height\/2);y++){                     for (int x=0;x&lt;width;x++){                         matrix[y][x]=1;                         unitMax++;                     }                 }                 for (int y=(height\/2);y&lt;height;y++){                     for (int x=0;x&lt;width;x++){                         matrix[y][x]=-1;                         unitMin++;                     }                 }                 break;             }             case 2:{                 \/\/ -1 = \u0447\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c                 \/\/  1 = \u0431\u0435\u043b\u0430\u044f \u0447\u0430\u0441\u0442\u044c                 \/*                     1 1 -1 -1 -1 1 1                     1 1 -1 -1 -1 1 1                     1 1 -1 -1 -1 1 1                 *\/                 for (int y=0;y&lt;height;y++){                     for (int x=0;x&lt;(width\/3);x++){                         matrix[y][x]=1;                         unitMax++;                     }                     for (int x=(width\/3);x&lt;(width*2\/3);x++){                         matrix[y][x]=-1;                         unitMin++;                     }                     for (int x=(width*2\/3);x&lt;width;x++){                         matrix[y][x]=1;                         unitMax++;                     }                 }                 break;             }             case 3:{                 \/\/ -1 = \u0447\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c                 \/\/  1 = \u0431\u0435\u043b\u0430\u044f \u0447\u0430\u0441\u0442\u044c                 \/*                     1  1  1  1                     1  1  1  1                     1  1  1  1                    -1 -1 -1 -1                    -1 -1 -1 -1                    -1 -1 -1 -1                     1  1  1  1                     1  1  1  1                     1  1  1  1                 *\/                 for (int y=0;y&lt;(height\/3);y++){                     for (int x=0;x&lt;width;x++){                         matrix[y][x]=1;                         unitMax++;                     }                 }                 for (int y=(height\/3);y&lt;(height*2\/3);y++){                     for (int x=0;x&lt;width;x++){                         matrix[y][x]=-1;                         unitMin++;                     }                 }                 for (int y=(height*2\/3);y&lt;height;y++){                     for (int x=0;x&lt;width;x++){                         matrix[y][x]=1;                         unitMax++;                     }                 }                 break;             }             case 4:{                 \/\/ -1 = \u0447\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c                 \/\/  1 = \u0431\u0435\u043b\u0430\u044f \u0447\u0430\u0441\u0442\u044c                 \/*                     1  1  1  1  1                     1  1  1  1  1                     1  1  1  1  1                     1 -1 -1 -1  1                     1 -1 -1 -1  1                     1 -1 -1 -1  1                     1  1  1  1  1                     1  1  1  1  1                     1  1  1  1  1                 *\/                 for (int y=0;y&lt;(height\/3);y++){                     for (int x=0;x&lt;width;x++){                         matrix[y][x]=1;                         unitMax++;                     }                 }                 for (int y=(height\/3);y&lt;(height*2\/3);y++){                     for (int x=0;x&lt;(width\/3);x++){                         matrix[y][x]=1;                         unitMax++;                     }                     for (int x=(width\/3);x&lt;(width*2\/3);x++){                         matrix[y][x]=-1;                         unitMin++;                     }                     for (int x=(width*2\/3);x&lt;width;x++){                         matrix[y][x]=1;                         unitMax++;                     }                 }                 for (int y=(height*2\/3);y&lt;height;y++){                     for (int x=0;x&lt;width;x++){                         matrix[y][x]=1;                         unitMax++;                     }                 }                 break;             }             case 5:{                 \/\/ -1 = \u0447\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c                 \/\/  1 = \u0431\u0435\u043b\u0430\u044f \u0447\u0430\u0441\u0442\u044c                 \/*                     1  1  1 -1 -1 -1                     1  1  1 -1 -1 -1                    -1 -1 -1  1  1  1                    -1 -1 -1  1  1  1                 *\/                 for (int y=0;y&lt;(height\/2);y++){                     for (int x=0;x&lt;(width\/2);x++){                         matrix[y][x]=1;                         unitMax++;                     }                     for (int x=width\/2;x&lt;width;x++){                         matrix[y][x]=-1;                         unitMin++;                     }                 }                 for (int y=(height\/2);y&lt;height;y++){                     for (int x=0;x&lt;(width\/2);x++){                         matrix[y][x]=-1;                         unitMin++;                     }                     for (int x=width\/2;x&lt;width;x++){                         matrix[y][x]=1;                         unitMax++;                     }                 }                 break;             }         }     } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u044f\u0434\u0440\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441 Convolution, \u0432 \u043d\u0435\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u0451\u0440\u0442\u043a\u0443<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043b\u0430\u0441\u0441 \u0421onvolution<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">package com.kuldiegor.recognize;  import java.awt.image.BufferedImage; import java.util.ArrayList;  \/**  * Created by aeterneus on 17.03.2017.  *\/ public class Convolution {     static ConvolutionCore convolutionCores[]; \/\/\u042f\u0434\u0440\u0430 \u0441\u0432\u0435\u0440\u0442\u043a\u0438     static {         \/\/\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 \u0425\u0430\u0430\u0440\u0430         convolutionCores = new ConvolutionCore[6];         for (int i=0;i&lt;6;i++){             convolutionCores[i] = new ConvolutionCore(10,10,i);         }     }      private int matrixx[][]; \/\/\u041c\u0430\u0442\u0440\u0438\u0446\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f 0 .. 255      public Convolution(BufferedImage image){         matrixx = getReadyMatrix(image);      }     private int[][] getReadyMatrix(BufferedImage bufferedImage){         \/\/\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0437 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f         int width  = bufferedImage.getWidth();         int heigth = bufferedImage.getHeight();          int[] lineData = new int[width * heigth];         bufferedImage.getRaster().getPixels(0, 0, width, heigth, lineData);          int[][] res = new int[heigth][width];         int shift = 0;         for (int row = 0; row &lt; heigth; ++row) {             System.arraycopy(lineData, shift, res[row], 0, width);             shift += width;         }          return res;     }     private double[] ColapseMatrix(int[][] matrix,ConvolutionCore convolutionCore){         \/\/\u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043d\u0430 \u044f\u0434\u0440\u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0438         int cmh=convolutionCore.matrix.length; \/\/\u0412\u044b\u0441\u043e\u0442\u0430 \u044f\u0434\u0440\u0430 \u0441\u0432\u0451\u0440\u0442\u043a\u0438         int cmw=convolutionCore.matrix[0].length; \/\/\u0428\u0438\u0440\u0438\u043d\u0430 \u044f\u0434\u0440\u0430 \u0441\u0432\u0451\u0440\u0442\u043a\u0438         int mh=matrix.length; \/\/\u0412\u044b\u0441\u043e\u0442\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439         int mw=matrix[0].length; \/\/\u0428\u0438\u0440\u0438\u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439         int addWidth = cmw - (mw%cmw); \/\/\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u044f\u0434\u0440\u043e \u0440\u043e\u0432\u043d\u043e \u043d\u0435 \u043b\u043e\u0436\u0438\u0442\u0441\u044f, \u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0443\u043b\u0438 \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0443         int addHeight = cmh - (mh%cmh);         int nmatrix[][]=new int[mh+addHeight][mw+addWidth];         for (int row = 0; row &lt; mh; row++) {             System.arraycopy(matrix[row], 0, nmatrix[row], 0, mw);         }         int nw = nmatrix[0].length\/cmw;         int nh = nmatrix.length\/cmh;         double result[] = new double[nh*nw];         int dmin = -convolutionCore.unitMin*255; \/\/\u0414\u043b\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439         int dm = convolutionCore.unitMax*255-dmin;         int q=0;         for (int ny=0;ny&lt;nh;ny++){             for (int nx=0;nx&lt;nw;nx++){                 int sum=0;                 for (int y=0;y&lt;cmh;y++){                     for (int x=0;x&lt;cmw;x++){                         sum += nmatrix[ny*cmh+y][nx*cmw+x]*convolutionCore.matrix[y][x];                     }                 }                 result[q++]=((double)sum-dmin)\/dm;             }         }         return result;     }     public ArrayList&lt;double[]&gt; getConvolutionMatrix(){         \/\/\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0432\u0435\u0440\u0442\u043e\u043a \u043f\u043e \u0432\u0441\u0435\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430\u043c \u0425\u0430\u0430\u0440\u0430         ArrayList&lt;double[]&gt; result = new ArrayList&lt;&gt;();         for (int i=0;i&lt;convolutionCores.length;i++){             result.add(ColapseMatrix(matrixx,convolutionCores[i]));         }         return result;     } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u043e\u044f\u0441\u043d\u044e, \u0432 \u043a\u043b\u0430\u0441\u0441\u0435, \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0431\u043b\u043e\u043a\u0435, \u043c\u044b \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u044f\u0434\u0440\u0430 \u0441\u0432\u0435\u0440\u0442\u043a\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b \u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f, \u0430 \u0441\u0432\u0451\u0440\u0442\u043e\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u044f\u0434\u0440\u0430 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u044d\u0442\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f. \u0412 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043f\u043e \u0438\u043c\u0435\u044e\u0449\u0435\u043c\u0441\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044e \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u0447\u0442\u043e \u0431\u044b \u043d\u0435 \u0431\u0440\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u043e 1 \u043f\u0438\u043a\u0441\u0435\u043b\u044e \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0440\u0430\u0437\u0443 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u043e\u0433\u043e. \u0412 \u043c\u0435\u0442\u043e\u0434\u0435 ColapseMatrix \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0443 \u043d\u0430\u0441 \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u044f\u0434\u0440\u043e \u0441\u0432\u0451\u0440\u0442\u043a\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0443\u043b\u0435\u0439 \u0432 \u043a\u043e\u043d\u0435\u0446 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u044f\u0434\u0440\u043e \u043d\u0435 \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0441 \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439. \u0417\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u044f\u0434\u0440\u043e\u043c \u043f\u043e \u043c\u0430\u0442\u0440\u0438\u0446\u0435 \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0432\u0451\u0440\u0442\u043a\u0443. \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432. \u041d\u0430\u043c \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0432\u0451\u0440\u0442\u043a\u0438 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441 hero \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u044f:<\/p>\n<ol>\n<li>\u041c\u0430\u0441\u0441\u0438\u0432 \u0441\u0432\u0451\u0440\u0442\u043e\u043a;<\/li>\n<li>\u0418\u043c\u044f \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430;<\/li>\n<\/ol>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043b\u0430\u0441\u0441 Hero<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">package com.kuldiegor.recognize;  import java.util.ArrayList;  \/**  * Created by aeterneus on 17.03.2017.  *\/ public class Hero {     public String name;     public ArrayList&lt;double[]&gt; convolutions;     public Hero(String Name){         name = Name;     } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0415\u0449\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0441\u0432\u0451\u0440\u0442\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u0446\u044b, \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441 DefaultHero.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043b\u0430\u0441\u0441 DefaultHero<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">package com.kuldiegor.recognize;  import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.*; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator;  \/**  * Created by aeterneus on 17.03.2017.  *\/ public class DefaultHero {     public ArrayList&lt;Hero&gt; heroes;     public String path;     public DefaultHero(String path,int tload){         heroes = new ArrayList&lt;&gt;();         this.path = path;         switch (tload){             case 0:{                 LoadFromFolder(path);                 break;             }             case 1:{                 LoadFromFile(path);             }         }      }     private void LoadFromFolder(String path){         \/\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0432\u0451\u0440\u0442\u043e\u043a         File folder = new File(path);         File[] folderEntries = folder.listFiles();         for (File entry : folderEntries)         {             if (!entry.isDirectory())             {                 BufferedImage image = null;                 try {                     image = ImageIO.read(entry);                 } catch (IOException e) {                     e.printStackTrace();                 }                 Hero hero = new Hero(StringTool.parse(entry.getName(),&quot;&quot;,&quot;.png&quot;));                 hero.convolutions = new Convolution(image).getConvolutionMatrix();                 heroes.add(hero);               }         }      }     private void LoadFromFile(String name){         \/\/\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0441\u0432\u0451\u0440\u0442\u043e\u043a \u0438\u0437 \u0444\u0430\u0439\u043b\u0430         try {             BufferedReader bufferedReader = new BufferedReader(new FileReader(name));             String str;             while ((str = bufferedReader.readLine())!= null){                 Hero hero =new Hero(StringTool.parse(str,&quot;&quot;,&quot;:&quot;));                 String s = StringTool.parse(str,&quot;:&quot;,&quot;&quot;);                 String mas[] = s.split(&quot;;&quot;);                 int n=mas.length\/48;                 hero.convolutions = new ArrayList&lt;&gt;(n);                 for (int c=0;c&lt;n;c++) {                     double dmas[] = new double[48];                     for (int i = 0; i &lt; 48; i++) {                         dmas[i] = Double.parseDouble(mas[i+c*48]);                     }                     hero.convolutions.add(dmas);                 }                 heroes.add(hero);             }         } catch (IOException e){             e.printStackTrace();         }       }     public void SaveToFile(String name){         \/\/\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0432\u0451\u0440\u0442\u043e\u043a \u0432 \u0444\u0430\u0439\u043b         Collections.sort(heroes, Comparator.comparing(o -&gt; o.name));         FileWriter fileWriter = null;         try {             fileWriter = new FileWriter(name);         } catch (IOException e){             e.printStackTrace();         }         for (int i=0;i&lt;heroes.size();i++){             Hero hero = heroes.get(i);             StringBuilder stringBuilder = new StringBuilder();             stringBuilder.append(hero.name).append(&quot;:&quot;);             for (int i2=0;i2&lt;hero.convolutions.size();i2++){                 double matrix[] = hero.convolutions.get(i2);                 for (int i3=0;i3&lt;matrix.length;i3++){                     stringBuilder.append(matrix[i3]).append(&quot;;&quot;);                 }             }             try {                 fileWriter.write(stringBuilder.append(&quot;\\r\\n&quot;).toString());             } catch (IOException e){                 e.printStackTrace();             }          }         try {             fileWriter.close();         } catch (IOException e){             e.printStackTrace();         }     }     public String getSearhHeroName(Hero hero){         \/\/\u041f\u043e\u0438\u0441\u043a \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u0438 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430         for (int i=0;i&lt;heroes.size();i++){             if (equalsHero(hero,heroes.get(i))){                 return heroes.get(i).name;             }         }         return &quot;0&quot;;      }     public boolean equalsHero(Hero hero1,Hero hero2){         \/\/\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 2 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439         int min=0;         int max=0;         for (int i=0;i&lt;hero1.convolutions.size();i++){             double average=0;             for (int i1=0;i1&lt;hero1.convolutions.get(i).length;i1++){                 \/\/\u0420\u0430\u0437\u043d\u043e\u0441\u0442\u044c 2 \u0441\u0432\u0435\u0440\u0442\u043e\u043a \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e                 average += Math.abs(hero1.convolutions.get(i)[i1]-hero2.convolutions.get(i)[i1]);             }             average \/=hero1.convolutions.get(0).length;             if (average&lt;0.02){                 \/\/\u0415\u0441\u043b\u0438 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u043e\u0440\u043e\u0433\u0430 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u0430\u043b \u043a \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443                 min++;             } else {                 max++;             }          }          return (min&gt;=max);     } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u0443\u0442 \u0432\u0441\u0451 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e, \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u0435\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u0441\u0432\u0451\u0440\u0442\u043a\u0430\u043c \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0438\u0445 \u0432 \u0444\u0430\u0439\u043b. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430. \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c \u0447\u0442\u043e \u043c\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0432\u0451\u0440\u0442\u043a\u0438 \u0438\u0437 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u044d\u0442\u043e \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.<\/p>\n<p>  \u041d\u0443 \u0438 \u0441\u0430\u043c\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435. \u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0440\u0435\u0434\u043d\u044e\u044e \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044c \u0441\u0432\u0451\u0440\u0442\u043e\u043a \u043d\u0430 1 \u044f\u0434\u0440\u043e, \u0435\u0441\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435 0,02 \u0442\u043e\u0433\u0434\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0445\u043e\u0436\u0438, \u0433\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f: \u00ab\u0435\u0441\u043b\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0445\u043e\u0436\u0438 \u043d\u0430 98% \u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0438\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438\u00bb. \u0417\u0430\u0442\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430, \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432, \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0438 \u0440\u0430\u0432\u043d\u044b.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u044d\u043a\u0440\u0430\u043d\u0430.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">try { \/\/\u0414\u0435\u043b\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())); } catch (AWTException e) { e.printStackTrace(); }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0427\u0442\u043e \u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043d\u0435 \u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439 \u0441\u0440\u0430\u0437\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u0435\u0441\u044f\u0442\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0417\u0430\u0442\u0435\u043c \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0434\u0435\u0441\u044f\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0438\u0445 \u0432 \u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u043e\u0433\u043e. \u0412 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0432\u0451\u0440\u0442\u043a\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u041f\u0440\u043e\u0434\u0435\u043b\u044b\u0432\u0430\u0435\u043c \u044d\u0442\u043e \u0441 \u0434\u0435\u0441\u044f\u0442\u044c\u044e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438. \u0418 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0441 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430\u043c\u0438.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043b\u0430\u0441\u0441 HRecognize<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">package com.kuldiegor.recognize;  import java.awt.image.BufferedImage; import java.util.ArrayList;  \/**  * Created by aeterneus on 17.03.2017.  *\/ public class HRecognize {     private DefaultHero defaultHero;     public String heroes[]; \/\/\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u043c\u0451\u043d \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439      public HRecognize(BufferedImage screen, DefaultHero defaultHero){         heroes = new String[10];         ArrayList&lt;Hero&gt; heroArrayList = new ArrayList&lt;&gt;();         this.defaultHero = defaultHero;         for (int i=0;i&lt;5;i++){             \/\/\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0439 \u0441\u0435\u0440\u043e\u0433\u043e             BufferedImage bufferedImage = new BufferedImage(78,53,BufferedImage.TYPE_BYTE_GRAY);             \/\/\u0412\u044b\u0440\u0435\u0437\u0430\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u0437 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430             bufferedImage.getGraphics().drawImage(screen.getSubimage(43+i*96,6,78,53),0,0,null);             Hero hero = new Hero(&quot;&quot;);             \/\/\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0432\u0451\u0440\u0442\u043e\u043a             hero.convolutions = new Convolution(bufferedImage).getConvolutionMatrix();             heroArrayList.add(hero);         }         for (int i=0;i&lt;5;i++) {             \/\/\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0439 \u0441\u0435\u0440\u043e\u0433\u043e             BufferedImage bufferedImage = new BufferedImage(78, 53, BufferedImage.TYPE_BYTE_GRAY);             \/\/\u0412\u044b\u0440\u0435\u0437\u0430\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u0437 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430             bufferedImage.getGraphics().drawImage(screen.getSubimage(777 + i * 96, 6, 78, 53), 0, 0, null);             Hero hero = new Hero(&quot;&quot;);             \/\/\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0432\u0451\u0440\u0442\u043e\u043a             hero.convolutions = new Convolution(bufferedImage).getConvolutionMatrix();             heroArrayList.add(hero);         }         for (int i=0;i&lt;10;i++){             \/\/\u041f\u043e\u0438\u0441\u043a \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0438\u043c\u0435\u043d\u0438             heroes[i] = defaultHero.getSearhHeroName(heroArrayList.get(i));         }       } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u044c \u0431\u0430\u0437\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u042f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0431\u0440\u0430\u0442\u044c \u0441 \u0434\u043e\u0442\u0430\u0431\u0430\u0444\u0444 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438, \u043d\u043e \u0431\u044b\u043b\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043e\u0442 dota(\u0432\u0441\u043a\u0438\u0445). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0445 \u0432 \u043f\u043e\u043b\u0443\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435. \u0421\u043b\u0435\u0433\u043a\u0430 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0432 \u043a\u043e\u0434 \u0434\u043b\u044f \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u0441\u0432\u0451\u0440\u0442\u043a\u0438, \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043a\u043d\u043e\u043f\u043a\u0443 \u00ab\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u00bb. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0440\u0442\u043e\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u0441 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043e\u0431\u0440\u0430\u0437\u0446\u043e\u0432 \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430, \u0430 \u0435\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0437\u0446\u043e\u0432 \u043d\u0435 \u0431\u044b\u043b\u043e, \u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438\u0445 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433.<\/p>\n<p>  <a href=\"https:\/\/github.com\/aeterneus\/Dota2HeroRecognizeMaster\">\u041c\u0430\u0441\u0442\u0435\u0440 \u0441\u0432\u0451\u0440\u0442\u043a\u0438 \u043d\u0430 github<\/a><\/p>\n<p>  \u041f\u043e\u0435\u0445\u0430\u043b\u0438! \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0434\u043e\u0442\u0443 \u0432 \u043b\u043e\u0431\u0431\u0438 \u0438 \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435\u0445 113 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u043b\u043e\u0431\u0431\u0438<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/361\/d3f\/e30\/361d3fe300cd46d98c59caa28808fbbf.png\" alt=\"image\"\/>  <\/div>\n<\/div>\n<p>  \u0411\u0430\u0437\u0443 \u043d\u0430\u043a\u043e\u043f\u0438\u043b\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u0430\u0442\u044c \u0438\u043c\u044f \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0443.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">C\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u0441 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430\u043c\u0438<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/e36\/acb\/73b\/e36acb73b7fd422187919435f7967f4b.png\" alt=\"image\"\/>  <\/div>\n<\/div>\n<p>  \u0418 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0441\u0432\u0451\u0440\u0442\u043a\u0438 \u0432 \u0444\u0430\u0439\u043b. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f40\/7e7\/b41\/f407e7b41e3847f4bb912c05bba959ef.png\" alt=\"image\"\/>  <\/div>\n<\/div>\n<p>  \u041e\u0448\u0438\u0431\u043e\u043a \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043d\u0435\u0442. \u0415\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0438\u0433\u0440\u0430 \u0438 \u043a\u0440\u0443\u0433\u043e\u043c \u0447\u0451\u0440\u043d\u044b\u0439 \u0444\u043e\u043d \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u044d\u0442\u043e \u0438 \u0432\u044b\u0434\u0430\u0435\u0442 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 Shadow Fiend, \u0430 \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432\u044b\u0431\u043e\u0440 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430, \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u0442\u0441\u044f. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430\u0445 \u043f\u043e \u0441\u0435\u0442\u0438 \u043d\u0430 Android \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0438\u0433\u0440\u0443.<\/p>\n<p>  \u0422\u0443\u0442 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">try {                     DatagramSocket socket = new DatagramSocket(6001);                     byte buffer[] = new byte[1024];                     DatagramPacket packet = new DatagramPacket(buffer, 1024);                     InetAddress localIP= InetAddress.getLocalHost();                     while (!Thread.currentThread().isInterrupted()) {                         \/\/\u0416\u0434\u0435\u043c \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430                         socket.receive(packet);                         String s=new String(packet.getData(),0,packet.getLength());                         if (StringTool.parse(s,&quot;&quot;,&quot;:&quot;).equals(&quot;BroadCastFastDefinition&quot;)){                             String str = &quot;OK:&quot;+localIP.getHostAddress();                             byte buf[] = str.getBytes();                             DatagramPacket p = new DatagramPacket(buf,buf.length,packet.getAddress(),6001);                             \/\/\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0442\u0432\u0435\u0442 \u0447\u0442\u043e \u043c\u044b \u0441\u0435\u0440\u0432\u0435\u0440                             socket.send(p);                         }                      }                 }catch (Exception e) {                     e.printStackTrace();                 }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">try {                             \/\/\u0416\u0434\u0451\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430                             Socket client = socket.accept();                             final String ipclient = client.getInetAddress().getHostAddress();                             Platform.runLater(new Runnable() {                                 @Override                                 public void run() {                                     label1.setText(&quot;\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d&quot;);                                     label1.setTextFill(Color.GREEN);                                     textfield2.setText(ipclient);                                 }                             });                             DataOutputStream streamWriter = new DataOutputStream(client.getOutputStream());                             BufferedImage image = null;                             while (client.isConnected()){                                 try {                                     \/\/\u0414\u0435\u043b\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442                                     image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));                                 } catch (AWTException e) {                                     e.printStackTrace();                                 }                                 \/\/\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435                                 HRecognize hRecognize = new HRecognize(image,defaultHero);                                 StringBuilder stringBuilder = new StringBuilder();                                 for (int i=0;i&lt;5;i++){                                     stringBuilder.append(hRecognize.heroes[i]).append(&quot;;&quot;);                                 }                                 stringBuilder.append(&quot;:&quot;);                                 for (int i=5;i&lt;10;i++){                                     stringBuilder.append(hRecognize.heroes[i]).append(&quot;;&quot;);                                 }                                 stringBuilder.append(&quot;\\n&quot;);                                 String str = stringBuilder.toString();                                 \/\/\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e \u0447\u0442\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043b\u0438                                 streamWriter.writeUTF(str);                                 try {                                     Thread.sleep(300);                                  } catch (InterruptedException e){                                     threadSocket.interrupt();                                 }                              }                         }catch (IOException e){                          }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u041e\u0442\u0432\u0435\u0447\u0430\u0435\u043c \u043d\u0430 \u043d\u0435\u0433\u043e \u043f\u043b\u044e\u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0441\u0432\u043e\u0439 ip \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u0438 \u043d\u0435 \u043d\u0430\u0434\u043e, \u043d\u043e \u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442. \u0417\u0430\u0442\u0435\u043c \u0441 \u043d\u0430\u043c\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0442 tcp \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0438 \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u0436\u0434\u044b\u0435 300 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439. \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u044d\u0442\u043e \u0434\u043b\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440. \u041a\u043e\u0433\u0434\u0430 \u0438\u0433\u0440\u0430 \u0443\u0436\u0435 \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0432\u0443 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f.<\/p>\n<p>  Android \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041a\u043e\u0434 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0431\u0443\u0434\u0443 \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u043a\u0430\u043a \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0418 \u0434\u0430\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 GitHub.<\/p>\n<p>  \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e \u0441\u0435\u0442\u0438 (\u043c\u043e\u0436\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 ip \u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430) \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043a \u043d\u0435\u043c\u0443 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043e\u0442 \u043d\u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0435. \u0414\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043f\u0438\u043a\u0430 \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u0441\u0430\u0439\u0442 dotabuff.com. \u041f\u0440\u043e\u0445\u043e\u0436\u0443 \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0443 \u0438 \u0432\u044b\u0434\u0451\u0440\u0433\u0438\u0432\u0430\u044e \u0434\u0430\u043d\u043d\u044b\u0435 \u00ab\u0421\u0438\u043b\u0451\u043d \u043f\u0440\u043e\u0442\u0438\u0432\u00bb \u0438 \u00ab\u0421\u043b\u0430\u0431 \u043f\u0440\u043e\u0442\u0438\u0432\u00bb \u0421\u0442\u0440\u043e\u044e \u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a. \u0417\u0430\u0442\u0435\u043c \u0431\u0435\u0440\u0443 \u043f\u0440\u0438\u0441\u043b\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439 \u0438 \u0432\u044b\u0432\u043e\u0436\u0443 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439 \u043a\u0442\u043e \u0441\u043b\u0430\u0431\u0435\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u043f\u044f\u0442\u0451\u0440\u043a\u0438. \u041f\u043e\u043f\u0443\u0442\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f \u0447\u0442\u043e\u0431\u044b \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u00ab\u043a\u043e\u043d\u0442\u0440\u044f\u0442\u00bb \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043f\u044f\u0442\u0451\u0440\u043a\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u043b\u0430\u0431\u044b \u043f\u0440\u043e\u0442\u0438\u0432 \u043f\u044f\u0442\u0451\u0440\u043a\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u0439.<\/p>\n<h2>\u041d\u0435\u0440\u0435\u0448\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438<\/h2>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 1280&#215;1024, \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f\u0445 \u043d\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u043d\u0430\u043f\u0440\u044f\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u043e\u0435\u043c \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0435 Lenovo B570e \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c Intel Celeron 1.5 GHz. \u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 6%, \u043f\u0440\u0438 \u0442\u0430\u043a\u0442\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f 3 \u0440\u0430\u0437\u0430 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0415\u0441\u043b\u0438 \u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0434\u0435\u043b\u0430\u043b \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0447\u0438\u0441\u0435\u043b \u043d\u0430 HealthBar(\u0435), \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f, \u0438 \u043a\u0430\u043a \u044f \u0438\u0445 \u0440\u0435\u0448\u0430\u043b.<\/p>\n<p>  \u0412\u0441\u0435\u043c \u0441\u043f\u0430\u0441\u0438\u0431\u043e, \u043a\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b \u0434\u043e \u043a\u043e\u043d\u0446\u0430.<\/p>\n<p>  <b>P.S.<\/b> \u0412\u0441\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431 \u0441 \u043c\u0430\u0441\u0442\u0435\u0440\u043e\u043c \u0441\u0432\u0451\u0440\u0442\u043a\u0438 \u0438 \u0441\u0430\u043c\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0438 \u043d\u0430 \u0430\u0440\u0445\u0438\u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441\u043e \u0441\u0432\u0435\u0440\u0442\u043a\u043e\u0439:<\/p>\n<p>  \u2192 <a href=\"https:\/\/github.com\/aeterneus\/Dota2HeroRecognizeMaster\">GitHub-\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u0441\u0432\u0451\u0440\u0442\u043a\u0438<\/a><br \/>  \u2192 <a href=\"https:\/\/github.com\/aeterneus\/Dota2HeroRecognize\">GitHub-\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u0430\u043c\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/a><br \/>  \u2192 <a href=\"https:\/\/github.com\/aeterneus\/Dota2CounterPick\">GitHub-\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 Android \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/a><br \/>  \u2192 <a href=\"https:\/\/cloud.mail.ru\/public\/ANdj\/CzJXiX8By\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0430\u0440\u0445\u0438\u0432 \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438<\/a><br \/>  \u2192 <a href=\"https:\/\/cloud.mail.ru\/public\/Hy1y\/3dh2XgAy8\">\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0444\u0430\u0439\u043b-\u0441\u0432\u0451\u0440\u0442\u043e\u043a<\/a><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:\/\/habrahabr.ru\/post\/325526\/\"> https:\/\/habrahabr.ru\/post\/325526\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0418\u043b\u0438 \u043f\u043e\u0432\u0435\u0441\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u0451\u0440\u0442\u043e\u0447\u043d\u043e\u0439 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u0431\u0435\u0437 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e? \u0422\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0434 \u043a\u0430\u0442.  <\/p>\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-284360","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/284360","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=284360"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/284360\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=284360"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=284360"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=284360"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}