Повторная идентификация лица с использованием цветной гистограммы с OpenCV - PullRequest
1 голос
/ 03 апреля 2020

Я пытаюсь идентифицировать людей, которые покидают и повторно вводят вид камеры для видеопотока.

Используя GluonCV, я запустил обнаружение объекта на начальном кадре из видеофайла (используя OpenCV), извлек пользователей, которых я хочу отслеживать, и назначил каждому ID +, сохранил изображение человека, обрезанного до ограничительной рамки. Затем для каждого человека я выполняю отслеживание объекта, используя SiamRPN, как описано в GluonCV документах . Когда человек выходит из фрейма, трекер теряет его, и я прекращаю трекинг.

Проблема в том, что когда они повторно входят в следующий фрейм, я хочу иметь возможность повторно идентифицировать человека. Я перезапускаю обнаружение объекта каждые N кадров, чтобы обнаружить новых людей или людей, которые повторно вошли в кадр. Как Po C я хотел попытаться повторно идентифицировать, используя их одежду, потому что для моего варианта использования есть конечное число людей, носящих различную контрастную одежду.

Мой код пока:

from cv2 import cv2


def compare_hist(im1, im2):
    h, w, _ = im1.shape
    im2 = cv2.resize(im2, (w, h))
    test_image = cv2.cvtColor(im1, cv2.COLOR_BGR2HSV)
    query_image = cv2.cvtColor(im2, cv2.COLOR_BGR2HSV)
    # hist
    test_hist = calc_hist(test_image)
    cv2.normalize(test_hist, test_hist, 0, 1, cv2.NORM_MINMAX)
    query_hist = calc_hist(query_image)
    cv2.normalize(query_hist, query_hist, 0, 1, cv2.NORM_MINMAX)
    return cv2.compareHist(test_hist, query_hist, cv2.HISTCMP_CORREL)


def calc_hist(im):
    channels = [0, 1]
    bins = [50, 60]
    ranges = [0, 180, 0, 256]
    return cv2.calcHist([im], channels, None, bins, ranges)


if __name__ == '__main__':
    score = compare_hist(cv2.imread("a.png"), cv2.imread("b.png"))
    print(score)

Однако это дает противоречивые результаты и множество ложноположительных результатов, если я не установлю очень высокий порог, который приведет к ложным отрицаниям. Например, изображение 1 ниже на 73% соответствует изображению 2, но только 64% ​​соответствует изображению 3:

1 base image 2 test 1 3 test 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...