python人脸检测

最近突然对图像识别有了点兴趣,便开始找一些识别的库,我这里采用的是python+opencv的方法,利用opencv内置的人脸检测库,可以比较方便快速地检测出人脸,学的很浅,也就图一乐。记录下来也只是为了以后便于回忆。

将图片转化为灰度图片

1
2
3
4
5
6
7
8
import cv2 as cv
img = cv.imread('testlca.jpg')
cv.imshow('test', img)
gray_img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow('gray', gray_img)
cv.imwrite('testlca_gray.jpg', gray_img)
cv.waitKey(0)
cv.destroyAllWindows()

首先读取名叫testlca.jpg的图片,并且将它的命名为img,然后展示这个图片,再用opencv内置的函数,将这个图片转化为灰度图片,并且写入到testlca_gray.jpg文件,也展示这个图片。

一般处理图片,都需要先将其转化为灰度图片,然后再进行一系列的识别等步骤。

调整图片大小

1
2
3
4
5
6
7
8
9
10
11
import cv2 as cv
img = cv.imread('testlca.jpg')
cv.imshow('test', img)
resize_test = cv.resize(img, (200,200), fx=0.5, fy=0.5)
cv.imshow('resize_test', resize_test)

while True:
if ord('q') == cv.waitKey(0):
break

cv.destroyAllWindows()

同样读取文件,这里将img图片进行了修改,将它转化为200*200像素的图片,并且也展示出来,还做了一个按键检测,当按下q的时候,图片才会关闭。

绘制图形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import cv2 as cv
img = cv.imread('testlca.jpg')

x,y,w,h = 100,100,100,100
cv.rectangle(img, (x,y), (x+w,y+h), (0,0,255), 2)
cv.circle(img, (x+w//2,y+h//2), 50, (0,255,0), 2)

cv.imshow('img', img)


while True:
if ord('q') == cv.waitKey(0):
break

cv.destroyAllWindows()

这里定义并赋值了4个变量,并且在图片上打印了对应位置的矩形和圆形。

人脸检测

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import cv2 as cv
def face_detect_demo():
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
face_detector = cv.CascadeClassifier('E:/python/opencv/sources/data/haarcascades/haarcascade_eye.xml')
face = face_detector.detectMultiScale(gray,1.9,5)
for x, y, w, h in face:
cv.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)
cv.imshow('result', img)

img = cv.imread('testlca.jpg')
face_detect_demo()


while True:
if ord('q') == cv.waitKey(0):
break

cv.destroyAllWindows()

先定义了一个检测函数,这里非常简陋,也没做参数处理了,原理就是调用官方的人脸识别库识别出图片中的人脸,并且用矩形框显示出来。

其中face_detector.detectMultiScale这个函数中的第二个变量叫缩小比例,是影响效果的重要变量,要选取适当的变量值才可以正确的识别出所有人脸。