【python人脸识别】使用opencv识别图片中的人脸
概述:
OpenCV
是一个基于BSD许可(开源)发行的跨平台计算机视觉库
为什么有OpenCV? 计算机视觉市场巨大而且持续增长,且这方面没有标准API,如今的计算机视觉软件大概有以下三种:
1、研究代码(慢,不稳定,独立并与其他库不兼容)
2、耗费很高的商业化工具(比如Halcon, MATLAB+Simulink)
3、依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备)这是如今的现状,而标准的API将简化计算机视觉程序和解决方案的开发,OpenCV致力于成为这样的标准API。
OpenCV致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(Integrated
Performance
Primitives)得到更快的处理速度。右图为OpenCV与当前其他主流视觉函数库的性能比较。
-------百度百科
所以说opencv就是做图像处理的,而我们要实现的人脸识别,opencv
库是必不可少的。
原理:opencv是以图片中心为初始点,以一个缩放因子进行慢慢的缩放,在范围内进行识别,缩放因子必须适宜,太大可能会导致识别不出来
1、下载库
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
2、引入依赖
opencv的引入不是直接引入opencv,而是引入cv2
import cv2
3、代码
my = cv2.imread('img/my.jpg')
face_detector = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")
faces = face_detector.detectMultiScale(my)
for x,y,w,h in faces:
cv2.rectangle(my,pt1=(x,y),pt2=(x+w,y+h),color=[0,0,225],thickness=2)
cv2.imshow("my",my)
cv2.waitKey(0)
cv2.destroyAllWindows()
注意: haarcascade_frontalface_alt.xml文件时python安装目录下Lib\site - packages\cv2\data,需要将该文件复制到项目内,不复制的话需要绝对路径。
问题:
描述:当图片太大或者分辨过高时,可能会遇到只能显示图片的部分
解决:加入代码my = cv2.resize(my,None,fx=0.5,fy=0.5)
或者cv2.namedWindow('my', cv2.WINDOW_NORMAL)
不过有其他显示问题,可能会导致图片显示变形
源代码:
my = cv2.imread('img/my.jpg')
my = cv2.resize(my,None,fx=0.5,fy=0.5)
# 人脸特征数据的数据包
face_detector = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")
# 图片进行人脸数据对比
# scaleFactor:缩放因子,默认1.3,
# minNeighbors:最小邻居,默认为3
faces = face_detector.detectMultiScale(my)
# print(faces)
for x,y,w,h in faces:
# pt1:人脸左上角点
# pt2:人脸右下角点
cv2.rectangle(my,pt1=(x,y),pt2=(x+w,y+h),color=[0,0,225],thickness=2)
# cv2.namedWindow('my', cv2.WINDOW_NORMAL)
cv2.imshow("my",my)
cv2.waitKey(0)
cv2.destroyAllWindows()