{"id":360074,"date":"2024-05-21T00:45:37","date_gmt":"2024-05-21T00:45:37","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=360074"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=360074","title":{"rendered":"<span>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Insightface \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043b\u0438\u0446 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ca7\/d0f\/172\/ca7d0f172ada1af02185799aa92e02ae.png\" width=\"1879\" height=\"1024\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ca7\/d0f\/172\/ca7d0f172ada1af02185799aa92e02ae.png\"\/><\/figure>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! <\/p>\n<p>\u0421\u00a0\u0432\u0430\u043c\u0438 \u0412\u0430\u0434\u0438\u043c \u0414\u0430\u0440\u043c\u043e\u0440\u0435\u0437\u043e\u0432, \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a <a href=\"https:\/\/newtechaudit.ru\/\" rel=\"noopener noreferrer nofollow\"><u>\u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 NTA<\/u><\/a><u>.<\/u>  <\/p>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u044e \u043a\u0435\u0439\u0441 \u043f\u043e\u0438\u0441\u043a\u0430 \u00ab\u0431\u043b\u0438\u0437\u043d\u0435\u0446\u043e\u0432\u00bb \u0432\u00a0\u043f\u0430\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435\u00a0\u0431\u044b\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u0432\u00a0pdf\u2011\u0444\u0430\u0439\u043b\u0430\u0445, \u043d\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0434\u0435\u0441\u044f\u0442\u043a\u0438, \u0430\u00a0\u043f\u043e\u0440\u043e\u0439 \u0438 \u0441\u043e\u0442\u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446.<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u043f\u043e \u043f\u043e\u0441\u0442\u0443<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p><a href=\"#%D0%B2%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043f\u0443\u0441\u043a \u043c\u043e\u0434\u0435\u043b\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0\" rel=\"noopener noreferrer nofollow\">\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 pdf-\u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B7%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p><a class=\"anchor\" name=\"%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5\" id=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435\"><\/a><\/p>\n<p>\u0414\u043b\u044f\u00a0\u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u0445\u043e\u0436\u0438\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0448\u0430\u0433\u043e\u0432 \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f: <\/p>\n<ol>\n<li>\n<p>\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439: \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043a\u00a0\u043e\u0434\u043d\u043e\u043c\u0443 \u0440\u0430\u0437\u043c\u0435\u0440\u0443, \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0432\u00a0\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u043e\u0433\u043e \u0438\u00a0\u0442.\u00a0\u0434.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432\u00a0\u0432\u0435\u043a\u0442\u043e\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0438\u0441\u043a \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u00ab\u0431\u043b\u0438\u0437\u043d\u0435\u0446\u043e\u0432\u00bb.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u00a0\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435\u043c\u00a0\u043b\u0438\u0446 \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u00ab\u0444\u043b\u0430\u0433\u043c\u0430\u043d\u0430\u043c\u0438\u00bb \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 dlib\/face\u2011recognition \u0438 \u0441\u0432\u0451\u0440\u0442\u043e\u0447\u043d\u044b\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438. \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043d\u0430\u00a0\u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u0430\u043b\u043e \u0441\u0442\u0430\u0442\u0435\u0439 \u043e\u00a0\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 insightface. \u0418\u043c\u0435\u043d\u043d\u043e \u043e\u00a0\u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c\u00a0\u0431\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.<\/p>\n<p><strong>Insightface<\/strong>\u00a0\u2014 open\u2011source \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f\u00a0\u0430\u043d\u0430\u043b\u0438\u0437\u0430 2D \u0438 3D \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f PyTorch \u0438 MXNet. \u0414\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0441\u043f\u0435\u043a\u0442\u0440 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f\/\u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\/\u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f\u00a0\u043b\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043a\u0430\u043a\u00a0\u0434\u043b\u044f\u00a0\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u043b\u044e \u043a\u00a0\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0412\u044b\u043f\u043e\u043b\u043d\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"python\">pip install -U insightface<\/code><\/pre>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441\u00a0\u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 0.2.0, \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u0434\u043b\u044f\u00a0\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u00a0MXNet, \u0430\u00a0onnxruntime. \u0414\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 (\u043d\u0435\u0439\u0440\u043e\u043d\u043d\u0430\u044f \u0441\u0435\u0442\u044c) \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c CPU \u0438\u043b\u0438\u00a0GPU.<\/p>\n<p>\u0412\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f CPU, \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044f\u0434\u0440\u0430\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0447\u0438\u0441\u043b\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0432\u043d\u043e \u0447\u0438\u0441\u043b\u0443 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044f\u0434\u0435\u0440 \u0438\u043b\u0438, \u043f\u0440\u0438\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 Hyperthreading, \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043e \u0432\u0434\u0432\u043e\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 CPU \u043d\u0430\u00a0\u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044f\u0445 \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0437\u2011\u0437\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u00a0\u041e\u0417\u0423, \u0447\u0442\u043e\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430\u00a0\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b. \u0422\u0430\u043a\u0436\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439\u00a0\u2014 \u0432\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 \u0440\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u0435\u0433\u043a\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043d\u0430\u00a0\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u043d\u043e\u00a0\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044f\u0434\u0435\u0440 CPU.<\/p>\n<p>\u0418\u043d\u0444\u0435\u0440\u0435\u043d\u0441 \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c GPU \u0437\u0430\u00a0\u0441\u0447\u0435\u0442 \u0438\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0433\u0438\u0431\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u044d\u0448\u2011\u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435, \u0447\u0435\u043c \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430\u00a0CPU. \u041f\u043b\u044e\u0441\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 (\u0434\u043e 100\u00a0\u0440\u0430\u0437) \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u043a\u0440\u0430\u0439\u043d\u0435 \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u00a0\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441\u00a0CPU.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"python\">pip install onnx<\/code><\/pre>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">\u041a\u043e\u043c\u0430\u043d\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0427\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">pip install onnxruntime<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">pip install   onnruntime-gpu<\/p>\n<\/td>\n<td>\n<p align=\"left\">GPU<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b. \u0421\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442\u00a0\u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u043f\u0440\u0438\u00a0\u0440\u0430\u0431\u043e\u0442\u0435, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043d\u0438\u0436\u0435: <\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u043e\u0434\u0435\u043b\u044c \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0438 <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u043e\u0434\u0435\u043b\u044c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u043c\u0435\u0440 \u043c\u043e\u0434\u0435\u043b\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">antelopev2<\/p>\n<\/td>\n<td>\n<p align=\"left\">SCRFD-10GF<\/p>\n<\/td>\n<td>\n<p align=\"left\">ResNet100@Glint360k<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043b \u0438 \u0432\u043e\u0437\u0440\u0430\u0441\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">407Mb<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">buffalo_l<\/p>\n<\/td>\n<td>\n<p align=\"left\">SCRFD-10GF<\/p>\n<\/td>\n<td>\n<p align=\"left\">ResNet50@WebFace600k<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043b \u0438 \u0432\u043e\u0437\u0440\u0430\u0441\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">326Mb<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">buffalo_m<\/p>\n<\/td>\n<td>\n<p align=\"left\">SCRFD-2.5GF<\/p>\n<\/td>\n<td>\n<p align=\"left\">ResNet50@WebFace600k<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043b \u0438 \u0432\u043e\u0437\u0440\u0430\u0441\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">313Mb<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">buffalo_s<\/p>\n<\/td>\n<td>\n<p align=\"left\">SCRFD-500MF<\/p>\n<\/td>\n<td>\n<p align=\"left\">MBF@WebFace600k<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043b \u0438 \u0432\u043e\u0437\u0440\u0430\u0441\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">159Mb<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">buffalo_sc<\/p>\n<\/td>\n<td>\n<p align=\"left\">SCRFD-500MF<\/p>\n<\/td>\n<td>\n<p align=\"left\">MBF@WebFace600k<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">16Mb<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<h2>\u0417\u0430\u043f\u0443\u0441\u043a \u043c\u043e\u0434\u0435\u043b\u0438<\/h2>\n<p><a class=\"anchor\" name=\"%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA\" id=\"\u0437\u0430\u043f\u0443\u0441\u043a\"><\/a><\/p>\n<h3>1 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2013 \u0437\u0430\u043f\u0443\u0441\u043a \u043c\u043e\u0434\u0435\u043b\u0438, \u0441 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043a \u0441\u0435\u0442\u0438 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 <\/h3>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443:  <\/p>\n<pre><code class=\"powershell\">app = FaceAnalysis(name=\"buffalo_l\", providers=['CUDAExecutionProvider'])<\/code><\/pre>\n<p>\u0412\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438 onnx\u2011\u0444\u0430\u0439\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u0430\u0447\u0430\u043d\u044b \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u0432\u00a0\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 ~\/.insightface\/models\/. \u0412\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u0440\u0438\u00a0\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u00a0\u0431\u0443\u0434\u0443\u0442.  <\/p>\n<h3>2 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2013 \u0437\u0430\u043f\u0443\u0441\u043a \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u043e\u0444\u0444\u043b\u0430\u0439\u043d-\u0440\u0435\u0436\u0438\u043c\u0435   <\/h3>\n<p>\u041f\u0440\u0438\u00a0\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043a\u00a0\u0441\u0435\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0434\u043b\u044f\u00a0\u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 ~\/.insightface\/models\/ \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u043d\u043d\u044b\u0435 onnx\u2011\u0444\u0430\u0439\u043b\u044b \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p>\u0412\u00a0\u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435\u00a0\u0431\u044b\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u00a0\u043e\u0444\u0444\u043b\u0430\u0439\u043d\u2011\u0440\u0435\u0436\u0438\u043c\u0435, \u0434\u043b\u044f\u00a0\u0447\u0435\u0433\u043e\u00a0\u0431\u044b\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f (\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439, \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 onnx\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0438).<\/p>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import os import shutil  class InitialSetup:     def create_directories(self):         directories_list = ['pdf', 'model','faces', 'model_result']         for directory in directories_list:             if not os.path.isdir(directory):                 os.mkdir(directory)                 print(f'\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f {directory} \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0430.')             else:                 print(f'\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f {directory} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.')         model_directory = r'\/home\/datalab\/.insightface\/models\/buffalo_l'         if not os.path.isdir(model_directory):             os.makedirs(model_directory)             print(f'\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f {model_directory} \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0430.')         else:             print(f'\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f {model_directory} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.') def move_model_files(self):         #\u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438 onnx-\u0444\u0430\u0439\u043b\u043e\u0432         insightface_work_files = (             'genderage.onnx',             'w600k_r50.onnx',             'det_10g.onnx',             '2d106det.onnx',             '1k3d68.onnx'         )         # \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e \u0441\u043f\u0438\u0441\u043e\u043a onnx-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438         insightface_model_directory = r'\/home\/datalab\/.insightface\/models\/buffalo_l'         insightface_files = set(os.listdir(insightface_model_directory))         #\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u044e, \u0435\u0441\u0442\u044c \u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438 \u0444\u0430\u0439\u043b\u044b \u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438         if insightface_files==insightface_work_files:             print('\u0412\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438 onnx-\u0444\u0430\u0439\u043b\u044b \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b.')         else:             #\u0432\u044b\u0433\u0440\u0443\u0436\u0430\u044e \u0441\u043f\u0438\u0441\u043e\u043a onnx-\u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0438             model_files = [os.path.join('model', file) for file in os.listdir('model')]             clear_model_files = set([file.split('\/')[-1] for file in model_files])             print(clear_model_files)             if clear_model_files == insightface_work_files:                 for model_file in model_files:                     shutil.copy(model_file, insightface_model_directory)                 print('\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e.')             else:                 print('\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u043f\u0438\u0441\u043e\u043a onnx-\u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f.')<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 pdf\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. <\/p>\n<h2>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 pdf-\u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439  <\/h2>\n<p><a class=\"anchor\" name=\"%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0\" id=\"\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430\"><\/a><\/p>\n<p>\u041d\u0430\u0447\u043d\u0443 \u0441 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a:  <\/p>\n<pre><code class=\"python\">import glob import numpy as np import matplotlib.pyplot as plt import cv2 from pathlib import Path from tqdm import tqdm import pandas as pd import fitz import traceback import onnxruntime as ort from insightface.app import FaceAnalysis from sklearn.neighbors import NearestNeighbors from numpy.linalg import norm from PIL import Image<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u044e, \u043a\u0430\u043a\u00a0\u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u0437\u00a0pdf\u2011\u0444\u0430\u0439\u043b\u043e\u0432. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438\u00a0\u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 fitz. \u0414\u043b\u044f\u00a0\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0430\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u043a\u0435\u0442 pymupdf.<\/p>\n<pre><code class=\"python\">doc = fitz.open(\u043f\u0443\u0442\u044c \u043a pdf-\u0444\u0430\u0439\u043b\u0443) for i in range(len(doc)):     for img in doc.get_page_images(i):         xref = img[0]         pix = fitz.Pixmap(doc, xref)         if pix.n > 4:             pix = fitz.Pixmap(fitz.csRGB, pix)         img = np.frombuffer(pix.samples, dtype=np.uint8).reshape(pix.height, pix.width, pix.n)         try:             img = np.ascontiguousarray(img[...,[2,1,0]])         except IndexError:             img = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)             img = np.ascontiguousarray(img[...,[2,1,0]])<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u044e, \u043a\u0430\u043a\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0438\u0441\u043a\u00a0\u043b\u0438\u0446 \u043d\u0430\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445. \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c: <\/p>\n<pre><code class=\"powershell\">app = FaceAnalysis(name=\"buffalo_l\", providers=['CUDAExecutionProvider']) app.prepare(ctx_id=0, det_size=(256,256))<\/code><\/pre>\n<p>\u0412\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044f \u0445\u043e\u0442\u0435\u043b\u00a0\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u043c\u0435\u043d\u0438\u0442\u043e\u0435 \u0441\u0435\u043b\u0444\u0438 \u042d\u043b\u043b\u0435\u043d \u0414\u0435\u0434\u0436\u0435\u043d\u0435\u0440\u0435\u0441 \u0441\u00a0\u0446\u0435\u0440\u0435\u043c\u043e\u043d\u0438\u0438 \u041e\u0441\u043a\u0430\u0440-2014:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/c88\/256\/d0a\/c88256d0a50106d7e07d7240b27de597.jpg\" width=\"1110\" height=\"624\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c88\/256\/d0a\/c88256d0a50106d7e07d7240b27de597.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0414\u0430\u043d\u043d\u043e\u0435 \u0444\u043e\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u00a0\u043d\u0430\u00a0\u043d\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043a\u0430\u0441\u0442 \u0432\u044b\u0434\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0430\u043a\u0442\u0435\u0440\u043e\u0432 \u0413\u043e\u043b\u043b\u0438\u0432\u0443\u0434\u0430, \u043d\u043e\u00a0\u0438 \u043f\u043e\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c: <\/p>\n<ul>\n<li>\n<p>\u043d\u0430\u00a0\u0444\u043e\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043a\u0430\u043a\u00a0\u043c\u0443\u0436\u0447\u0438\u043d\u044b, \u0442\u0430\u043a \u0438\u00a0\u0436\u0435\u043d\u0449\u0438\u043d\u044b;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043b\u044e\u0434\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>\u043b\u0438\u0446\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0432\u0435\u0437\u0434 \u0432\u0438\u0434\u043d\u044b \u043d\u0435\u00a0\u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e\u00a0\u2014 \u0437\u0430\u043a\u0440\u044b\u0442\u044b \u0432\u043e\u043b\u043e\u0441\u0430\u043c\u0438 \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0440\u0443\u043a\u0430\u043c\u0438 \u0438\u00a0\u0442.\u00a0\u0434.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442:<\/p>\n<pre><code class=\"python\">image = cv2.imread('test.jpg') # \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435  faces = app.get(image) # \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0436\u0443 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u043b\u0438\u0446 rimg = app.draw_on(image, faces) # \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441 \u043b\u0438\u0446\u0430\u043c\u0438 cv2.imwrite('res.jpg', rimg) # \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u044e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/004\/da5\/1a5\/004da51a52758a2dd86bf23d07f9c69b.jpg\" width=\"1110\" height=\"624\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/004\/da5\/1a5\/004da51a52758a2dd86bf23d07f9c69b.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u0421\u00a0\u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0435\u0439\u00a0\u043b\u0438\u0446 \u043d\u0430\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u043e,\u00a0\u0431\u044b\u043b\u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u044b \u0434\u0430\u0436\u0435 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u0440\u0438\u043a\u0440\u044b\u0442\u044b\u0435\u00a0\u043b\u0438\u0446\u0430, \u0430\u00a0\u0432\u043e\u0442 \u0441\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u0430 \u0438 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043d\u0435\u00a0\u0442\u0430\u043a \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u0430. \u041c\u043e\u0434\u0435\u043b\u0438 \u043d\u0435\u00a0\u0443\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u043e\u043b, \u0432\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u043d\u043e\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043a\u0430\u043a\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 \u0410\u043d\u0434\u0436\u0435\u043b\u0438\u043d\u044b \u0414\u0436\u043e\u043b\u0438 (\u043f\u043e\u0440\u044f\u0434\u043a\u0430 50\u00a0\u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432\u00a0\u043b\u0438\u0446\u0430 \u0441\u043a\u0440\u044b\u0442\u043e), \u0442\u0430\u043a\u00a0\u0436\u0435 \u043f\u0440\u0438\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0437\u0440\u0430\u0441\u0442 \u0411\u0440\u044d\u0434\u043b\u0438 \u041a\u0443\u043f\u0435\u0440\u0430 \u043d\u0430\u00a0\u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043d\u0438\u043c\u043a\u0430\u00a0\u2014 39\u00a0\u043b\u0435\u0442, \u0414\u0436\u0435\u043d\u043d\u0438\u0444\u0435\u0440 \u041b\u043e\u0443\u0440\u0435\u043d\u0441\u00a0\u2014 24\u00a0\u0433\u043e\u0434\u0430).<\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u044e, \u043a\u0430\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 faces \u043d\u0430\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0434\u043d\u043e\u0433\u043e\u00a0\u043b\u0438\u0446\u0430:<\/p>\n<pre><code>{'bbox': array([1048.6523,477.87848, 1427.735,1018.7425 ], dtype=float32),  'kps': array([[1109.926,676.95526],         [1291.9822,678.36816],         [1178.8099,779.84735],         [1122.0046 ,848.871  ],         [1304.9967,849.50073]], dtype=float32),  'det_score': 0.9315067,  'landmark_3d_68': array([[ 1.0514039e+03,  6.8547186e+02,  3.2998676e+02],         ***         [ 1.1808237e+03,  8.8022034e+02,  4.9980091e+01]], dtype=float32),  'pose': array([ -2.3625553, -11.447153 ,  -1.7689382], dtype=float32),  'landmark_2d_106': array([[1219.4696 , 1027.5748 ],         ***         [1340.001  ,  621.7045 ]], dtype=float32),  'gender': 1,  'age': 57,  'embedding': array([ 6.67082489e-01, -7.11157694e-02,  9.92161810e-01, -1.89440691e+00,         ***          1.37064215e-02, -7.82325566e-02,  5.46212256e-01, -6.86526656e-01],        dtype=float32)}<\/code><\/pre>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:  <\/p>\n<ul>\n<li>\n<p>bbox\u00a0\u2014 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u00a0\u0441\u0435\u0431\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0442\u043e\u0447\u0435\u043a, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u00a0\u043b\u0438\u0446\u0430;<\/p>\n<\/li>\n<li>\n<p>gender\u00a0\u2014 \u043f\u043e\u043b \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0435\u00a0\u043b\u0438\u0446\u043e;<\/p>\n<\/li>\n<li>\n<p>age\u00a0\u2014 \u0432\u043e\u0437\u0440\u0430\u0441\u0442 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442\u00a0\u043b\u0438\u0446\u043e;<\/p>\n<\/li>\n<li>\n<p>embedding\u00a0\u2014 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0433\u043e\u00a0\u043b\u0438\u0446\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u043d\u0438\u044f \u0438 \u043a\u043e\u0434\u044b: <\/p>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">class FaceWorker:          def __init__(self):         self.app = FaceAnalysis(name=\"buffalo_l\", providers=['CUDAExecutionProvider'])         self.app.prepare(ctx_id=0, det_size=(256,256))         self.knn = NearestNeighbors(metric='cosine', algorithm='brute')              def extract_faces_from_pdf(self,files_paths, result_images_directory='faces'):         errors_count = 0         try:             with open('completed_files.csv','a+') as file:                 for file_path in tqdm(files_paths):                     file_name = Path(file_path).stem                     doc = fitz.open(file_path)                     for i in range(len(doc)):                         for img in doc.get_page_images(i):                             xref = img[0]                             pix = fitz.Pixmap(doc, xref)                             if pix.n > 4:                                 pix = fitz.Pixmap(fitz.csRGB, pix)                             img = np.frombuffer(pix.samples, dtype=np.uint8).reshape(pix.height, pix.width, pix.n)                             try:                                 img = np.ascontiguousarray(img[...,[2,1,0]])                             except IndexError:                                 img = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)                                 img = np.ascontiguousarray(img[...,[2,1,0]])                             faces = self.app.get(img)                             if len(faces)>0:                                 for j,face in enumerate(faces):                                     try:                                         bbox = face.bbox                                         x1,y1,x2,y2 = int(bbox[0]), int(bbox[1]), int(bbox[2]), int(bbox[3])                                         crop_img = img[ y1:y2,x1:x2]                                         face_directory  = os.path.join(result_images_directory, f'{file_name}_face_{j}.png')                                         cv2.imwrite(face_directory, crop_img)                                     except cv2.error as error:                                         errors_count +=1                                         continue                     end_time = dt.now().strftime('%d-%m-%Y %H:%M')                     file.write(f'{file_path}|{end_time}\\n')         except:             error = traceback.format_exc()             print(f'\u041f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u043b\u0438\u0446 \u0432 pdf-\u0444\u0430\u0439\u043b\u0430\u0445 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430:\\n{error}\\n\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u0432 completed_files.csv\\n')         finally:             print(f'\u041e\u0448\u0438\u0431\u043e\u043a \u0437\u0430\u043f\u0438\u0441\u0438 cv2.error - {errors_count}')      def face_vectorizer(self, face_path):         try:             image = cv2.imread(face_path)             faces = self.app.get(image)             if len(faces)>0:                 return faces[0].embedding         except:             error = traceback.format_exc()             print(error)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f\u00a0\u043f\u043e\u0438\u0441\u043a\u0430\u00a0\u043b\u0438\u0446 \u0432\u00a0pdf\u2011\u0444\u0430\u0439\u043b\u0430\u0445 \u0438 \u0438\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u00a0\u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"python\">fw = FaceWorker() pdfs = glob.glob('pdf\/*.pdf') print(f'\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e pdf-\u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 - {len(pdfs)}') fw.extract_faces_from_pdf(pdfs) search_faces = glob.glob('faces\/*.png') vectors_dict = {     'images_paths':[],     'images_vectors':[] } for search_face in tqdm(search_faces):     vector = fw.face_vectorizer(search_face)     if vector is not None:         vectors_dict['images_paths'].append(search_face)         vectors_dict['images_vectors'].append(vector) print('\u041b\u0438\u0446\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u0430.')<\/code><\/pre>\n<p>\u0414\u043b\u044f\u00a0\u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u00a0\u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438\u0437\u00a0\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 sklearn, \u0433\u0434\u0435 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0431\u043b\u0438\u0437\u043e\u0441\u0442\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a\u043e\u0441\u0438\u043d\u0443\u0441\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 (\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435\u00a0\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u0435\u0440\u043d\u044b\u043c, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0431\u043b\u0438\u0437\u043e\u0441\u0442\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432). <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434:<\/p>\n<pre><code class=\"python\">similar_faces = fw.search_similar_faces(vectors_dict, 30, 0.7) print('\u0421\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0445\u043e\u0436\u0438\u0445 \u043b\u0438\u0446.') all_similar_images = [] for cluster in similar_faces:     similar_images = [element[0] for element in cluster]     all_similar_images.append(similar_images) filtered_similar_images = [] for i,element in enumerate(all_similar_images):     if set(element) not in filtered_similar_images:         filtered_similar_images.append(set(element)) print('\u041e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u044b \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u0438\u0445 \u0438 \u0442\u0435\u0445 \u0436\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439.')<\/code><\/pre>\n<p>\u0412\u00a0\u043f\u0435\u0440\u0432\u043e\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435\u00a0\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u0441\u00a0\u043f\u043e\u043b\u043d\u044b\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435\u043c \u0410\u043d\u0434\u0436\u0435\u043b\u0438\u043d\u044b \u0414\u0436\u043e\u043b\u0438, \u0431\u0443\u0434\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430\u00a0\u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0430\u043a\u0442\u0435\u0440\u043e\u0432 \u0441\u00a0\u0446\u0435\u043b\u044c\u044e \u043d\u0430\u0439\u0442\u0438 \u0435\u0451 \u00ab\u0431\u043b\u0438\u0437\u043d\u0435\u0446\u043e\u0432\u00bb. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0438\u0436\u0435: <\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c83\/e21\/cc3\/c83e21cc3f3bd8d078d2769916aa9659.png\" width=\"382\" height=\"383\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c83\/e21\/cc3\/c83e21cc3f3bd8d078d2769916aa9659.png\"\/><\/figure>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p><a class=\"anchor\" name=\"%D0%B7%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\" id=\"\u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\"><\/a><\/p>\n<p>\u041c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043b\u044f \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u0446 \u0432 pdf-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043b\u044e\u0434\u0435\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Insightface.\u0422\u0430\u043a\u0436\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u0433\u0438\u0431\u043a\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b (\u043e\u0442 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438\u0437 pdf-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439), \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u0438 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043b\u0438\u0446. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 insightface \u0431\u043e\u0433\u0430\u0442\u0430 \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043b\u0438\u0446 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0438\u0445 \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f.  <\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/773744\/\"> https:\/\/habr.com\/ru\/articles\/773744\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! <\/p>\n<p>\u0421\u00a0\u0432\u0430\u043c\u0438 \u0412\u0430\u0434\u0438\u043c \u0414\u0430\u0440\u043c\u043e\u0440\u0435\u0437\u043e\u0432, \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a <a href=\"https:\/\/newtechaudit.ru\/\" rel=\"noopener noreferrer nofollow\"><u>\u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 NTA<\/u><\/a><u>.<\/u>  <\/p>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u044e \u043a\u0435\u0439\u0441 \u043f\u043e\u0438\u0441\u043a\u0430 \u00ab\u0431\u043b\u0438\u0437\u043d\u0435\u0446\u043e\u0432\u00bb \u0432\u00a0\u043f\u0430\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435\u00a0\u0431\u044b\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u0432\u00a0pdf\u2011\u0444\u0430\u0439\u043b\u0430\u0445, \u043d\u0430\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0434\u0435\u0441\u044f\u0442\u043a\u0438, \u0430\u00a0\u043f\u043e\u0440\u043e\u0439 \u0438 \u0441\u043e\u0442\u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446.<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u043f\u043e \u043f\u043e\u0441\u0442\u0443<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p><a href=\"#%D0%B2%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043f\u0443\u0441\u043a \u043c\u043e\u0434\u0435\u043b\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0\" rel=\"noopener noreferrer nofollow\">\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 pdf-\u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B7%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p><a class=\"anchor\" name=\"%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5\" id=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435\">\u043d\u0438\u0435&#187;><\/a><\/p>\n<p>\u0414\u043b\u044f\u00a0\u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u0445\u043e\u0436\u0438\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0448\u0430\u0433\u043e\u0432 \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f: <\/p>\n<ol>\n<li>\n<p>\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439: \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043a\u00a0\u043e\u0434\u043d\u043e\u043c\u0443 \u0440\u0430\u0437\u043c\u0435\u0440\u0443, \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0432\u00a0\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u043e\u0433\u043e \u0438\u00a0\u0442.\u00a0\u0434.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432\u00a0\u0432\u0435\u043a\u0442\u043e\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0438\u0441\u043a \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u00ab\u0431\u043b\u0438\u0437\u043d\u0435\u0446\u043e\u0432\u00bb.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u00a0\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435\u043c\u00a0\u043b\u0438\u0446 \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u00ab\u0444\u043b\u0430\u0433\u043c\u0430\u043d\u0430\u043c\u0438\u00bb \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 dlib\/face\u2011recognition \u0438 \u0441\u0432\u0451\u0440\u0442\u043e\u0447\u043d\u044b\u0435 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438. \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043d\u0430\u00a0\u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u0430\u043b\u043e \u0441\u0442\u0430\u0442\u0435\u0439 \u043e\u00a0\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 insightface. \u0418\u043c\u0435\u043d\u043d\u043e \u043e\u00a0\u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c\u00a0\u0431\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.<\/p>\n<p><strong>Insightface<\/strong>\u00a0\u2014 open\u2011source \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f\u00a0\u0430\u043d\u0430\u043b\u0438\u0437\u0430 2D \u0438 3D \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f PyTorch \u0438 MXNet. \u0414\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0441\u043f\u0435\u043a\u0442\u0440 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f\/\u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\/\u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f\u00a0\u043b\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043a\u0430\u043a\u00a0\u0434\u043b\u044f\u00a0\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u043b\u044e \u043a\u00a0\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0412\u044b\u043f\u043e\u043b\u043d\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"python\">pip install -U insightface<\/code><\/pre>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441\u00a0\u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 0.2.0, \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u0434\u043b\u044f\u00a0\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u00a0MXNet, \u0430\u00a0onnxruntime. \u0414\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 (\u043d\u0435\u0439\u0440\u043e\u043d\u043d\u0430\u044f \u0441\u0435\u0442\u044c) \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c CPU \u0438\u043b\u0438\u00a0GPU.<\/p>\n<p>\u0412\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f CPU, \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044f\u0434\u0440\u0430\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0447\u0438\u0441\u043b\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0432\u043d\u043e \u0447\u0438\u0441\u043b\u0443 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044f\u0434\u0435\u0440 \u0438\u043b\u0438, \u043f\u0440\u0438\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 Hyperthreading, \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043e \u0432\u0434\u0432\u043e\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 CPU \u043d\u0430\u00a0\u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044f\u0445 \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0437\u2011\u0437\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u00a0\u041e\u0417\u0423, \u0447\u0442\u043e\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430\u00a0\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b. \u0422\u0430\u043a\u0436\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439\u00a0\u2014 \u0432\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 \u0440\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u0435\u0433\u043a\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043d\u0430\u00a0\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u043d\u043e\u00a0\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u044f\u0434\u0435\u0440 CPU.<\/p>\n<p>\u0418\u043d\u0444\u0435\u0440\u0435\u043d\u0441 \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c GPU \u0437\u0430\u00a0\u0441\u0447\u0435\u0442 \u0438\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0433\u0438\u0431\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u044d\u0448\u2011\u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435, \u0447\u0435\u043c \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441 \u043d\u0430\u00a0CPU. \u041f\u043b\u044e\u0441\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0435 (\u0434\u043e 100\u00a0\u0440\u0430\u0437) \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u043a\u0440\u0430\u0439\u043d\u0435 \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u00a0\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441\u00a0CPU.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"python\">pip install onnx<\/code><\/pre>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">\u041a\u043e\u043c\u0430\u043d\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0427\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">pip install onnxruntime<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">pip install   onnruntime-gpu<\/p>\n<\/td>\n<td>\n<p align=\"left\">GPU<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b. \u0421\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442\u00a0\u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u043f\u0440\u0438\u00a0\u0440\u0430\u0431\u043e\u0442\u0435, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043d\u0438\u0436\u0435: <\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u043e\u0434\u0435\u043b\u044c \u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0438 <\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u043e\u0434\u0435\u043b\u044c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u043c\u0435\u0440 \u043c\u043e\u0434\u0435\u043b\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">antelopev2<\/p>\n<\/td>\n<td>\n<p align=\"left\">SCRFD-10GF<\/p>\n<\/td>\n<td>\n<p align=\"left\">ResNet100@Glint360k<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043b \u0438 \u0432\u043e\u0437\u0440\u0430\u0441\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">407Mb<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">buffalo_l<\/p>\n<\/td>\n<td>\n<p align=\"left\">SCRFD-10GF<\/p>\n<\/td>\n<td>\n<p align=\"left\">ResNet50@WebFace600k<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043b \u0438 \u0432\u043e\u0437\u0440\u0430\u0441\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">326Mb<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">buffalo_m<\/p>\n<\/td>\n<td>\n<p align=\"left\">SCRFD-2.5GF<\/p>\n<\/td>\n<td>\n<p align=\"left\">ResNet50@WebFace600k<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043b \u0438 \u0432\u043e\u0437\u0440\u0430\u0441\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">313Mb<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">buffalo_s<\/p>\n<\/td>\n<td>\n<p align=\"left\">SCRFD-500MF<\/p>\n<\/td>\n<td>\n<p align=\"left\">MBF@WebFace600k<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043b \u0438 \u0432\u043e\u0437\u0440\u0430\u0441\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">159Mb<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">buffalo_sc<\/p>\n<\/td>\n<td>\n<p align=\"left\">SCRFD-500MF<\/p>\n<\/td>\n<td>\n<p align=\"left\">MBF@WebFace600k<\/p>\n<\/td>\n<td>\n<p align=\"left\">&#8212;<\/p>\n<\/td>\n<td>\n<p align=\"left\">16Mb<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<h2>\u0417\u0430\u043f\u0443\u0441\u043a \u043c\u043e\u0434\u0435\u043b\u0438<\/h2>\n<p><a class=\"anchor\" name=\"%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA\" id=\"\u0437\u0430\u043f\u0443\u0441\u043a\">\u0441\u043a&#187;><\/a><\/p>\n<h3>1 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2013 \u0437\u0430\u043f\u0443\u0441\u043a \u043c\u043e\u0434\u0435\u043b\u0438, \u0441 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043a \u0441\u0435\u0442\u0438 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 <\/h3>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443:  <\/p>\n<pre><code class=\"powershell\">app = FaceAnalysis(name=\"buffalo_l\", providers=['CUDAExecutionProvider'])<\/code><\/pre>\n<p>\u0412\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438 onnx\u2011\u0444\u0430\u0439\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u0430\u0447\u0430\u043d\u044b \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u0432\u00a0\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 ~\/.insightface\/models\/. \u0412\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u0440\u0438\u00a0\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u00a0\u0431\u0443\u0434\u0443\u0442.  <\/p>\n<h3>2 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2013 \u0437\u0430\u043f\u0443\u0441\u043a \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u043e\u0444\u0444\u043b\u0430\u0439\u043d-\u0440\u0435\u0436\u0438\u043c\u0435   <\/h3>\n<p>\u041f\u0440\u0438\u00a0\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043a\u00a0\u0441\u0435\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0434\u043b\u044f\u00a0\u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 ~\/.insightface\/models\/ \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u043d\u043d\u044b\u0435 onnx\u2011\u0444\u0430\u0439\u043b\u044b \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p>\u0412\u00a0\u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435\u00a0\u0431\u044b\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u00a0\u043e\u0444\u0444\u043b\u0430\u0439\u043d\u2011\u0440\u0435\u0436\u0438\u043c\u0435, \u0434\u043b\u044f\u00a0\u0447\u0435\u0433\u043e\u00a0\u0431\u044b\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f (\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439, \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 onnx\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0438).<\/p>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import os import shutil  class InitialSetup:     def create_directories(self):         directories_list = ['pdf', 'model','faces', 'model_result']         for directory in directories_list:             if not os.path.isdir(directory):                 os.mkdir(directory)                 print(f'\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f {directory} \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0430.')             else:                 print(f'\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f {directory} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.')         model_directory = r'\/home\/datalab\/.insightface\/models\/buffalo_l'         if not os.path.isdir(model_directory):             os.makedirs(model_directory)             print(f'\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f {model_directory} \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0430.')         else:             print(f'\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f {model_directory} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.') def move_model_files(self):         #\u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438 onnx-\u0444\u0430\u0439\u043b\u043e\u0432         insightface_work_files = (             'genderage.onnx',             'w600k_r50.onnx',             'det_10g.onnx',             '2d106det.onnx',             '1k3d68.onnx'         )         # \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e \u0441\u043f\u0438\u0441\u043e\u043a onnx-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438         insightface_model_directory = r'\/home\/datalab\/.insightface\/models\/buffalo_l'         insightface_files = set(os.listdir(insightface_model_directory))         #\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u044e, \u0435\u0441\u0442\u044c \u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438 \u0444\u0430\u0439\u043b\u044b \u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438         if insightface_files==insightface_work_files:             print('\u0412\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438 onnx-\u0444\u0430\u0439\u043b\u044b \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b.')         else:             #\u0432\u044b\u0433\u0440\u0443\u0436\u0430\u044e \u0441\u043f\u0438\u0441\u043e\u043a onnx-\u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0438             model_files = [os.path.join('model', file) for file in os.listdir('model')]             clear_model_files = set([file.split('\/')[-1] for file in model_files])             print(clear_model_files)             if clear_model_files == insightface_work_files:                 for model_file in model_files:                     shutil.copy(model_file, insightface_model_directory)                 print('\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e.')             else:                 print('\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u043f\u0438\u0441\u043e\u043a onnx-\u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f.')<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 pdf\u2011\u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. <\/p>\n<h2>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 pdf-\u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439  <\/h2>\n<p><a class=\"anchor\" name=\"%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0\" id=\"\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430\">\u043e\u0442\u043a\u0430&#187;<\/a><\/p>\n<p>\u041d\u0430\u0447\u043d\u0443 \u0441 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a:  <\/p>\n<pre><code class=\"python\">import glob import numpy as np import matplotlib.pyplot as plt import cv2 from pathlib import Path from tqdm import tqdm import pandas as pd import fitz import traceback import onnxruntime as ort from insightface.app import FaceAnalysis from sklearn.neighbors import NearestNeighbors from numpy.linalg import norm from PIL import Image<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u044e, \u043a\u0430\u043a\u00a0\u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u0437\u00a0pdf\u2011\u0444\u0430\u0439\u043b\u043e\u0432. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438\u00a0\u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 fitz. \u0414\u043b\u044f\u00a0\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0430\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u043a\u0435\u0442 pymupdf.<\/p>\n<pre><code class=\"python\">doc = fitz.open(\u043f\u0443\u0442\u044c \u043a pdf-\u0444\u0430\u0439\u043b\u0443) for i in range(len(doc)):     for img in doc.get_page_images(i):         xref = img[0]         pix = fitz.Pixmap(doc, xref)         if pix.n > 4:             pix = fitz.Pixmap(fitz.csRGB, pix)         img = np.frombuffer(pix.samples, dtype=np.uint8).reshape(pix.height, pix.width, pix.n)         try:             img = np.ascontiguousarray(img[...,[2,1,0]])         except IndexError:             img = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)             img = np.ascontiguousarray(img[...,[2,1,0]])<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u044e, \u043a\u0430\u043a\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0438\u0441\u043a\u00a0\u043b\u0438\u0446 \u043d\u0430\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445. \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c: <\/p>\n<pre><code class=\"powershell\">app = FaceAnalysis(name=\"buffalo_l\", providers=['CUDAExecutionProvider']) app.prepare(ctx_id=0, det_size=(256,256))<\/code><\/pre>\n<p>\u0412\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044f \u0445\u043e\u0442\u0435\u043b\u00a0\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u043c\u0435\u043d\u0438\u0442\u043e\u0435 \u0441\u0435\u043b\u0444\u0438 \u042d\u043b\u043b\u0435\u043d \u0414\u0435\u0434\u0436\u0435\u043d\u0435\u0440\u0435\u0441 \u0441\u00a0\u0446\u0435\u0440\u0435\u043c\u043e\u043d\u0438\u0438 \u041e\u0441\u043a\u0430\u0440-2014:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0414\u0430\u043d\u043d\u043e\u0435 \u0444\u043e\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u00a0\u043d\u0430\u00a0\u043d\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043a\u0430\u0441\u0442 \u0432\u044b\u0434\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0430\u043a\u0442\u0435\u0440\u043e\u0432 \u0413\u043e\u043b\u043b\u0438\u0432\u0443\u0434\u0430, \u043d\u043e\u00a0\u0438 \u043f\u043e\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c: <\/p>\n<ul>\n<li>\n<p>\u043d\u0430\u00a0\u0444\u043e\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043a\u0430\u043a\u00a0\u043c\u0443\u0436\u0447\u0438\u043d\u044b, \u0442\u0430\u043a \u0438\u00a0\u0436\u0435\u043d\u0449\u0438\u043d\u044b;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043b\u044e\u0434\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>\u043b\u0438\u0446\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0432\u0435\u0437\u0434 \u0432\u0438\u0434\u043d\u044b \u043d\u0435\u00a0\u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e\u00a0\u2014 \u0437\u0430\u043a\u0440\u044b\u0442\u044b \u0432\u043e\u043b\u043e\u0441\u0430\u043c\u0438 \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u0440\u0443\u043a\u0430\u043c\u0438 \u0438\u00a0\u0442.\u00a0\u0434.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442:<\/p>\n<pre><code class=\"python\">image = cv2.imread('test.jpg') # \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435  faces = app.get(image) # \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0436\u0443 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u043b\u0438\u0446 rimg = app.draw_on(image, faces) # \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0441 \u043b\u0438\u0446\u0430\u043c\u0438 cv2.imwrite('res.jpg', rimg) # \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u044e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0421\u00a0\u0434\u0435\u0442\u0435\u043a\u0446\u0438\u0435\u0439\u00a0\u043b\u0438\u0446 \u043d\u0430\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u043e,\u00a0\u0431\u044b\u043b\u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u044b \u0434\u0430\u0436\u0435 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u0440\u0438\u043a\u0440\u044b\u0442\u044b\u0435\u00a0\u043b\u0438\u0446\u0430, \u0430\u00a0\u0432\u043e\u0442 \u0441\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u0430 \u0438 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043d\u0435\u00a0\u0442\u0430\u043a \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u0430. \u041c\u043e\u0434\u0435\u043b\u0438 \u043d\u0435\u00a0\u0443\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u043e\u043b, \u0432\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u043d\u043e\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043a\u0430\u043a\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 \u0410\u043d\u0434\u0436\u0435\u043b\u0438\u043d\u044b \u0414\u0436\u043e\u043b\u0438 (\u043f\u043e\u0440\u044f\u0434\u043a\u0430 50\u00a0\u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432\u00a0\u043b\u0438\u0446\u0430 \u0441\u043a\u0440\u044b\u0442\u043e), \u0442\u0430\u043a\u00a0\u0436\u0435 \u043f\u0440\u0438\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0437\u0440\u0430\u0441\u0442 \u0411\u0440\u044d\u0434\u043b\u0438 \u041a\u0443\u043f\u0435\u0440\u0430 \u043d\u0430\u00a0\u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043d\u0438\u043c\u043a\u0430\u00a0\u2014 39\u00a0\u043b\u0435\u0442, \u0414\u0436\u0435\u043d\u043d\u0438\u0444\u0435\u0440 \u041b\u043e\u0443\u0440\u0435\u043d\u0441\u00a0\u2014 24\u00a0\u0433\u043e\u0434\u0430).<\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u044e, \u043a\u0430\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 faces \u043d\u0430\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0434\u043d\u043e\u0433\u043e\u00a0\u043b\u0438\u0446\u0430:<\/p>\n<pre><code>{'bbox': array([1048.6523,477.87848, 1427.735,1018.7425 ], dtype=float32),  'kps': array([[1109.926,676.95526],         [1291.9822,678.36816],         [1178.8099,779.84735],         [1122.0046 ,848.871  ],         [1304.9967,849.50073]], dtype=float32),  'det_score': 0.9315067,  'landmark_3d_68': array([[ 1.0514039e+03,  6.8547186e+02,  3.2998676e+02],         ***         [ 1.1808237e+03,  8.8022034e+02,  4.9980091e+01]], dtype=float32),  'pose': array([ -2.3625553, -11.447153 ,  -1.7689382], dtype=float32),  'landmark_2d_106': array([[1219.4696 , 1027.5748 ],         ***         [1340.001  ,  621.7045 ]], dtype=float32),  'gender': 1,  'age': 57,  'embedding': array([ 6.67082489e-01, -7.11157694e-02,  9.92161810e-01, -1.89440691e+00,         ***          1.37064215e-02, -7.82325566e-02,  5.46212256e-01, -6.86526656e-01],        dtype=float32)}<\/code><\/pre>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:  <\/p>\n<ul>\n<li>\n<p>bbox\u00a0\u2014 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u00a0\u0441\u0435\u0431\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0442\u043e\u0447\u0435\u043a, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u00a0\u043b\u0438\u0446\u0430;<\/p>\n<\/li>\n<li>\n<p>gender\u00a0\u2014 \u043f\u043e\u043b \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0435\u00a0\u043b\u0438\u0446\u043e;<\/p>\n<\/li>\n<li>\n<p>age\u00a0\u2014 \u0432\u043e\u0437\u0440\u0430\u0441\u0442 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442\u00a0\u043b\u0438\u0446\u043e;<\/p>\n<\/li>\n<li>\n<p>embedding\u00a0\u2014 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-360074","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/360074","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=360074"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/360074\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=360074"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=360074"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=360074"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}