您的位置:首页 > 编程语言 > Python开发

python + opencv 实现人脸检测

2017-09-24 13:59 1011 查看
可以用opencv 的库函数来实现人脸检测
#coding=utf-8
import numpy as np
import cv2
import time
import sys, getopt
from video import create_capture
from common import clock, draw_str

def detect(img , cascade):#检测函数
rects = cascade.detectMultiScale(img, scaleFactor=1.3, minNeighbors=4, minSize=(30, 30),
flags=cv2.CASCADE_SCALE_IMAGE)
if len(rects) == 0:
return []
rects[:,2:] += rects[:,:2]
return rects

def draw_rects(img, rects, color):#画框函数
for x1, y1, x2, y2 in rects:
cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)

if __name__ == '__main__':#主函数
args = {}
#读入分类器
cascade_fn = args.get('--cascade', "haarcascade_frontalface_alt.xml")
# cascade_fn = args.get('--cascade', "haarcascade_righteye_2splits.xml")#yanjing
# cascade_fn = args.get('--cascade', "haarcascade_fullbody.xml")
eyes  = args.get('--eyesed-cascade', "haarcascade_eye.xml")

cascade = cv2.CascadeClassifier(cascade_fn)
eyesed  = cv2.CascadeClassifier(eyes)
print cascade_fn
#捕获摄像头视频流
cap = cv2.VideoCapture(0)
while True:
#延时
time.sleep(0.10)
# img = cv2.imread("haha2.jpg")
# print img.shape
ret,img = cap.read()#读入每一帧图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#灰度化

t = clock()#计时
rects = detect(gray, cascade)#检测人脸
vis = img.copy()
draw_rects(vis, rects, (0, 255, 0))
# if not eyesed.empty():
# for x1, y1, x2, y2 in rects:
# roi = gray[y1:y2, x1:x2]
# vis_roi = vis[y1:y2 , x1:x2]
# subrects = detect(roi.copy(), eyesed)
# draw_rects(vis_roi, subrects, (255, 0, 0))

subrects = detect(gray, eyesed)
draw_rects(vis, subrects, (255, 0, 0))

dt = clock() - t
# print dt
draw_str(vis, (20, 20), 'time: %.1f ms' % (dt*1000))
cv2.imshow('facedetect', vis)

if cv2.waitKey(5) == 27:
break
cv2.destroyAllWindows()
下面是效果图:
一共三个函数:detect函数 、draw_rects函数、main函数
在主函数里面读取视频的每一帧,可以直接处理读入人炼狱眼睛的的分类器,然后每一帧检测人脸与眼睛,检测到则画方框

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python opencv color