0

我第一次来这里,但我真的搜索过它,遗憾的是我没有找到帮助。

我有一个面部识别算法......目前,我正在努力提高它的效率。

经过一番研究,我得出结论,dlib.get_frontal_face_detector ()是减慢我的代码的函数。

然后,我的方法是去除我的人物背景,只提取两个图像之间的差异。在它之后,我有一些图像,从完整的原始图像中裁剪出来,只有差异的这幅图像要小得多(例如完整图像:1520 x 2592 像素和带有面部的裁剪图像:150x200 像素)。

OBS:检测相机离被识别的人很远,因此图像中的人脸很小,而且这种尺寸的大部分都是无用的,因此我决定删除无用的部分。

但是,这里事情变得疯狂了:当我将微小的、更小的、裁剪的脸应用到dlib.get_frontal_face_detector ()时,它有时无法识别它!(有时它会识别,这很奇怪!)。这听起来很奇怪,因为当我将完整图像应用到 f​​ace_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 中定义的阈值,以丢弃太小的图像。

4

0 回答 0