Запись видео с различным разрешением одновременно с одной веб-камеры

Вопрос или проблема

Я пытаюсь создать 2 записи одновременно с одной веб-камеры. Видео низкого разрешения, которое я могу использовать для обучения нейронной сети, и видео более высокого разрешения, чтобы я мог пометить данные для своего обучения. Кто-нибудь знает, какое программное обеспечение я могу использовать для этого, которое достаточно легкое, чтобы работать на Raspberry Pi?

Вы можете сделать это, используя OpenCV в Python. Смотрите фрагмент ниже.

import cv2
import numpy as np

# Создаем объект VideoCapture
cap = cv2.VideoCapture(0)

# Проверяем, успешно ли открыта камера
if (cap.isOpened() == False): 
  print("Не удается прочитать поток камеры")

# Получаем стандартные разрешения кадра. Стандартные разрешения зависят от системы.
# Преобразуем разрешения из float в integer.
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))

# Определяем кодек и создаем объект VideoWriter. Выходные данные хранятся в файле 'output1.avi'.
out = cv2.VideoWriter('output1.avi',cv2.VideoWriter_fourcc('M','J','P','G'), 10, (frame_width,frame_height))
out2 = cv2.VideoWriter('output2.avi',cv2.VideoWriter_fourcc('M','J','P','G'), 10, (640,480))

while(True):
  ret, frame = cap.read()

  if ret == True: 

    # Записываем кадр в файл 'output.avi'
    out.write(frame)
    out2.write(frame)

    # Отображаем полученный кадр    
    cv2.imshow('frame',frame)

    # Нажмите Q на клавиатуре, чтобы остановить запись
    if cv2.waitKey(1) & 0xFF == ord('q'):
      break

  # Выход из цикла
  else:
    break 

# Когда все закончено, освобождаем объекты захвата видео и записи видео
cap.release()
out.release()
out2.release()

# Закрываем все окна
cv2.destroyAllWindows() 

Ответ или решение

Для записи двух видео с одной веб-камеры одновременно, используя различные разрешения, вы можете воспользоваться библиотекой Python OpenCV. Данная библиотека позволяет легко обрабатывать и захватывать видеопоток. Ниже приведен пример кода, который демонстрирует, как это сделать.

import cv2
import numpy as np

# Создаем объект VideoCapture
cap = cv2.VideoCapture(0)

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

# Получаем стандартные разрешения кадра; они зависят от системы
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))

# Определяем кодек и создаем объекты VideoWriter. Выходные файлы 'output1.avi' и 'output2.avi'
out_high_res = cv2.VideoWriter('output1.avi', cv2.VideoWriter_fourcc('M','J','P','G'), 10, (frame_width, frame_height))
out_low_res = cv2.VideoWriter('output2.avi', cv2.VideoWriter_fourcc('M','J','P','G'), 10, (640, 480))

while True:
    ret, frame = cap.read()

    if ret:
        # Записываем кадр в оба файла
        out_high_res.write(frame)

        # Уменьшаем разрешение для второго видео
        low_res_frame = cv2.resize(frame, (640, 480))
        out_low_res.write(low_res_frame)

        # Отображаем текущий кадр
        cv2.imshow('Camera Feed', frame)

        # Нажмите Q на клавиатуре, чтобы остановить запись
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    else:
        break 

# Освобождаем объекты захвата и записи видео
cap.release()
out_high_res.release()
out_low_res.release()

# Закрываем все окна
cv2.destroyAllWindows()

Объяснение кода:

  1. Импортирование библиотек: Мы импортируем необходимые библиотеки OpenCV и NumPy.
  2. Создание объекта VideoCapture: Используем cv2.VideoCapture(0) для доступа к первой веб-камере на устройстве.
  3. Проверка открытия камеры: Убедитесь, что камера была успешно открыта.
  4. Получение разрешений видео: Получаем высоту и ширину кадров, чтобы сохранить видео в высоком разрешении. Для низкого разрешения устанавливаем фиксированные значения (640×480).
  5. Создание объектов VideoWriter: Создаем два объекта VideoWriter для записи видео. Один будет записывать в высоком разрешении, другой – в низком.
  6. Цикл записи: В бесконечном цикле читаем кадры и записываем их в оба выхода. Для низкого разрешения мы уменьшаем размер кадра с помощью cv2.resize().
  7. Закрытие программы: Программа завершается при нажатии клавиши ‘Q’ или при завершении потока видео.

Рекомендации по запуску на Raspberry Pi:

  • Убедитесь, что у вас правильно установлены библиотеки OpenCV и NumPy. Это можно сделать через pip: pip install opencv-python numpy.
  • Запускайте программу в режиме с пониженной нагрузкой, так как Raspberry Pi имеет ограничения по производительности.
  • Вы можете уменьшить частоту кадров (например, с 10 на 5) для снижения нагрузки на систему.

Данный скрипт должен помочь вам успешно записывать видео в двух разных разрешениях с одной веб-камеры на Raspberry Pi.

Оцените материал
Добавить комментарий

Капча загружается...