{"id":4073,"date":"2022-03-20T00:45:11","date_gmt":"2022-03-19T16:45:11","guid":{"rendered":"https:\/\/blog.iyatt.com\/?p=4073"},"modified":"2024-05-05T14:19:16","modified_gmt":"2024-05-05T06:19:16","slug":"%e7%ae%80%e5%8d%95%e5%ae%9e%e7%8e%b0%e4%ba%ba%e8%84%b8%e8%af%86%e5%88%ab","status":"publish","type":"post","link":"https:\/\/blog.iyatt.com\/?p=4073","title":{"rendered":"\u7b80\u5355\u5b9e\u73b0\u4eba\u8138\u8bc6\u522b"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title ez-toc-toggle\" style=\"cursor:pointer\">\u76ee\u5f55<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blog.iyatt.com\/?p=4073\/#%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83\" >\u6d4b\u8bd5\u73af\u5883<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blog.iyatt.com\/?p=4073\/#%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%BD%BF%E7%94%A8\" >\u547d\u4ee4\u884c\u4f7f\u7528<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blog.iyatt.com\/?p=4073\/#Python_%E5%BC%80%E5%8F%91\" >Python \u5f00\u53d1<\/a><\/li><\/ul><\/nav><\/div>\n\n<p>\u672c\u6587\u4e3b\u8981\u662f\u4e3a\u4e86\u4ecb\u7ecd\u4f7f\u7528 face_recognition\uff08\u540e\u7b80\u79f0 fr\uff09\uff0c\u8be5\u9879\u76ee\u63d0\u4f9b\u7684 API \u53ef\u4ee5\u5feb\u901f\u5b9e\u73b0\u4eba\u8138\u8bc6\u522b\u7684\u529f\u80fd\u3002<\/p>\n\n\n\n<p>fr \u672c\u8eab\u662f\u4e00\u4e2a\u5f00\u6e90\u9879\u76ee\uff0c\u5730\u5740\u4f4d\u4e8e\uff1a<a href=\"https:\/\/github.com\/ageitgey\/face_recognition\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/ageitgey\/face_recognition<\/a>\uff0c\u4e2d\u8bd1\u6587\u6863\uff1a<a href=\"https:\/\/github.com\/ageitgey\/face_recognition\/blob\/master\/README_Simplified_Chinese.md\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/ageitgey\/face_recognition\/blob\/master\/README_Simplified_Chinese.md<\/a><\/p>\n\n\n\n<p>\u5b89\u88c5 fr \u540e\uff0c\u53ef\u4ee5\u901a\u8fc7\u547d\u4ee4\u884c\u4f7f\u7528\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199 Python \u7a0b\u5e8f\u4f7f\u7528\u63a5\u53e3\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83\"><\/span>\u6d4b\u8bd5\u73af\u5883<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Ubuntu 20.04 x86_64<\/p>\n\n\n\n<p>Python 3.9.10<\/p>\n\n\n\n<p>face_recognition 1.3.0<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip3 install face_recognition==1.3.0<\/pre>\n\n\n\n<p>OpenCV 4.5.5<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pip3 install opencv-python==4.5.5.64<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%BD%BF%E7%94%A8\"><\/span>\u547d\u4ee4\u884c\u4f7f\u7528<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"has-text-align-center\">\u68c0\u6d4b\u4eba\u8138<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u5355\u5f20\u56fe\u7247\nface_detection [\u56fe\u7247\u540d]\n\n# \u591a\u5f20\u56fe\u7247\nface_detection [\u56fe\u7247\u6240\u5728\u8def\u5f84]<\/pre>\n\n\n\n<p>\u6211\u5728\u7f51\u4e0a\u4e0b\u8f7d\u7684\u51e0\u5f20\u62dc\u767b\u7684\u56fe\u7247\u8fdb\u884c\u6d4b\u8bd5<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"739\" height=\"379\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-03-02-\u7684\u5c4f\u5e55\u622a\u56fe.png\" alt=\"\" class=\"wp-image-4078 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-03-02-\u7684\u5c4f\u5e55\u622a\u56fe.png 739w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-03-02-\u7684\u5c4f\u5e55\u622a\u56fe-300x154.png 300w\" data-sizes=\"(max-width: 739px) 100vw, 739px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 739px; --smush-placeholder-aspect-ratio: 739\/379;\" \/><\/figure>\n\n\n\n<p>\u68c0\u6d4b\u5230\u4eba\u8138\u540e\u4f1a\u5206\u522b\u663e\u793a \u4e0a\u3001\u53f3\u3001\u4e0b\u3001\u5de6\u7684\u5750\u6807<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"615\" height=\"281\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-03-38-\u7684\u5c4f\u5e55\u622a\u56fe.png\" alt=\"\" class=\"wp-image-4079 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-03-38-\u7684\u5c4f\u5e55\u622a\u56fe.png 615w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-03-38-\u7684\u5c4f\u5e55\u622a\u56fe-300x137.png 300w\" data-sizes=\"(max-width: 615px) 100vw, 615px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 615px; --smush-placeholder-aspect-ratio: 615\/281;\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\">\u8bc6\u522b\u4eba\u8138<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">face_recognition [\u5df2\u77e5\u7684\u4eba\u8138\u56fe\u7247\u7684\u6587\u4ef6\u5939] [\u5f85\u8bc6\u522b\u7684\u4eba\u8138\u56fe\u7247\u7684\u6587\u4ef6\u5939]<\/pre>\n\n\n\n<p>\u6211\u5148\u521b\u5efa\u4e24\u4e2a\u6587\u4ef6\u5939 known \u548c unknow\uff0cknown \u4e2d\u5b58\u653e\u5df2\u77e5\u7684\u4eba\u8138\uff0cunknow \u4e2d\u5b58\u653e\u5f85\u8bc6\u522b\u7684\u4eba\u8138\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"663\" height=\"379\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-13-55-\u7684\u5c4f\u5e55\u622a\u56fe.png\" alt=\"\" class=\"wp-image-4080 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-13-55-\u7684\u5c4f\u5e55\u622a\u56fe.png 663w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-13-55-\u7684\u5c4f\u5e55\u622a\u56fe-300x171.png 300w\" data-sizes=\"(max-width: 663px) 100vw, 663px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 663px; --smush-placeholder-aspect-ratio: 663\/379;\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"663\" height=\"379\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-14-16-\u7684\u5c4f\u5e55\u622a\u56fe.png\" alt=\"\" class=\"wp-image-4081 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-14-16-\u7684\u5c4f\u5e55\u622a\u56fe.png 663w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-14-16-\u7684\u5c4f\u5e55\u622a\u56fe-300x171.png 300w\" data-sizes=\"(max-width: 663px) 100vw, 663px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 663px; --smush-placeholder-aspect-ratio: 663\/379;\" \/><\/figure>\n\n\n\n<p>\u6d4b\u8bd5\u65f6\u53d1\u73b0\u51fa\u4e86\u95ee\u9898\uff0c\u56fe\u72472\u660e\u660e\u53ea\u6709\u5ddd\u666e\uff0c\u5374\u6709\u8bc6\u522b\u51fa\u62dc\u767b<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"615\" height=\"281\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-17-34-\u7684\u5c4f\u5e55\u622a\u56fe.png\" alt=\"\" class=\"wp-image-4082 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-17-34-\u7684\u5c4f\u5e55\u622a\u56fe.png 615w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-17-34-\u7684\u5c4f\u5e55\u622a\u56fe-300x137.png 300w\" data-sizes=\"(max-width: 615px) 100vw, 615px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 615px; --smush-placeholder-aspect-ratio: 615\/281;\" \/><\/figure>\n\n\n\n<p>\u90a3\u4e48\u6b64\u65f6\u53ef\u4ee5\u8c03\u8282\u5bb9\u9519\u7387\uff0c\u9ed8\u8ba4\u5bb9\u9519\u7387\u662f 0.6\uff0c\u90a3\u4e48\u8fd9\u91cc\u8bbe\u7f6e\u4e3a 0.54 \u8bd5\u8bd5<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">--tolerance=0.54<\/pre>\n\n\n\n<p>\u8fd9\u6b21\u8bc6\u522b\u5c31\u6ca1\u95ee\u9898\u4e86<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"615\" height=\"281\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-20-03-\u7684\u5c4f\u5e55\u622a\u56fe.png\" alt=\"\" class=\"wp-image-4083 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-20-03-\u7684\u5c4f\u5e55\u622a\u56fe.png 615w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-20-03-\u7684\u5c4f\u5e55\u622a\u56fe-300x137.png 300w\" data-sizes=\"(max-width: 615px) 100vw, 615px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 615px; --smush-placeholder-aspect-ratio: 615\/281;\" \/><\/figure>\n\n\n\n<p>\u5982\u679c\u8981\u67e5\u770b\u8bc6\u522b\u7684\u4eba\u8138\u5339\u914d\u7a0b\u5ea6\uff0c\u53ef\u4ee5\u52a0\u4e0a\u53c2\u6570<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">--show-distance true<\/pre>\n\n\n\n<p>\u6570\u503c\u8d8a\u5c0f\u5339\u914d\u5ea6\u8d8a\u9ad8<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"615\" height=\"281\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-23-48-\u7684\u5c4f\u5e55\u622a\u56fe.png\" alt=\"\" class=\"wp-image-4084 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-23-48-\u7684\u5c4f\u5e55\u622a\u56fe.png 615w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-23-48-\u7684\u5c4f\u5e55\u622a\u56fe-300x137.png 300w\" data-sizes=\"(max-width: 615px) 100vw, 615px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 615px; --smush-placeholder-aspect-ratio: 615\/281;\" \/><\/figure>\n\n\n\n<p>\u5f53\u56fe\u7247\u91cf\u6bd4\u8f83\u5927\u65f6\uff0c\u4e5f\u53ef\u4ee5\u652f\u6301\u5e76\u884c\uff0c\u901a\u8fc7\u53c2\u6570\u6307\u5b9a\u5e76\u884c\u6570\u91cf<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">--cpus<\/pre>\n\n\n\n<p>\u5982\u679c\u4f20 -1 \u5219\u5bf9\u5e94\u6240\u6709 CPU \u6838\u5fc3<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"615\" height=\"839\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-29-58-\u7684\u5c4f\u5e55\u622a\u56fe.png\" alt=\"\" class=\"wp-image-4085 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-29-58-\u7684\u5c4f\u5e55\u622a\u56fe.png 615w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/2022-03-19-21-29-58-\u7684\u5c4f\u5e55\u622a\u56fe-220x300.png 220w\" data-sizes=\"(max-width: 615px) 100vw, 615px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 615px; --smush-placeholder-aspect-ratio: 615\/839;\" \/><\/figure>\n\n\n\n<p>\u6211\u8fd9\u91cc\u6d4b\u8bd5\u51fa\u73b0\u4e86\u610f\u5916\uff0c\u5c45\u7136\u5e76\u884c\u6570\u8d8a\u591a\u8d8a\u6162\uff0c\u6211\u731c\u6d4b\u53ef\u80fd\u662f\u56fe\u7247\u6570\u91cf\u6bd4\u8f83\u5c11\uff0c\u5c31\u4e24\u5f20\uff0c\u672c\u6765\u5f88\u7b80\u5355\u7684\u5de5\u4f5c\uff0c\u5f3a\u884c\u62c6\u5206\u5230\u51e0\u4e2a\u6838\u5fc3\u53bb\uff0c\u65f6\u95f4\u5c31\u8017\u5728\u4e86\u5206\u914d\u4e0a\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Python_%E5%BC%80%E5%8F%91\"><\/span>Python \u5f00\u53d1<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"has-text-align-center\">\u68c0\u6d4b\u4eba\u8138<\/p>\n\n\n\n<p>\u7d20\u6750\u56fe\u7247<\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-d2c2c073-0f52-46e5-b2ad-d89de260c1dc\" href=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/faces.png\">faces<\/a><a href=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/faces.png\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-d2c2c073-0f52-46e5-b2ad-d89de260c1dc\">\u4e0b\u8f7d<\/a><\/div>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from PIL import Image\nimport face_recognition\n\n\n# \u5bfc\u5165\u56fe\u7247\uff0c\u9700\u8981\u81ea\u5df1\u6307\u5b9a\u56fe\u7247\nimage = face_recognition.load_image_file(\"faces.png\")\n\n# \u5bfb\u627e\u56fe\u7247\u4e2d\u6240\u6709\u7684\u4eba\u8138\n# \u57fa\u4e8e HOG-based \u6a21\u578b\n# \u8be5\u6a21\u578b\u7684\u51c6\u786e\u5ea6\u5f88\u9ad8\uff0c\u4e0d\u8fc7\u76f8\u5bf9 CNN \u4f4e\uff0c\u4e5f\u6ca1\u6709 GPU \u52a0\u901f\nface_locations = face_recognition.face_locations(image)\n\nprint(\"\u6211\u5728\u56fe\u7247\u4e2d\u53d1\u73b0\u4e86 {} \u5f20\u8138\u3002\".format(len(face_locations)))\n\nfor face_location in face_locations:\n    # \u663e\u793a\u6bcf\u5f20\u4eba\u8138\u7684\u4f4d\u7f6e\u4fe1\u606f\n    top, right, bottom, left = face_location\n    print(\"\u4eba\u8138\u4f4d\u7f6e: \u4e0a\uff1a {}, \u5de6\uff1a {}, \u4e0b\uff1a {}, \u53f3\uff1a {}\".format(top, left, bottom, right))\n\n    # \u5355\u72ec\u622a\u53d6\u4eba\u8138\u51fa\u6765\u622a\u53d6\n    face_image = image[top:bottom, left:right]\n    pil_image = Image.fromarray(face_image)\n    pil_image.show()<\/pre>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"685\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-278-1024x685.png\" alt=\"\" class=\"wp-image-4087 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-278-1024x685.png 1024w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-278-300x201.png 300w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-278-768x514.png 768w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-278.png 1151w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/685;\" \/><\/figure>\n\n\n\n<p>\u4e0a\u9762\u7684\u4eba\u8138\u68c0\u6d4b\u662f\u57fa\u4e8e HOG-based \u6a21\u578b\uff0c\u5982\u679c\u9700\u8981\u66f4\u9ad8\u7684\u51c6\u786e\u5ea6\uff0c\u53ef\u4ee5\u4f7f\u7528 CNN\u3002<\/p>\n\n\n\n<p>\u4f46\u662f\u76f8\u5e94\u7684\u901f\u5ea6\u4f1a\u5f88\u6162\uff0c\u6709 GPU \u52a0\u901f\u652f\u6301\u7684\u8bdd\u4f1a\u597d\u4e00\u4e9b\u3002face_recognition \u7684\u5e95\u5c42\u4f9d\u8d56\u7684\u662f Dlib \u5e93\uff0c\u5982\u679c\u9700\u8981 GPU \u52a0\u901f\u652f\u6301\uff0c\u90a3\u4e48\u9700\u8981\u5148\u914d\u7f6e CUDA\uff0c\u7136\u540e\u518d\u7f16\u8bd1\u5b89\u88c5 Dlib\uff0c\u53c2\u9605\uff1a<a href=\"https:\/\/blog.iyatt.com\/?p=1237\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/blog.iyatt.com\/?p=1237<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"598\" height=\"135\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-279.png\" alt=\"\" class=\"wp-image-4090 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-279.png 598w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-279-300x68.png 300w\" data-sizes=\"(max-width: 598px) 100vw, 598px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 598px; --smush-placeholder-aspect-ratio: 598\/135;\" \/><\/figure>\n\n\n\n<p>\u8fd9\u91cc\u6211\u662f\u7528\u7684\u81ea\u5df1\u7684\u7b14\u8bb0\u672c\u7535\u8111\u6d4b\u8bd5\uff0c\u6709 NVIDIA \u7684\u72ec\u663e\u3002\u5982\u679c\u662f\u7528\u6811\u6885\u6d3e\uff0c\u90a3\u5c31\u6ca1\u6cd5\u7528 GPU \u52a0\u901f\u4e86\uff0cNVIDIA \u7684 Jetson \u5f00\u53d1\u677f\u6709 GPU\uff0c\u76ee\u524d\u8fd8\u6ca1\u6d4b\u8bd5\uff0c\u7b49 fr \u6574\u4f53\u4ecb\u7ecd\u5199\u5b8c\u540e\uff0c\u6211\u518d\u770b\u770b\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from PIL import Image\nimport face_recognition\n\nimage = face_recognition.load_image_file(\"faces.png\")\n\n# CNN \u6a21\u578b\n# number_of_times_to_upsample \u591a\u6b21\u91c7\u6837\u6b21\u6570\uff0c\u503c\u8d8a\u5927\uff0c\u53ef\u4ee5\u53d1\u73b0\u66f4\u5c0f\u7684\u4eba\u8138\nface_locations = face_recognition.face_locations(image, number_of_times_to_upsample=0, model=\"cnn\")\n\nprint(\"I found {} face(s) in this photograph.\".format(len(face_locations)))\n\nprint(\"\u6211\u5728\u56fe\u7247\u4e2d\u53d1\u73b0\u4e86 {} \u5f20\u8138\u3002\".format(len(face_locations)))\n\nfor face_location in face_locations:\n    # \u663e\u793a\u6bcf\u5f20\u4eba\u8138\u7684\u4f4d\u7f6e\u4fe1\u606f\n    top, right, bottom, left = face_location\n    print(\"\u4eba\u8138\u4f4d\u7f6e: \u4e0a\uff1a {}, \u5de6\uff1a {}, \u4e0b\uff1a {}, \u53f3\uff1a {}\".format(top, left, bottom, right))\n\n    # \u5355\u72ec\u622a\u53d6\u4eba\u8138\u51fa\u6765\u622a\u53d6\n    face_image = image[top:bottom, left:right]\n    pil_image = Image.fromarray(face_image)\n    pil_image.show()<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"470\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-281-1024x470.png\" alt=\"\" class=\"wp-image-4093 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-281-1024x470.png 1024w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-281-300x138.png 300w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-281-768x352.png 768w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-281.png 1129w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/470;\" \/><\/figure>\n\n\n\n<p>\u5f53\u8fd0\u884c\u8fd9\u4e2a\u7a0b\u5e8f\u8fdb\u884c\u68c0\u6d4b\u4eba\u8138\uff0c\u53ef\u4ee5\u5728\u5de6\u8fb9\uff08nvidia-smi -l \u547d\u4ee4\u6301\u7eed\u67e5\u770b GPU \u8d44\u6e90\u4f7f\u7528\u4fe1\u606f\uff09\u770b\u5230 GPU \u4f7f\u7528\u7387\u77ac\u95f4\u4e0a\u5347\u5230 67%\uff0c\u5e76\u591a\u51fa\u4e86\u4e00\u4e2a Python3 \u8fdb\u7a0b\uff0c\u4ee3\u8868 GPU \u53c2\u4e0e\u4e86\u52a0\u901f\u8ba1\u7b97\u3002<\/p>\n\n\n\n<p>\u6709\u4e86 GPU \u52a0\u901f\uff0c\u68c0\u6d4b\u901f\u7387\u4f1a\u63d0\u9ad8\u5f88\u591a\u3002\u524d\u9762\u662f\u5355\u5f20\u56fe\u50cf\u7684\uff0c\u73b0\u5728\u5f15\u5165\u591a\u5f20\u56fe\u50cf\uff0c\u4f7f\u7528\u4e00\u6bb5\u5c0f\u89c6\u9891\u6f14\u793a\u3002<\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-4efed40f-9ea7-4e05-b36b-bb374ef8cf71\" href=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/short_hamilton_clip.mp4\">short_hamilton_clip<\/a><a href=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/short_hamilton_clip.mp4\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-4efed40f-9ea7-4e05-b36b-bb374ef8cf71\">\u4e0b\u8f7d<\/a><\/div>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import face_recognition\nimport cv2\n\n\n# \u8bfb\u89c6\u9891\nvideo_capture = cv2.VideoCapture(\"short_hamilton_clip.mp4\")\n\nframes = []\nframe_count = 0\n\nwhile video_capture.isOpened():\n    # \u4ece\u89c6\u9891\u4e2d\u83b7\u53d6\u4e00\u5e27\u56fe\u50cf\n    ret, frame = video_capture.read()\n    # \u89c6\u9891\u7ed3\u5c3e\u9000\u51fa\u5faa\u73af\n    if not ret:\n        break\n\n    # \u5c06\u56fe\u50cf\u4ece OpenCV \u7684 BGR \u8f6c\u4e3a RGB\n    frame = frame[:, :, ::-1]\n\n    # \u5c06\u89c6\u9891\u4e2d\u6bcf\u4e00\u5e27\u56fe\u50cf\u90fd\u5b58\u5165\u5217\u8868\u4e2d\n    frame_count += 1\n    frames.append(frame)\n\n    # batch \u9ed8\u8ba4\u5927\u5c0f\u4e3a 128\uff0c\u5982\u679c\u663e\u5b58\u8db3\u591f\u5927\uff0c\u53ef\u4ee5\u6539\u4e3a 128\n    # \u6211\u7b14\u8bb0\u672c\u7535\u8111\u72ec\u663e\u5c31 2GB\uff0c\u540c\u65f6\u5904\u7406\u7684\u56fe\u50cf\u6570\u518d\u5927\u4e00\u70b9\u5c31\u4f1a\u8d85\u8fc7\u663e\u5b58\u5bb9\u91cf\uff0c\u8fd0\u884c\u51fa\u9519\n    if len(frames) == 28:\n        batch_of_face_locations = face_recognition.batch_face_locations(frames, number_of_times_to_upsample=0)\n\n        # \u5217\u51fa\u627e\u5230\u7684\u6240\u6709\u4eba\u8138\n        for frame_number_in_batch, face_locations in enumerate(batch_of_face_locations):\n            number_of_faces_in_frame = len(face_locations)\n\n            frame_number = frame_count - 128 + frame_number_in_batch\n            print(\"\u5728 {} \u5e27\u56fe\u50cf\u4e2d\u627e\u5230\u4e86 {} \u5f20\u4eba\u8138\".format(frame_number, number_of_faces_in_frame))\n\n            for face_location in face_locations:\n                # \u663e\u793a\u51fa\u4eba\u8138\u5728\u5bf9\u5e94\u6240\u5728\u56fe\u7247\u4e2d\u7684\u4f4d\u7f6e\n                top, right, bottom, left = face_location\n                print(\"\u4eba\u8138\u4f4d\u4e8e \u4e0a\uff1a{} \u5de6\uff1a {} \u4e0b\uff1a {} \u53f3\uff1a {}\".format(top, left, bottom, right))\n\n        # \u6e05\u7a7a batch\n        frames = []<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"528\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-282-1024x528.png\" alt=\"\" class=\"wp-image-4097 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-282-1024x528.png 1024w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-282-300x155.png 300w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-282-768x396.png 768w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-282.png 1461w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/528;\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\">\u4eba\u8138\u5173\u952e\u70b9\u63d0\u53d6<\/p>\n\n\n\n<p>\u7d20\u6750\u56fe\u7247<\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-2b82f4a1-597b-4f11-aa36-b400f02e8aef\" href=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/two_people.jpg\">two_people<\/a><a href=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/two_people.jpg\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-2b82f4a1-597b-4f11-aa36-b400f02e8aef\">\u4e0b\u8f7d<\/a><\/div>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from PIL import Image, ImageDraw\nimport face_recognition\n\n\n# \u5bfc\u5165\u56fe\u7247\nimage = face_recognition.load_image_file(\"two_people.jpg\")\n\n# \u5bfb\u627e\u56fe\u50cf\u4e2d\u6240\u6709\u4eba\u8138\u7684\u9762\u90e8\u7279\u5f81\nface_landmarks_list = face_recognition.face_landmarks(image)\n\nprint(\"\u5728\u56fe\u50cf\u4e2d\u627e\u5230 {} \u5f20\u4eba\u8138\".format(len(face_landmarks_list)))\n\n# \u521b\u5efa\u4e00\u4e2a PIL \u7ed8\u56fe\u5bf9\u8c61\uff0c\u4ee5\u4fbf\u5728\u56fe\u50cf\u4e2d\u7ed8\u753b\npil_image = Image.fromarray(image)\nd = ImageDraw.Draw(pil_image)\n\nfor face_landmarks in face_landmarks_list:\n    # \u663e\u793a\u4eba\u8138\u9762\u90e8\u7279\u5f81\u5728\u56fe\u50cf\u4e2d\u7684\u4f4d\u7f6e\n    for facial_feature in face_landmarks.keys():\n        print(\"\u7279\u5f81 {} \u4f4d\u4e8e {}\".format(facial_feature, face_landmarks[facial_feature]))\n\n    # \u7528\u7ebf\u6761\u52fe\u52d2\u51fa\u9762\u90e8\u7279\u5f81\n    for facial_feature in face_landmarks.keys():\n        d.line(face_landmarks[facial_feature], width=5)\n\n# \u663e\u793a\u56fe\u7247\npil_image.show()<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"561\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-283-1024x561.png\" alt=\"\" class=\"wp-image-4102 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-283-1024x561.png 1024w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-283-300x164.png 300w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-283-768x420.png 768w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-283.png 1277w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/561;\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\">\u4eba\u8138\u8bc6\u522b<\/p>\n\n\n\n<p>\u56fe\u50cf\u7d20\u6750<\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-b7cff723-d0b2-49eb-a336-6440c7e52712\" href=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/biden.jpg\">biden<\/a><a href=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/biden.jpg\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-b7cff723-d0b2-49eb-a336-6440c7e52712\">\u4e0b\u8f7d<\/a><\/div>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-d1a0bb72-eb2f-44c4-bdb5-8c950197fff0\" href=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/obama.jpg\">obama<\/a><a href=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/obama.jpg\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-d1a0bb72-eb2f-44c4-bdb5-8c950197fff0\">\u4e0b\u8f7d<\/a><\/div>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-7a5c708d-7e2a-4aec-8bb8-fb35316036b9\" href=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/obama2.jpg\">obama2<\/a><a href=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/obama2.jpg\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-7a5c708d-7e2a-4aec-8bb8-fb35316036b9\">\u4e0b\u8f7d<\/a><\/div>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import face_recognition\n\n# \u5bfc\u5165\u56fe\u50cf\nbiden_image = face_recognition.load_image_file(\"biden.jpg\")\nobama_image = face_recognition.load_image_file(\"obama.jpg\")\nunknown_image = face_recognition.load_image_file(\"obama2.jpg\")\n\n# Get the face encodings for each face in each image file\n# Since there could be more than one face in each image, it returns a list of encodings.\n# But since I know each image only has one face, I only care about the first encoding in each image, so I grab index 0.\n# \u68c0\u6d4b\u56fe\u50cf\u4e2d\u4eba\u8138\n# \u4e00\u5f20\u56fe\u50cf\u53ef\u80fd\u542b\u6709\u591a\u5f20\u4eba\u8138\uff0c\u8fd4\u56de\u7ed3\u679c\u662f\u4e00\u4e2a\u5217\u8868\n# \u4f46\u662f\u6839\u636e\u8fd9\u91cc\u51c6\u5907\u7684\u7d20\u6750\uff0c\u6211\u81ea\u5df1\u662f\u77e5\u9053\u4e00\u5f20\u56fe\u7247\u53ea\u6709\u4e00\u5f20\u4eba\u8138\uff0c\u6240\u4ee5\u68c0\u6d4b\u5230\u7684\u4eba\u8138\u80af\u5b9a\u4f4d\u4e8e\u4e0b\u6807 0 \u7684\u4f4d\u7f6e\ntry:\n    biden_face_encoding = face_recognition.face_encodings(biden_image)[0]\n    obama_face_encoding = face_recognition.face_encodings(obama_image)[0]\n    unknown_face_encoding = face_recognition.face_encodings(unknown_image)[0]\nexcept IndexError:\n    print(\"\u6211\u5728\u5176\u4e2d\u4e00\u5f20\u56fe\u50cf\u4e2d\u672a\u53d1\u73b0\u4efb\u4f55\u4eba\u8138\uff0c\u8bf7\u51c6\u5907\u542b\u6709\u4eba\u8138\u7684\u56fe\u7247\u6587\u4ef6\uff01\")\n    quit()\n\n# \u5df2\u77e5\u7684\u4eba\u8138\nknown_faces = [biden_face_encoding, obama_face_encoding]\n\n# \u7ed3\u679c\u8fd4\u56de True \u6216 False\uff0c\u544a\u8bc9\u6211\u4eec\u5f85\u8bc6\u522b\u7684\u4eba\u8138\u662f\u5426\u6709\u5339\u914d\u7684\u5df2\u77e5\u4eba\u8138\nresults = face_recognition.compare_faces(known_faces, unknown_face_encoding)\n\nprint(\"\u8bc6\u522b\u5230\u7684\u4eba\u8138\u662f Biden? {}\".format(results[0]))\nprint(\"\u8bc6\u522b\u5230\u7684\u4eba\u8138\u662f Obama? {}\".format(results[1]))\nprint(\"\u8bc6\u522b\u5230\u7684\u4eba\u8138\u662f\u65b0\u9762\u5b54\uff1f\u6ca1\u6709\u5339\u914d\u7684\u5df2\u77e5\u4eba\u8138\uff1f {}\".format(not True in results))<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"448\" height=\"163\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-284.png\" alt=\"\" class=\"wp-image-4107 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-284.png 448w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-284-300x109.png 300w\" data-sizes=\"(max-width: 448px) 100vw, 448px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 448px; --smush-placeholder-aspect-ratio: 448\/163;\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-left\">\u4eba\u8138\u8bc6\u522b\u5b8c\u6574\u6837\u4f8b\u7a0b\u5e8f\uff0c\u652f\u6301\u5b9e\u65f6\u9884\u89c8<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">'''\n\u4eba\u8138\u8bc6\u522b\u6837\u4f8b\u7a0b\u5e8f\n\u89c6\u9891\u6e90\u53ef\u4ee5\u6765\u81ea\u4e8e\u6444\u50cf\u5934\u3001\u89c6\u9891\u6587\u4ef6\u3001\u89c6\u9891\u6e90\u94fe\u63a5\n\u5b9e\u65f6\u9884\u89c8\u8bc6\u522b\u60c5\u51b5\uff0c\u5bf9\u8bc6\u522b\u51fa\u7684\u4eba\u8138\u8fdb\u884c\u6807\u6ce8\n\n\u4f7f\u7528\u65f6\u9700\u8981\u5728\u4ee3\u7801\u6240\u5728\u76ee\u5f55\u4e0b\u521b\u5efa\u4e00\u4e2a\u6587\u4ef6\u5939\u540d\u4e3a known_faces \uff0c\u5c06\u5df2\u77e5\u4eba\u8138\u56fe\u7247\u653e\u5728\u91cc\u9762\uff0c\u56fe\u7247\u683c\u5f0f\u8981\u6c42\u4e3a .jpg\uff0c\u4e0d\u80fd\u5728\u8be5\u6587\u4ef6\u5939\u4e0b\u653e\u7f6e\u5176\u5b83\u6587\u4ef6\n\u5982\u679c\u8bc6\u522b\u65f6\u5728\u5df2\u77e5\u4eba\u8138\u4e2d\u6709\u5339\u914d\u7684\u56fe\u50cf\uff0c\u90a3\u4e48\u4f1a\u7528\u5df2\u77e5\u4eba\u8138\u56fe\u7247\u540d\u5bf9\u8bc6\u522b\u5230\u7684\u4eba\u8138\u8fdb\u884c\u6807\u6ce8\n\n\u8be5\u6837\u4f8b\u7a0b\u5e8f\u5355\u7eaf\u5b8c\u6574\u5730\u793a\u4f8b\u4e00\u904d\u4eba\u8138\u8bc6\u522b\u7684\u5b9e\u73b0\uff0c\u5e76\u672a\u5199\u5f02\u5e38\u5904\u7406\uff0c\u5982\u679c\u672a\u6309\u8981\u6c42\u653e\u7f6e\u5df2\u77e5\u4eba\u8138\u56fe\u7247\u6587\u4ef6\uff0c\u53ef\u80fd\u4f1a\u51fa\u73b0\u610f\u60f3\u4e0d\u5230\u7684\u9519\u8bef\u3002\n\n\nCopyright (C) 2022 IYATT-yx iyatt@iyatt.com\nEveryone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.\nThis program is free software: you can redistribute it and\/or modify\nit under the terms of the GNU Affero General Public License as published\nby the Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU Affero General Public License for more details.\nYou should have received a copy of the GNU Affero General Public License\nalong with this program.  If not, see &lt;https:\/\/www.gnu.org\/licenses\/>.\n'''\n\nimport os\nimport cv2\nfrom cv2 import batchDistance\nimport numpy as np\nfrom face_recognition import *\n\n\nclass Face_recognition(object):\n    def __init__(self, cap):\n        # \u5df2\u77e5\u4eba\u8138\u7684\u8def\u5f84\n        known_face_folder = os.sep.join([os.path.abspath(os.path.dirname(__file__)), 'known_faces'])\n        # \u5df2\u77e5\u4eba\u8138\u56fe\u7247\u7684\u6587\u4ef6\u540d\n        self.known_face_names = [known_face_name.strip('.jpg') for known_face_name in os.listdir(known_face_folder)]\n        # \u5df2\u77e5\u4eba\u8138\u56fe\u7247\u7684\u7edd\u5bf9\u8def\u5f84\n        known_face_paths = [os.sep.join([known_face_folder, known_face_name + '.jpg']) for known_face_name in self.known_face_names]\n        # \u5bfc\u5165\u5df2\u77e5\u4eba\u8138\u7684\u56fe\u7247\n        known_face_imgs = [load_image_file(known_face_name) for known_face_name in known_face_paths]\n        # \u63d0\u53d6\u4eba\u8138\u5e76\u7f16\u7801 \n        self.known_face_encodings = [face_encodings(known_face_img, face_locations(known_face_img))[0] for known_face_img in known_face_imgs]\n        # \u6253\u5f00\u89c6\u9891\u6d41\n        self.cap = cv2.VideoCapture(cap)\n        # \u4fdd\u5b58\u4e0a\u6b21\u7684\u8ba1\u6570\uff0c\u7528\u4e8e FPS \u8ba1\u7b97\n        self.last = 0\n\n    def add_fps(self, img, x, y, r, g, b):\n        now = cv2.getTickCount()\n        fps = int(cv2.getTickFrequency() \/ (now - self.last))\n        cv2.putText(img, 'FPS: {}'.format(fps), (x,y), cv2.FONT_HERSHEY_COMPLEX, 1, (b,g,r))\n        self.last = now\n\n    def run(self):\n        while True:\n            ret, bgr_img = self.cap.read()\n            # \u89c6\u9891\u64ad\u653e\u5b8c\u5c31\u9000\u51fa\n            if not ret:\n                break\n            # BGR \u8f6c RGB\n            rgb_img = bgr_img[:, :, ::-1]\n            # \u5728\u56fe\u50cf\u4e0a\u6dfb\u52a0 FPS\n            self.add_fps(bgr_img, 50, 50, 255, 0, 0)\n            # \u68c0\u6d4b\u4eba\u8138\n            locations = face_locations(rgb_img)\n            # \u6ca1\u6709\u68c0\u6d4b\u5230\u4eba\u8138\u7ee7\u7eed\u4e0b\u4e00\u5e27\n            if not locations:\n                cv2.imshow('face_recognition', bgr_img)\n                if cv2.waitKey(1) == 27:\n                    break\n                continue\n            # \u5bf9\u68c0\u6d4b\u5230\u7684\u4eba\u8138\u7f16\u7801\n            unknow_face_encodings = face_encodings(rgb_img, locations)\n\n            # \u5c06\u5f85\u68c0\u6d4b\u7684\u4eba\u8138\u6570\u636e\u4e0e\u5df2\u77e5\u4eba\u8138\u6570\u636e\u8fdb\u884c\u5bf9\u6bd4\n            face_names = []\n            for unknow_face_encoding in unknow_face_encodings:\n                matches = compare_faces(self.known_face_encodings, unknow_face_encoding)\n                name = 'stranger'\n                distance = face_distance(self.known_face_encodings, unknow_face_encoding)\n                best_match_idx = np.argmin(distance)\n                if matches[best_match_idx]:\n                    name = self.known_face_names[best_match_idx]\n                print('\u8bc6\u522b\u4e3a {}\uff0c\u4e0e {} \u7684\u5339\u914d\u5ea6\u5206\u522b\u4e3a\uff1a{}'.format(name, self.known_face_names, 1 - distance))\n                face_names.append(name)\n\n            # \u6839\u636e\u68c0\u6d4b\u5230\u7684\u4eba\u6765\u5185\u4f4d\u7f6e\u5728\u56fe\u50cf\u4e0a\u6846\u753b\u51fa\u6765\uff0c\u5e76\u6807\u6ce8\u8bc6\u522b\u7ed3\u679c\n            for (top, right, bottom, left), name in zip(locations, face_names):\n                cv2.rectangle(bgr_img, (left, top), (right, bottom), (0, 0, 255), 2)\n                cv2.putText(bgr_img, name, (left + 6, bottom - 6), cv2.FONT_HERSHEY_DUPLEX, 1.0, (255, 255, 255), 1)\n\n            # \u9884\u89c8\u56fe\u50cf\n            cv2.imshow('face_recognition', bgr_img)\n            if cv2.waitKey(1) == 27:  # \u6309 Esc \u9000\u51fa\n                break\n\n    def __del__(self):\n        self.cap.release()  # \u6790\u6784\u91ca\u653e\u89c6\u9891\u91c7\u96c6\u5bf9\u8c61\n\n\nif __name__ == '__main__':\n    fr = Face_recognition(0)  # \u6307\u5b9a\u6570\u5b57\u5c31\u5bf9\u5e94\u7cfb\u7edf\u6444\u50cf\u5934\u7f16\u53f7\uff0c\u53e6\u5916\u4e5f\u53ef\u4ee5\u6307\u5b9a\u89c6\u9891\u8def\u5f84\u6216\u8005\u89c6\u9891\u6e90\u7684\u94fe\u63a5\n    fr.run()  # \u8fd0\u884c\u8bc6\u522b\u7a0b\u5e8f<\/pre>\n\n\n\n<p>\u8fd0\u884c\u6548\u679c<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"998\" height=\"914\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-285.png\" alt=\"\" class=\"wp-image-4112 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-285.png 998w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-285-300x275.png 300w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-285-768x703.png 768w\" data-sizes=\"(max-width: 998px) 100vw, 998px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 998px; --smush-placeholder-aspect-ratio: 998\/914;\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"951\" height=\"847\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-286.png\" alt=\"\" class=\"wp-image-4113 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-286.png 951w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-286-300x267.png 300w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-286-768x684.png 768w\" data-sizes=\"(max-width: 951px) 100vw, 951px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 951px; --smush-placeholder-aspect-ratio: 951\/847;\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1011\" height=\"861\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-287.png\" alt=\"\" class=\"wp-image-4114 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-287.png 1011w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-287-300x255.png 300w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-287-768x654.png 768w\" data-sizes=\"(max-width: 1011px) 100vw, 1011px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1011px; --smush-placeholder-aspect-ratio: 1011\/861;\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"957\" height=\"891\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-288.png\" alt=\"\" class=\"wp-image-4115 lazyload\" data-srcset=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-288.png 957w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-288-300x279.png 300w, https:\/\/blog.iyatt.com\/wp-content\/uploads\/2022\/03\/image-288-768x715.png 768w\" data-sizes=\"(max-width: 957px) 100vw, 957px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 957px; --smush-placeholder-aspect-ratio: 957\/891;\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u672c\u6587\u4e3b\u8981\u662f\u4e3a\u4e86\u4ecb\u7ecd\u4f7f\u7528 face_recognition\uff08\u540e\u7b80\u79f0 fr\uff09\uff0c\u8be5\u9879\u76ee\u63d0\u4f9b\u7684 API \u53ef\u4ee5\u5feb\u901f\u5b9e\u73b0\u4eba [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"zakra_page_container_layout":"customizer","zakra_page_sidebar_layout":"customizer","zakra_remove_content_margin":false,"zakra_sidebar":"customizer","zakra_transparent_header":"customizer","zakra_logo":0,"zakra_main_header_style":"default","zakra_menu_item_color":"","zakra_menu_item_hover_color":"","zakra_menu_item_active_color":"","zakra_menu_active_style":"","zakra_page_header":true,"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-4073","post","type-post","status-publish","format-standard","hentry","category-all"],"modified_by":"IYATT-yx","_links":{"self":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/posts\/4073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4073"}],"version-history":[{"count":0,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/posts\/4073\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4073"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4073"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}