各种人脸解锁,人脸支付,软件人脸登陆是怎样实现的?Python来告诉你识别的原理!(2)

今天玩手机的时候发现我们这一张脸,不管是丑的,美的,帅的还是胖的它们都能用来识别手机解锁,微信或者支付宝支付!或者软件的登陆解密!为咱们的生活带来了非常大的便利。于是突发奇想,这个是怎么实现的呢?那咱们就一一来分析讲解!

请é®ä¸ä¸ä¸é¢ä¸¤ä¸ªè¡¨æç人è¸åå«æ¯è°,æ¥æºåªé,谢谢

在本文中,我将详细介绍如何使用face_recognitionPillow从一堆照片中提取并识别人脸的模块。我想归功于布拉德特拉弗西,因为这个想法最初是从一个Traversy媒体视频,我有书签了一段时间,最近重新观看(链接在本文下面)。使用相同的功能,我调整了脚本以允许输入一个照片目录,最终,它将被合并到我的第二个PDM Django应用程序中。

它们是非常粗糙和现成的脚本来证明概念,这是我在一次每周的代码签入调用中向Bob演示的。

我创建了两个脚本,一个用于从一堆照片中提取人脸,并将它们存储为指定目录中的jpeg文件。第二个脚本获取一组已知的面孔(我猜这是控件集),并将它们与照片进行比较,以识别随机照片中的面孔。总的来说,它在识别已知面孔方面非常准确和快速。

提取人脸

第一个脚本实现起来相当简单。我们有一个图像目录,在这个目录中我们要提取面部的所有图像,我们将这个目录称为未知目录。脚本本质上扫描每一张照片,识别脸部,并将这个脸图像作为一个新的jpeg存储在另一个目录中,我们称之为“提取”。该文件以原始图像的标题和图像中的脸位置创建。

import face_recognition from PIL import Image import os unknown_faces = os.listdir(“…/frec/unknown/”) for image in unknown_faces: image_of_people = face_recognition.load_image_file(f"…/frec/unknown/{image}“) unknown_face_locations = face_recognition.face_locations(image_of_people) for face_location in unknown_face_locations: top, right, bottom, left = face_location face_image = image_of_people[top:bottom, left:right] pil_image = Image.fromarray(face_image) pil_image.save(f”…/frec/extract/{image}_{top}.jpg")

所以从这样的图像来看:

​您将在提取目录中获得两个单独的图像,如下所示:

在我自己的照片上测试了这一点之后,这个模块是如此的好,以至于在我的照片中的一张海报上找到了一张脸,如果您从存储库下载代码,您就可以看到它。

人脸识别时间

第二个脚本做了所有聪明的事情,只要它将使用未知面孔的图像目录,将它们与已知的人脸图像进行比较,然后在原始图像上‘画’一个脸周围的正方形与被识别的人的名字,如果它确实识别了一个脸,那么它将在脸周围画一个以“未知人”代替这个名字的正方形。

import face_recognition import os from PIL import Image, ImageDraw unknown_faces = os.listdir(“…/frec/unknown/”) Bob_image = face_recognition.load_image_file(“…/frec/known/Bob.jpeg”) Bob_encoding = face_recognition.face_encodings(Bob_image)[0] Julian_image = face_recognition.load_image_file(“…/frec/known/Julian.jpeg”) Julian_encoding = face_recognition.face_encodings(Julian_image)[0] known_face_encodings = [ Bob_encoding, Julian_encoding, ] known_face_names = [ “Bob”, “Julian”, ] for ukface in unknown_faces: ukimage = face_recognition.load_image_file(f"…/frec/unknown/{ukface}“) ukface_locations = face_recognition.face_locations(ukimage) ukface_encodings = face_recognition.face_encodings(ukimage, ukface_locations) # Convert to PIL format pil_image = Image.fromarray(ukimage) # Set up drawing on image draw = ImageDraw.Draw(pil_image) for (top, right, bottom, left), ukface_encoding in zip( ukface_locations, ukface_encodings ): matches = face_recognition.compare_faces(known_face_encodings, ukface_encoding) name = “Unknown Person” if True in matches: first_match_index = matches.index(True) name = known_face_names[first_match_index] # Draw Box draw.rectangle( ((left - 10, top - 10), (right + 10, bottom + 10)), outline=(227, 236, 75) ) # Draw Label text_width, text_height = draw.textsize(name) draw.rectangle( ((left - 10, bottom - text_height + 2), (right + 10, bottom + 10)), fill=(227, 236, 75), outline=(227, 236, 75), ) draw.text((left, bottom - text_height + 5), name, fill=(0, 0, 0, 0)) del draw pil_image.save(f”…/frec/identified/{ukface}_scanned.jpg") #pil_image.show()

我玩过‘dra.矩形’函数的功能,试图尽可能多地捕捉正方形内部的脸,因为原来脸被正方形遮住了。

因此,从给定的具有未知面孔的图像来看:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

%以上前端开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值