口腔检测在某些情况下不起作用

问题描述 投票:0回答:1

我目前正在 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参数,但并没有改善结果。这与特定肤色有关,还是设置中还有其他需要调整的地方?

python opencv computer-vision object-detection cascade-classifier
1个回答
0
投票

然而,在测试第二张黑人女性图像时,嘴巴是 在某些情况下未检测到,如第二张图片所示。

问题可以解决。

  • 指数从 7 降低至 1 请注意,您必须根据闪电情况或化妆脸进行更改。

片段:

mouth = mouth_cascade.detectMultiScale(roi_gray, minNeighbors=7)

致:

mouth = mouth_cascade.detectMultiScale(roi_gray, minNeighbors=1)

注意到,它适用于任何类型的深色黑人女性和亚洲女性。通过使用 odd 索引而不是 even 索引。

截图:

© www.soinside.com 2019 - 2024. All rights reserved.