Fork me on GitHub

python人脸检测

python人脸检测 [原创]

在python中完成人脸检测是很轻松的一件事,因为可以利用cv2库
那么我们需要完成的功能的有

  • 读取一张带有人脸的图片,并进行自动分析
  • 输出人脸的数量,并对图片中人脸位置进行标记,保存。
    首先,需要安装cv2这个库(opencv),这里使用pip进行安装
    1
    pip install opencv-python

等待安装完成,然后我们就可以开始写代码了。

1
2
3
4
5
import cv2

imagepath = "test.jpg"
image = cv2.imread(imagepath)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

这不多说,就是引用cv2,读取目录下一张叫test.jpg的图片,并进行灰度处理
接下来是人脸检测的部分,我们首先需要下载识别训练包,就是别人训练好的数据包
我放到微云上了,可以进行下载
链接: https://share.weiyun.com/5QN5XKA (密码:0jdz)
解压后里面所有文件放到目录下haarcascades文件夹中,然后写入如下代码:

1
face_cascade = cv2.CascadeClassifier('haarcascades\\haarcascade_frontalface_alt2.xml')

这里默认使用的正脸数据包(haarcascade_frontalface_alt2),因为通过测试这个识别率较高,
接下来,进行人脸检测

1
2
3
4
5
6
faces = face_cascade.detectMultiScale(
gray,
scaleFactor=1.15,
minNeighbors=5,
minSize=(5, 5),
)

这样,我们就获取到了一个列表,里面存有检测到的人脸的数据
len(faces)就是人脸的数量,可以使用print(len(faces))进行输出
接下来,我们对图片中人脸位置进行标记,遍历每个人脸,使用rectangle进行画矩形标记

1
2
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x + w, y + w), (0, 255, 0), 2)

最后,我们使用cv2.imwrite('out.jpg', image)保存输出最终图片
完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import cv2

imagepath = "test.jpg"
image = cv2.imread(imagepath)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
face_cascade = cv2.CascadeClassifier('haarcascades\\haarcascade_frontalface_alt2.xml')

faces = face_cascade.detectMultiScale(
gray,
scaleFactor=1.15,
minNeighbors=5,
minSize=(5, 5),
)
print(len(faces))

for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x + w, y + w), (0, 255, 0), 2)
cv2.imwrite('out.jpg', image)

利用opencv库就是这么简单,后面我还会弄python人脸对比识别的教程