人脸检测与是人工智能的一部分,现在的人脸识别有传统的人脸识别技术以及神经网路两种,不论哪种在人脸识别的准确率都不是100%,人脸识别的难度在算法上已经很成熟了,识别率也是非常的高,限制在于输入数据的不可靠性,例如传输画质损失,录入设备的采样品质太差,另外光线环境也是影响人脸识别的一个因素,太强或者太弱的光线都会使得人脸识别准确率下降。

本次实验使用的是基于Haar特征的AdaBoost分类器来实现人脸检测

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# -*- coding: UTF-8 -*-
"""
opencv实现人脸识别
参考:
xml 来源
"""
import cv2
# 待检测的图片路径
imagepath="./img/huge1.jpg"
image = cv2.imread(imagepath)
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
'''
# 获取人脸识别训练数据
对于人脸特征的一些描述,opencv在读取完数据后很据训练中的样品数据,
就可以感知读取到的图片上的特征,进而对图片进行人脸识别。
xml数据下载,
'''
face_cascade = cv2.CascadeClassifier(r'./resSet/haarcascade_frontalface_default.xml')
leye_cascade = cv2.CascadeClassifier(r'./resSet/haarcascade_lefteye_2splits.xml')
reye_cascade = cv2.CascadeClassifier(r'./resSet/haarcascade_righteye_2splits.xml')
eye_cascade = cv2.CascadeClassifier(r'./resSet/haarcascade_eye.xml')
#cv2.namedWindow("img",0);
# 探测人脸
# 根据训练的数据来对新图片进行识别的过程。
faces = face_cascade.detectMultiScale(
  gray,
  scaleFactor = 1.15,
  minNeighbors = 5,
  minSize = (5,5),
)
eyes = eye_cascade.detectMultiScale(
  gray,
  scaleFactor = 1.15,
  minNeighbors = 3,
  minSize = (3,3),
)
# 我们可以随意的指定里面参数的值,来达到不同精度下的识别。返回值就是opencv对图片的探测结果的体现。
# 处理人脸探测的结果
print ("发现{0}个人脸!".format(len(faces)))
#标识人脸
for(x,y,w,h) in faces:
    cv2.rectangle(image,(x,y),(x w,y h),(0,255,0),2)
    cv2.rectangle(gray, (x, y), (x   w, y   h), (02550), 2)
    roi_face = gray[y:y   h, x:x   w]
    roi_color = image[y:y   h, x:x   w]
    # 框住眼睛 为了减少运算量 把脸部作为输入
    eyes = eye_cascade.detectMultiScale(
                roi_face,
                scaleFactor = 1.66,
                minNeighbors = 6,
                minSize = (6,5),
            )
    for (e_x, e_y, e_w, e_h) in eyes:
        cv2.rectangle(roi_color, (e_x, e_y), (e_x   e_w, e_y   e_h), (02550), 2)
        cv2.rectangle(roi_face, (e_x, e_y), (e_x   e_w, e_y   e_h), (02550), 2)
cv2.imshow("img",image)
cv2.imshow("gray",gray)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行效果如图(注意图片要自己选一张,直接网络百度就行):

image.png

夜河资源网提供的所有内容仅供学习与交流。通过使用本站内容随之而来的风险以及法律责任与本站无关,所承担的法律责任由使用者承担。
一、如果您发现本站侵害了相关版权,请附上本站侵权链接和您的版权证明一并发送至邮箱:yehes#qq.com(#替换为@)我们将会在五天内处理并断开该文章下载地址。
二、本站所有资源来自互联网整理收集,全部内容采用撰写共用版权协议,要求署名、非商业用途和相同方式共享,如转载请也遵循撰写共用协议。
三、根据署名-非商业性使用-相同方式共享 (by-nc-sa) 许可协议规定,只要他人在以原作品为基础创作的新作品上适用同一类型的许可协议,并且在新作品发布的显著位置,注明原作者的姓名、来源及其采用的知识共享协议,与该作品在本网站的原发地址建立链接,他人就可基于非商业目的对原作品重新编排、修改、节选或者本人的作品为基础进行创作和发布。
四、基于原作品创作的所有新作品都要适用同一类型的许可协议,因此适用该项协议, 对任何以他人原作为基础创作的作品自然同样都不得商业性用途。
五、根据二〇〇二年一月一日《计算机软件保护条例》规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可不经软件著作权人许可,无需向其支付报酬!
六、鉴此,也望大家按此说明转载和分享资源!本站提供的所有信息、教程、软件版权归原公司所有,仅供日常使用,不得用于任何商业用途,下载试用后请24小时内删除,因下载本站资源造成的损失,全部由使用者本人承担!