6

ウェブカメラをPythonプログラムに統合する方法を探しています。

私は900mHzにOCされたRaspberryPiモデルAで実行しているので、ソリューションはARM互換であり、(願わくば)軽量である必要があります。

私が見たほとんどの投稿では、OpenCVモジュールを使用してWebカメラを読み取ることを推奨していますが、Webカメラから黒いフレーム以外のものを表示することはできません。OpenCVは私のウェブカメラと互換性がないと思います。ただし、Linuxで使用可能な他のすべてのWebカメラアプリケーションは、私のWebカメラからのフィードを検出して表示できます。

Pythonを使用してウェブカメラからキャプチャするための他の軽量または簡単な方法があるかどうか疑問に思っています。おそらく、Webカメラの/ 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

そして、これは私が使用しているコードスニペットです:

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")

ご協力いただきありがとうございます!

4

2 に答える 2

3

gstreamer-0.10を使用できます。

  1. コマンドラインで動作するようにします。例:gst-launch -v v4l2src!デコードビン!ffmpegcolorspace!pngenc!filesink location = 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)
    
于 2012-12-23T13:54:45.543 に答える
1

Webカメラから単一のフレームをキャプチャするいくつかの方法を試しました。

uvccaptureは1つのオプションであり、コマンドは次のとおりです。

uvccapture -d /dev/video0 -o outfile.jpg

ストリーマーは別のものであり、コマンドは次のようになります。

streamer -c /dev/video0 -o outfile.jpeg

はい、Pythonの「コマンド」モジュールを使用してこのコマンドを実行して結果を取得し、結果のファイルをOpenCVで開いて処理する必要があるため、これは最も高いパフォーマンスではないことを認識しています。

しかし、それは機能します。私はこれをいくつかの自動化プロジェクトの本番環境で非常にうまく使用しています。私が経験するラグはすべて私の画像処理ソフトウェアに基づいており、生の画像を非常にすばやく表示できます。

于 2012-12-23T02:00:39.590 に答える