某些情况下嘴巴检测不工作
我现在正在用Python写一个函数,目的是通过OpenCV的级联检测器来识别图片中的嘴巴。下面是代码片段:
def detect_mouth(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, minNeighbors=7)
for (x, y, w, h) in faces:
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
mouth = mouth_cascade.detectMultiScale(roi_gray, minNeighbors=10)
if len(mouth) > 1:
mouth = mouth_cascade.detectMultiScale(roi_gray, minNeighbors=100)
elif len(mouth) < 1:
mouth = mouth_cascade.detectMultiScale(roi_gray, minNeighbors=7)
for (mx, my, mw, mh) in mouth:
cv2.rectangle(roi_color, (mx, my), (mx+mw, my+mh), (255, 0, 255), 2)
return img
我发现嘴巴的检测在不同种族的图片上并不一致。当我用白人女性的图片测试时,嘴巴能被正确识别,如下图所示:
但是,当我用黑人女性的图片测试时,有些情况下嘴巴却没有被识别出来,如下图所示:
嘴巴没有被识别,反而显示成了眼睛!有趣的是,在其他一些情况下,嘴巴又能成功被识别,比如这个:
我尝试调整了minNeighbors这个参数,但结果并没有改善。这是不是和特定的肤色有关,还是说我的设置还有其他需要调整的地方?