{"id":171937,"date":"2013-03-08T09:55:03","date_gmt":"2013-03-08T05:55:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=171937"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=171937","title":{"rendered":"<span class=\"post_title\">\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043d\u0430 PyBrain \u0438 PyQt4 (Python3)<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u0418\u0437\u0443\u0447\u0430\u044f Python3, \u044f \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b (\u043a\u0430\u043a \u0441\u043c\u043e\u0433) \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043a\u0443 PyBrain. \u041e\u0431 \u044d\u0442\u043e\u043c \u044f \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b <a href=\"http:\/\/habrahabr.ru\/post\/148597\/\">\u0437\u0434\u0435\u0441\u044c<\/a>.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/876\/89c\/c9b\/87689cc9b163aa6ef8c555c797f4f398.png\" alt=\"image\"\/><br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u0436\u0435 \u044f \u0445\u043e\u0447\u0443 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u00ab\u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u00bb \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043a\u043e\u0439. \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u043e\u0441\u0442\u0435, \u043f\u0438\u0442\u043e\u043d \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u043b \u0438\u0437\u0443\u0447\u0430\u0442\u044c, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u043a \u0418\u0441\u0442\u0438\u043d\u0443. \u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u043f\u0443\u0442\u044c, \u0438 \u043e\u043d \u0438\u0437\u0432\u0438\u043b\u0438\u0441\u0442.<\/p>\n<p>  \u0417\u0430\u0434\u0430\u0447\u0443 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u0435\u0440\u0435\u0434 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u044c\u044e (\u0418\u041d\u0421) \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u2014 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e: \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u043a\u0432 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u043e\u0433\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430.<\/p>\n<p>  \u0412\u0440\u043e\u0434\u0435 \u0431\u044b \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e \u043d\u0435\u0433\u043e \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 \u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u043d\u0435\u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e: <a href=\"http:\/\/habrahabr.ru\/post\/134998\/\">\u00ab\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438?\u00bb<\/a>, <a href=\"http:\/\/habrahabr.ru\/post\/113245\/\">\u00ab\u041d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438 \u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432\u00bb<\/a> \u0438 <a href=\"http:\/\/habrahabr.ru\/search\/?q=%D0%BF%D0%B5%D1%80%D1%81%D0%B5%D0%BF%D1%82%D1%80%D0%BE%D0%BD\">\u0442.\u0434.<\/a><br \/>  \u041d\u043e \u043c\u043e\u0435\u0439 \u0446\u0435\u043b\u044c\u044e \u0441\u0442\u043e\u0438\u0442 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u043e\u043d\u0430 \u043d\u0430 \u043d\u0435 \u0441\u0430\u043c\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445. \u0422.\u0435. \u0443\u0447\u0438\u043c\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u043d\u0430 \u0441\u043b\u043e\u0436\u043d\u043e\u043c \u0438 \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u043e\u043c. \u0422\u0430\u043a \u043c\u044b \u043d\u0430\u0439\u0434\u0435\u043c \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0433\u0440\u0430\u0431\u043b\u0435\u0439, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043a\u043e\u043f\u043d\u0443\u0442\u044c \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u044f\u0437\u044b\u043a\u0430, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044f\u0441\u044c \u0441 \u00ab\u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442?\u00bb.<\/p>\n<p>  \u041f\u043e\u0434 \u0445\u0430\u0431\u0440\u0430\u043a\u0430\u0442\u043e\u043c \u0432\u0430\u0441 \u0436\u0434\u0451\u0442: \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 <b>PyQt4<\/b>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f <b>argparse<\/b>, \u043d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 <b>PyBrain<\/b>!<br \/>  <a name=\"habracut\"><\/a><\/p>\n<p>  \u041f\u043e\u0447\u0438\u0442\u0430\u0432 \u0441\u0442\u0430\u0442\u044c\u0438 \u0437\u0434\u0435\u0441\u044c \u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e, \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0448\u044c, \u0447\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c\/\u0441\u043e\u0437\u0434\u0430\u0442\u044c\/\u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0418\u041d\u0421, \u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0451 \u043d\u0430\u0431\u043e\u0440 \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0445 \u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0435 \u043f\u043e\u0434\u0437\u0430\u0434\u0430\u0447\u0438:  <\/p>\n<ul>\n<li>\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f;<\/li>\n<li>\u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043e\u0431\u0443\u0447\u0438\u0442\u044c \u0418\u041d\u0421.<\/li>\n<\/ul>\n<p>  \u0414\u0435\u043b\u0430\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u0422\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0435\u0439.<\/p>\n<h4>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/h4>\n<p>  <\/p>\n<h5>\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435<\/h5>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u0442\u043e\u0447\u043d\u0438\u043c \u0437\u0430\u0434\u0430\u043d\u0438\u0435: \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u043a\u0432\u044b \u0431\u0443\u0434\u0435\u0442, \u0441\u043a\u0430\u0436\u0435\u043c, 64 \u043d\u0430 64 \u043f\u0438\u043a\u0441\u0435\u043b\u0430 (\u0438\u0442\u043e\u0433\u043e 4096 \u0432\u0445\u043e\u0434\u0430 \u0443 \u0418\u041d\u0421).<br \/>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u044d\u0442\u0438\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a. \u0418 \u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c, \u0435\u0441\u0442\u0435\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430 python&#8217;\u0435.<br \/>  \u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u044f:  <\/p>\n<ul>\n<li>\u0431\u0443\u043a\u0432\u044b \u043b\u0430\u0442\u0438\u043d\u0438\u0446\u044b \u0432 \u043d\u0438\u0436\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435<\/li>\n<li>\u0431\u0443\u043a\u0432\u044b \u043b\u0430\u0442\u0438\u043d\u0438\u0446\u044b \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435<\/li>\n<li>\u0431\u0443\u043a\u0432\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e)<\/li>\n<li>\u043d\u0430\u0447\u0435\u0440\u0442\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c (\u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u0448\u0440\u0438\u0444\u0442\u044b)<\/li>\n<\/ul>\n<p>  \u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:  <\/p>\n<ul>\n<li>\u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0443\u043a\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, abc \u0438\u043b\u0438 f-x(\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d)<\/li>\n<li>\u0440\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 40<\/li>\n<li>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0448\u0440\u0438\u0444\u0442<\/li>\n<li>\u043f\u0443\u0442\u044c \u043a \u043f\u0430\u043f\u043a\u0435, \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/li>\n<\/ul>\n<h5>\u041f\u043e\u0438\u0441\u043a \u043c\u0435\u0442\u043e\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438<\/h5>\n<p>  \u0414\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432 python&#8217;\u0435. Google \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0433 \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e. \u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0431\u043e Python Imaging Library \u2014 \u0441\u043e\u043a\u0440\u0430\u0449\u0451\u043d\u043d\u043e <a href=\"http:\/\/ru.wikipedia.org\/wiki\/Python_Imaging_Library\">PIL<\/a>, \u043b\u0438\u0431\u043e <a href=\"http:\/\/www.pygame.org\/docs\/ref\/font.html\">PyGame<\/a>.<br \/>  \u0422\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0442 \u043d\u0435\u0437\u0430\u0434\u0430\u0447\u0430. \u041f\u0435\u0440\u0432\u044b\u0439 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f python2, \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u043b\u0438\u0437 \u0431\u044b\u043b \u0432 2009 \u0433\u043e\u0434\u0443. \u0425\u043e\u0442\u044f \u043d\u0430 github.com \u0435\u0441\u0442\u044c \u0435\u0433\u043e <a href=\"https:\/\/github.com\/gpolo\/pil-py3k\">\u0444\u043e\u0440\u043a \u043f\u043e\u0434 \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u0438\u0442\u043e\u043d<\/a>. \u041f\u043e\u0447\u0438\u0442\u0430\u0432 \u043c\u0430\u043d\u0443\u0430\u043b \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e.<br \/>  PyGame \u2014 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439, \u0434\u0430\u0436\u0435 \u043c\u0430\u043d\u0443\u0430\u043b \u0435\u0433\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u043b \u043f\u043e\u0434\u043e\u043b\u044c\u0448\u0435. \u041f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435, \u0430 \u0441 \u043d\u0430\u0441\u043a\u043e\u043a\u0430 \u0447\u0442\u043e-\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u0414\u0430 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f \u0434\u043b\u044f \u0437\u0430\u0431\u0438\u0432\u0430\u043d\u0438\u044f \u0433\u0432\u043e\u0437\u0434\u0435\u0439 \u2014 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u041d\u0435 \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u044d\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430.<br \/>  \u041f\u043e\u0433\u0443\u0433\u043b\u0438\u043b \u0435\u0449\u0451. \u0415\u0441\u0442\u044c \u0435\u0449\u0451 pythonmagick, \u043d\u043e \u043e\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f UNIX-like \u0441\u0438\u0441\u0442\u0435\u043c. \u0418 \u0442\u0443\u0442 \u043c\u0435\u043d\u044f \u043e\u0441\u0435\u043d\u0438\u043b\u043e! <b><a href=\"http:\/\/www.riverbankcomputing.com\/static\/Docs\/PyQt4\/html\/index.html\">PyQt4<\/a><\/b>!<br \/>  C Qt4 \u044f \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0437\u043d\u0430\u043a\u043e\u043c, \u043d\u0430 \u0421++\/Qt \u043c\u043d\u043e\u0433\u043e \u043f\u0438\u0441\u0430\u043b. \u0414\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043a\u0430 \u044d\u0442\u0430 \u2014 \u043a\u0430\u043a \u0448\u0432\u0435\u0439\u0446\u0430\u0440\u0441\u043a\u0438\u0439 \u043d\u043e\u0436. \u0425\u043e\u0447\u0435\u0448\u044c \u2014 \u0431\u0443\u0442\u044b\u043b\u043a\u0443 \u043f\u0438\u0432\u0430 \u043e\u0442\u043a\u0440\u043e\u0435\u0442, \u0445\u043e\u0447\u0435\u0448\u044c \u2014 \u0438\u0437 \u043a\u0443\u0441\u043a\u0430 \u0434\u0435\u0440\u0435\u0432\u044f\u0448\u043a\u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u0443\u044e \u0444\u0438\u0433\u0443\u0440\u043a\u0443 \u0432\u044b\u0440\u0435\u0436\u0435\u0442. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u0443\u043c\u0435\u0442\u044c \u043d\u043e\u0436\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u0430 Qt \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f.<br \/>  \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0445\u0430\u0431\u0440\u0443 \u0434\u0430\u043b \u043d\u0430\u043c \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e <a href=\"http:\/\/habrahabr.ru\/search\/?q=pyqt\">PyQt<\/a>. \u041d\u0443 \u0434\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u2014 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f.<\/p>\n<h5>\u041f\u0438\u0448\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h5>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u2014 \u044d\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c PyQt4. \u0421 \u044d\u0442\u0438\u043c, \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u2014 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u043c \u043d\u0435 \u0431\u0443\u0434\u0443. \u041f\u0435\u0440\u0435\u0439\u0434\u0443 \u0441\u0440\u0430\u0437\u0443 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e.<br \/>  \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0438\u043c\u043f\u043e\u0440\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0438 \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u00ab\u0440\u044b\u0431\u0443\u00bb \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 PyQt4.  <\/p>\n<pre><code class=\"python\">#!\/usr\/bin\/env python3  import sys from PyQt4.QtGui import * from PyQt4.Qt import *  def main(): \tapp = QApplication([]) \t# some code here  if __name__ == &quot;__main__&quot;:     sys.exit(main()) <\/code><\/pre>\n<p>  \u0421\u0442\u0440\u043e\u043a\u0430 \u0441 <code>app = QApplication([])<\/code> \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u0430. \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u0435\u0451. \u0423 \u043c\u0435\u043d\u044f \u0431\u0435\u0437 \u043d\u0435\u0451 python \u0432\u044b\u043b\u0435\u0442\u0430\u0435\u0442 \u0441 SIGFAULT&#8217;\u043e\u043c \u0438 \u043d\u0435 \u0432\u044b\u0434\u0430\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u0438 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0439\u043c\u0435\u043c\u0441\u044f \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u00ab\u0440\u044b\u0431\u044b\u00bb \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e save, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.  <\/p>\n<pre><code class=\"python\">def save(png_file, letter = 'A', font = &quot;Arial&quot;, size = 40, align = Qt.AlignCenter): \timg = QImage(64,64, QImage.Format_RGB32) \timg.fill(Qt.white) \tp = QPainter(img) \tp.setPen(Qt.black) \tp.setFont(QFont(font,size)) \tp.drawText(img.rect(), align, letter) \tp.end() \timg.save(png_file) <\/code><\/pre>\n<p>  \u0421 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u2014 \u0432\u0441\u0451 \u044f\u0441\u043d\u043e. \u0410 \u0432\u043e\u0442 \u043f\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u043f\u043e\u044f\u0441\u043d\u044e.<br \/>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 QImage, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\/\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0443 \u0441\u0435\u0431\u044f \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435. \u041e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u043d\u044b\u0439 \u0438 \u0433\u0438\u0431\u043a\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430\u043a\u0440\u0430\u0441\u043a\u0430 \u0431\u0435\u043b\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u0432\u0441\u0435\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 64 \u043d\u0430 64 \u043f\u0438\u043a\u0441\u0435\u043b\u0430.<br \/>  \u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 QPainter, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430 img. \u042d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u043b\u0438, \u0435\u0441\u043b\u0438 \u0442\u043e\u0447\u043d\u0435\u0435, \u043d\u0430 \u043a\u0430\u043d\u0432\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0442 QPaintDevice. \u0410 \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u0430\u043a\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c \u0438 \u044f\u0432\u043b\u0435\u0442\u0441\u044f QImage.<br \/>  \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0447\u0435\u0440\u043d\u043e\u0435 \u043f\u0435\u0440\u043e, \u0448\u0440\u0438\u0444\u0442 \u0438 \u0440\u0438\u0441\u0443\u0435\u043c \u0431\u0443\u043a\u043e\u0432\u043a\u0443. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 40 (\u0447\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0451 \u043f\u043e\u043b\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f) \u0438 \u0441 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443.<br \/>  \u041d\u0443 \u0430 \u0437\u0430\u0442\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0444\u0430\u0439\u043b. \u0412\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e.<\/p>\n<h5>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0448\u0442\u0440\u0438\u0445\u0438<\/h5>\n<p>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043c\u0430\u043b\u043e\u0435. \u0420\u0430\u0437\u0431\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.<br \/>  \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u043b\u043e\u0431 (\u0441 \u043a\u0443\u0447\u0435\u0439 if, \u043b\u0438\u0431\u043e \u0436\u0451\u0441\u0442\u043a\u043e \u0437\u0430\u0434\u0430\u0432 \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445), \u0430 \u043c\u043e\u0436\u043d\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u0441\u044f\u043a\u0438\u0445 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0442\u0438\u043f\u0430 getopt \u0438\u043b\u0438 <a href=\"http:\/\/docs.python.org\/dev\/library\/argparse.html\">argparse<\/a>. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439, \u0434\u0443\u043c\u0430\u044e, \u043c\u044b \u0438 \u0438\u0437\u0443\u0447\u0438\u043c.<br \/>  \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430\u0448\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: \u0448\u0440\u0438\u0444\u0442, \u0440\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 \u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0441\u0432\u0430\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438.<br \/>  \u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043a\u0430 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0434\u043e \u043b\u0443\u0447\u0448\u0438\u0445 \u0432\u0440\u0435\u043c\u0435\u043d.<br \/>  \u0427\u0442\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u043d\u0443\u0430\u043b\u0430 \u043a\u0430\u043a \u0431\u044b \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u043c, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430:  <\/p>\n<pre><code class=\"python\">\tp = argparse.ArgumentParser(description='Symbols image generator') \tp.add_argument('-f','--font', default='Arial', help='Font name, default=Arial') \tp.add_argument('-s','--size', type=int, default=40, help='Font size, default=40') \tp.add_argument('-d','--dir', default='.', help='Output directory, default=current') \tp.add_argument('letters', help='Array of letters(abc) or range (a-z)') \targs = p.parse_args() <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043e\u0431\u043e \u0432\u0441\u0451\u043c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u044c <b>argparse<\/b>. \u0427\u0442\u043e \u043c\u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c, \u0442\u0430\u043a \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u043a\u0430\u0437 <i>usage<\/i> \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c. \u041f\u0440\u0438 \u0447\u0451\u043c <b>argparse<\/b> \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 (-h) \u0432 \u043d\u0430\u0448 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0430\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043b. \u0417\u0430 \u0447\u0442\u043e \u0435\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e. \u041a\u0430\u043a \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438 \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442, \u044f \u043e\u0447\u0435\u043d\u044c \u043d\u0435 \u043b\u044e\u0431\u043b\u044e \u043f\u0438\u0441\u0430\u0442\u044c \u0445\u0435\u043b\u043f\u044b \u0438 \u043f\u0440\u043e\u0447\u0443\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e. \u042d\u0442\u043e \u043e\u0447\u043a\u043e \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 <b>argparse<\/b>. \u0411\u0443\u0434\u0443 \u0447\u0430\u0449\u0435 \u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<br \/>  \u0421\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439:  <\/p>\n<pre> usage: gen_pic.py [-h] [-f FONT] [-s SIZE] [-d DIR] letters  Symbols image generator  positional arguments:   letters               Array of letters(abc) or range (a-z)  optional arguments:   -h, --help            show this help message and exit   -f FONT, --font FONT  Font name, default=Arial   -s SIZE, --size SIZE  Font size, default=40   -d DIR, --dir DIR     Output directory, default=current <\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0443\u0442\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0431\u0443\u043a\u0432. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438. \u041e\u043d\u0438 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u043d\u0443\u0436\u043d\u044b \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043d\u043e \u043d\u0430\u0434\u043e \u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043f\u043e\u0441\u043e\u043b\u0438\u0434\u043d\u0435\u0439 \u0441\u0434\u0435\u043b\u0430\u0442\u044c! \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u0438 <b>os<\/b>, <b>os.path<\/b> \u0438 <b>re<\/b>.  <\/p>\n<pre><code class=\"python\">\tif os.path.exists(args.dir): \t\tos.mkdir(args.dir) \tif re.match('\\w-\\w', args.letters): \t\tbegin = args.letters[0] \t\tend = args.letters[2] \t\tif (ord(end)-ord(begin))&gt;26: \t\t\tprint(&quot;Error using letters. Only A-Z or a-z available, not A-z.&quot;) \t\t\tp.print_help() \t\t\treturn \t\tletters = [chr(a) for a in range(ord(begin),ord(end)+1)] \telse: \t\tletters = args.letters <\/code><\/pre>\n<p>  \u041d\u0443 \u0432\u043e\u0442. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0446\u0438\u043a\u043b \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432\u0441\u0435 \u0431\u0443\u043a\u043e\u0432\u043a\u0438 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043d\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0442\u0440\u0438\u0445 \u2014 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0431\u0432\u044f\u0437\u043e\u0447\u043a\u0443 \u043f\u043e\u0432\u0435\u0440\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 save() \u0438 \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u0435\u0451 saveWrap(). \u041a\u0430\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e, \u043d\u0435 \u043f\u0440\u0430\u0432\u0434\u0430 \u043b\u0438? \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0432\u0435\u0440\u0445\u0435\u0441\u0442\u0435\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e, \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0438\u043c\u044f \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u0430 \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0432\u0430\u0435\u043c\u044b\u0445 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e save() \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/p>\n<p>  \u0418\u0442\u043e\u0433\u043e \u0432\u0435\u0441\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0437\u0430\u043d\u044f\u043b \u0443 \u043d\u0430\u0441 \u0432\u0441\u0435\u0433\u043e 55 \u0441\u0442\u0440\u043e\u043a (\u043a\u043e\u0434 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438). \u042d\u0442\u043e \u043b\u0438 \u043d\u0435 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e?<br \/>  \u041f\u0440\u0438\u0447\u0435\u043c \u044f \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u0433\u0443\u0440\u0443 \u043f\u0438\u0442\u043e\u043d\u0430 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043d\u0430\u0439\u0434\u0443\u0442 \u0435\u0449\u0451 \u043a\u0443\u0447\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438. \u041d\u043e \u0437\u0430\u0447\u0435\u043c? \u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043a\u043e\u0434 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442 \u0438 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u0435\u043d. \u041f\u0440\u044f\u043c \u0433\u043b\u0430\u0437 \u0440\u0430\u0434\u0443\u0435\u0442\u0441\u044f.<\/p>\n<h4>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0418\u041d\u0421<\/h4>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0447\u043d\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430\u0434 \u0418\u041d\u0421. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/148407\/\">PyBrain<\/a>.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e PyBrain \u0438 Python3<\/b><\/p>\n<div class=\"spoiler_text\">\u0425\u043e\u0447\u0443 \u0443\u0442\u043e\u0447\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 Python3 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043f\u043e\u0440\u0442\u043e\u043c PyBrain, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/github.com\/icoz\/pybrain\">\u0437\u0434\u0435\u0441\u044c<\/a>. \u041f\u043e\u043a\u0430 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430\u0448\u0451\u043b \u043f\u0430\u0440\u0443 \u043a\u043e\u0441\u044f\u043a\u043e\u0432 \u0432 \u0441\u0430\u043c\u043e\u043c \u043f\u043e\u0440\u0442\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<br \/>  \u041e\u0447\u0435\u043d\u044c \u043f\u043e\u0440\u0430\u0434\u043e\u0432\u0430\u043b \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0432 \u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0433\u0434\u0435 \u0432\u044b\u0432\u0430\u043b\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430:  <\/p>\n<pre> # FIXME: the next line keeps arac from producing NaNs. I don't # know why that is, but somehow the __str__ method of the # ndarray class fixes something, # str(outerr) <\/pre>\n<p>  \u0412\u0438\u0434\u0438\u043c\u043e \u044d\u0442\u043e\u0442 \u0445\u0430\u043a \u0432 Python3 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b.  <\/div>\n<\/div>\n<p>  \u041d\u0430 \u0432\u0445\u043e\u0434 \u0443 \u043d\u0430\u0441 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 (\u0432 \u0441\u0435\u0440\u044b\u0445 \u0442\u043e\u043d\u0430\u0445), \u0437\u0430\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u044f\u0440\u043a\u043e\u0441\u0442\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u043e\u0442 0 \u0434\u043e 1.<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0418\u041d\u0421, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438 \u0431\u0435\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. \u041e\u0431\u0443\u0447\u0438\u043c \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043e\u0434\u043d\u0438\u043c \u0448\u0440\u0438\u0444\u0442\u043e\u043c \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0441\u0435\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0435\u0442 \u044d\u0442\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0448\u0440\u0438\u0444\u0442\u043e\u043c (\u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440). \u0412\u043e\u0437\u044c\u043c\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0438\u043c\u0432\u043e\u043b\u044b <em>A, B, C, D, Z<\/em>.<\/p>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0441 \u0441\u0435\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0431\u0443\u043a\u043e\u0432\u043a\u0430\u043c, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 <b>64 \u043d\u0430 64 \u043f\u0438\u043a\u0441\u0435\u043b\u0430<\/b>, \u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0445\u043e\u0434\u043e\u0432 \u043d\u0430\u0448\u0435\u0439 \u0441\u0435\u0442\u0438 <b>\u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e 4096<\/b>.<br \/>  \u0421\u0430\u043c\u0438\u0445 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0431\u0443\u043a\u0432 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e 5, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438 <b>\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0445\u043e\u0434\u043e\u0432 \u0438\u0437 \u0441\u0435\u0442\u0438 \u0440\u0430\u0432\u043d\u043e \u043f\u044f\u0442\u0438<\/b>.<br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0442\u0430\u0451\u0442 \u0432\u043e\u043f\u0440\u043e\u0441: \u043d\u0443\u0436\u043d\u044b \u043b\u0438 \u043d\u0430\u043c \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u0441\u043b\u043e\u0438? \u0418 \u0435\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e?<br \/>  \u042f \u0440\u0435\u0448\u0438\u043b \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0441\u043b\u043e\u0451\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441\u0435\u0442\u0438 \u0434\u0435\u043b\u0430\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432:  <\/p>\n<pre><code class=\"python\">net = buildNetwork(64 * 64, 5) <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432 64 \u043d\u0435\u0439\u0440\u043e\u043d\u0430 \u0438 \u0442\u0438\u043f\u043e\u043c \u0441\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u044f SoftmaxLayer \u043d\u0430\u0434\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432:  <\/p>\n<pre><code class=\"python\">net = buildNetwork(64 * 64, 8 * 8, 5, hiddenclass=SoftmaxLayer) <\/code><\/pre>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0432 <a href=\"http:\/\/habrahabr.ru\/post\/148407\/\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u0440\u043e \u0434\u0430\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u0434\u0430\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435. \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044e \u044d\u0442\u043e\u0442 \u043d\u0435\u0434\u043e\u0447\u0451\u0442.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041b\u0438\u043a\u0431\u0435\u0437 \u043f\u0440\u043e buildNetwork()<\/b><\/p>\n<div class=\"spoiler_text\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f buildNetwork() \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f FeedForward-\u0441\u0435\u0442\u0438 \u0438 \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0444\u043e\u0440\u043c\u0430\u0442:  <\/p>\n<pre><code class=\"python\">pybrain.tools.shortcuts.buildNetwork(*layers, **options) <\/code><\/pre>\n<p>  layers \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043b\u0438 \u043a\u043e\u0440\u0442\u0435\u0436 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u043a\u043e\u0442\u043e\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u0439\u0440\u043e\u043d\u043e\u0432 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043b\u043e\u0435<br \/>  \u041e\u043f\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 &quot;<b>name = val<\/b>&quot; \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0432 \u0441\u0435\u0431\u044f:<br \/>  <b>bias<\/b> (default = True) \u2014 \u043d\u0430\u0447\u0438\u043b\u0438\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0441\u043b\u043e\u044f\u0445<br \/>  <b>outputbias<\/b> (default = True) \u2014 \u043d\u0430\u0447\u0438\u043b\u0438\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u043c \u0441\u043b\u043e\u0435<br \/>  <b>hiddenclass<\/b> \u0438 <b>outclass<\/b> \u2014 \u0437\u0430\u0434\u0430\u044e\u0442 \u0442\u0438\u043f\u044b \u0434\u043b\u044f \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0441\u043b\u043e\u0451\u0432 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0414\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430 NeuronLayer. \u041f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u2014 \u044d\u0442\u043e GaussianLayer, LinearLayer, LSTMLayer, MDLSTMLayer, SigmoidLayer, SoftmaxLayer, TanhLayer.<br \/>  \u0415\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0444\u043b\u0430\u0433 <b>recurrent<\/b>, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0441\u0435\u0442\u044c RecurrentNetwork, \u0438\u043d\u0430\u0447\u0435 FeedForwardNetwork.<br \/>  \u0415\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0444\u043b\u0430\u0433 <b>fast<\/b>, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u0441\u0435\u0442\u0438 <b>arac<\/b>, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0436\u0435 \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f PyBrain \u0441\u0435\u0442\u0438 \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435.  <\/div>\n<\/div>\n<p>  \u0422\u0435, \u043a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0432\/\u0440\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0432 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <em>buildNetwork()<\/em> \u0432 \u0444\u0430\u0439\u043b\u0435 <b><b>brain.py<\/b><\/b>.<\/p>\n<h4>\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0418\u041d\u0421<\/h4>\n<p>  \u0418\u0442\u0430\u043a, \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u0437\u044f\u0442\u044c\u0441\u044f \u0437\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435. \u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043a\u0438 <b>gen_pic.py<\/b> \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u0431\u0443\u043a\u0432\u044b.<br \/>  \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u044d\u0442\u043e \u0442\u0430\u043a:  <\/p>\n<pre> .\/gen_pic.py -d .\/learn -f FreeMono ABCDZ .\/gen_pic.py -d .\/learn -f Times ABCDZ .\/gen_pic.py -d .\/learn -f Arial ABCDZ .\/gen_pic.py -d .\/test -f DroidMono ABCDZ .\/gen_pic.py -d .\/test -f Sans ABCDZ <\/pre>\n<p>  \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0437 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 RGB-\u0446\u0432\u0435\u0442\u0430 \u0432 \u0442\u043e\u043d\u0430 \u0441\u0435\u0440\u043e\u0433\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0437\u0430 \u043a\u0430\u0434\u0440\u043e\u043c. \u0422\u0430\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e. \u041a\u043e\u043c\u0443 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0436\u0443\u0442\u043a\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043a\u0430\u043a \u0436\u0435 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u2014 \u043c\u043e\u0436\u0435\u0442 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u0430\u043c \u0432 \u0444\u0430\u0439\u043b\u0435 <b>brain.py<\/b> \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <em>get_data()<\/em>.<\/p>\n<p>  \u0421\u0430\u043c\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <b>init_brain()<\/b>. \u0412 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043f\u043e\u0445 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0442\u0438\u043f Trainer&#8217;a, \u0430 \u0441\u0430\u043c\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0443\u0436\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438.<br \/>  \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a (\u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u043a \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438):  <\/p>\n<pre><code class=\"python\">def init_brain(learn_data, epochs, TrainerClass=BackpropTrainer): \t...     net = buildNetwork(64 * 64, 5, hiddenclass=LinearLayer)     # fill dataset with learn data     ds = ClassificationDataSet(4096, nb_classes=5, class_labels=['A', 'B', 'C', 'D', 'Z'])     for inp, out in learn_data:         ds.appendLinked(inp, [trans[out]])     ...     ds._convertToOneOfMany(bounds=[0, 1])     ...     trainer = TrainerClass(net, verbose=True)     trainer.setData(ds)     trainer.trainUntilConvergence(maxEpochs=epochs)     return net <\/code><\/pre>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e \u043f\u043e\u044f\u0441\u043d\u044e, \u0447\u0442\u043e \u0433\u0434\u0435.<br \/>  ClassificationDataSet \u2014 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0438\u0434 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u0415\u043c\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u043e\u0433\u043e \u043d\u043e\u043c\u0435\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 (trans[out]) \u0434\u043b\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0438.<br \/>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f _convertToOneOfMany() \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u044d\u0442\u0438 \u0441\u0430\u043c\u044b\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f.<br \/>  \u0414\u0430\u043b\u0435\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u00ab\u0443\u0447\u0438\u0442\u0435\u043b\u044e\u00bb \u0441\u0435\u0442\u044c \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 (\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f).<br \/>  \u0414\u0430\u0451\u043c \u0443\u0447\u0438\u0442\u0435\u043b\u044e \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0441 \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0435\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u043e\u0439 (setData()) \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 (trainUntilConvergence()), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0443\u0447\u0430\u0442\u044c \u043b\u0438\u0431\u043e \u043f\u043e\u043a\u0430 \u0441\u0435\u0442\u044c \u043d\u0435 \u0441\u043e\u0439\u0434\u0451\u0442\u0441\u044f, \u043b\u0438\u0431\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043f\u043e\u0445 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f.<\/p>\n<h4>\u0412\u044b\u0432\u043e\u0434\u044b<\/h4>\n<p>  \u0418\u0442\u0430\u043a, \u0446\u0435\u043b\u044c \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u0430.<br \/>  \u041a\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440, \u043f\u0440\u0430\u0432\u0434\u0430, \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0441\u0435\u0442\u044c, \u043d\u0430\u043c\u0438 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f, \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0435\u0451 \u0432\u0438\u0434\u0435. \u041d\u043e \u0437\u0430\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u043f\u0430\u0445\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u0434\u043b\u044f \u0412\u0430\u0441, \u0434\u043e\u0440\u043e\u0433\u043e\u0439 %username%! \u0415\u0441\u0442\u044c \u0447\u0435\u0433\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u0433\u0434\u0435 \u043f\u043e\u0434\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c\u2026<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044e \u0435\u0449\u0451, \u0447\u0442\u043e \u044f \u043f\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0434\u0432\u0430 Trainer&#8217;a \u2014 <b>BackpropTrainer<\/b> \u0438 <b>RPropMinusTrainer<\/b>.<br \/>  \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438 (BackpropTrainer) \u043f\u043b\u043e\u0445\u0430\u044f, \u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u0418\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<br \/>  \u041f\u043e\u043c\u0435\u043d\u044f\u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 <b>brain.py<\/b> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 <b>RPropMinusTrainer<\/b>. \u041e\u043d \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0448\u0443\u0441\u0442\u0440\u0435\u0435 \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<br \/>  \u0414\u043e\u0431\u0430\u0432\u043b\u044e \u0435\u0449\u0451, \u0447\u0442\u043e <b>\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f 100% \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f<\/b> \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0435\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043c\u043d\u0435 <b>\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c<\/b>, \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0451\u0432 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u0439\u0440\u043e\u043d\u043e\u0432 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u2014 \u043d\u0435 \u0437\u043d\u0430\u044e. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043c\u044b\u043b\u0441\u0430 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043e\u0441\u043e\u0431\u043e \u043d\u0435\u0442\u0443, \u043d\u043e \u0434\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f Python3 \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u043f\u043b\u043e\u0445\u0430: \u0437\u0434\u0435\u0441\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438, \u0438 \u0441\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044f\u043c\u0438, \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 (\u043c\u043e\u0434\u0443\u043b\u0438 os \u0438 os.path).<\/p>\n<p>  \u0414\u043b\u044f \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u043a\u0430\u0436\u0443 \u043b\u0438\u0448\u044c \u043e\u0434\u043d\u043e \u2014 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 <b>brain.py<\/b> \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0435\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0443\u043a\u0432 \u0438\u043b\u0438 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435. \u0414\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0435.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u2014 \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043b\u0438\u0447\u043a\u0443, \u043d\u043e \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0432\u044b \u0438 \u0441\u0430\u043c\u0438 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u0442\u0435\u0441\u044c \u0447\u0442\u043e, \u0433\u0434\u0435 \u0438 \u043a\u0430\u043a.<br \/>  \u0411\u0443\u0434\u0435\u0442 \u0432\u0440\u0435\u043c\u044f, \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0443 \u043a\u043e\u0434 \u043f\u043e\u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u0435\u0435 \u0438 \u0441\u0434\u0435\u043b\u0430\u044e \u0435\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u043c, \u0432\u0432\u0435\u0434\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u044b \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0437\u044f\u0442\u044c \u0432 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u0430\u0445 \u043d\u0438\u0436\u0435.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0444\u0430\u0439\u043b\u0430 gen_pic.py<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">#!\/usr\/bin\/env python3  import sys import argparse import re import os import os.path from PyQt4.QtGui import * from PyQt4.Qt import *   def saveWrap(dir='.', letter='A', font=&quot;Arial&quot;, size=40, align=Qt.AlignCenter):     png_file = dir + &quot;\/&quot; + font + &quot;_&quot; + letter + &quot;_&quot; + str(size) + &quot;.png&quot;     save(png_file, letter, font, size, align)   def save(png_file, letter='A', font=&quot;Arial&quot;, size=40, align=Qt.AlignCenter):     img = QImage(64, 64, QImage.Format_RGB32)     img.fill(Qt.white)     p = QPainter(img)     p.setPen(Qt.black)     p.setFont(QFont(font, size))     p.drawText(img.rect(), align, letter)     p.end()     img.save(png_file)   def main():     app = QApplication([])     p = argparse.ArgumentParser(description='Symbols image generator')     p.add_argument('-f', '--font', default='Arial', help='Font name, default=Arial')     p.add_argument('-s', '--size', type=int, default=40, help='Font size, default=40')     p.add_argument('-d', '--dir', default='.', help='Output directory, default=current')     p.add_argument('letters', help='Array of letters(abc) or range (a-z)')     args = p.parse_args()     path = os.path.abspath(args.dir)     if not os.path.exists(path):         print(&quot;Directory not exists, created!&quot;)         os.makedirs(path)     if re.match('\\w-\\w', args.letters):         begin = args.letters[0]         end = args.letters[2]         if (ord(end) - ord(begin)) &gt; 26:             print(&quot;Error using letters. Only A-Z or a-z available, not A-z.&quot;)             p.print_help()             return         letters = [chr(a) for a in range(ord(begin), ord(end) + 1)]     else:         letters = args.letters     for lett in letters:         saveWrap(path, lett, args.font, args.size)     return 0  if __name__ == &quot;__main__&quot;:     sys.exit(main()) <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u0444\u0430\u0439\u043b\u0430 brain.py<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">#!\/usr\/bin\/env python3  import sys import argparse import re import os import os.path from PyQt4.QtGui import * from PyQt4.Qt import * from pybrain.tools.shortcuts import buildNetwork from pybrain.datasets import ClassificationDataSet from pybrain.structure.modules import SigmoidLayer, SoftmaxLayer, LinearLayer from pybrain.supervised.trainers import BackpropTrainer from pybrain.supervised.trainers import RPropMinusTrainer   def init_brain(learn_data, epochs, TrainerClass=BackpropTrainer):     if learn_data is None:         return None     print (&quot;Building network&quot;)     # net = buildNetwork(64 * 64, 8 * 8, 5, hiddenclass=TanhLayer)     # net = buildNetwork(64 * 64, 32 * 32, 8 * 8, 5)     net = buildNetwork(64 * 64, 5, hiddenclass=LinearLayer)     # fill dataset with learn data     trans = {         'A': 0, 'B': 1, 'C': 2, 'D': 3, 'Z': 4     }     ds = ClassificationDataSet(4096, nb_classes=5, class_labels=['A', 'B', 'C', 'D', 'Z'])     for inp, out in learn_data:         ds.appendLinked(inp, [trans[out]])     ds.calculateStatistics()     print (&quot;\\tNumber of classes in dataset = {0}&quot;.format(ds.nClasses))     print (&quot;\\tOutput in dataset is &quot;, ds.getField('target').transpose())     ds._convertToOneOfMany(bounds=[0, 1])     print (&quot;\\tBut after convert output in dataset is \\n&quot;, ds.getField('target'))     trainer = TrainerClass(net, verbose=True)     trainer.setData(ds)     print(&quot;\\tEverything is ready for learning.\\nPlease wait, training in progress...&quot;)     trainer.trainUntilConvergence(maxEpochs=epochs)     print(&quot;\\tOk. We have trained our network.&quot;)     return net   def loadData(dir_name):     list_dir = os.listdir(dir_name)     list_dir.sort()     list_for_return = []     print (&quot;Loading data...&quot;)     for filename in list_dir:         out = [None, None]         print(&quot;Working at {0}&quot;.format(dir_name + filename))         print(&quot;\\tTrying get letter name.&quot;)         lett = re.search(&quot;\\w+_(\\w)_\\d+\\.png&quot;, dir_name + filename)         if lett is None:             print (&quot;\\tFilename not matches pattern.&quot;)             continue         else:             print(&quot;\\tFilename matches! Letter is '{0}'. Appending...&quot;.format(lett.group(1)))             out[1] = lett.group(1)         print(&quot;\\tTrying get letter picture.&quot;)         out[0] = get_data(dir_name + filename)         print(&quot;\\tChecking data size.&quot;)         if len(out[0]) == 64 * 64:             print(&quot;\\tSize is ok.&quot;)             list_for_return.append(out)             print(&quot;\\tInput data appended. All done!&quot;)         else:             print(&quot;\\tData size is wrong. Skipping...&quot;)     return list_for_return   def get_data(png_file):     img = QImage(64, 64, QImage.Format_RGB32)     data = []     if img.load(png_file):         for x in range(64):             for y in range(64):                 data.append(qGray(img.pixel(x, y)) \/ 255.0)     else:         print (&quot;img.load({0}) failed!&quot;.format(png_file))     return data   def work_brain(net, inputs):     rez = net.activate(inputs)     idx = 0     data = rez[0]     for i in range(1, len(rez)):         if rez[i] &gt; data:             idx = i             data = rez[i]     return (idx, data, rez)   def test_brain(net, test_data):     for data, right_out in test_data:         out, rez, output = work_brain(net, data)         print (&quot;For '{0}' our net said that it is '{1}'. Raw = {2}&quot;.format(right_out, &quot;ABCDZ&quot;[out], output))     pass   def main():     app = QApplication([])     p = argparse.ArgumentParser(description='PyBrain example')     p.add_argument('-l', '--learn-data-dir', default=&quot;.\/learn&quot;, help=&quot;Path to dir, containing learn data&quot;)     p.add_argument('-t', '--test-data-dir', default=&quot;.\/test&quot;, help=&quot;Path to dir, containing test data&quot;)     p.add_argument('-e', '--epochs', default=&quot;1000&quot;, help=&quot;Number of epochs for teach, use 0 for learning until convergence&quot;)     args = p.parse_args()     learn_path = os.path.abspath(args.learn_data_dir) + &quot;\/&quot;     test_path = os.path.abspath(args.test_data_dir) + &quot;\/&quot;     if not os.path.exists(learn_path):         print(&quot;Error: Learn directory not exists!&quot;)         sys.exit(1)     if not os.path.exists(test_path):         print(&quot;Error: Test directory not exists!&quot;)         sys.exit(1)     learn_data = loadData(learn_path)     test_data = loadData(test_path)     # net = init_brain(learn_data, int(args.epochs), TrainerClass=RPropMinusTrainer)     net = init_brain(learn_data, int(args.epochs), TrainerClass=BackpropTrainer)     print (&quot;Now we get working network. Let's try to use it on learn_data.&quot;)     print(&quot;Here comes a tests on learn-data!&quot;)     test_brain(net, learn_data)     print(&quot;Here comes a tests on test-data!&quot;)     test_brain(net, test_data)     return 0  if __name__ == &quot;__main__&quot;:     sys.exit(main()) <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 PyBrain \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0441\u0447\u0438\u0442\u0430\u044e \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043d\u044b\u043c. \u0414\u043e \u043d\u043e\u0432\u044b\u0445 \u0432\u0441\u0442\u0440\u0435\u0447!    \t \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\/171937\/\"> http:\/\/habrahabr.ru\/post\/171937\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u0418\u0437\u0443\u0447\u0430\u044f Python3, \u044f \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b (\u043a\u0430\u043a \u0441\u043c\u043e\u0433) \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043a\u0443 PyBrain. \u041e\u0431 \u044d\u0442\u043e\u043c \u044f \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b <a href=\"http:\/\/habrahabr.ru\/post\/148597\/\">\u0437\u0434\u0435\u0441\u044c<\/a>.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/876\/89c\/c9b\/87689cc9b163aa6ef8c555c797f4f398.png\" alt=\"image\"\/><br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u0436\u0435 \u044f \u0445\u043e\u0447\u0443 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u00ab\u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u00bb \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043a\u043e\u0439. \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u043e\u0441\u0442\u0435, \u043f\u0438\u0442\u043e\u043d \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u043b \u0438\u0437\u0443\u0447\u0430\u0442\u044c, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u043a \u0418\u0441\u0442\u0438\u043d\u0443. \u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u043f\u0443\u0442\u044c, \u0438 \u043e\u043d \u0438\u0437\u0432\u0438\u043b\u0438\u0441\u0442.<\/p>\n<p>  \u0417\u0430\u0434\u0430\u0447\u0443 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u0435\u0440\u0435\u0434 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u044c\u044e (\u0418\u041d\u0421) \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u2014 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e: \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u043a\u0432 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u043e\u0433\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430.<\/p>\n<p>  \u0412\u0440\u043e\u0434\u0435 \u0431\u044b \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e \u043d\u0435\u0433\u043e \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 \u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u043d\u0435\u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e: <a href=\"http:\/\/habrahabr.ru\/post\/134998\/\">\u00ab\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438?\u00bb<\/a>, <a href=\"http:\/\/habrahabr.ru\/post\/113245\/\">\u00ab\u041d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438 \u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432\u00bb<\/a> \u0438 <a href=\"http:\/\/habrahabr.ru\/search\/?q=%D0%BF%D0%B5%D1%80%D1%81%D0%B5%D0%BF%D1%82%D1%80%D0%BE%D0%BD\">\u0442.\u0434.<\/a><br \/>  \u041d\u043e \u043c\u043e\u0435\u0439 \u0446\u0435\u043b\u044c\u044e \u0441\u0442\u043e\u0438\u0442 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u043e\u043d\u0430 \u043d\u0430 \u043d\u0435 \u0441\u0430\u043c\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445. \u0422.\u0435. \u0443\u0447\u0438\u043c\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u043d\u0430 \u0441\u043b\u043e\u0436\u043d\u043e\u043c \u0438 \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u043e\u043c. \u0422\u0430\u043a \u043c\u044b \u043d\u0430\u0439\u0434\u0435\u043c \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0433\u0440\u0430\u0431\u043b\u0435\u0439, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043a\u043e\u043f\u043d\u0443\u0442\u044c \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u044b \u044f\u0437\u044b\u043a\u0430, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044f\u0441\u044c \u0441 \u00ab\u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442?\u00bb.<\/p>\n<p>  \u041f\u043e\u0434 \u0445\u0430\u0431\u0440\u0430\u043a\u0430\u0442\u043e\u043c \u0432\u0430\u0441 \u0436\u0434\u0451\u0442: \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 <b>PyQt4<\/b>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f <b>argparse<\/b>, \u043d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 <b>PyBrain<\/b>!  <\/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-171937","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/171937","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=171937"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/171937\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=171937"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=171937"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=171937"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}