Я пытаюсь добиться результатов, как показано на видео (Способ 3 с помощью NetCat) https://www.youtube.com/watch?v=sYGdge3T30oOpenCV Python, чтение видео с именем трубы
Дело в том, чтобы поток видео с малиновым пи Ubuntu ПК и обработать его с помощью openCV и python.
Я использую команду
raspivid -vf -n -w 640 -h 480 -o - -t 0 -b 2000000 | nc 192.168.0.20 5777
для потоковой передачи видео на ПК, а затем на ПК я создал имя трубы «ФИФО» и перенаправил выход
nc -l -p 5777 -v > fifo
тогда я пытаюсь читать трубу и отображать результат в сценарии python
import cv2
import sys
video_capture = cv2.VideoCapture(r'fifo')
video_capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640);
video_capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 480);
while True:
# Capture frame-by-frame
ret, frame = video_capture.read()
if ret == False:
pass
cv2.imshow('Video', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything is done, release the capture
video_capture.release()
cv2.destroyAllWindows()
Однако я просто в конечном итоге с ошибкой
[mp3 @ 0x18b2940] Заголовок отсутствует эта ошибка генерируемый командой video_capture = cv2.VideoCapture(r'fifo')
Когда я перенаправить вывод Netcat на компьютере файл, а затем читает его в python видео работает, однако оно ускоряется примерно в 10 раз.
Я знаю, что проблема связана с скриптом python, потому что передача nc работает (в файл), но я не могу найти никаких подсказок.
Как достичь результатов, как показано на прилагаемом видео (метод 3)?
Я предполагаю это та часть, которая работает на рабочем столе Linux, но не появляются, чтобы показать, что нужно запустить на малине Pi или как запустить оба конца двух машин? –
Ну, мы пытались достичь результатов, как показано на видео (метод 3) https://www.youtube.com/watch?v=sYGdge3T30o, как упоминалось в @Richard. Все остается таким же, как описано в видео. Я просто хотел помочь с скриптом python для чтения из именованного канала, который не был показан в видео. –
Я надеялся, что это позволит мне использовать аргументы командной строки для ffmpeg для принудительного аппаратного декодирования через qsv и h264_qsv вместо скрытых значений по умолчанию OpenCV. И хотя технически этот ответ действительно делает это, я на самом деле вижу снижение скорости по сравнению с использованием cv2.VideoCapture ('filename.mp4'). Я получаю около 111 кадров в секунду вместо 259 кадров в секунду. (в той же системе ffmpeg-декодирование до нуля превышает 1100 кадров в секунду). Я думаю, что это, вероятно, из-за того, что все данные попадают по всему миру. Хорошее доказательство концепции, по крайней мере. – TheAtomicOption