Запись видеопотока с Ровера

Этот код — это пример использования библиотеки OpenCV для Python для захвата видеопотока через RTSP (Real Time Streaming Protocol) и его последующей обработки. Вот подробное описание каждого из его компонентов:

  1. Импорт библиотеки:

    • import cv2: импортирует библиотеку OpenCV, которая является одной из основных библиотек для работы с изображениями и видео в Python.

  2. Установка URL RTSP потока:

    • rtsp_url: переменная, содержащая URL для доступа к RTSP-потоку видео. В данном случае поток поступает с фронтальной камеры через go2rtc.

  3. Создание объекта VideoCapture:

    • cap = cv2.VideoCapture(rtsp_url): создаёт объект VideoCapture, который позволяет захватывать видео по указанному URL. Это может быть ссылка на видеофайл, видеопоток или устройство захвата видео.

  4. Проверка доступности видеопотока:

    • if not cap.isOpened(): проверяет, удалось ли открыть видеопоток. Если поток не удалось открыть, программа выводит сообщение об ошибке и завершает выполнение.

  5. Настройка кодека и объекта для записи видео:

    • fourcc: "Four-character code" для кодирования видеофайлов. Здесь используется кодек XVID.

    • out = cv2.VideoWriter(...): создаёт объект VideoWriter для записи видео в файл output.avi. Указываются параметры, такие как кодек, частота кадров и размеры кадра.

  6. Чтение и обработка кадров в бесконечном цикле:

    • В цикле while True происходит захват кадров из потока:

      • ret, frame = cap.read(): метод read() возвращает флаг ret, указывающий на успех операции, и сам кадр frame.

      • Если ret ложный, выводится сообщение об ошибке, и цикл прерывается.

      • out.write(frame): записывает захваченный кадр в файл.

      • cv2.imshow('Frame', frame): отображает кадр в окне.

  7. Управление потоком через пользовательский ввод:

    • if cv2.waitKey(1) & 0xFF == ord('q'): обрабатывает нажатие клавиши 'q' для выхода из цикла. Функция waitKey задерживает выполнение на указанное количество миллисекунд, ожидая нажатие клавиши.

  8. Освобождение ресурсов и закрытие окон:

    • После выхода из цикла освобождаются объекты cap и out, и закрываются все созданные OpenCV окна с помощью cv2.destroyAllWindows().

import cv2

# Укажите URL RTSP потока
rtsp_url = 'http://localhost:1984/front_camera/'

# Создание объекта VideoCapture для RTSP потока
cap = cv2.VideoCapture(rtsp_url)

# Проверка, открылся ли поток
if not cap.isOpened():
    print("Ошибка: Невозможно открыть видео поток")
    exit()

# Определение кодека и создание объекта VideoWriter
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))))

while True:
    # Чтение кадра из потока
    ret, frame = cap.read()
    
    if not ret:
        print("Ошибка: Невозможно прочитать данные из видеопотока")
        break

    # Запись кадра в файл
    out.write(frame)

    # Отображение кадра в окне
    cv2.imshow('Frame', frame)

    # Выход из цикла по нажатию клавиши 'q'
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Освобождение объекта Capture и закрытие всех окон
cap.release()
out.release()
cv2.destroyAllWindows()

Этот скрипт можно использовать для мониторинга или записи видеопотоков, а также для обработки видео в реальном времени с помощью дополнительных функций OpenCV. Для работы с кодом необходимо установить библиотеку opencv-python. (pip install opencv-python)

Last updated