Python三十行代码实现简单人脸识别的示例代码

时间:2022-02-28 12:49:44

一、库介绍

opencv,face_recognition,numpy,以及dlib

注意:
安装opencv速度可能过慢,需要更换国内镜像源,参考:http://www.zzvips.com/article/194782.html
附带Python3.7,64位版本 dlib whl下载路径:dlib-19.rar

二、库安装

?
1
2
3
pip install opencv-python
pip install face_recognition
pip install numpy

dlib库需进入whl文件路径下安装

?
1
pip install dlib-19.17.99-cp37-cp37m-win_amd64.whl

三、face_recognition库简单介绍

face_recognition的load_image_file方法会加载图片,并返回一个ndarray类型的数据

?
1
2
face_path = "C://Users//25103//Desktop//Python人脸识别//face//徐先生.jpg"
image = face_recognition.load_image_file(face_path)

face_recognition的face_encoding方法,可从返回的ndarray类型数据中提取人脸特征,可同时提取多个特征,返回值为列表类型

?
1
face_encoding = face_recognition.face_encodings(image)[0]

face_recognition的face_location方法可以获取图片中所有人脸的位置,其返回值为一个列表

?
1
face_locations = face_recognition.face_locations(rgb_frame)

四、代码实现以及注释讲解

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# coding = utf-8
import dlib
import cv2
import face_recognition
import os
 
# 创建视频对象
video_capture = cv2.VideoCapture(0)
 
# 加载需要识别的人脸图片(这张图片需要仅有一张脸)
# face_recognition的load_image_file方法会加载图片,并返回一个ndarray类型的数据
# ndarray类型就是NumPy的数组类型,其中的元素类型可以一致也可以不一致
face_path = "C://Users//25103//Desktop//Python人脸识别//face//徐先生.jpg"
image = face_recognition.load_image_file(face_path)
 
# face_recognition的face_encoding方法,可从返回的ndarray类型数据中提取人脸特征,可同时提取多个特征,返回值为列表类型
# 因为照片中只有一个人脸,所以我们取列表的第一个值
face_encoding = face_recognition.face_encodings(image)[0]
 
while True:
 # 从视频对象中读取一帧照片
 ret,frame = video_capture.read()
 # 将照片缩小,加快处理速度,这里将其缩小为原图的1/4
 # frame = cv2.rectangle(frame,(0,0),fx=0.25,fy=0.25)
 # 因为cv2用的是BGR色彩,我们组要将其转化为RGB进行处理
 rgb_frame = frame[:,:,::-1] # 列表转置操作
 
 # face_recognition的face_location方法可以获取图片中所有人脸的位置,其返回值为一个列表
 face_locations = face_recognition.face_locations(rgb_frame)
 print("共从视频中找到了{}张人脸".format(len(face_locations)))
 
 # 获取视频中所有人脸的特征
 face_encodings = face_recognition.face_encodings(rgb_frame,face_locations)
 
 for face in face_encodings:
 # 比较两个特征值——encoding1与encoding2,匹配返回True,否则返回False。tolerance越低,顾名思义,容错率越低,返回值为列表类型
 match = face_recognition.compare_faces([face_encoding],face,tolerance=0.4)
 name = "不认识的人"
 
 if match[0]:
  # face为图片名称
  name = os.path.basename(face_path[0:-4])
 print("找到了{}".format(name))

到此这篇关于Python三十行代码实现简单人脸识别的示例代码的文章就介绍到这了,更多相关Python 简单人脸识别内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/X_xs_mxt/article/details/115130201