2016-07-11 2 views
2

Как я могу сделать cv2.VideoCapture (0) распознать USB-камеру с малиной-пи.cv2.videocapture не работает на Raspberry-pi

def OnRecord(self, evt): 
    capture = cv2.VideoCapture(0) 
    if (not capture.isOpened()): 
     print "Error" 
# video recorder 
    fourcc = cv2.cv.CV_FOURCC(*'XVID') # cv2.VideoWriter_fourcc() does not exist 
    video_writer = cv2.VideoWriter.open("output.mp4", fourcc, 20, (640, 480), True) 

    # record video 
    while (capture.isOpened()): 
     ret, frame = capture.read() 
     if ret==True: 
      video_writer.write(frame) 
      cv2.imshow('Video', frame) 
     else: 
      break 

def OnCancel(self, evt): 
    capture.release() 
    video_writer.release() 
    cv2.destroyAllWindows() 

но только печатает ошибка.

Так что я думаю, захват не открывается. Что может быть причиной?

Я пробовал этот код из документации opencv, но не работал для меня.

import numpy as np 
import cv2 

cap = cv2.VideoCapture(0) 

# Define the codec and create VideoWriter object 
fourcc = cv2.VideoWriter_fourcc(*'XVID') 
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480)) 

while(cap.isOpened()): 
    ret, frame = cap.read() 
    if ret==True: 
     frame = cv2.flip(frame,0) 

     # write the flipped frame 
     out.write(frame) 

     cv2.imshow('frame',frame) 
     if cv2.waitKey(1) & 0xFF == ord('q'): 
      break 
    else: 
     break 

# Release everything if job is finished 
cap.release() 
out.release() 
cv2.destroyAllWindows() 

Любая помощь была бы принята с благодарностью.

+0

Читать ответы и комментарии здесь [Возможное решение] (HTTP://stackoverflow.com/questions/38051664/saving-videos-doesnt-work-in-opencv2-python/38054063#38054063) –

+0

Тем не менее его тот же результат. Ничто не работает вообще. – SivamNatesan

ответ

0

Перейдите к выводу и введите lsusb и проверьте, признана ли камера USB или нет. Если он распознается, попробуйте указать другой идентификатор устройства, например 1 или 2 или 3, а не 0.

+0

Он распознает мою камеру, даже я вижу поток веб-камеры в прямом эфире. Но всякий раз, когда я пытаюсь использовать VideoCapture, он печатает ошибку и сохраняет только 5,5 кбайт выходного файла. – SivamNatesan

+0

Действительно ли это просто печать «Ошибка»? Или есть ли больше информации? И это вообще связано с вашей видеокамерой? Кажется, что запись изображения в видеофайл вызывает проблемы, поэтому он может быть независим от источника изображения. Имеет ли изображение тот же размер, который вы указываете для кадров видеофайла? – BlackJack

+0

Да, это только печатает Ошибка в соответствии с моим кодом, поэтому я думаю, что захват не открывается. Но он создает файл размером 5.5kb в выходной папке. Так может возникнуть проблема при записи видео. – SivamNatesan

0

выглядит так, как будто у вас может быть проблема с кодеком, попробуйте использовать кодек «MJPG» вместо XVID. Для получения дополнительной информации см. here

+0

'fourcc = cv2.cv.FOURCC (* 'MJPG')' 'video_writer = cv2.VideoWriter.open (" output.avi ", fourcc, 20, (640, 480), True)' Он также не работает , – SivamNatesan

+0

Какая ошибка. Попробуйте использовать расширение .mp4. –

+0

Если захват не открыт, он должен печатать Error в соответствии с моим кодом, поэтому он печатает Error.I также пытался расширение .mp4, но результат такой же. – SivamNatesan

0

Убедитесь, что используемая вами камера совместима с UVC, поскольку openCV, работающий на системах на базе Linux (например, raspi), начинает делать некоторые глупые вещи, когда он работает с не UVC камеры.

+0

Как я могу убедиться, что моя камера совместима с UVC? – SivamNatesan

+0

https://en.wikipedia.org/wiki/List_of_USB_video_class_devices – bstadt

0

В моем опыте с CV2 заменой источника веб-камеры на linux не всегда легко. Как работает OpenCV, он автоматически извлекается из источника видео по умолчанию, который известен (обычно) как video0. Отключите свою веб-камеру USB и войдите в терминал и введите ls /dev/video*

Помните номер, который он говорит. Теперь подключите свою веб-камеру USB и введите ls /dev/video* еще раз и найдите любое новое/видео, это ваша веб-камера USB. Теперь введите mv /dev/videoX videoY, а X - номер вашей веб-камеры USB и Y - исходный номер. Это заменит вашу камеру по умолчанию pi.

Это не является постоянным, так как вам нужно будет делать это каждый раз, когда запускается ваш pi, альтернативой этому является создание файла bash, который запускается при запуске. Создайте текстовый файл и скопируйте его в него.

#!/bin/bash 
mv /dev/videoX videoY 

(заменить X и Y конечно)

и место, что в /etc/init.d директории вашего пи. Не забывайте, что вы, возможно, придется использовать
chmod 755 /etc/init.d/FILENAME.sh
дать ему разрешение на выполнение

+0

Помог ли вам этот ответ, а если нет, какие ошибки вы столкнулись при попытке этого? –

+0

, пожалуйста, взгляните на это http://stackoverflow.com/questions/38454655/cv2-videocapture-doesnt-return-frames – SivamNatesan

+0

Хорошо, я посмотрю на ваш другой вопрос, однако вы попытались переключить то, что ваша исходная камера была ? –

4

нагрузки правильные видео 4 драйвера Linux

sudo modprobe bcm2835-v4l2 
Смежные вопросы