главная/Python: скрипт для распознавания движущихся объектов на видео
Определяем движущиеся объекты на Python

Python: скрипт для распознавания движущихся объектов на видео

Напишем скрипт на Python, который будет распознавать движущиеся объекты на видео и обводить их рамкой.

Для этого будем использовать библиотеку cv2. Импортируем ее в верху файла, и указываем в методе VideoCapture путь к вашему видеофайлу с расширением.

import cv2
capture = cv2.VideoCapture('video.mp4')

После чего инициализируем субстрактор фона и запускаем цикл с основной логикой.

bgSubtractor = cv2.createBackgroundSubtractorMOG2()

Весь код для захвата объектов с комментариями

Обратите внимание, что алгоритм захватывает не только людей и автомобили. Но в том числе блики, тени и отражения.

import cv2


# Set up the video capture
capture = cv2.VideoCapture('video.mp4')

# Set up the background subtractor
bgSubtractor = cv2.createBackgroundSubtractorMOG2()

while True:
    # Read a frame from the video
    ret, frame = capture.read()

    # Check if the video has ended
    if not ret:
        break


    # Use the background subtractor to detect moving objects
    fgMask = bgSubtractor.apply(frame)

    # Use morphological operations to remove noise from the foreground mask
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5))
    fgMask = cv2.morphologyEx(fgMask, cv2.MORPH_OPEN, kernel)

    # Find contours in the foreground mask
    contours, _ = cv2.findContours(fgMask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    # Iterate over the contours and draw rectangles around the moving objects
    for c in contours:
        x,y,w,h = cv2.boundingRect(c)
        cv2.rectangle(frame, (x,y), (x+w, y+h), (0,255,0), 2)

    # Display the frame with the moving objects highlighted
    cv2.imshow('Frame', frame)

    # Check if the user has pressed the 'q' key to quit
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break


# Release the video capture and destroy the window
capture.release()
cv2.destroyAllWindows()