# 人脸识别

# 1. 准备工作

  • 操作系统: Linux 或者 MacOS
  • Python3, pip3
  • 安装: dlib
    git clone https://github.com/davisking/dlib.git
    cd dlib
    sudo python setup.py install
    
    1
    2
    3
  • 安装: face_recognition
    sudo pip3 install face_recognition
    
    1
  • 安装: OpenCV
    sudo pip3 install opencv-python
    
    1

人脸识别库官方支持的的操作系统是Linux, MacOS。我们这里使用的是Linux操作系统。face_recognition需要调用dlib库,因此在安装face_recognition之前需要先安装dlib库,这里采用源码编译安装dlib

# 2. 测试安装

在python环境中输入

import face_recognition
import cv2
1
2

若没有报错,则说明准备工作已经完成了。

# 3. 人脸检测

import face_recognition
image = face_recognition.load_image_file("face_detect_demo.jpg")
face_locations = face_recognition.face_locations(image)
print(face_locations)
1
2
3
4

输出:

[(116, 306, 223, 199), (186, 464, 275, 374)]
1

这里的输出为一个列表,包含两个元素,也就是找到了两个人脸。 接着使用OpenCV可视化face_recognition找到的两个人脸。

cv2.rectangle(image, (face_locations[0][1], face_locations[0][0]), (face_locations[0][3], face_locations[0][2]), (0,123,234), 2)
cv2.rectangle(image, (face_locations[1][1], face_locations[1][0]), (face_locations[1][3], face_locations[1][2]), (0,123,234), 2)
cv2.imshow('face_detect_demo',image)
cv2.waitKey(0)
1
2
3
4

于是得到:

detected_faces

# 4. 人脸识别

import face_recognition
import cv2
# 加载只含周杰伦的图片
known_image = face_recognition.load_image_file("Jay_Chou.jpeg")
# 加载一张包含周杰伦的图片
unknown_image = face_recognition.load_image_file("test_face_recognition.jpeg")

# 对只含周杰伦的图片进行编码
Jay_encoding = face_recognition.face_encodings(known_image)[0]
# 对待识别的图片进行编码
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]

# 对比两者的编码, 判断周杰伦是否在 test_face_recognition.jpeg 中
results = face_recognition.compare_faces([Jay_encoding],unknown_encoding)
print(results)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

输出

[True]
1

表示test_face_recognition.jpeg中包含了周杰伦。

上述例子源码可以在这里下载。

更多例子参考face_recognitionExamples