如何在rpi3上通过python运行网络摄像头

时间:2016-06-20 15:24:15

标签: python raspberry-pi webcam raspberry-pi3

我正在尝试使用我的覆盆子-pi-3的MS lifecam。当我输入以下命令时,它在命令行上工作:

$ fswebcam img.jpg
Trying source module v4l2...
/dev/video0 opened.
...
Writing JPEG image to 'img.jpg'  # this works fine

现在我想通过python代码运行相机:

import pygame
import pygame.camera
from pygame.locals import *
DEVICE = '/dev/video0'
SIZE = (640, 480)  # I also tried with img size (384,288), same error
FILENAME = 'capture.jpg'
pygame.init()
pygame.camera.init()
camera = pygame.camera.Camera(DEVICE, SIZE)
camera.start()   # error on executing this line
pygame.image.save(screen, FILENAME)
camera.stop()

报告的错误是:

SystemError: ioctl(VIDIOC_S_FMT) failure: no supported formats

我很困惑。相机由rasp-pi支持,所以看起来我的python代码必须在某处更新。你能帮忙吗?

3 个答案:

答案 0 :(得分:1)

试试这个:

camera = pygame.camera.Camera(pygame.camera.list_cameras()[0])
camera.start()
img = camera.get_image()
pygame.image.save(img, FILENAME)

答案 1 :(得分:0)

出现问题,一旦我停止了使用视频流的过程,该错误就解决了。

详细信息

我有同样的问题。而

/dev/video0

被列出,camera.start()导致了相同的错误。

我跑了

   sudo motion

之前。所以我验证了该服务正在运行,停止了它,然后尝试了pygame。而且有效。

   sudo service --status-all
   sudo service motion stop

答案 2 :(得分:0)

您也可以使用:

 import cv2
cv2.namedWindow("preview")
vc = cv2.VideoCapture(0)
if vc.isOpened(): 
rval, frame = vc.read()
else:
rval = False

while rval:
cv2.imshow("preview", frame)
rval, frame = vc.read()
key = cv2.waitKey(20)
if key == 27:  # exit on ESC
    break
cv2.destroyWindow("preview")