{"id":220869,"date":"2014-04-25T17:41:03","date_gmt":"2014-04-25T13:41:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=220869"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=220869","title":{"rendered":"<span class=\"post_title\">\u0421\u044a\u0451\u043c\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435\u043c<\/span>"},"content":{"rendered":"<div class=\"content html_format\"> \t\t\t<img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/361\/d8a\/11d\/361d8a11d0c04cbbaa97083fa83954ea.jpg\" align=\"right\"\/> <\/p>\n<h4>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u0422\u0430\u043a \u0441\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u044f \u0436\u0438\u0432\u0443 \u0432 \u043a\u043e\u0442\u0442\u0435\u0434\u0436\u043d\u043e\u043c \u043f\u043e\u0441\u0435\u043b\u043a\u0435, \u0433\u0434\u0435 \u043d\u0435\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u043e\u043f\u043b\u0435\u043d\u0438\u044f, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043a\u0430\u0436\u0434\u044b\u0439 \u0433\u0440\u0435\u0435\u0442 \u0441\u0432\u043e\u044e \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0443 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0433\u0430\u0437\u043e\u0432\u044b\u0435 \u043a\u043e\u0442\u043b\u044b, \u043c\u0435\u0442\u043e\u0434 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0435\u0448\u0435\u0432\u044b\u0439, \u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u043d\u0430 \u0447\u0442\u043e, \u043d\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u044c. \u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0433\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0442\u043b\u0430 (\u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e) \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0433\u0430\u0437\u0430 \u0432 \u0442\u0440\u0443\u0431\u0435. <\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u0430\u043a \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043d\u0435 \u0432\u0441\u0435 \u043a\u043e\u0442\u043b\u044b, \u043d\u043e \u043d\u0430\u0448 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0435 \u0441 \u043f\u043e\u0434\u0430\u0447\u0435\u0439 \u0433\u0430\u0437\u0430 \u0438 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u0430\u0447\u0430 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u043c\u0430, \u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043d\u0430\u0436\u0430\u043b \u043a\u043d\u043e\u043f\u043a\u0443 \u0438 \u043a\u043e\u0442\u0435\u043b \u0433\u0440\u0435\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0432\u0441\u0435\u0439 \u0441\u0435\u043c\u044c\u0435\u0439 \u043f\u043e\u0435\u0445\u0430\u0442\u044c \u0432 \u043e\u0442\u043f\u0443\u0441\u043a, \u0430 \u043d\u0430 \u0434\u0432\u043e\u0440\u0435 \u0437\u0438\u043c\u0430, \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0442\u0430\u043a\u0430\u044f, \u0447\u0442\u043e\u0431 -20\u00b0C, \u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043b\u0430\u0447\u0435\u0432\u043d\u044b\u043c\u0438. <\/p>\n<p>  \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u2014 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043b\u044e\u0447\u0438 \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a\u0430\u043c\/\u0434\u0440\u0443\u0437\u044c\u044f\u043c\/\u0441\u043e\u0441\u0435\u0434\u044f\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u0438\u0435\u0445\u0430\u0442\u044c \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u0442\u0435\u043b, \u0441\u043b\u0443\u0447\u0438\u0441\u044c \u043a\u0430\u043a\u0430\u044f-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0441\u0442\u044c. \u0425\u043e\u0440\u043e\u0448\u043e, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0441\u043e\u0441\u0435\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0432\u0441\u0451 \u043b\u0438 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u0410 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442? \u0418\u043b\u0438 \u043e\u043d \u0442\u043e\u0436\u0435 \u0440\u0435\u0448\u0438\u0442 \u0443\u0435\u0445\u0430\u0442\u044c \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435? <\/p>\n<p>  \u0418\u0442\u0430\u043a, \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043b\u0430\u0434\u0438\u0442\u044c \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0447\u0442\u043e\u0431 \u044f \u043c\u043e\u0433 \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439 \u043f\u043e\u0435\u0437\u0434\u043a\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0442\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u043b\u0438 \u0433\u0430\u0437, \u0430 \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442 \u0442\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f, \u0442\u043e \u0441\u0440\u043e\u0447\u043d\u043e \u0437\u0432\u043e\u043d\u0438\u0442\u044c \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a\u0430\u043c\/\u0434\u0440\u0443\u0437\u044c\u044f\u043c\/\u0441\u043e\u0441\u0435\u0434\u044f\u043c (\u0438\u043b\u0438 \u043a\u043e\u043c\u0443 \u0442\u0430\u043c \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043a\u043b\u044e\u0447\u0438), \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0435\u0445\u0430\u043b\u0438 \u0438 \u043d\u0430\u0436\u0430\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0443.<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u043e\u043c \u0438 \u0437\u0430\u043c\u0443\u0442\u0438\u043b \u0435\u0449\u0451 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u043e\u0431 \u044d\u0442\u043e\u043c \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 \u0447\u0430\u0441\u0442\u0438 2 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u043e\u043f\u0438\u043a\u0430.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>\u0427\u0430\u0441\u0442\u044c 1. \u0421\u043d\u044f\u0442\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0441\u043e \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0438 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0438\u0445 \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442<\/h4>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043d\u0430\u0434\u043e \u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u0431\u044b\u0432\u0430\u044e\u0442 \u0432 \u043f\u0440\u0438\u0440\u043e\u0434\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u0435, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0438\u043c\u0435\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0448\u0438\u043d\u044b \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u044a\u0435\u043c\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439. \u0415\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 \u0442\u0430\u043a\u043e\u0439, \u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0447\u0438\u0442\u0430\u0442\u044c. \u041d\u043e \u0443 \u043c\u0435\u043d\u044f \u0441\u0430\u043c\u044b\u0439 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0431\u0435\u0437 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u044f \u043d\u0435 \u043d\u0430\u0448\u0451\u043b, \u043c\u043e\u0436\u0435\u0442, \u043f\u043b\u043e\u0445\u043e \u0438\u0441\u043a\u0430\u043b), \u043c\u043e\u0434\u0435\u043b\u044c GALLUS iV PSC. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u044a\u0451\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439. \u0412 \u0441\u0435\u0442\u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043d\u043e \u043e\u043d\u0438 \u0441\u0442\u043e\u044f\u0442 \u043d\u0435\u043c\u0430\u043b\u044b\u0445 \u0434\u0435\u043d\u0435\u0433, \u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u044d\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u0441\u0430\u043c\u0438. <\/p>\n<h5>\u0427\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f?<\/h5>\n<p>  \u0414\u043b\u044f \u0441\u043d\u044f\u0442\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0441\u043e \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u044d\u0442\u0438\u0445 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043b\u044e\u0431\u043e\u0439 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0439 android \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d. \u042f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 Samsung Galaxy S III (SCH-I535). \u0414\u0430, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043d\u0435 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u0435\u0441\u0442\u044c \u0432\u0430\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u0431\u0435\u0437 \u0434\u0435\u043b\u0430 \u0441-\u0442\u0440\u0435\u0442\u0438\u0439 \u0433\u0430\u043b\u0430\u043a\u0441\u0438, \u043d\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0443 \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u0432\u0435\u043b\u0438\u043a\u0438:  <\/p>\n<ul>\n<li>\u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f<\/li>\n<li>\u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043c\u0435\u0440\u0430<\/li>\n<li>\u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c WiFi<\/li>\n<\/ul>\n<p>  \u0412\u043e\u0442, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438 \u0432\u0441\u0435, \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430, \u0442\u0430\u0447-\u0441\u043a\u0440\u0438\u043d\u0430, \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430, \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0430 \u0438 \u0442.\u043f. \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f. \u0414\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u043a\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c.<\/p>\n<p>  \u0418\u043c\u0435\u044f \u0445\u043e\u0431\u0431\u0438 \u043f\u043e\u043a\u0443\u043f\u0430\u0442\u044c \u043d\u0430 ebay \u0440\u0430\u0437\u043d\u044b\u0435 \u0431\u0438\u0442\u044b\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435, \u044f \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0448\u0435\u043b \u0443 \u0441\u0435\u0431\u044f \u0432 \u0437\u0430\u0433\u0430\u0448\u043d\u0438\u043a\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u0443\u044e \u043f\u043b\u0430\u0442\u0443 \u043e\u0442 sgs3 \u0441 \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u043e\u043c (~$10), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\/\u0443-\u0448\u043d\u0443\u044e \u043a\u0430\u043c\u0435\u0440\u0443 (~$10) \u0438 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0443\u044e \u0431\u0430\u0442\u0430\u0440\u0435\u0439\u043a\u0443 (~300\u0440). \u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0442\u0430\u0440\u0435\u0439\u043a\u0438 \u043a \u043f\u043b\u0430\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0444\u0440\u0435\u0439\u043c \u0441 \u0431\u0438\u0442\u044b\u043c \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c. <br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/b8a\/185\/019\/b8a185019b504eb982ce83b14349c384.jpg\"\/><\/p>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0443\u043c\u0430\u043b \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u043d\u0441\u043a\u043e\u0439 \u043f\u043b\u0430\u0442\u043e\u0439 \u0438 \u043a\u0430\u043c\u0435\u0440\u043e\u0439, \u043d\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043a \u0437\u0430\u0440\u044f\u0434\u043a\u0435 \u043f\u043b\u0430\u0442\u0430 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u0431\u0430\u0442\u0430\u0440\u0435\u0439\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0435\u0449\u0451 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0440\u0435\u0439\u043c \u0438 \u0431\u0430\u0442\u0430\u0440\u0435\u0439\u043a\u0443. \u041d\u043e \u0438 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u044e\u0434\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u0430 $30, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u044b \u043f\u043e\u043f\u0440\u043e\u0449\u0435 sgs3, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u0438 \u0432 \u043c\u0435\u043d\u044c\u0448\u0443\u044e \u0441\u0443\u043c\u043c\u0443.<\/p>\n<p>  \u041f\u0440\u0430\u0432\u0434\u0430, \u0443 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c \u0438 \u0441\u0432\u043e\u0438 \u043c\u0438\u043d\u0443\u0441\u044b, \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d \u0431\u0435\u0437 \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0438 \u0442\u0430\u0447\u0441\u043a\u0440\u0438\u043d\u0430 \u043d\u0435 \u0442\u0430\u043a \u0443\u0434\u043e\u0431\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0430\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443.<\/p>\n<h5>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0430<\/h5>\n<p>  \u0411\u0443\u0434\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0437 \u043d\u0430\u0438\u0445\u0443\u0434\u0448\u0435\u0433\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u043d\u0435\u0442 \u043d\u0438 \u0434\u0438\u0441\u043f\u043b\u0435\u044f, \u043d\u0438 \u0442\u0430\u0447\u0441\u043a\u0440\u0438\u043d\u0430, \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 root, adb \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430. <\/p>\n<h6>\u0420\u0435\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f<\/h6>\n<p>  <b>\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/b> \u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0430 Samsung Galaxy S III (SCH-I535), \u0435\u0441\u043b\u0438 \u0443 \u0412\u0430\u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d, \u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0412\u044b \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u043f\u043e\u043d\u044f\u0442\u0438\u044f\u043c\u0438 \u043a\u0430\u043a adb, \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438 \u043f\u0440.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d \u0432 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435 \u043d\u0430\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0448\u044c\u0435\u043c \u0441\u0442\u043e\u043a\u043e\u0432\u0443\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 VRBMB1 <a href=\"http:\/\/forum.xda-developers.com\/showthread.php?t=1755386\">\u043e\u0442\u0441\u044e\u0434\u0430<\/a> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <a href=\"http:\/\/androidp1.ru\/odin-firmware-samsung\/\">Odin<\/a>. \u041d\u0435 \u0431\u0443\u0434\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f, \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043f\u043e\u043b\u043d\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f Odin-\u043e\u043c. Odin \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0445\u043e\u0440\u043e\u0448 \u0442\u0435\u043c, \u0447\u0442\u043e \u0441 \u043d\u0438\u043c \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u044d\u043a\u0440\u0430\u043d \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430, \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (Vol Down+Home+Power \u2014 \u043f\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434, \u0437\u0430\u0442\u0435\u043c Vol Up, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e usb \u043a \u0432\u0438\u043d\u0434\u0435 \u0438 \u0432\u0441\u0451, \u0434\u0430\u043b\u044c\u0448\u0435 \u0434\u0435\u043b\u043e Odin-\u0430).<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a Odin \u043f\u0440\u043e\u0448\u044c\u0435\u0442 \u0441\u0442\u043e\u043a, \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0435\u0433\u043e \u043e\u0442 usb \u0438 \u0432\u044b\u043d\u0438\u043c\u0430\u0435\u043c \u0431\u0430\u0442\u0430\u0440\u0435\u0439\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f. \u042d\u0442\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 Odin-\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0441 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0448\u044c\u0435\u043c CWM recovery \u0438 root \u043f\u043e <a href=\"http:\/\/www.droidviews.com\/root-and-install-cwmtwrp-recovery-on-verizon-galaxy-s3-sch-i535-android-4-1-14-1-2\/\">\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/a>. \u0415\u0441\u043b\u0438 \u0432\u043a\u0440\u0430\u0442\u0446\u0435, \u0442\u043e \u0442\u0430\u043a:  <\/p>\n<ul>\n<li>\u0427\u0435\u0440\u0435\u0437 Odin \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 \u0431\u0443\u0442\u0447\u0435\u0439\u043d <a href=\"http:\/\/d-h.st\/4MU\">VRALEC.bootchain.tar.md5<\/a><\/li>\n<li>\u0427\u0435\u0440\u0435\u0437 Odin \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c <a href=\"http:\/\/d-h.st\/qnB\">CWM recovery<\/a><\/li>\n<li>\u0427\u0435\u0440\u0435\u0437 CWM recovery \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c <a href=\"http:\/\/d-h.st\/OXI\">SuperSU_Bootloader_FIXED.zip<\/a>. \u0412 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u0447\u0442\u043e zip \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043a\u0438\u043d\u0443\u0442\u044c \u043d\u0430 sd-\u043a\u0430\u0440\u0442\u0443, \u043d\u043e \u0432\u0432\u0438\u0434\u0443 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u044d\u043a\u0440\u0430\u043d\u0430 \u043f\u0440\u043e\u0449\u0435 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 sideload:<br \/>  \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0442\u0435\u043b\u043e \u0437\u0430\u0436\u0430\u0432 Vol Up+Home+Power \u2014 \u0434\u0435\u0440\u0436\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434, \u043f\u043e\u0442\u043e\u043c \u0435\u0449\u0435 \u0441\u0435\u043a\u0443\u043d\u0434 5 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430, \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c \u0432 \u0440\u0435\u0436\u0438\u043c CWM-recovery.<br \/>  \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u044d\u0442\u043e, \u043d\u0430\u0431\u0440\u0430\u0432 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432 ubuntu <code>adb devices<\/code> (\u0442\u0435\u043b\u043e, \u0441\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043f\u043e usb \u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d adb \u2014 <code>sudo apt-get install android-tools-adb<\/code>):<br \/> \n<pre><code class=\"bash\">malefic@lepeshka:~$ adb devices  List of devices attached  64cb5c59\trecovery  <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0438\u0434\u0438\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0440\u043e\u0447\u043a\u0443, \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u0441\u0435 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0436\u043c\u0435\u043c \u043d\u0430 \u0434\u0435\u0432\u0430\u0439\u0441\u0435 Vol Down, Vol Down, Power \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0440\u0435\u0436\u0438\u043c adb sideload (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 CWM \u0438\u0437 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u044d\u0442\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u0441\u0432\u0435\u0440\u0445\u0443), \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0431\u0440\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 ubuntu:  <\/p>\n<pre><code class=\"bash\">malefic@lepeshka:~$ adb sideload SuperSU_Bootloader_FIXED.zip  sending: 'sideload'  100%   <\/code><\/pre>\n<p>  \u0438 root \u0443\u043b\u0435\u0442\u0430\u0435\u0442 \u043d\u0430 \u0434\u0435\u0432\u0430\u0439\u0441, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0434\u0435\u0432\u0430\u0439\u0441, \u0432\u044b\u0442\u0430\u0449\u0438\u0432 \u0438\u0437 \u043d\u0435\u0433\u043e \u0431\u0430\u0442\u0430\u0440\u0435\u0439\u043a\u0443.<\/li>\n<li>\u0427\u0435\u0440\u0435\u0437 Odin \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u043e\u043a\u043e\u0432\u044b\u0439 \u0431\u0443\u0442\u0447\u0435\u0439\u043d, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0435 <a href=\"http:\/\/d-h.st\/nyI\">VRBMB1_Bootchain.tar.md5<\/a><\/li>\n<\/ul>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c usb-\u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0435, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d \u0432 \u0440\u0435\u0436\u0438\u043c CWM-recovery, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c:  <\/p>\n<pre><code class=\"bash\">malefic@lepeshka:~$ adb devices  List of devices attached  64cb5c59\trecovery  <\/code><\/pre>\n<p>  \u041c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u043c system:  <\/p>\n<pre><code class=\"bash\">malefic@lepeshka:~$ adb shell mount -o rw -t ext4 \/dev\/block\/platform\/msm_sdcc.1\/by-name\/system \/system <\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0432 \/system\/build.prop:  <\/p>\n<pre><code class=\"bash\">malefic@lepeshka:~$ adb shell &quot;echo \\&quot;persist.service.adb.enable=1\\&quot; &gt;&gt; \/system\/build.prop&quot; <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c:  <\/p>\n<pre><code class=\"bash\">malefic@lepeshka:~$ adb reboot <\/code><\/pre>\n<p>  \u0416\u0434\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u0443\u0441 adb:  <\/p>\n<pre><code class=\"bash\">malefic@lepeshka:~$ adb devices  List of devices attached  64cb5c59\tdevice  <\/code><\/pre>\n<p>  \u0411\u0438\u043d\u0433\u043e! \u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u0443 \u043d\u0430\u0441 \u0442\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0435, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c <a href=\"http:\/\/androidscreencast.googlecode.com\/svn\/trunk\/AndroidScreencast\/dist\/androidscreencast.jnlp\">AndroidScreenCast<\/a> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Java Web Start \u0438 \u0432\u0438\u0434\u0438\u043c:<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/9ba\/b9b\/049\/9bab9b04931445b8a5b6cc0ffda51bbd.png\" height=\"574\"\/><\/p>\n<p>  \u042d\u0442\u043e \u044d\u043a\u0440\u0430\u043d \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0441\u0438\u043c\u043a\u0430\u0440\u0442\u044b Verizon, \u0443 \u043c\u0435\u043d\u044f \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u043c\u043a\u0438 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044e, \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044f \u043f\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438:  <\/p>\n<blockquote><p>\u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \u044f\u0437\u044b\u043a\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u0430\u0441\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043b\u0435\u0432\u044b\u0439 \u043d\u0438\u0436\u043d\u0438\u0439 \u0443\u0433\u043e\u043b (\u043d\u0430\u0434 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u044d\u043a\u0441\u0442\u0440\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432), \u043f\u0440\u0430\u0432\u044b\u0439 \u043d\u0438\u0436\u043d\u0438\u0439 \u0443\u0433\u043e\u043b, \u043b\u0435\u0432\u044b\u0439 \u043d\u0438\u0436\u043d\u0438\u0439, \u043f\u0440\u0430\u0432\u044b\u0439 \u043d\u0438\u0436\u043d\u0438\u0439 \u0438 \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c+<\/p><\/blockquote>\n<p>  \u0410 \u0438\u043c\u0435\u043d\u043d\u043e:  <\/p>\n<pre><code class=\"bash\">malefic@lepeshka:~$ adb shell input tap 10 1150 malefic@lepeshka:~$ adb shell input tap 710 1150 malefic@lepeshka:~$ adb shell input tap 10 1150 malefic@lepeshka:~$ adb shell input tap 710 1150 <\/code><\/pre>\n<p>  \u0437\u0430\u0442\u0435\u043c \u043d\u0430\u0436\u0438\u043c\u0430\u044e \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 Vol Up, \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u0438\u0434\u0438\u043c:<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/345\/de7\/5d1\/345de75d157a410587ef082bd5888480.png\"\/><\/p>\n<p>  \u0421\u0442\u0430\u0432\u0438\u043c \u0433\u0430\u043b\u043e\u0447\u043a\u0443 \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u041e\u041a:  <\/p>\n<pre><code class=\"bash\">malefic@lepeshka:~$ adb shell input tap 50 600 malefic@lepeshka:~$ adb shell input tap 650 600 <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/94d\/d12\/a4c\/94dd12a4c08849feb7437e2600b6894f.png\"\/><\/p>\n<p>  \u0421\u0432\u0430\u0439\u043f\u0430\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043b\u043e\u0447\u0438\u0442\u044c \u044d\u043a\u0440\u0430\u043d:  <\/p>\n<pre><code class=\"bash\">malefic@lepeshka:~$ adb shell input swipe 100 100 500 100 <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/793\/709\/ce3\/793709ce34214d098c1885b16b11a240.png\"\/><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c vnc-\u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f Android, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"http:\/\/4pda.ru\/forum\/index.php?showtopic=183128\">Android VNC Server<\/a>. \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d:  <\/p>\n<pre><code class=\"bash\">malefic@lepeshka:~$ adb install droid+VNC+server+v1.1RC0.apk  4055 KB\/s (2084419 bytes in 0.501s) \tpkg: \/data\/local\/tmp\/droid+VNC+server+v1.1RC0.apk Success <\/code><\/pre>\n<p>  \u0411\u0443\u0434\u0438\u043c \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0443\u0441\u043d\u0443\u043b, \u043f\u043e\u043a\u0430 \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0438 vnc-\u0441\u0435\u0440\u0432\u0435\u0440, \u0438 \u0441\u0432\u0430\u0439\u043f\u0430\u0435\u043c, \u0447\u0442\u043e\u0431 \u0440\u0430\u0437\u043b\u043e\u0447\u0438\u0442\u044c \u044d\u043a\u0440\u0430\u043d:  <\/p>\n<pre><code class=\"bash\">malefic@lepeshka:~$ adb shell input keyevent 26 malefic@lepeshka:~$ adb shell input swipe 100 100 500 100 <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c vnc-\u0441\u0435\u0440\u0432\u0435\u0440:  <\/p>\n<pre><code class=\"bash\">malefic@lepeshka:~$ adb shell am start -a android.intent.action.Main -n org.onaips.vnc\/.MainActivity <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/21d\/a8b\/209\/21da8b2096c14b3d9d07ad08e2bb8689.png\"\/><\/p>\n<p>  \u0416\u043c\u0435\u043c \u041e\u041a:  <\/p>\n<pre><code class=\"bash\">malefic@lepeshka:~$ adb shell input tap 50 900 <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/7f3\/9cc\/45f\/7f39cc45f38c47ef904dccff7350fd0b.png\"\/><\/p>\n<p>  \u0416\u043c\u0435\u043c Start:  <\/p>\n<pre><code class=\"bash\">malefic@lepeshka:~$ adb shell input tap 350 300 <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/1c8\/fb6\/aee\/1c8fb6aee73142abbbbd613d98609eab.png\"\/><\/p>\n<p>  \u0416\u043c\u0435\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f:  <\/p>\n<pre><code class=\"bash\">malefic@lepeshka:~$ adb shell input tap 600 1000 <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/ae8\/bbc\/b4b\/ae8bbcb4b7644648bb1ecf8b0919b926.png\"\/><\/p>\n<p>  \u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0440\u0442\u044b \u0447\u0435\u0440\u0435\u0437 adb:  <\/p>\n<pre><code class=\"bash\">malefic@lepeshka:~$ adb forward tcp:5801 tcp:5801 malefic@lepeshka:~$ adb forward tcp:5901 tcp:5901 <\/code><\/pre>\n<p>  \u0438 \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438\u043b\u0438 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 vnc \u043a\u043b\u0438\u0435\u043d\u0442.<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/44b\/d43\/3c2\/44bd433c25374c769b383efc0f049a8a.png\"\/><\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043a\u0430\u043a \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c Android \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u043c, \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440, \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c WiFi \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0442\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e vnc \u0447\u0435\u0440\u0435\u0437 WiFi, \u0430 \u043d\u0435 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u043a \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 (\u0432\u0435\u0434\u044c \u0433\u0430\u0437\u043e\u0432\u044b\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0432 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0431\u043b\u0438\u0437\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430).<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0434\u0435\u0432\u0430\u0439\u0441\u043e\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u043b\u0430\u0436\u0435\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0444\u043e\u0442\u043e\u0441\u044a\u0435\u043c\u043a\u0438 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442.<\/p>\n<h6>\u041f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0444\u043e\u0442\u043e\u0441\u044a\u0435\u043c\u043a\u0430<\/h6>\n<p>  \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <a href=\"http:\/\/4pda.ru\/forum\/index.php?showtopic=173935\">Tasker<\/a>, \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0432 \u043d\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0441 00:00 \u0434\u043e 23:59 \u043a\u0430\u0436\u0434\u044b\u0435 30 \u043c\u0438\u043d\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u2014 \u0434\u0435\u043b\u0430\u0442\u044c \u0444\u043e\u0442\u043e. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u044a\u0435\u043c\u043a\u0438 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430. \u0423 \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u044a\u0435\u043c\u043a\u0430 \u0441 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u0441\u043f\u044b\u0448\u043a\u043e\u0439. <\/p>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044f \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0441\u0432\u043e\u0439 \u0442\u0435\u043b\u0435\u0444\u043e\u043d (\u0432\u0438\u0434 \u0441\u0432\u0435\u0440\u0445\u0443):<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/61d\/c1f\/d3a\/61dc1fd3a02f48bcad84f4e149750288.jpg\"\/><\/p>\n<p>  \u041a\u0430\u0440\u0442\u043e\u043d\u043d\u0430\u044f \u043a\u043e\u0440\u043e\u0431\u043a\u0430, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u043a \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0443 \u0432\u0435\u0440\u0435\u0432\u043e\u0447\u043a\u043e\u0439, \u0432 \u043d\u0435\u0439 \u0436\u0438\u0432\u0435\u0442 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d, \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u043e\u0442 \u044f\u0438\u0446 \u0442\u0430\u043c \u0434\u043b\u044f \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430 \u0432 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u0417\u0430\u0442\u0435\u043c \u044f \u0435\u0449\u0451 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u043e\u0442\u0447\u0430 \u0438 \u043a\u0430\u0440\u0442\u043e\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u043f\u044b\u0448\u043a\u0430 \u043d\u0435 \u0431\u0438\u043b\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u0446\u0438\u0444\u0435\u0440\u0431\u043b\u0430\u0442, \u044d\u0442\u043e \u0434\u0430\u0435\u0442 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0435 \u0431\u043b\u0438\u043a\u0438, \u043c\u0435\u0448\u0430\u044e\u0449\u0438\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044e. \u0421\u0432\u0435\u0440\u0445\u0443 \u0437\u0430\u043a\u0440\u044b\u043b \u0432\u0441\u0435 \u043a\u0440\u044b\u0448\u043a\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u044b\u043b\u043e \u0442\u0435\u043c\u043d\u043e, \u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u0438 \u044f\u0440\u043a\u043e\u043c \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u0444\u043e\u043a\u0443\u0441. <\/p>\n<p>  \u0412 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430 \u0432 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0434\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0433\u0430\u043b\u043e\u0447\u043a\u0443, \u0447\u0442\u043e\u0431 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d \u043d\u0435 \u0437\u0430\u0441\u044b\u043f\u0430\u043b \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0440\u044f\u0434\u043a\u0435, \u0430 \u0442\u043e \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043d \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0432\u043e\u0436\u0438\u0442\u044c.<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/25d\/902\/60a\/25d90260a6b54406bbdcb0ad1d8ad2b3.png\" height=\"574\"\/><\/p>\n<h6>\u0412\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442<\/h6>\n<p>  \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043e\u0442\u0441\u043d\u044f\u0442\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u043e\u043f\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=dk.tacit.android.foldersync.lite\">FolderSync Lite<\/a>. \u041e\u043d\u043e \u0443\u043c\u0435\u0435\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u043d\u0430 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0435 \u0441 \u043f\u0430\u043f\u043a\u043e\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 Google \u0434\u0438\u0441\u043a\u0435. <\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044f \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0433\u0443 \u0438\u0437 \u043b\u044e\u0431\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043c\u0438\u0440\u0430, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0437\u0430\u0439\u0442\u0438 \u0432 \u0441\u0432\u043e\u0439 Google \u0434\u0438\u0441\u043a \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0433\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043e\u0442\u0451\u043b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0448\u0442\u0430\u0442\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435.<\/p>\n<h4>\u0427\u0430\u0441\u0442\u044c 2. \u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439<\/h4>\n<p>  \u0418\u0442\u0430\u043a, \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u043c\u0435\u043d\u044f \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442:  <\/p>\n<ul>\n<li>\u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0433\u0430\u0437\u0430<\/li>\n<li>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0431\u043e\u0438 \u0441 \u043f\u043e\u0434\u0430\u0447\u0435\u0439 \u0433\u0430\u0437\u0430 (\u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u043e e-mail \u0438\u043b\u0438 sms)<\/li>\n<\/ul>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044f\u0437\u044b\u043a\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d python, \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"http:\/\/docs.opencv.org\/trunk\/doc\/py_tutorials\/py_tutorials.html\">OpenCV<\/a>.<\/p>\n<p>  \u0412\u043e\u0442 \u043a\u043e\u0434 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043a\u0440\u043e\u043d\u0443 \u0440\u0430\u0437 \u0432 \u0447\u0430\u0441:  <\/p>\n<pre><code class=\"python\">import sys import os  from models import getImage, sess from gdrive import getImagesFromGDrive, createImageFromGDriveObject  if __name__ == '__main__':      # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u043e\u0432\u044b\u0445 \u0444\u043e\u0442\u043e \u0441 \u0433\u0443\u0433\u043b \u0434\u0438\u0441\u043a\u0430     images, http = getImagesFromGDrive()          # \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0438\u0445 \u0432 \u0446\u0438\u043a\u043b\u0435     for img_info in images:          # \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435         img = createImageFromGDriveObject (img_info, http)         file_name = img_info['title']          # \u0438\u0449\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0431\u0430\u0437\u0435         try:                 dbimage = getImage(os.path.basename(file_name))             dbimage.img = img             dbimage.download_url = img_info[&quot;downloadUrl&quot;]             dbimage.img_link = img_info['webContentLink'].replace('&export=download','')         except ValueError as e:             print e             continue                       # \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0435\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f         dbimage.identifyDigits()                  # \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0431\u0430\u0437\u0443         sess.commit() <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u0432\u044b\u043b\u043e\u0436\u0443 \u043d\u0438\u0436\u0435:  <\/p>\n<ul>\n<li><code>getImagesFromGDrive<\/code> \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0435\u0449\u0451 \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0441 Google \u0414\u0438\u0441\u043a\u0430<\/li>\n<li><code>createImageFromGDriveObject<\/code> \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u044e\u0449\u0430\u044f \u0441\u0430\u043c\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0449\u0430\u044f \u0435\u0433\u043e \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 OpenCV<\/li>\n<li><code>getImage<\/code> \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0449\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0431 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u043e\u0439 \u043d\u0435\u0442, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0435\u0451<\/li>\n<li><code>identifyDigits<\/code> \u2014 \u043c\u0435\u0442\u043e\u0434, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438<\/li>\n<li><code>http<\/code> \u2014 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a Google \u0414\u0438\u0441\u043a\u0443, \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043f\u0440\u043e \u0434\u043e\u0441\u0442\u0443\u043f \u043a API \u0414\u0438\u0441\u043a\u0430 \u0447\u0438\u0442\u0430\u0435\u043c <a href=\"https:\/\/developers.google.com\/drive\/web\/quickstart\/quickstart-python\">\u0437\u0434\u0435\u0441\u044c<\/a><\/li>\n<li><code>sess<\/code> \u2014 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"http:\/\/www.sqlalchemy.org\/\">SQL Alchemy<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h5>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 Google \u0414\u0438\u0441\u043a\u043e\u043c<\/h5>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c, \u044d\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441 Google \u0414\u0438\u0441\u043a\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439:  <\/p>\n<pre><code class=\"python\">import os  from datetime import tzinfo, timedelta, date from dateutil.relativedelta import relativedelta  from apiclient.discovery import build  from models import getLastRecognizedImage  def getImagesFromGDrive():          # \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c id \u043f\u0430\u043f\u043a\u0438 Google \u0414\u0438\u0441\u043a\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u0435\u0436\u0430\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f      FOLDER_ID = '0B5mI3ROgk0mJcHJKTm95Ri1mbVU'          # \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430     http = getAuthorizedHttp()          # \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0414\u0438\u0441\u043a\u0430     drive_service = build('drive', 'v2', http=http)          # \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0441 \u0414\u0438\u0441\u043a\u0430 \u0432\u0441\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0440\u0448\u0435 \u043c\u0435\u0441\u044f\u0446\u0430, \u043e\u043d\u0438 \u043d\u0430\u043c \u0443\u0436\u0435 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b     month_ago = date.today() + relativedelta( months = -1 )     q = &quot;'%s' in parents and mimeType = 'image\/jpeg' and trashed = false and modifiedDate&lt;'%s'&quot; % (FOLDER_ID, month_ago.isoformat())      files = drive_service.files().list(q = q, maxResults=1000).execute()     for image in files.get('items'):          drive_service.files().trash(fileId=image['id']).execute()          # \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0431\u0430\u0437\u0435, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435     last_image = getLastRecognizedImage()               # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441 \u0414\u0438\u0441\u043a\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0434\u0430\u0442\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0430\u0442\u044b \u0441\u044a\u0435\u043c\u043a\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f     page_size = 1000     result = []     pt = None     # \u0442\u0430\u043a \u043a\u0430\u043a API \u0414\u0438\u0441\u043a\u0430 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430 \u0440\u0430\u0437 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 1000 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439,      # \u0442\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e \u043f\u043e 1000 \u0448\u0442\u0443\u043a \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0432 \u043e\u0434\u0438\u043d \u043c\u0430\u0441\u0441\u0438\u0432     while True:         q = &quot;'%s' in parents and trashed = false and mimeType = 'image\/jpeg' and modifiedDate&gt;'%s'&quot; % (FOLDER_ID, last_image.check_time.replace(tzinfo=TZ()).isoformat('T'))         files = drive_service.files().list(q = q, maxResults=page_size, pageToken=pt).execute()         result.extend(files.get('items'))         pt = files.get('nextPageToken')         if not pt:             break          # \u043f\u0435\u0440\u0435\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0448\u043b\u0430 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u044a\u0435\u043c\u043a\u0438     result.reverse()              return result, http <\/code><\/pre>\n<p>  \u0410\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0414\u0438\u0441\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"python\">import httplib2  import ConfigParser  from oauth2client.client import OAuth2WebServerFlow from oauth2client.file import Storage  def getAuthorizedHttp():      # \u0434\u043e\u0441\u0442\u0430\u0435\u043c \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 config.ini \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0442\u0430\u043c CLIENT_ID \u0438 CLIENT_SECRET     config = ConfigParser.ConfigParser()     config.read([os.path.dirname(__file__)+'\/config.ini'])     CLIENT_ID = config.get('gdrive','CLIENT_ID')     CLIENT_SECRET = config.get('gdrive','CLIENT_SECRET')      # OAuth 2.0 scope that will be authorized.     # Check https:\/\/developers.google.com\/drive\/scopes for all available scopes.     OAUTH_SCOPE = 'https:\/\/www.googleapis.com\/auth\/drive'          # Redirect URI for installed apps     REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob'          # \u0432 \u0444\u0430\u0439\u043b\u0435 client_secrets.json \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d     storage = Storage(os.path.dirname(__file__) + '\/client_secrets.json')     credentials = storage.get()          # \u0435\u0441\u043b\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u0442, \u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438     if not credentials:         # Perform OAuth2.0 authorization flow.         flow = OAuth2WebServerFlow(CLIENT_ID, CLIENT_SECRET, OAUTH_SCOPE, REDIRECT_URI)         authorize_url = flow.step1_get_authorize_url()         # \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0441\u0441\u044b\u043b\u043a\u0443, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438         print 'Go to the following link in your browser: ' + authorize_url         # \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u043e\u0442\u0432\u0435\u0442         code = raw_input('Enter verification code: ').strip()         credentials = flow.step2_exchange(code)         # \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0442\u043e\u043a\u0435\u043d          storage.put(credentials)          # \u0441\u043e\u0437\u0434\u0430\u0435\u043c http \u043a\u043b\u0438\u0435\u043d\u0442 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u043c \u0435\u0433\u043e      http = httplib2.Http()     credentials.authorize(http)     return http <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f CLIENT_ID \u0438 CLIENT_SECRET \u0432 <a href=\"https:\/\/console.developers.google.com\/project\">Google Developers Console<\/a> \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <b>APIs &#038; auth<\/b> \u2014 <b>Credentials<\/b> \u2014 <b>OAuth<\/b> \u043d\u0430\u0436\u0430\u0442\u044c <b>CREATE NEW CLIENT ID<\/b>, \u0442\u0430\u043c \u0432\u044b\u0431\u0440\u0430\u0442\u044c <b>Installed application<\/b> \u2014 <b>Other<\/b>:<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/1d7\/5d3\/fc1\/1d75d3fc16534b1f8ee7b6a55a4ee18a.jpg\"\/><\/p>\n<p>  \u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430\u043f\u0438\u0448\u0435\u0442 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 url \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d, \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a Google \u0414\u0438\u0441\u043a\u0443, \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432\u044b\u0434\u0430\u043d\u043d\u044b\u0439 \u0433\u0443\u0433\u043b\u043e\u043c \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0438 \u043e\u0442\u0434\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0443. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0432 \u0444\u0430\u0439\u043b <code>client_secrets.json<\/code> \u0438 \u043f\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0445 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c.<\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430:  <\/p>\n<pre><code class=\"python\">import cv2 import numpy as np  def downloadImageFromGDrive (downloadUrl, http=None):     if http==None:         http = getAuthorizedHttp()     # \u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435     resp, content = http.request(downloadUrl)     # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f OpenCV     img_array = np.asarray(bytearray(content), dtype=np.uint8)     return cv2.imdecode(img_array, cv2.IMREAD_COLOR)  def createImageFromGDriveObject (img_info, http=None):     return downloadImageFromGDrive(img_info['downloadUrl'], http) <\/code><\/pre>\n<h5>\u041f\u043e\u0438\u0441\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u043d\u0430 \u0444\u043e\u0442\u043e<\/h5>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0444\u043e\u0442\u043e, \u044d\u0442\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u043d\u0451\u043c \u0446\u0438\u0444\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c. \u042d\u0442\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 <code>extractDigitsFromImage<\/code>:  <\/p>\n<pre><code class=\"python\">    def extractDigitsFromImage (self):          img = self.img <\/code><\/pre>\n<p>  \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0444\u043e\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/068\/716\/9c3\/0687169c37044997af04beb3e14fca17.png\"\/><\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u0435\u0433\u043e \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u043e \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u043b\u043e \u043d\u0443\u0436\u043d\u0443\u044e \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e.  <\/p>\n<pre><code class=\"python\">        # \u0432\u0440\u0430\u0449\u0430\u0435\u043c \u043d\u0430 90 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432          h, w, k = img.shape         M = cv2.getRotationMatrix2D((w\/2,h\/2),270,1)         img = cv2.warpAffine(img,M,(w,h)) <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/bc7\/e4d\/45e\/bc7e4d45e2184c7dbde70a3b44a0f166.png\"\/><\/p>\n<pre><code class=\"python\">        # \u043e\u0431\u0440\u0435\u0437\u0430\u0435\u043c \u0447\u0435\u0440\u043d\u044b\u0435 \u043f\u043e\u043b\u044f, \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f         img = img[0:h, (w-h)\/2:h+(w-h)\/2]         h, w, k = img.shape <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0443\u0441\u043e\u0447\u0435\u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043e\u0431\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u0440\u0430\u043c\u043a\u043e\u0439. \u041e\u043d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043d \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0432\u0441\u0435\u0433\u043e \u0444\u043e\u0442\u043e, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0446\u0438\u0444\u0435\u0440\u0431\u043b\u0430\u0442\u0430. \u042f \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0435\u0433\u043e \u0432 \u0444\u0430\u0439\u043b <code>sample.jpg<\/code> \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442:  <\/p>\n<pre><code class=\"python\">        # \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0438\u0441\u043a\u043e\u043c\u044b\u0439 \u043a\u0443\u0441\u043e\u0447\u0435\u043a \u0444\u043e\u0442\u043e \u0438\u0437 \u0444\u0430\u0439\u043b\u0430         sample = cv2.imread(os.path.dirname(__file__)+&quot;\/sample.jpg&quot;)         sample_h, sample_w, sample_k = sample.shape                          # \u0438\u0449\u0435\u043c \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0435\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0435\u0433\u043e \u0441 \u0444\u043e\u0442\u043e         res = cv2.matchTemplate(img,sample,cv2.TM_CCORR_NORMED)         min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)         # \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0446\u0435\u043d\u0442\u0440\u0430 \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0435\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f         x_center = max_loc[0] + sample_w\/2         y_center = max_loc[1] + sample_h\/2          # \u044d\u0442\u043e\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430 \u043e\u0431\u0440\u0435\u0437\u0430\u0435\u0442 \u043b\u0435\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0444\u043e\u0442\u043e, \u0435\u0441\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043f\u0440\u0430\u0432\u0430,          # \u0447\u0442\u043e\u0431\u044b \u0446\u0438\u0444\u0435\u0440\u0431\u043b\u0430\u0442 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0444\u043e\u0442\u043e         if x_center&gt;w*0.6:             img = img[0:h, 0.2*w:w]             h, w, k = img.shape             x_center = x_center-0.2*w <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/758\/b16\/3e7\/758b163e7b7d40f7a626f08412558c81.png\"\/><\/p>\n<p>  \u0422\u043e\u0447\u043a\u043e\u0439 \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0438 \u0445\u043e\u0442\u0435\u043b\u0438. \u0414\u0430\u043b\u0435\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0433\u0440\u0430\u043d\u0438\u0446, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0441\u0435\u0440\u044b\u0435 \u0442\u043e\u043d\u0430. 100 \u0438 200 \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u044d\u043c\u043f\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0438.  <\/p>\n<pre><code class=\"python\">        # \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u043e\u0433\u043e         gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)         # \u0438\u0449\u0435\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c Canny         edges = cv2.Canny(gray, 100, 200) <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/47c\/cfb\/b91\/47ccfbb916764df594f827b0e74fc890.png\"\/><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043b\u0438\u043d\u0438\u0439 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0441 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438. \u041a\u0440\u043e\u043c\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434 <code>HoughLines<\/code> \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0448\u0430\u0433\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0438 \u0443\u0433\u043b\u0443 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0438 \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0435\u0435 \u0437\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b-\u0432\u043e \u0442\u043e\u0447\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u043d\u0438\u044e. \u0427\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u044d\u0442\u043e\u0442 \u043f\u043e\u0440\u043e\u0433, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043b\u0438\u043d\u0438\u0439 \u043d\u0430\u0439\u0434\u0451\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c.  <\/p>\n<pre><code class=\"python\">        # \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043f\u0440\u044f\u043c\u044b\u0435 \u043b\u0438\u043d\u0438\u0438         lines = cv2.HoughLines(edges, 1, np.pi\/180, threshold=100) <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/db6\/08a\/62d\/db608a62d63844149e574c0438fa8ae3.png\"\/><\/p>\n<p>  \u0418\u0437 \u0432\u0441\u0435\u0445 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0434\u0432\u0435 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u044b\u0435 \u043a \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u043c\u0443 \u0440\u0430\u043d\u0435\u0435 \u0446\u0435\u043d\u0442\u0440\u0443 (\u043e\u0434\u043d\u0443 \u0441\u0432\u0435\u0440\u0445\u0443, \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u043d\u0438\u0437\u0443).  <\/p>\n<pre><code class=\"python\">        # \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435         rho_below = rho_above = np.sqrt(h*h+w*w)         line_above = None         line_below = None         for line in lines:             rho,theta = line[0]             sin = np.sin(theta)             cos = np.cos(theta)                          # \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043d\u0435 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438             if (sin&lt;0.7):                 continue                  # \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0440\u043e \u0434\u043b\u044f \u043b\u0438\u043d\u0438\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043b\u0438\u043d\u0438\u0438, \u043d\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 &quot;\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0443\u044e&quot; \u0442\u043e\u0447\u043a\u0443                          rho_center = x_center*cos + y_center*sin                          # \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0441 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0439 \u043b\u0438\u043d\u0438\u0435\u0439 \u0441\u0432\u0435\u0440\u0445\u0443             if rho_center&gt;rho and rho_center-rho&lt;rho_above:                 rho_above = rho_center-rho                 line_above = {&quot;rho&quot;:rho, &quot;theta&quot;:theta, &quot;sin&quot;:sin, &quot;cos&quot;:cos}                          # \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0441 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0439 \u043b\u0438\u043d\u0438\u0435\u0439 \u0441\u043d\u0438\u0437\u0443             if rho_center&lt;rho and rho-rho_center&lt;rho_below:                 rho_below = rho-rho_center                 line_below = {&quot;rho&quot;:rho, &quot;theta&quot;:theta, &quot;sin&quot;:sin, &quot;cos&quot;:cos}                   # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043e\u0431\u0435 \u043b\u0438 \u043b\u0438\u043d\u0438\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u044b          if line_below==None or line_above==None:             mylogger.warn(&quot;No lines found&quot;)                    return False          # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u043b\u0435\u043a\u043e \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430         if rho_below\/rho_above&gt;1.7 or rho_below\/rho_above&lt;0.6:             mylogger.warn(&quot;Wrong lines found: %f&quot; % (rho_below\/rho_above))             return False  <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/768\/a07\/45e\/768a0745ec0444ce8d96ce23c80ac4bd.png\"\/><\/p>\n<p>  \u041f\u043e\u0432\u043e\u0440\u0447\u0438\u0432\u0430\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u0441\u0442\u0430\u043b\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438:   <\/p>\n<pre><code class=\"python\">        # \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c         M = cv2.getRotationMatrix2D((0,(line_below[&quot;rho&quot;]-line_above[&quot;rho&quot;])\/2+line_above[&quot;rho&quot;]),line_above[&quot;theta&quot;]\/np.pi*180-90,1)         img = cv2.warpAffine(img,M,(w,h)) <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/e14\/33d\/f93\/e1433df935bc4aee870663540e57724c.png\"\/><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u0440\u0435\u0436\u0435\u043c \u0432\u0441\u0435, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u043c\u0438 \u043b\u0438\u043d\u0438\u044f\u043c\u0438:  <\/p>\n<pre><code class=\"python\">        # \u043e\u0431\u0440\u0435\u0437\u0430\u0435\u043c          img = img[line_above[&quot;rho&quot;]:line_below[&quot;rho&quot;], 0:w]         h, w, k = img.shape <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/cc3\/50e\/14a\/cc350e14aa344b97b9bb70a413a90ea0.png\"\/><\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043b\u0435\u0432\u044b\u0439 \u0438 \u043f\u0440\u0430\u0432\u044b\u0439 \u043a\u0440\u0430\u0439 \u0446\u0438\u0444\u0435\u0440\u0431\u043b\u0430\u0442\u0430, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0447\u0435\u0440\u043d\u043e-\u0431\u0435\u043b\u043e\u0435:  <\/p>\n<pre><code class=\"python\">        # \u0431\u0438\u043d\u0430\u0440\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435          gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)         thres = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 2) <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/b8f\/5fb\/573\/b8f5fb57326145e59d3508ff911e7800.png\"\/><\/p>\n<p>  \u041f\u0440\u0430\u0432\u044b\u0439 \u043a\u0440\u0430\u0439 \u0438\u0449\u0435\u043c \u043f\u043e \u0442\u043e\u0439 \u0436\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u0447\u0442\u043e \u0438 \u00ab\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0443\u044e\u00bb \u0442\u043e\u0447\u043a\u0443, \u0448\u0430\u0431\u043b\u043e\u043d \u043e\u0431\u0432\u0435\u0434\u0451\u043d \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u0440\u0430\u043c\u043a\u043e\u0439:  <\/p>\n<pre><code class=\"python\">        sample_right = cv2.imread(os.path.dirname(__file__)+&quot;\/sample_right.jpg&quot;,cv2.IMREAD_GRAYSCALE)          # \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0435\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c         res = cv2.matchTemplate(thres,sample_right,cv2.TM_CCORR_NORMED)         min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)         # \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u043f\u0440\u0430\u0432\u0443\u044e \u0433\u0440\u0430\u043d\u0438\u0446\u0443         x_right = max_loc[0]-6 <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043b\u0435\u0432\u043e\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0448\u0443\u043c\u0430:  <\/p>\n<pre><code class=\"python\">        # \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0448\u0443\u043c         kernel = np.ones((7,7),np.uint8)         thres = cv2.morphologyEx(thres, cv2.MORPH_CLOSE, kernel) <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/65b\/712\/8aa\/65b7128aa1474caf915bb6ddc3d700a4.png\"\/><\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043b\u0435\u0432\u043e\u0433\u043e, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u043d\u044b\u0439, \u044d\u0442\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0432\u044b\u0439 \u043a\u0440\u0430\u0439:  <\/p>\n<pre><code class=\"python\">        # \u0438\u0449\u0435\u043c \u043b\u0435\u0432\u044b\u0439 \u043a\u0440\u0430\u0439         x_left=0         while x_left&lt;w :             if thres[h\/2,x_left]==0:                 break             x_left+=1 <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/49b\/7b4\/f9a\/49b7b4f9aa86442fa74399085eb0e816.png\"\/><\/p>\n<p>  \u041e\u0431\u0440\u0435\u0436\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u0438 \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e:  <\/p>\n<pre><code class=\"python\">        # \u043e\u0431\u0440\u0435\u0437\u0430\u0435\u043c \u0441\u043b\u0435\u0432\u0430 \u0438 \u0441\u043f\u0440\u0430\u0432\u0430         img = img[:, x_left:x_right]         h, w, k = img.shape <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/aae\/9d3\/969\/aae9d39698634dfaa51bc0e3cb3530b9.png\"\/><\/p>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0434\u0451\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u0447\u0442\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u0441\u0442\u043e\u0440\u043e\u043d \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0446\u0438\u0444\u0435\u0440\u0431\u043b\u0430\u0442\u0443:  <\/p>\n<pre><code class=\"python\">        # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0440\u043e\u043d         if float(w)\/float(h)&lt;6.5 or float(w)\/float(h)&gt;9.5:             mylogger.warn(&quot;Image has bad ratio: %f&quot; % (float(w)\/float(h)))             return False                  self.digits_img = img         return True <\/code><\/pre>\n<h5>\u0420\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u043d\u0430 \u0446\u0438\u0444\u0440\u044b<\/h5>\n<p>  \u0420\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0446\u0438\u0444\u0435\u0440\u0431\u043b\u0430\u0442\u0430 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 <code>splitDigits<\/code>:  <\/p>\n<pre><code class=\"python\">    def splitDigits (self):              # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0435\u0441\u043b\u0438 \u0446\u0438\u0444\u0435\u0440\u0431\u043b\u0430\u0442 \u0435\u0449\u0451 \u043d\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d, \u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e         if None == self.digits_img:             if not self.extractDigitsFromImage():                 return False              img = self.digits_img         h, w, k = img.shape <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043c \u043d\u0430\u0448 \u0446\u0438\u0444\u0435\u0440\u0431\u043b\u0430\u0442 \u043d\u0430 8 \u0440\u0430\u0432\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439:<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/480\/b34\/2d7\/480b342d783c472ca447cec9f2ea7dfa.png\"\/><\/p>\n<p>  \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0435 7 \u0447\u0430\u0441\u0442\u0435\u0439, \u0442\u0430\u043a \u043a\u0430\u043a 8-\u044f \u0446\u0438\u0444\u0440\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f, \u0435\u0451 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c.<br \/>  \u041a\u0430\u0436\u0434\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0432 \u0447\/\u0431 \u0446\u0432\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0435\u0442\u043e\u0434 <code>adaptiveThreshold<\/code>, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043d\u044b \u044d\u043c\u043f\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0438:  <\/p>\n<pre><code class=\"python\">        # \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c \u0446\u0438\u0444\u0435\u0440\u0431\u043b\u0430\u0442 \u043d\u0430 8 \u0440\u0430\u0432\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u0447\u0430\u0441\u0442\u044c         for i in range(1,8):             digit = img[0:h, (i-1)*w\/8:i*w\/8]             dh, dw, dk = digit.shape             # \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0432 \u0447\/\u0431             digit_gray = cv2.cvtColor(digit,cv2.COLOR_BGR2GRAY)                         digit_bin = cv2.adaptiveThreshold(digit_gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 9, 0) <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/af8\/cdc\/261\/af8cdc261c044c998e9d3497db7f03bb.png\"\/><\/p>\n<p>  \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0448\u0443\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u044f\u0434\u0440\u043e \u0432\u0441\u0435\u0433\u043e 2\u04452). \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c, \u043d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043e\u0442\u0440\u0435\u0437\u0430\u0442\u044c \u043e\u0442 \u0446\u0438\u0444\u0440\u044b \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0431\u0435\u043b\u044b\u0435 \u043a\u0443\u0441\u043a\u0438 \u043f\u043e\u0434\u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u0442\u043e\u043d\u043a\u0438\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u044b\u0447\u043a\u0430\u043c\u0438:  <\/p>\n<pre><code class=\"python\">            # \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0448\u0443\u043c             kernel = np.ones((2,2),np.uint8)             digit_bin = cv2.morphologyEx(digit_bin, cv2.MORPH_OPEN, kernel) <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/006\/879\/9cb\/0068799cb6b84a0583a173c8bf3e0fe6.png\"\/><\/p>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043a\u043e\u043d\u0442\u0443\u0440\u043e\u0432  <\/p>\n<pre><code class=\"python\">            # \u0438\u0449\u0435\u043c \u043a\u043e\u043d\u0442\u0443\u0440\u044b             other, contours, hierarhy = cv2.findContours(digit_bin.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/d42\/ca4\/e83\/d42ca4e836dd4e1490b60b155bb826a3.png\"\/><\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u043c \u0432\u0441\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u043a\u043e\u043d\u0442\u0443\u0440\u044b \u0438 \u043a\u043e\u043d\u0442\u0443\u0440\u044b \u043f\u043e \u043a\u0440\u0430\u044f\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u0439\u0434\u0451\u043c \u0441\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u043d\u0442\u0443\u0440 \u0438\u0437 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f:  <\/p>\n<pre><code class=\"python\">            # \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0443\u0440\u044b             biggest_contour = None             biggest_contour_area = 0             for cnt in contours:                 M = cv2.moments(cnt)                  # \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0443\u0440\u044b \u0441\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u043f\u043b\u043e\u0449\u0430\u0434\u044c\u044e                 if cv2.contourArea(cnt)&lt;30:                     continue                 # \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0443\u0440\u044b \u0441\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c \u043f\u0435\u0440\u0438\u043c\u0435\u0442\u0440\u043e\u043c                 if cv2.arcLength(cnt,True)&lt;30:                     continue                  # \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0446\u0435\u043d\u0442\u0440 \u043c\u0430\u0441\u0441 \u043a\u043e\u043d\u0442\u0443\u0440\u0430                 cx = M['m10']\/M['m00']                 cy = M['m01']\/M['m00']                                  # \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0443\u0440, \u0435\u0441\u043b\u0438 \u0446\u0435\u043d\u0442\u0440 \u043c\u0430\u0441\u0441 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u0441 \u043a\u0440\u0430\u044e                  if cx\/dw&lt;0.3 or cx\/dw&gt;0.7:                     continue                                  # \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u043a\u043e\u043d\u0442\u0443\u0440                  if cv2.contourArea(cnt)&gt;biggest_contour_area:                     biggest_contour = cnt                     biggest_contour_area = cv2.contourArea(cnt)                     biggest_contour_cx = cx                     biggest_contour_cy = cy                          # \u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0443\u0440\u0430, \u0442\u043e \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u043c \u0446\u0438\u0444\u0440\u0443 \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u043e\u0439             if biggest_contour==None:                 digit = self.dbDigit(i, digit_bin)                 digit.markDigitForManualRecognize (use_for_training=False)                 mylogger.warn(&quot;Digit %d: no biggest contour found&quot; % i)                 continue     <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/706\/a4b\/27d\/706a4b27dedd4c77a7ef2757bb3f6af6.png\"\/><\/p>\n<p>  \u0421\u0430\u043c\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u043d\u0442\u0443\u0440 \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u043d\u0430\u0448\u0430 \u0446\u0438\u0444\u0440\u0430, \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u043c \u0432\u0441\u0451, \u0447\u0442\u043e \u043b\u0435\u0436\u0438\u0442 \u0437\u0430 \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u043a\u0438:  <\/p>\n<pre><code class=\"python\">            # \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0451, \u0447\u0442\u043e \u043b\u0435\u0436\u0438\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0443\u0440\u0430              mask = np.zeros(digit_bin.shape,np.uint8)             cv2.drawContours(mask,[biggest_contour],0,255,-1)             digit_bin = cv2.bitwise_and(digit_bin,digit_bin,mask = mask) <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/204\/4d7\/1f0\/2044d71f07ee4eaeac7ce6162fc63e40.png\"\/><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u043f\u0438\u0448\u0435\u043c \u0432\u043e\u043a\u0440\u0443\u0433 \u043a\u0430\u0436\u0434\u043e\u0439 \u0446\u0438\u0444\u0440\u044b \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0441 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0432 \u0446\u0435\u043d\u0442\u0440\u0435 \u043c\u0430\u0441\u0441 \u043a\u043e\u043d\u0442\u0443\u0440\u0430:   <\/p>\n<pre><code class=\"python\">            # \u0437\u0430\u0434\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430             rw = dw\/2.0             rh = dh\/1.4              # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u043d\u0435 \u0432\u044b\u0445\u043e\u0434\u0438\u043b \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f             if biggest_contour_cy-rh\/2 &lt; 0:                 biggest_contour_cy = rh\/2             if biggest_contour_cx-rw\/2 &lt; 0:                 biggest_contour_cx = rw\/2 <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/0a0\/695\/570\/0a069557023e491dba073f61d6884c7b.png\"\/><\/p>\n<p>  \u041e\u0431\u0440\u0435\u0437\u0430\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0443 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c \u0434\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e <code>digit_base_h = 2<\/code>4, <code>digit_base_w = 16<\/code>. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u0431\u0430\u0437\u0443.  <\/p>\n<pre><code class=\"python\">            # \u0432\u044b\u0440\u0435\u0437\u0430\u0435\u043c \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a              digit_bin = digit_bin[int(biggest_contour_cy-rh\/2):int(biggest_contour_cy+rh\/2), int(biggest_contour_cx-rw\/2):int(biggest_contour_cx+rw\/2)]                          # \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439             digit_bin = cv2.resize(digit_bin,(digit_base_w, digit_base_h))             digit_bin = cv2.threshold(digit_bin, 128, 255, cv2.THRESH_BINARY)[1]                          # \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u0431\u0430\u0437\u0443             digit = self.dbDigit(i, digit_bin)                      return True <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/688\/a9e\/86b\/688a9e86b9924db691f7f2587e476772.png\"\/><\/p>\n<h5>\u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0446\u0438\u0444\u0440<\/h5>\n<p>  \u0412\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 <code>identifyDigits<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"python\">    def identifyDigits(self):          # \u0435\u0441\u043b\u0438 \u0447\u0438\u0441\u043b\u043e \u0443\u0436\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043e, \u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c         if self.result!='':             return True                      # \u0435\u0441\u043b\u0438 \u0446\u0438\u0444\u0440\u044b \u0435\u0449\u0451 \u043d\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b         if len(self.digits)==0:             # \u0435\u0441\u043b\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u0437\u0430\u0434\u0430\u043d\u043e, \u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f             if self.img == None:                             return False             # \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0446\u0438\u0444\u0440\u044b             if not self.splitDigits():                 return False             # \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0431\u0430\u0437\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u043f\u0440\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0446\u0438\u0444\u0440             sess.commit()              # \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0446\u0438\u0444\u0440\u0443         for digit in self.digits:             digit.identifyDigit()                  # \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0446\u0438\u0444\u0440         str_digits = map(str,self.digits)                  # \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u0430 \u0446\u0438\u0444\u0440\u0430 \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u0430, \u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043e         if '?' in str_digits:             return False                  # \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0446\u0438\u0444\u0440\u044b \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u043b\u0430         self.result = ''.join(str_digits)         return True <\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u0432\u0441\u0435 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e, \u043a\u0440\u043e\u043c\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <code>identifyDigit<\/code>:  <\/p>\n<pre><code class=\"python\">    def identifyDigit (self):              # \u0435\u0441\u043b\u0438 \u0446\u0438\u0444\u0440\u0430 \u0443\u0436\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u0430, \u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c         if self.result!='?':             return True                  if not KNN.recognize(self):             # \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0446\u0438\u0444\u0440\u0443, \u0442\u043e \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u043c \u0435\u0451 \u0434\u043b\u044f \u0440\u0443\u0447\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438             self.markDigitForManualRecognize()             # \u0435\u0441\u043b\u0438 \u044d\u0442\u043e 7-\u044f \u0446\u0438\u0444\u0440\u0430, \u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0435\u0451 \u0440\u0430\u0432\u043d\u043e\u0439 &quot;0&quot;, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0446\u0438\u0444\u0440\u0430 \u0438 \u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430\u044f, \u0430 \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d\u0430 \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0435\u0442\u0441\u044f             if self.i==7:                 self.result = 0                 return True             return False         else:             self.use_for_training = True                  return True <\/code><\/pre>\n<p>  \u041c\u0435\u0442\u043e\u0434 <code>identifyDigit<\/code> \u0442\u043e\u0436\u0435 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u0435\u043d, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>KNN.recognize<\/code>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438\u0437 OpenCV:  <\/p>\n<pre><code class=\"python\">    @staticmethod     def recognize(dbdigit):         # \u0442\u0440\u0435\u043d\u0438\u0440\u0443\u0435\u043c, \u0435\u0441\u043b\u0438 \u0435\u0449\u0451 \u043d\u0435 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043d         if not KNN._trained:             KNN.train()                      # \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439, \u0442\u043e \u043d\u0435 \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c         h,w = dbdigit.body.shape         if h!=digit_base_h or w!=digit_base_w:             dbdigit.markDigitForManualRecognize(use_for_training=False)             mylogger.warn(&quot;Digit %d has bad resolution: %d x %d&quot; % (dbdigit.i,h,w))             return False                      # \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432         sample = dbdigit.body.reshape(digit_base_h*digit_base_w).astype(np.float32)         test_data = np.array([sample])                  # \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u043a\u043e\u043b-\u0432\u043e \u0441\u043e\u0441\u0435\u0434\u0435\u0439 - 5         knn = KNN.getKNN()         ret,result,neighbours,dist = knn.find_nearest(test_data,k=5)          # \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b         if result[0,0]!=neighbours[0,0]:             # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u0440\u0430\u0432\u0435\u043d \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0445\u043e\u0436\u0435\u0439 \u0446\u0438\u0444\u0440\u0435             dbdigit.markDigitForManualRecognize()             return False         if neighbours[0,1]!=neighbours[0,0] or neighbours[0,2]!=neighbours[0,0]:             # \u0442\u0440\u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u0446\u0438\u0444\u0440\u044b \u043d\u0435 \u0440\u0430\u0432\u043d\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439             dbdigit.markDigitForManualRecognize()             return False         if dist[0,0]&gt;3000000 or dist[0,1]&gt;3500000 or dist[0,2]&gt;4000000:             # \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0441 \u0442\u0440\u0435\u043c\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0445\u043e\u0436\u0438\u043c\u0438 \u0446\u0438\u0444\u0440\u0430\u043c\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0435             dbdigit.markDigitForManualRecognize()             return False          # \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0442\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0443\u0434\u0430\u0447\u043d\u044b\u043c \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442         dbdigit.result = str(int(ret))         return True <\/code><\/pre>\n<p>  \u0422\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>KNN.train<\/code>:  <\/p>\n<pre><code class=\"python\">    @staticmethod     def getKNN():         # \u043c\u0435\u0442\u043e\u0434 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0435\u0434\u0438\u043d\u0441\u0442\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 cv2.KNearest         if KNN._knn==None:             KNN._knn = cv2.KNearest()         return KNN._knn     @staticmethod     def train():             knn = KNN.getKNN()         # \u0434\u043e\u0441\u0442\u0430\u0435\u043c \u0438\u0437 \u0431\u0430\u0437\u044b \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b \u0434\u043b\u044f \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0438         train_digits = sess.query(Digit).filter(Digit.result!='?').filter_by(use_for_training=True).all()         train_data = []         responses = []         for dbdigit in train_digits:                 h,w = dbdigit.body.shape             # \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0446\u0438\u0444\u0440\u044b \u043f\u043b\u043e\u0445\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430             if h*w != digit_base_h*digit_base_w:                 continue             # \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0432 \u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432             sample = dbdigit.body.reshape(digit_base_h*digit_base_w).astype(np.float32)             train_data.append(sample)             responses.append(int(dbdigit.result))         # \u0442\u0440\u0435\u043d\u0438\u0440\u0443\u0435\u043c KNN         knn.train(np.array(train_data), np.array(responses))         KNN._trained = True <\/code><\/pre>\n<p>  \u041f\u0440\u0438\u0432\u043e\u0436\u0443 \u0432\u044b\u0434\u0435\u0440\u0436\u043a\u0443 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 <code>models.py<\/code>, \u0435\u0441\u043b\u0438 \u0443 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">import datetime from sqlalchemy import Column, Integer, String, Text, Boolean, ForeignKey, DateTime, PickleType from sqlalchemy.orm import relationship from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker  import base64 import cv2 import numpy as np import os import logging import sys  dbengine = create_engine('sqlite:\/\/\/' + os.path.dirname(__file__) + '\/..\/db\/images.db', echo=False)  Session = sessionmaker(bind=dbengine) sess = Session()  Base = declarative_base()  # image class class Image(Base):     __tablename__ = 'images'     id = Column(Integer, primary_key=True)     file_name = Column(String)     img_link = Column(Text)     download_url = Column(Text)     check_time = Column(DateTime)     result = Column(String(8))     digits = relationship(&quot;Digit&quot;, backref=&quot;image&quot;)     img = None # source image     digits_img = None # cropped source image          def __init__(self, file_name):         self.file_name = file_name            self.check_time = datetime.datetime.strptime(file_name, &quot;gaz.%Y-%m-%d.%H.%M.%S.jpg&quot;)         self.result = &quot;&quot;          def __repr__(self):         return &quot;&lt;Image ('%s','%s','%s')&gt;&quot; % (self.id, self.file_name, self.result)      def dbDigit(self, i, digit_img):         digit = sess.query(Digit).filter_by(image_id=self.id).filter_by(i=i).first()         if not digit:             digit = Digit(self, i, digit_img)             sess.add(digit)         else:             digit.body = digit_img         return digit      ## \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u0434 \u043e\u0441\u0442\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442      # digit class class Digit(Base):     __tablename__ = 'digits'     id = Column(Integer, primary_key=True)     image_id = Column(Integer, ForeignKey(&quot;images.id&quot;))     i = Column(Integer)     body = Column(PickleType)     result = Column(String(1))     use_for_training = Column(Boolean)          def __init__(self, image, i, digit_img):         self.image_id = image.id         self.i = i         self.body = digit_img         self.markDigitForManualRecognize()              def __repr__(self):         return &quot;%s&quot; % self.result              def markDigitForManualRecognize (self, use_for_training=False):           self.result = '?'         self.use_for_training = use_for_training                      def getEncodedBody (self):         enc = cv2.imencode('.png',self.body)[1]         b64 = base64.b64encode(enc)         return b64             ## \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u0434 \u043e\u0441\u0442\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442  Base.metadata.create_all(bind=dbengine)  # function to get Image object by file_name and img def getImage(file_name):     image = sess.query(Image).filter_by(file_name=file_name).first()     if not image:         image = Image(file_name)         sess.add(image)         # store image object to base         sess.commit()     image.digits_img = None     return image  def getLastRecognizedImage():     return sess.query(Image).filter(Image.result!='').order_by(Image.check_time.desc()).first()  def dgDigitById(digit_id):     digit = sess.query(Digit).get(digit_id)     return digit <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0438 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 web-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 <a href=\"http:\/\/ru.wikibooks.org\/wiki\/Flask\">Flask<\/a>. \u041f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u043e\u0434 \u044f \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u043a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0442\u043e\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0435\u0433\u043e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0435\u0441\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u0434 \u043d\u0430 <a href=\"https:\/\/github.com\/maleficxp\/gaz-counter\">Github<\/a>.<\/p>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u043c\u0435\u0435\u0442 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043e\u0434\u043d\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0432 \u0432\u0438\u0434\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430 \u0434\u0435\u043d\u044c \u0438\u043b\u0438 \u0437\u0430 \u043d\u0435\u0434\u0435\u043b\u044e:<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/30d\/988\/873\/30d98887310b4152b6b3de8de643d707.png\"\/><br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/9c2\/6f4\/c83\/9c26f4c831d444fa9051893d88954d23.jpg\"\/><\/p>\n<p>  \u0412\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0434\u043b\u044f \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0446\u0438\u0444\u0440. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044f \u0440\u0443\u043a\u0430\u043c\u0438 \u0432\u0431\u0438\u043b \u043f\u0435\u0440\u0432\u044b\u0435 20-30 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439, \u0440\u043e\u0431\u043e\u0442 \u0441\u0442\u0430\u043b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0441\u0430\u043c. \u0418\u0437\u0440\u0435\u0434\u043a\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0446\u0438\u0444\u0440\u0443 \u043d\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044f, \u044d\u0442\u043e \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c \u0446\u0438\u0444\u0435\u0440\u0431\u043b\u0430\u0442\u0430:<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/fe1\/f06\/9a1\/fe1f069a16354e3594fda28038e06939.png\"\/><br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/d2c\/e4c\/dbb\/d2ce4cdbb5d04d8cb86fa0e655665512.png\"\/><br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/816\/0aa\/1fd\/8160aa1fd053490eb9c29a5f0d53d558.png\"\/><\/p>\n<p>  \u0422\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b \u0440\u0443\u043a\u0430\u043c\u0438:<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/52e\/0d2\/4aa\/52e0d24aa915408da2ce4f15dbd47239.png\"\/><br \/>  \u041b\u0438\u0431\u043e \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435, \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043b\u043e\u0445\u043e\u0433\u043e \u043d\u0435 \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u0412 \u043f\u043b\u0430\u043d\u0430\u0445 \u0435\u0449\u0451 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u043b e-mail \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439.<\/p>\n<p>  \u0412\u043e\u0442 \u0438 \u0432\u0441\u0451, \u043e \u0447\u0451\u043c \u0445\u043e\u0442\u0435\u043b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0441\u043f\u0430\u0441\u0438\u0431\u043e, \u0435\u0441\u043b\u0438 \u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430. \t\t\t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/220869\/\"> http:\/\/habrahabr.ru\/post\/220869\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\"> \t\t\t<img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/361\/d8a\/11d\/361d8a11d0c04cbbaa97083fa83954ea.jpg\" align=\"right\"\/> <\/p>\n<h4>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u0422\u0430\u043a \u0441\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u044f \u0436\u0438\u0432\u0443 \u0432 \u043a\u043e\u0442\u0442\u0435\u0434\u0436\u043d\u043e\u043c \u043f\u043e\u0441\u0435\u043b\u043a\u0435, \u0433\u0434\u0435 \u043d\u0435\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0442\u043e\u043f\u043b\u0435\u043d\u0438\u044f, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043a\u0430\u0436\u0434\u044b\u0439 \u0433\u0440\u0435\u0435\u0442 \u0441\u0432\u043e\u044e \u043a\u0432\u0430\u0440\u0442\u0438\u0440\u0443 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0433\u0430\u0437\u043e\u0432\u044b\u0435 \u043a\u043e\u0442\u043b\u044b, \u043c\u0435\u0442\u043e\u0434 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0435\u0448\u0435\u0432\u044b\u0439, \u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u043d\u0430 \u0447\u0442\u043e, \u043d\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u044c. \u0414\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0433\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0442\u043b\u0430 (\u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e) \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0433\u0430\u0437\u0430 \u0432 \u0442\u0440\u0443\u0431\u0435. <\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u0430\u043a \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043d\u0435 \u0432\u0441\u0435 \u043a\u043e\u0442\u043b\u044b, \u043d\u043e \u043d\u0430\u0448 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0435 \u0441 \u043f\u043e\u0434\u0430\u0447\u0435\u0439 \u0433\u0430\u0437\u0430 \u0438 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u0430\u0447\u0430 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u043c\u0430, \u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043d\u0430\u0436\u0430\u043b \u043a\u043d\u043e\u043f\u043a\u0443 \u0438 \u043a\u043e\u0442\u0435\u043b \u0433\u0440\u0435\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0432\u0441\u0435\u0439 \u0441\u0435\u043c\u044c\u0435\u0439 \u043f\u043e\u0435\u0445\u0430\u0442\u044c \u0432 \u043e\u0442\u043f\u0443\u0441\u043a, \u0430 \u043d\u0430 \u0434\u0432\u043e\u0440\u0435 \u0437\u0438\u043c\u0430, \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0442\u0430\u043a\u0430\u044f, \u0447\u0442\u043e\u0431 -20\u00b0C, \u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043b\u0430\u0447\u0435\u0432\u043d\u044b\u043c\u0438. <\/p>\n<p>  \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u2014 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043b\u044e\u0447\u0438 \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a\u0430\u043c\/\u0434\u0440\u0443\u0437\u044c\u044f\u043c\/\u0441\u043e\u0441\u0435\u0434\u044f\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u0438\u0435\u0445\u0430\u0442\u044c \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u0442\u0435\u043b, \u0441\u043b\u0443\u0447\u0438\u0441\u044c \u043a\u0430\u043a\u0430\u044f-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0441\u0442\u044c. \u0425\u043e\u0440\u043e\u0448\u043e, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0441\u043e\u0441\u0435\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0432\u0441\u0451 \u043b\u0438 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u0410 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442? \u0418\u043b\u0438 \u043e\u043d \u0442\u043e\u0436\u0435 \u0440\u0435\u0448\u0438\u0442 \u0443\u0435\u0445\u0430\u0442\u044c \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435? <\/p>\n<p>  \u0418\u0442\u0430\u043a, \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043b\u0430\u0434\u0438\u0442\u044c \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0447\u0442\u043e\u0431 \u044f \u043c\u043e\u0433 \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439 \u043f\u043e\u0435\u0437\u0434\u043a\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0442\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u043b\u0438 \u0433\u0430\u0437, \u0430 \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442 \u0442\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f, \u0442\u043e \u0441\u0440\u043e\u0447\u043d\u043e \u0437\u0432\u043e\u043d\u0438\u0442\u044c \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a\u0430\u043c\/\u0434\u0440\u0443\u0437\u044c\u044f\u043c\/\u0441\u043e\u0441\u0435\u0434\u044f\u043c (\u0438\u043b\u0438 \u043a\u043e\u043c\u0443 \u0442\u0430\u043c \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043a\u043b\u044e\u0447\u0438), \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0435\u0445\u0430\u043b\u0438 \u0438 \u043d\u0430\u0436\u0430\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0443.<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u043e\u043c \u0438 \u0437\u0430\u043c\u0443\u0442\u0438\u043b \u0435\u0449\u0451 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u043e\u0431 \u044d\u0442\u043e\u043c \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 \u0447\u0430\u0441\u0442\u0438 2 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u043e\u043f\u0438\u043a\u0430.  <\/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-220869","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/220869","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=220869"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/220869\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=220869"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=220869"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=220869"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}