Python Opencv 人脸检测
一个微小的例子,检测摄像头中出现的人脸并框出来。
环境部署
sudo apt-get install python-opencv
在Opencv的项目上下载用于检测人脸的级联:
https://github.com/opencv/opencv/blob/master/data/haarcascades/
下载 haarcascade_frontalface_default.xml
(这里面还有用于检测其他的级联文件,比如眼睛)
一个示例
人脸识别中找人脸很重要,只有检测到人脸,再进行算法比对数据库中的人脸。
#coding=utf-8
import cv2
#加载级联文件,返回一个级联分类器
face_cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
#打开摄像头
camera = cv2.VideoCapture(0)
while True:
#读一帧
ret, frame = camera.read()
#转为灰度图,人脸检测需要灰度图
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
#人脸检测,返回坐标
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
#参数:gray 灰度图像 scaleFactor 检测过程中每次迭代时图像的压缩率 minNeighbors 每个人脸矩形保留近邻数目的最小值
for (x,y,w,h) in faces:
#在原图像上画矩形
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
#将其显示出来
cv2.imshow("camera", frame)
if cv2.waitKey(1000 / 12) & 0xff == ord("q"):
break
#关闭摄像头,销毁所有窗口
camera.release()
cv2.destroyAllWindows()
测试结果
性能
不得不说的是C++的性能比Python快至少一半,但我觉得由于现在计算机性能并不像以前那么弱,所以C++与Python没有什么区别,当然,像嵌入式设备这种性能不强的还是用C++比较好。