Поиск похожих объектов на видео

В общем мне надо проанализировать видео с камер видеонаблюдения и найти на нём определённый объект по заданному фото того самого объекта и сохранять кадры. Видел что-то похожее на хабре, где определяются объекты на видео, но как обучить модель именно под мой объект я не знаю. Плюс анализ должен быть точный, т.к людей на видео много а качество не из лучших, да и плюс сам пакет который надо найти на видео довольно однообразный. Кто-то может помочь с кодом или хотя-бы дать идею как это можно реализовать?


Ответы (1 шт):

Автор решения: Alexandr Ogorodnik

В первую очередь, я рекомендую использовать глубокое обучение, например, модели на основе свёрточных нейронных сетей (CNN) для распознавания объектов вот есть несколько популярных: (R-CNN, Fast R-CNN, Faster R-CNN, YOLO, SSD). TensorFlow и PyTorch — отличные библиотеки для этих целей.

Для начала вам нужно собрать данные: изображения объекта, которые вы хотите найти на видео. Затем, разметь их (определи координаты объекта на каждом изображении).

Сбор данных и разметка: Используйте специализированные инструменты, такие как LabelImg, чтобы размечать изображения.

Модель для обучения: Используйте модель YOLO (You Only Look Once) или Faster R-CNN. YOLO хороша тем, что предоставляет высокую точность и скорость.

Обучение модели: После разметки данных, обучите модель с использованием TensorFlow или PyTorch. Вот пример с использованием YOLO:

         import torch
         from models.common import DetectMultiBackend
         from utils.general import non_max_suppression, scale_coords
         from utils.torch_utils import select_device

         # Указание пути к весам, конфигурации и изображениям
         weights = 'yolov5s.pt'
         device = select_device('')
         model = DetectMultiBackend(weights, device=device)
         img_size = 640

         # Функция для загрузки изображения и получения предсказаний
         def detect_objects(image_path):
             img = torch.load(image_path)
             results = model(img, augment=False, size=img_size)
             pred = non_max_suppression(results[0], 0.25, 0.45)
             return pred

         # Загрузка и предсказание для тестового изображения
         image_path = 'test.jpg'
         predictions = detect_objects(image_path)
         print(predictions)

Анализ видео: Используйте OpenCV для захвата видео и анализа каждого кадра с помощью обученной модели.

       import cv2

       cap = cv2.VideoCapture('video.mp4')

       while cap.isOpened():
           ret, frame = cap.read()
           if not ret:
               break

           predictions = detect_objects(frame)

           # Сохранение кадров с найденным объектом
           for det in predictions:
               if det is not None and len(det):
                   cv2.imwrite('output_frame.jpg', frame)

       cap.release()
       cv2.destroyAllWindows()

Вот вам пример, который вы можете адаптировать под свои задачи.

Так же ссылка на документ который вы можете изучить, надеюсь будет полезно: https://arxiv.org/pdf/1905.01614

→ Ссылка