使用Python/Linux读取网络摄像头的选项

Mic*_*yer 6 python webcam opencv raspberry-pi

我正在寻找一种方法将网络摄像头集成到我的python程序中.

我正在运行Raspberry Pi Model A OC'd到900mHz,因此该解决方案需要与ARM兼容并且(希望)轻量级.

我见过的大多数帖子都建议使用OpenCV模块来阅读网络摄像头,但我无法得到任何东西,只能从我的网络摄像头出现黑框.我认为OpenCV与我的网络摄像头不兼容.但是,可用于Linux的每个其他网络摄像头应用程序都可以检测并显示来自我的网络摄像头的源.

我想知道是否有任何其他轻量级或简单的方法使用python从我的网络摄像头捕获.也许我可以直接与/ dev /为我的网络摄像头连接的video0设备连接?我对任何建议持开放态度; 因为我现在正在做的事情是行不通的.

谢谢

(按照要求):

产量v4l2-ctl --all:

Driver Info (not using libv4l2):
    Driver name   : uvcvideo
    Card type     : UVC Camera (046d:081b)
    Bus info      : usb-bcm2708_usb-1.2
    Driver version: 3.2.27
    Capabilities  : 0x04000001
        Video Capture
        Streaming
Format Video Capture:
    Width/Height  : 640/480
    Pixel Format  : 'YUYV'
    Field         : None
    Bytes per Line: 1280
    Size Image    : 614400
    Colorspace    : SRGB
Crop Capability Video Capture:
    Bounds      : Left 0, Top 0, Width 640, Height 480
    Default     : Left 0, Top 0, Width 640, Height 480
    Pixel Aspect: 1/1
Video input : 0 (Camera 1: ok)
Streaming Parameters Video Capture:
    Capabilities     : timeperframe
    Frames per second: 30.000 (30/1)
    Read buffers     : 0
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码片段:

import cv

cv.NamedWindow("camera", 1)
capture = cv.CaptureFromCAM(0)

while True:
    img = cv.QueryFrame(capture)
    cv.ShowImage("camera", img)
    if cv.WaitKey(10) == 27:
        break

cv.DestroyWindow("camera")
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

kal*_*lla 3

您可以使用 gstreamer-0.10。

  1. 让它在命令行上工作。例如:gst-launch -v v4l2src!解码器!ffmpeg颜色空间!!文件接收器位置=out.png

  2. 使用 parse_launch 函数获取 Python 代码中工作管道的快捷方式。

    import gst
    
    pipeline = gst.parse_launch("""
    v4l2src ! decodebin ! ffmpegcolorspace ! pngenc ! filesink location="%s"
    """ % sys.argv[-1])
    
    pipeline.set_state(gst.STATE_PLAYING)
    
    Run Code Online (Sandbox Code Playgroud)