检测任何非正面的面部标志

时间:2017-11-05 15:53:17

标签: python c++ dlib

我使用dlib库进行面部标志检测。但是当面部非正面时,dlib的“frontal_face_detector”无法检测到面部。

是否还有其他方法可以检测个人资料中的面部地标?

2 个答案:

答案 0 :(得分:2)

根据我的经验,Dlib的默认面部检测器(例如Python API中的detector = dlib.get_frontal_face_detector())在非正面上运行良好,甚至可以检测靠近轮廓的面部。

根据source code,这是因为它是一个基于HOG的探测器,实际上是由5个不同的HOG滤波器构建的:

  

它由5个HOG过滤器构成。前视,左视,右视,前视但向左旋转,最后是前视但向右旋转。

以下是检测示例:

enter image description here

这是我使用的Python 3代码(使用OpenCV读取/写入图像并绘制矩形):

import cv2
import dlib

img = cv2.imread('will.jpg')
detector = dlib.get_frontal_face_detector()
dets = detector(img, 1)
face = dets[0]
cv2.rectangle(img, (face.left(), face.top()), (face.right(), face.bottom()), (0, 255, 0), 2)
cv2.imwrite('out.jpg', img)

答案 1 :(得分:0)

OpenCV的haar级联是一种传统方法。您应该尝试基于深度学习的方法,例如ssd或mtcnn。在这里,deepface会包装opencv,ssd,dlib和mtcnn来检测和对齐人脸。

#!pip install deepface
from deepface import DeepFace
backends = ['opencv', 'ssd', 'dlib', 'mtcnn']
detected_face = DeepFace.detectFace("img.jpg", detector_backend = backends[3])