人脸识别已成为我们日常生活中常见的科技技术之一,在身份验证、门禁卡、打卡机等都要用到人脸识别。同时人脸识别也在软件开发中愈发重要,有助于使应用程序更加健壮,今天我们将用Python来做一个简单的人脸识别,希望对小伙伴有所帮助。
开发工具:Visual Studio Community Edition
安装地址:https://visualstudio.microsoft.com/zh-hans/
1、创建虚拟环境
在Visual Studio上打开一个新目录,创建一个新的Python环境。再通过使用venv打开集成终端并创建venv目录。
语法:
$Python -m venv venv
$venv /bin/Activate ps1 //激活环境
2、提取依赖项
已完成虚拟环境的创建后,接下来是提取依赖项,为此需要用上opencv和face_recognition。
语法:
pip install opencv-python face_recognition
创建一个新的Python文件,并在该文件调用文件missingPerson.py,假设该项目是应用在寻找匹配失踪人员,导入我们的依赖项并编写前几行。
代码:
import cv2
import numpy as np
import face_recognition
import os
from face_recognition.api import face_distance
若我们的照片存储在服务器中,需要将所有任务的图像引入我们的应用程序并读取这些图像。
代码:
path = 'MissingPersons'
images = []
missingPersons = []
missingPersonsList = os.listdir(path)
for missingPerson in missingPersonsList :
curImg = cv2.imread(f'{path}/{missingPerson}')
images.append(curImg)
missingPersons.append(os.path.splitext(missingPerson)[0])
print(missingPersons)
我们将使用opencv读取这些失踪人员的所有图像,并将其附加到我们的missingPerson列表中。
在我们从存储中读取所有失踪人员的人脸图像后,还要找人脸编码,以便我们可用CNN人脸检测器在图像中创建人脸边界框的二维数组。
代码:
def findEncodings(images):
encodeList = []
for img in images:
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
encode = face_recognition.face_encodings(img)[0]
encodeList.append(encode)
print(encodeList)
return encodeList
encodeListKnown = findEncodings(images)
print('Encoding Complete')
现在将二维数组存储到已知人脸编码列表中,现在我们就有了所有失踪人员的面部编码,接下来是将这些面部编码与我们的报告人图像进行匹配。
代码:
def findMissingPerson(encodeListKnown, reportedPerson='found1.jpg'):
person = face_recognition.load_image_file(f'ReportedPersons/{reportedPerson}]')
person = cv2.cvtColor(person,cv2.COLOR_BGR2RGB)
try:
encodePerson = face_recognition.face_encodings(person)[0]
comparedFace = face_recognition.compare_faces(encodeListKnown,encodePerson)
faceDis = face_recognition.face_distance(encodeListKnown,encodePerson)
matchIndex = np.argmin(faceDis)
if comparedFace[matchIndex]:
name = missingPersons[matchIndex].upper()
print(name)
return name
else:
print('Not Found')
return False
except IndexError as e:
print(e)
return e
该段代码是加载被报告人的图像文件,对他们的脸进行编码,将其与我们已知的人脸编码进行比较,匹配寻找是否存在其人。
暂无评论