我第一次来这里,但我确实进行了搜索,可惜没有找到帮助。
我有一个面部识别算法...目前,我正在尝试提高其效率。
经过研究,我得出结论认为 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中定义的阈值,以丢弃太小的图像。