1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

OpenCVのソースにMotion JPEGのストリーミングを利用する

はじめに

庭に来る野鳥の監視カメラが作りたかったんですが、darknetで鳥検出を行う都合上、画像処理は屋内、カメラのみを屋外に置く必要がありました。
MJPEG-Streamerや、ESP32CAMなどを屋外に置き、屋内のPCでOpenCVなどを利用して画像処理を行う方法について記載しています。

やったこと

具体的には屋内のJetson Xavier NXでdarknetを動かして鳥検出を行っています。
この画像ソースとしてGStreamerのsouphttpsinkを利用して外部のMotionJpegのストリーミングを利用しました。
分かれば単純なんですが、これを見つけるまでが大変だったので、備忘録として。

GStreamer

GStreamerはオープンソースの画像処理のフレームワークです。

OpenCV

OpenCVの画像入力には、通常は
cv2.VideoCapture( SRC )
を用いて処理する画像を1フレームずつ取得します。
Jetson上では、SRCに数字を入れると、カメラを番号で指定してフレームを取得できます。
FILEPATHを指定することで動画ファイルをソースとすることができます。
ここのGStreamerのパイプラインを指定する文字列を指定することで、GStreamerで処理後の画像をソースとすることができます。

souphttpsrc

souphttpsrcはgstreamerのソースとしてHTTPサーバからストリーミングされたデータを利用します。

成果物

cv2.VideoCapture( "souphttpsrc location=http://192.168.1.39:8081/stream ! image/jpeg,width=800,height=600,framerate=1/1 ! queue ! jpegdec ! videoconvert ! appsink" )

http://192.168.1.39:8081/stream
がストリーミングのURLとなりますのでここを環境に合わせて変更してください。
当然ながらユーザインターフェースなしの動画部分のURLである必要があります。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?