dlib.get_frontal_face_detector () получает лица в полном изображении, но не получает в обрезанном изображении - PullRequest
0 голосов
/ 20 декабря 2018

я впервые здесь, но я действительно искал об этом, и, к сожалению, я не нашел помощи.

У меня есть алгоритм распознавания лиц ... В настоящее время я пытаюсь повысить эффективностьЭто.

После некоторого изучения я пришел к выводу, что 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 для удаления слишком маленьких фрагментов изображения.

...