複数のウェブカメラから同時に(またはほぼ同時に)画像をキャプチャしようとしています。私はOpenCVとVideoCaptureと Python でのプログラミングで遊んでいます。しかし、混乱があり、誰かが物事を説明するのを手伝ってくれることを願っています...
まず、VideoCapture を試してみました (Markus Gritsch の作品はhttp://videocapture.sourceforge.net/にあります)。これは非常に使いやすい Python 用のアドインです。シンプルな画像をキャプチャしたいだけの場合。それはうまく機能します...ほとんどの場合。
私のセットアップは、単一の USB ポートの USB ハブにある 2 つの安価な Web カメラと、ラップトップの内蔵 Web カメラです。
同じ USB バスで同じモデルのウェブカメラを使用し、それがどのように機能しないかなどについてすべて読みましたが、試してみることにしました。(「Cyberlink YouCam」という何十年も前にインストールしたはずのフォトブース プログラムもあります。何らかの理由で、このプログラムは OpenCV と VideoCapture の両方にとってカメラのように「見えます」。
VideoCapture は、次のように各カメラに接続してキャプチャします。
Cam0 = Device(devnum=0)
Cam0.saveSnapshot("filename0.jpg")
del Cam0
Cam1 = Device(devnum=1)
Cam1.saveSnapshot("filename1.jpg")
del Cam1
VideoCapture と説明したセットアップを使用すると、システム上のすべてのカメラから個別にキャプチャできます (YouCam を含めて合計 4 つ... 0 - 3)
問題は、このプログラムが同時に複数のカメラに接続できないように見えることです...前のカメラ インスタンスを閉じないと、フリーズするだけで、最初の Web カメラを切断して再接続する必要があります。 USB からアクセスを回復します。
これはうまくいきません:
cam0 = Device(devnum=0)
cam1 = Device(devnum=1)
cam0.saveSnapshot("filename0.jpg")
cam1.saveSnapshot("filename1.jpg")
del cam0
del cam1
Cam0 が開きますが、それで終わりです。凍った。
VideoCapture のもう 1 つの点は、安価な Web カメラでは、画像が生き生きするまでに大きな遅延 (ほぼ 1 秒) があることです... キャプチャを成功させるには、次のようなことをしなければなりませんでした:
Cam1 = Device(devnum=1)
Cam1.saveSnapshot("filename1.jpg") #gets the camera going and saves black image
time.sleep(.75) #delay
Cam1.saveSnapshot("filename1.jpg") #captures the image second time around
画像を効果的に2回保存しています...
各カメラからの画像が数ミリ秒間隔で順番に撮影されていても気にしませんでした
#open connection to cam, take image
#close connection to cam
#connect to next cam, take next image
#close connection to cam
#etc.
しかし、遅延が大きすぎました...遅延は安価なWebカメラだと思っていましたが、Open CVで別の結果が見られたので、VideoCaptureのせいに違いありません.
1 つには、OpenCV を使用して同時に複数のカメラを開くことができました...ただし、種類が異なるだけです。(チープカムの 1 つと内蔵カム... および/または Cyberlink プログラム) OpenCV は、同じ USB ハブ上の 2 つのチープカムを 1 つとして認識しているように見えました (カムの 1 つだけをオンにしました。)
capture0 = CaptureFromCAM(0) #this was Cyberlink Program
capture1 = CaptureFromCAM(1) #this was cheapo cam
capture2 = CaptureFromCAM(2) #this was built-in cam
#CaptureFromCAM(3) resulted in error... did not find a 4th "camera"
frame0 = QueryFrame(capure0)
frame1 = QueryFrame(capure1)
frame2 = QueryFrame(capure2)
cv.SaveImage("filename0.jpg",frame0)
cv.SaveImage("filename1.jpg",frame1)
cv.SaveImage("filename2.jpg",frame2)
VideoCapture は 2 つの同様のカメラを個別に見ることができましたが、OpenCV はできませんでした。
それがなぜだろうと誰でも知っていますか?2 つのパッケージは、同じ USB 上の異なるカムを判別でき、もう 1 つは判別できないという、コンピューターとの対話方法がどのように異なるのでしょうか?
第二に、OpenCV は私の安価なカムを即座に開きました...そこでは 0.75 秒の遅延はありませんでした。
繰り返しますが、2 つのパッケージ (videoCapture と OpenCV) がカメラとどのように通信するかについて、私は興味があります。
私が最終的に興味を持っているのは、2 台または 3 台のカメラから同時にキャプチャできるようにすることです (または、数ミリ秒の遅延があった場合は、それに近い状態で問題ありません)。OpenCV が最適なパッケージのように見えますが、ソフトウェアがカメラとどのように相互作用しているかをよりよく理解しようとしています。
洞察力をありがとうございました!
J