この記事ではRaspberry Piに接続したカメラの映像をストリーミング配信して、その映像をMacやPCで受け取る方法を紹介します。
Raspberry Piからのストリーミング映像はブラウザでも受け取れますが、ここではOpenCVで受け取る方法も合わせて紹介します。
Raspberry Piでストリーミング配信する
Raspberry Piに接続したカメラからストリーミング配信するにはmjpg-streamerを使用します。mjpg-streamerのインストール方法は次の記事のとおりです。
インストールのコマンドだけこちらにまとめておきます。
$ sudo apt-get install -y cmake libv4l-dev libjpeg-dev imagemagick $ git clone https://github.com/jacksonliam/mjpg-streamer.git $ cd mjpg-streamer/mjpg-streamer-experimental $ sudo make; sudo make install
インストールができたら、次のコマンドでストリーミング配信を開始します。
sudo ./mjpg_streamer -i "./input_uvc.so -f 30 -r 320x240 -d /dev/video0 -y -n" -o "./output_http.so -w ./www -p 8080"
ストリーミング配信時に指定できる主なオプションは次のようになります。
オプション | 意味 |
---|---|
-d | デバイス名 |
-r | 解像度 |
-f | フレームレート |
-p | ポート番号 |
ストリーミング配信動画を受けとる
ブラウザで動画を受け取る
まずは、Raspberry Piで配信したストリーミング映像がちゃんと表示されているか、ブラウザで確認してみましょう。ブラウザに
http://ラズパイのIPアドレス:8080/?action=stream
と入力してください。次のようにRaspberry Piに接続したカメラの映像が映っていればOKです。
OpenCVで映像を受け取る
ストリーミングの映像が受け取れていることが確認できたら、次はOpenCVを使って映像を受け取ります。
OpenCVを使って映像を受け取るために、次のpythonプログラムを入力してください。
import cv2 url = "http://ラズパイのIPアドレス:8080/?action=stream" video = cv2.VideoCapture(url) while True: ret, frame = s_video.read() edges = cv2.Canny(frame,100,200) cv2.imshow("Test", edges) key = cv2.waitKey(1) if key == 27: break
OpenCVのVideoCaptureの引数にストリーミング配信元のURLを指定することで、動画を読み込むのと同じように映像をMat型で取得できます。上のサンプルでは取得した映像にCannyフィルタを掛けて出力しているので、次のような映像になりました。
まとめ
Raspberry Piを使って映像を配信し、その映像をPC/MacからOpenCVで取得&表示する方法を紹介しました。