我使用dlib库进行面部标志检测。但是当面部非正面时,dlib的“frontal_face_detector”无法检测到面部。
是否还有其他方法可以检测个人资料中的面部地标?
答案 0 :(得分:2)
根据我的经验,Dlib的默认面部检测器(例如Python API中的detector = dlib.get_frontal_face_detector()
)在非正面上运行良好,甚至可以检测靠近轮廓的面部。
根据source code,这是因为它是一个基于HOG的探测器,实际上是由5个不同的HOG滤波器构建的:
它由5个HOG过滤器构成。前视,左视,右视,前视但向左旋转,最后是前视但向右旋转。
以下是检测示例:
这是我使用的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])