初中电脑课本 人脸识别

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
import cv2

# 导入人脸检测分类器,创建检测对象face
face = cv2.CascadeClassifier("./haarcascades/haarcascade_frontalface_default.xml")
eye = cv2.CascadeClassifier("./haarcascades/haarcascade_eye.xml") ###
img = cv2.imread("./photo.jpg")
# 使用检测对象face启动detectMultiScale函数进行人脸检测。
faceRects = face.detectMultiScale(
img,
scaleFactor=1.1, # 在特征比对中,每次图片缩小的比例,
minNeighbors=5, # 设定达到的特征数,
minSize=(100, 100), # 允许得到目标区域的最小范围,
maxSize=(200, 200) # 允许得到目标区域的最大范围。
)
eyeRects = eye.detectMultiScale( ###
img,
scaleFactor=1.1,
minNeighbors=5,
minSize=(25, 25), # 因为眼睛比脸小,所以这里要调小,一开始调成10,会识别到错误的区域,加到25就没问题了
maxSize=(200, 200)
)
print(faceRects, type(faceRects)) # 输出faceRects的值和数据类型
print(eyeRects, type(eyeRects))
cv2.rectangle(img, (0, 0), (140, 40), (0, 255, 255), -1) # 20改成40,扩展黄色面积的长度
# 标注找到多少的人脸
cv2.putText(img, "Finding " + str(len(faceRects)) + " face", (3, 15),
cv2.FONT_HERSHEY_COMPLEX, 0.5, (255, 0, 0), 1)
cv2.putText(img, "Finding " + str(len(eyeRects)) + " eye", (3, 30), # 15改成30,在下面加多一行
cv2.FONT_HERSHEY_COMPLEX, 0.5, (255, 0, 0), 1)
# 由于有可能检测到多张人脸,所以要用循环将人脸逐个框出来
for x, y, w, h in faceRects: # 循环获取每张人脸的数据
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 1) # 框出人脸
for x, y, w, h in eyeRects:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 1)
cv2.imshow("image", img)
cv2.waitKey()
cv2.destroyAllWindows()

点击下载 人脸检测分类器 文件


初中电脑课本 人脸识别
https://roachlin.github.io/2021-12-03-face-recognition/
作者
RoachLin
发布于
2021年12月3日
许可协议