#python #python-3.x #opencv #raspberry-pi
#python #python-3.x #opencv #raspberry-pi
Вопрос:
Я пытаюсь сохранить видео со своего usb-webacamera
компьютера RP4
. Моя камера поддерживает эти форматы
[0]: 'MJPG' (Motion-JPEG, compressed)
Size: Discrete 1920x1080
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 800x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 176x144
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.033s (30.000 fps)
[1]: 'YUYV' (YUYV 4:2:2)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 176x144
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Я пытаюсь получить MJPG
данные, потому default
YUYV
что имеет небольшое разрешение.
Я смог сохранить avi
видео с разрешением 1920х1080 с помощью этого кода на python
import cv2
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,1080)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*"MJPG"))
cap.set(cv2.CAP_PROP_FPS, 30)
fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))
fourcd = fourcc
fourcc = fourcc.to_bytes(4, 'little').decode('utf-8')
print("FOURCC=" str(fourcc))
fps = int(cap.get(cv2.CAP_PROP_FPS))
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)))
print("FPS=" str(fps))
print(size)
result = cv2.VideoWriter('filename.avi', fourcd, fps, size)
while True:
_, img = cap.read()
result.write(img)
Но во время записи появляются эти ошибки
Corrupt JPEG data: 2989 extraneous bytes before marker 0xd9
и мое сохраненное видео действительно быстрое, оно становится медленнее, когда я уменьшаю разрешение. Означает ли это, что SD-карта не способна сохранять кадры так быстро, или Pi не способен обрабатывать сжатые кадры такого размера?
Ошибка ОБНОВЛЕНИЯ не возникает при снижении разрешения
Комментарии:
1. Зачем вам нужен mjpg? Это может быть проблемой для RPi4, но не уверен.
2. Я не уверен, но когда я делал то же самое со своей
Jetson Nano
камерой, иGstreamer
моя камера получала 1088 пикселей в cap.get(cv2.CAP_PROP_FRAME_HEIGHT). Может быть, проблемы могут быть в этом?3. кстати. Я получаю тот же результат, что и при выполнении
opencv
установки,pip
а также при сборке из исходного кода..4. Вы не уверены, зачем вам нужна MJPG? Я вижу, что у RPi4 были некоторые проблемы: github.com/opencv/opencv/issues/5594 . Но это может быть решено.