dlib.get_frontal_face_detector()获得完整图像的脸部,但没有获得完整图像的

时间:2018-12-19 21:29:58

标签: python opencv face-detection dlib facial-identification

我第一次来这里,但我确实进行了搜索,可惜没有找到帮助。

我有一个面部识别算法...目前,我正在尝试提高其效率。

经过研究,我得出结论认为 dlib.get_frontal_face_detector()是使我的代码变慢的功能。

然后,我的方法是删除人物的背景并仅提取两个图像之间的差异。之后,我得到了从完整图像和原始图像中裁切的图像,并且只有差异的图像要小得多(例如,完整图像:1520 x 2592像素和带有面部的裁剪图像:150x200像素)。

OBS:探测相机远非被识别的人,因此,人脸在图像中很小,这种大小的大部分是无用的,因此我决定去掉无用的部分。

但是,这里的事情变得疯狂了: 当我将较小的,较小的裁切的脸部应用于 dlib.get_frontal_face_detector()时,有时它无法识别! (有时候它会认出来,这很奇怪!)。这听起来很奇怪,因为当我将完整图像应用到face_detector时,即使分辨率相同,但形状较大,它只能识别同一张脸!

我想我在这里缺少一些理论信息...

detector = dlib.get_frontal_face_detector()

new_image = []
im2, contours, hierarchy  = cv2.findContours(im_bw,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
    [x, y, w, h] = cv2.boundingRect(contour)
    #print(x, y, w, h)
    if h<20 or w<20:
        continue
    else:
        new_image.append(img2_n[y*inv_coef:y*inv_coef+h*inv_coef, x*inv_coef:x*inv_coef+w*inv_coef])

for images in new_image:
    rgb_img = cv2.cvtColor(images, cv2.COLOR_BGR2RGB)
    dets = detector(rgb_img, 1)

在较小图像的提取器上方,并将其用于检测器。下面是我将完整图像应用于同一检测器的简单代码。

full_img = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)
dets = detector(full_img, 1)

任何对DLIB,OPENCV和PYTHON有所了解的人都可以帮助我吗?

OBS¹:未被识别的图像大于for中定义的阈值,以丢弃太小的图像。

0 个答案:

没有答案