Arhn - архитектура программирования

OpenCV KCF Отслеживание предварительно выбранного объекта

ищу руководство о том, как реализовать отслеживание KCF и подходит ли оно для проекта, который я создаю. Работаю над последней версией OpenCV на Python для создания программы, которая отслеживает определенные объекты, когда они перемещаются перед камерой. конечная цель состоит в том, чтобы просто подсчитать, сколько именно этого конкретного объекта находится в нижней половине кадра. В настоящее время у меня есть рабочая версия, создающая мой собственный каскад, но я ужасно пытался реализовать собственное отслеживание.

С тех пор я обнаружил встроенное отслеживание и возился с некоторыми примерами кода с сайтов Opencv и Learnopencv, сосредоточившись на KCF. Этот код ниже.

import cv2
import sys

(major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.')

img = cv2.imread('OXO200Front.jpg')

if __name__ == '__main__' :

# Set up tracker.
# Instead of MIL, you can also use

tracker_types = ['BOOSTING', 'MIL','KCF', 'TLD', 'MEDIANFLOW', 'GOTURN']
tracker_type = tracker_types[2]

if int(minor_ver) < 3:
    tracker = cv2.Tracker_create(tracker_type)
else:
    if tracker_type == 'BOOSTING':
        tracker = cv2.TrackerBoosting_create()
    if tracker_type == 'MIL':
        tracker = cv2.TrackerMIL_create()
    if tracker_type == 'KCF':
        tracker = cv2.TrackerKCF_create()
    if tracker_type == 'TLD':
        tracker = cv2.TrackerTLD_create()
    if tracker_type == 'MEDIANFLOW':
        tracker = cv2.TrackerMedianFlow_create()
    if tracker_type == 'GOTURN':
        tracker = cv2.TrackerGOTURN_create()

cap = cv2.VideoCapture(0)
ok, frame = cap.read()

#Initializing a bounding box 
bbox = img

bbox = cv2.selectROI(frame, False)
ok = tracker.init(frame, bbox)

while(1):
    ok, frame = cap.read()
    timer = cv2.getTickCount()
    ok, bbox = tracker.update(frame)
    fps = cv2.getTickFrequency() / (cv2.getTickCount() - timer);
if ok:
    p1 = (int(bbox[0]), int(bbox[1]))
    p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3]))
    cv2.rectangle(frame, p1, p2, (255,0,0), 2, 1)
else :
    # Tracking failure
    cv2.putText(frame, "Tracking failure detected", (100,80), 
    cv2.FONT_HERSHEY_SIMPLEX, 0.75,(0,0,255),2)
    cv2.putText(frame, tracker_type + " Tracker", (100,20), 
    cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50,170,50),2);

# Display FPS on frame
cv2.putText(frame, "FPS : " + str(int(fps)), (100,50), 
cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50,170,50), 2);

# Display result
cv2.imshow("Tracking", frame)

K = cv2.waitKey(1)
if (K==27):
    break
cap.release()
cv2.destroyAllWindows()

Это правильный способ сделать это? Как мне использовать изображения объектов, которые я хочу отслеживать? а не выделение ограничивающей рамки в начале. Любой совет или помощь будет здорово! Спасибо

14.02.2018

Ответы:


1

KCF — приличный и быстрый трекер одиночных объектов. У него могут возникнуть проблемы с отслеживанием объекта, если в кадре есть несколько объектов одного типа. Например, если вы отслеживаете цыпленка, и он попадает в стаю других цыплят той же породы, есть большая вероятность, что следопыт наткнется на другого цыпленка.

Здесь у вас есть две задачи: обнаружение объекта и отслеживание объекта. Но, возможно, вам на самом деле нужен только класс объекта и местоположение. Для этого я бы порекомендовал найти обнаружение и локализацию объектов YOLO. Это может сделать работу напрямую.

Тем не менее, если вы все еще хотите использовать KCF, сначала вам нужно определиться с объектом, который вы хотите отслеживать. Если ваш каскад может распознать объект, вы можете просто взять небольшие (многомасштабные) фрагменты изображения в первом кадре, отметить их координаты и передать их вашему каскаду, чтобы увидеть, содержат ли они объект или нет. Если они содержат объект, используйте координаты патча изображения для инициализации KCF (вместо того, чтобы рисовать их вручную) и дайте ему отследить. В какой-то момент он будет дрейфовать, поэтому используйте каскадный детектор для повторного обнаружения и повторной инициализации с определенным интервалом.

14.02.2018
  • Спасибо за помощь! Не могли бы вы направить меня к ссылке/руководству или какой-либо документации о том, как мне реализовать упомянутый вами многомасштабный раздел? Спасибо 15.02.2018
  • Вы просто хотите реализовать скользящее окно над изображениями (кадр), возвращающими ROI (или Mat в C++ opencv), который вы можете использовать для подачи вашего каскада. Различные размеры ROI (измененные в соответствии с вашим каскадом) — это мультимасштаб, который я имел в виду. Я предполагаю, что ваш каскадный классификатор требует определенных размеров изображения? 15.02.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..