概要
ev3からmjpg-streamerを使ってカメラ映像をストリーミングする手順を紹介します.ev3devではソフトウェアの導入のみでストリーミングサーバーをセットアップできます.PC側でOpenCVを使って映像を表示するコードを作ります.
前提
- PC : mac (macOS Mojave 10.14.6)
- EV3 (ev3dev)
- vscode
- opencv-pythonインストール済み
MJPG-streamerのインストール
MJPG-streamerをインストールためにapt-getを使いますが,デフォルトの設定のまま,メモリ不足で失敗することがあるのであらかじめスワップ領域を作成してください.やり方はこの記事を参考に作成してください!
【EV3 x Python】スワップ領域を作成する方法
そもそもターミナルの開き方がわからない方は↓
【EV3 x Python】SSH接続をする
ターミナルで以下のコマンド上から入れていく.パスワードを聞かれたらmaker
$ cd ~
$ 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
$ make
$ sudo make install
MJPG-streamerを実行
$ cd ~/mjpg-streamer/mjpg-streamer-experimental/
$ ./mjpg_streamer -o "output_http.so -w ./www" -i "input_uvc.so"
PCのブラウザでev3にアクセスすると画像が表示される
EV3を接続しているPCのブラウザでhttp://ev3dev.local:8080 にアクセスするとストリーミングのページが開かれます.
汚い部屋でごめんなさいw
Pythonで映像を映し出すスクリプトを組む
streaming.py
from cv2.cv2 import VideoCapture,waitKey,imshow,destroyAllWindows
# 映像が送られてくるリンクを指定する.
cap = VideoCapture("http://ev3dev.local:8080/?action=stream")
# リンクが開けなかった場合
if not cap.isOpened():
print("Cannot open a video capture.")
exit(-1)
while True:
# escキーが押されたらループ終了
k = waitKey(1)
if k == 27:
break
# 送られてくる映像のフレームを取得する
ret, frame = cap.read()
# もしフレームが取得できなかった場合
if not ret:
continue
# フレームを表示する
imshow("EV3 Streaming", frame)
# キャプチャーの開放&ウィンドウを閉じる
cap.release()
destroyAllWindows()