проблема распознавания людей по цвету одежды при несильной освещенности

Я заинтересован в том, чтобы люди следовали за настоящим роботом. Я хотел бы использовать цвет одежды в качестве ключевого признака для идентификации целевого человека перед роботом, чтобы следовать за ним/ней, но я страдаю из-за того, что это слабая функция с очень простым изменением освещения. Итак, мне нужно изменить этот алгоритм на другой или обновить значения (RGB) онлайн в режиме реального времени, но у меня недостаточно опыта в обработке изображений.

это мой полный код для определения цвета:

import cv2
import numpy as np
from imutils.video import FPS
# capturing video through webcam
import time

cap = cv2.VideoCapture(0)

width = cap.get(3)  # float
height = cap.get(4)  # float
print width, height
time.sleep(2.0)
fps = FPS().start()
while (1):
    _, img = cap.read()

    if _ is True:
        hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    else:
        continue
    # blue color

    blue_lower = np.array([99, 115, 150], np.uint8)
    blue_upper = np.array([110, 255, 255], np.uint8)
    blue = cv2.inRange(hsv, blue_lower, blue_upper)
    kernal = np.ones((5, 5), "uint8")
    blue = cv2.dilate(blue, kernal)
    res_blue = cv2.bitwise_and(img, img, mask=blue)

            # Tracking blue
    (_, contours, hierarchy) = cv2.findContours(blue, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    for pic, contour in enumerate(contours):
        area = cv2.contourArea(contour)
        if (area > 300):
            x, y, w, h = cv2.boundingRect(contour)
            img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
            cv2.putText(img, "Blue Colour", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0))
    cv2.imshow("Color Tracking", img)
    if cv2.waitKey(10) & 0xFF == ord('q'):
        cap.release()
        cv2.destroyAllWindows()
        break
    fps.update()

    # stop the timer and display FPS information
    fps.stop()
#    print("[INFO] elapsed time: {:.2f}".format(fps.elapsed()))
#    print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))

это выходы:

1- узнать человека по цвету одежды

узнать человека по цвету одежды

2- пропало, изменение подсветки очень простое не жесткое

потерян

Любые идеи или предложения будут оценены


person Redhwan    schedule 22.10.2019    source источник


Ответы (1)


Похоже, вам нужно использовать немного более продвинутую функцию сходства цветов для обработки сложных случаев. Delta E будет правильной отправной точкой.

Правильный порог или несколько цветов с соответствующими порогами помогут добиться довольно точных результатов:

введите здесь описание изображения

См. список цветов справа

введите здесь описание изображения

Полный пример.

person Renat Gilmanov    schedule 23.10.2019
comment
спасибо за ваше предложение, кажется, это хорошо для моей цели, вы знаете документ этого видео или код ?? - person Redhwan; 24.10.2019
comment
Что ж, я сделал реализацию (сегментацию многоцветного изображения на основе дельта E) и обработал видео. Дополнительные примеры можно найти здесь: youtube.com/channel/UCLsVHuYpywKFNAHKFfImIVg/videos. документ, аналогичный подход описан здесь: - person Renat Gilmanov; 24.10.2019
comment
могу ли я реализовать это на питоне? Если да. пожалуйста, помогите мне, я ищу больше после прочтения вашего ответа здесь, но я не могу его получить. - person Algabri; 05.12.2019
comment
@Algabri, в основном, вам нужно расширить диапазон цветов. У вас есть blue_lower и blue_upper (например, medium.com/@ckyrkou/color- пороговое значение-в-opencv-91049607b06d) . Вместо этого вы можете указать синий в качестве базового цвета и проверять каждый пиксель с помощью delta_E (python-colormath.readthedocs.io/en/latest/delta_e.html) с правильным порогом, чтобы получить лучшее сходство. - person Renat Gilmanov; 05.12.2019