python中用opencv实现人脸识别

python中用opencv实现人脸识别

  • 作者:Geticsen
  • 时间:2019-12-11
  • 141人已阅读
简介 本次实验使用的是基于Haar特征的AdaBoost分类器来实现人脸检测,环境为python3.6+anaconda3+pycharm2018+opencv2+MySQL5.5

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

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

# -*- coding: UTF-8 -*-
"""
opencv实现人脸识别
参考:
xml 来源
1、https://github.com/opencv/opencv/tree/master/data/haarcascades
2、http://www.cnblogs.com/hanson1/p/7105265.html

"""
import cv2

# 待检测的图片路径
imagepath="./img/huge1.jpg"

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

'''
# 获取人脸识别训练数据

对于人脸特征的一些描述,opencv在读取完数据后很据训练中的样品数据,
就可以感知读取到的图片上的特征,进而对图片进行人脸识别。
xml数据下载,
参考:https://github.com/opencv/opencv/tree/master/data/haarcascades
'''
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), (0, 255, 0), 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), (0, 255, 0), 2)
        cv2.rectangle(roi_face, (e_x, e_y), (e_x + e_w, e_y + e_h), (0, 255, 0), 2)

cv2.imshow("img",image)
cv2.imshow("gray",gray)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

image.png

文章评论

Top