python + opencv 实现人脸检测

来源:互联网 发布:即时通讯app源码下载 编辑:程序博客网 时间:2024/05/16 10:11
可以用opencv 的库函数来实现人脸检测
#coding=utf-8import numpy as npimport cv2import timeimport sys, getoptfrom video import create_capturefrom common import clock, draw_strdef 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 rectsdef 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函数
在主函数里面读取视频的每一帧,可以直接处理读入人炼狱眼睛的的分类器,然后每一帧检测人脸与眼睛,检测到则画方框