#python #opencv #computer-vision #kalman-filter #background-subtraction
#python #opencv #компьютерное зрение #kalman-фильтр #фон-вычитание
Вопрос:
Я внедряю программу отслеживания объектов на основе движения, которая использует фоновое вычитание, фильтр Калмана и венгерский алгоритм. Все работает нормально, кроме окклюзий. Когда два объекта находятся достаточно близко друг к другу, фоновая вычитка распознает его как один из этих двух объектов. После их разделения программа правильно распознает эти два объекта. Я ищу решение / алгоритм, который будет обнаруживать окклюзию, как показано в пункте c) в примере ниже.
Я буду признателен за любые ссылки или примеры кода, относящиеся к проблеме обнаружения окклюзии при использовании фонового вычитания.
Комментарии:
1. Пожалуйста, поделитесь кодом — что вы пробовали до сих пор.
2. Я предполагаю, что у вас есть эти изображения в виде видео. Одним из методов было бы отслеживание отдельных объектов в нескольких кадрах. Если два объекта внезапно сливаются вместе, вы можете предположить, что это все еще два объекта. Это не сработает, если они уже входят в кадр как один большой двоичный объект. Другим методом может быть попытка стереть полученную вами маску. Если после нескольких итераций эрозии большие двоичные объекты отделяются, то вы знаете, что они, вероятно, являются двумя объектами, расположенными близко друг к другу. Это будет работать только в том случае, если они лишь немного перекрываются.
Ответ №1:
Обнаружение объектов с использованием алгоритма машинного обучения должно надежно различать эти объекты даже при значительной окклюзии. Вы ничего не рассказали о своей среде, поэтому я не знаю, какие у вас ограничения, но, используя подход ML, вот как я бы решил вашу проблему.
import cv2
from sort import *
tracker = Sort() # Create instance of tracker (see link below for repo)
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
# Not sure what your environment is,
#but get your objects bounding boxes like this
detected_objects = detector.detect(frame) #pseudo code
# Get tracking IDs for objects and bounding boxes
detected_objects_with_ids = tracker.update(detected_objects)
...
В приведенном выше примере используется этот фильтр Калмана и венгерский алгоритм, который может отслеживать несколько объектов в режиме реального времени.
Опять же, не уверен в вашей среде, но вы можете найти готовые алгоритмы обнаружения объектов на сайте Tensorflow.