社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

使用 Python 的人脸识别系统

小白学视觉 • 2 年前 • 271 次点击  

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

介绍

人脸识别不同于人脸检测。在人脸检测中,我们只检测了人脸的位置,在人脸识别任务中,我们识别了人的身份。

在本文中,我们将在人脸识别库的帮助下,使用python构建一个人脸识别系统。

市场上有许多用于人脸识别的算法。这一计算机视觉挑战是从视频和图片中检测人脸。许多应用程序可以构建在识别系统之上。许多大公司出于安全和身份验证的目的而采用识别系统。

识别系统用例

人脸识别系统在现代得到广泛应用,许多新的创新系统都建立在识别系统之上。

有几个用例:

  • 寻找失踪者
  • 识别社交媒体上的帐户
  • 识别汽车中的驾驶员
  • 考勤系统

多种实现面部识别的算法取决于其性能和准确性。

传统人脸识别算法

传统的人脸识别算法不符合现代人脸识别标准。它们旨在使用旧的传统算法识别面部。

OpenCV 提供了一些传统的面部识别算法。

  • Eigenfaces:http://www.scholarpedia.org/article/Eigenfaces
  • 尺度不变特征变换 (Scale Invariant Feature Transform,SIFT):https://en.wikipedia.org/wiki/Scale-invariant_feature_transform
  • Fisher faces:http://www.scholarpedia.org/article/Fisherfaces
  • 局部二进制模式直方图 (Local Binary Patterns Histograms,LBPH):https://en.wikipedia.org/wiki/Local_binary_patterns

这些方法在提取图像信息和匹配输入和输出图像的方式上有所不同。

LBPH 算法是一种简单但非常有效的方法,仍在使用中,但与现代算法相比速度较慢。

人脸识别深度学习

有多种基于深度学习的面部识别算法可供使用。

  • DeepFace
  • DeepID series of systems
  • FaceNet
  • VGGFace

一般来说,基于地标的人脸识别器对人脸图像进行拍摄,并试图找到眉毛、嘴角、眼睛、鼻子、嘴唇等基本特征点。有60多个地标。

人脸识别涉及的步骤

  1. 人脸检测:定位人脸,记下每个人脸定位的坐标,并在每个人脸周围绘制一个边界框。
  2. 面部对齐。标准化人脸以获得快速训练。
  3. 特征提取。从面部图片中提取局部特征进行训练,这一步由不同的算法执行不同的操作。
  4. 人脸识别。将输入人脸与我们数据集中的一个或多个已知人脸进行匹配。

本文重点介绍使用库 face_recognition 实现人脸识别,该库基于深度学习技术,并承诺使用单个训练图像的准确率超过 96%。

执行

使用python实现人脸识别系统。使用 face_recognition 库实现基于深度学习的人脸识别系统。

1. 设置人脸识别库:

为了安装人脸识别库,我们需要先安装dlib

  • dlib:它是一个现代 C++ 工具包,包含与机器学习相关的算法和工具。
# installing dlib 
pip install dlib
  • 安装实际的人脸识别库face recognition
# installing face recognition
pip install face recognition
  • Opencv用于一些图像预处理
# installing opencv 
pip install opencv

Note: Sometimes installing dlib throws error in that case install install the C++ development toolkit using vs_code community .

导入库

import cv2
import numpy as np
import face_recognition

2. 加载图片:

我们完成了库的安装和导入。是时候将一些示例图像加载到 face_recognition库中了。

face_recognition库仅支持 BGR 格式的图像。在打印输出图像时,我们应该使用 OpenCV 将其转换为 RGB。

Face_recognition仅加载 BGR 格式的图像。

import cv2
import numpy as np
import face_recognition
img_bgr = face_recognition.load_image_file('student_images/modi.jpg')
img_rgb = cv2.cvtColor(img_bgr,cv2.COLOR_BGR2RGB)
cv2.imshow('bgr', img_bgr)
cv2.imshow('rgb', img_rgb)
cv2.waitKey

输出→ BGR 与 RGB

3.检测和定位人脸:

face_recognition库可以自行快速定位人脸,我们不需要使用haar_cascade或其他技术。

img_modi=face_recognition.load_image_file('student_images/modi.jpg')
img_modi_rgb = cv2.cvtColor(img_modi,cv2.COLOR_BGR2RGB)
#--------- Detecting Face -------
face = face_recognition.face_locations(img_modi_rgb)[0]
copy = img_modi_rgb.copy()
# ------ Drawing bounding boxes around Faces------------------------
cv2.rectangle(copy, (face[3], face[0]),(face[1], face[2]), (255,0,255), 2)
cv2.imshow('copy', copy)
cv2.imshow('MODI',img_modi_rgb)
cv2.waitKey(0)

4. 样本图像识别:

face_recognition库基于深度学习,它支持单次学习,这意味着它需要一张图片来训练自己检测一个人。

img_modi = face_recognition.load_image_file('student_images/modi.jpg')
img_modi = cv2.cvtColor(img_modi,cv2.COLOR_BGR2RGB)
#------to find the face location
face = face_recognition.face_locations(img_modi)[0]
#--Converting image into encodings
train_encode = face_recognition.face_encodings(img_modi)[0]
#----- lets test an image
test = face_recognition.load_image_file('student_images/modi2.jpg')
test = cv2.cvtColor(test, cv2.COLOR_BGR2RGB)
test_encode = face_recognition.face_encodings(test)[0]
print(face_recognition.compare_faces([train_encode],test_encode))
cv2.rectangle(img_modi, (face[3], face[0]),(face[1], face[2]), (255,0,255), 1)
cv2.imshow('img_modi', img_modi)
cv2.waitKey(0)

上面的代码拍了两张总理的照片,因为两张照片都是同一个人,所以它返回了true。

  • face_recognition.face_encodings(imgelon)[0]→返回传递图像的编码。
  • face_recognition.compare_faces([train_encode],test_encode) 获取经过训练的编码列表和未知图像的测试编码。如果两个测试编码在训练编码中匹配,则返回True ;否则,它会返回False.

了解人脸识别的工作原理

  1. 我们将人的照片和他们的名字传递给模型。
  2. 该模型拍摄每张照片,将它们转换为某种数字编码,并将它们存储在一个列表中,并将所有标签(人名)存储在另一个列表中。
  3. 在预测阶段,当我们传递未知人的图片时,识别模型会将该人的图像转换为编码。
  4. 在将未知人的图像转换为编码后,它会尝试根据距离参数找到最相似的编码。与未知人的编码距离最小的编码将是最接近的匹配。
  5. 在获得最接近的匹配编码后,我们从该列表中获取该编码的索引并使用索引。我们找到检测到的人的名字。

识别系统的挑战

这些都是识别系统面临的重大挑战,需要解决。

  • 姿势:识别系统容易受到人体姿势的影响。面部识别系统将无法预测该人的面部是否不可见。
  • 照明:照明会极大地改变面部轮廓。用于人脸识别的照片应在适当的照明条件下拍摄。
  • 面部表情:不同的面部表情会导致对同一个人的图像的不同预测。
  • 低分辨率:低分辨率图片包含的信息较少,因此不适合人脸识别训练。

结论

本文讨论了如何使用 python 和单次图像训练技术实现人脸识别系统。你可以进一步使用像 python Tkinter 这样的 GUI 来设计基于 GUI 的考勤系统。我们看到了影响识别系统的各种挑战以及如何解决这些挑战。

下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/155811
 
271 次点击