##はじめに
庭に来る野鳥の監視カメラが作りたかったんですが、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である必要があります。