人脸检测

作者: 圣_狒司机 | 来源:发表于2018-04-28 11:44 被阅读76次

    原理

    使用2017年8月更新的opencv最新版本,使用CascadeClassifier类分类器可以一步做出人脸检测,在人脸检测的基础上做图像分块,可以做出更细致的眼睛、鼻子、笑容检测。

    核心代码

    import ...
    
    def face_detect(img):
        gray = color.rgb2gray(img)
        faces=face_cascade.detectMultiScale(gray)
        for face in faces:
            x,y,w,h = face
            rec = draw.polygon_perimeter([y,y,y+h,y+h],[x,x+w,x+w,x])
            img[rec] = [0,0,255]
        return img
    
    face_cascade=cv2.CascadeClassifier()
    face_cascade.load(...) # # you xml file path
    
    cap = cv2.VideoCapture(0)
    while True:
        _,img = cap.read()
        cv2.imshow('hi',face_detect(img[:,::-1,:]))
        if cv2.waitKey(20) == 27:break 
    

    要点

    1. 这里交错使用了cv2 和skimage,因为skimage更pythonic,纯粹是个人喜好。
    2. 直接调用CascadeClassifier一般是不会成功的,要使用分离器load类方法标注出xml源头。
    3. cv2中的灰度化图像函数,传入三通道彩图得到一个0 ~ 256范围的灰度图,skimage中rgb2gray中得到的是0~1之间的浮点数数组,为了能调用cv2 的分类器,需要将数组做)0~256 的扩大和改性。
      gray = np.array(im,dtype='uint8')

    效果

    原图 检测后 检测前 检测后

    相关文章

      网友评论

        本文标题:人脸检测

        本文链接:https://www.haomeiwen.com/subject/azzwlftx.html