Вопрос или проблема
Я пытаюсь создать 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()
Объяснение кода:
- Импортирование библиотек: Мы импортируем необходимые библиотеки OpenCV и NumPy.
- Создание объекта VideoCapture: Используем
cv2.VideoCapture(0)
для доступа к первой веб-камере на устройстве. - Проверка открытия камеры: Убедитесь, что камера была успешно открыта.
- Получение разрешений видео: Получаем высоту и ширину кадров, чтобы сохранить видео в высоком разрешении. Для низкого разрешения устанавливаем фиксированные значения (640×480).
- Создание объектов VideoWriter: Создаем два объекта
VideoWriter
для записи видео. Один будет записывать в высоком разрешении, другой – в низком. - Цикл записи: В бесконечном цикле читаем кадры и записываем их в оба выхода. Для низкого разрешения мы уменьшаем размер кадра с помощью
cv2.resize()
. - Закрытие программы: Программа завершается при нажатии клавиши ‘Q’ или при завершении потока видео.
Рекомендации по запуску на Raspberry Pi:
- Убедитесь, что у вас правильно установлены библиотеки OpenCV и NumPy. Это можно сделать через pip:
pip install opencv-python numpy
. - Запускайте программу в режиме с пониженной нагрузкой, так как Raspberry Pi имеет ограничения по производительности.
- Вы можете уменьшить частоту кадров (например, с 10 на 5) для снижения нагрузки на систему.
Данный скрипт должен помочь вам успешно записывать видео в двух разных разрешениях с одной веб-камеры на Raspberry Pi.