ラズパイで物体認識シリーズ OpenCV の準備
そろそろ周辺知識がそろってきたので、Xi IoTのアプリ実装に向けて進み始めます
【ラズパイで物体認識シリーズ】
・OpenCV の準備←イマココ
・HaarCascades を使った物体検出
・YOLO v5のセットアップ
・Xi IoTへの組み込み ちょっと延期
カメラ画像の物体認識を導入する為に、新たにラズパイ4B を購入
画像物体認識はなんだか負荷が高そうなので、今回は冷却性能がつよそうなアルミケースを選んでみました@千石電商
重量感あります
ちょっと面白いのは、ケース全体がヒートシンクをになっているので、密着させるために「しりこんさーまるぱっど」なるものをCPUとRAMにペタッとはって上からアルミケースをかぶせます
上のカバーは磁石くっつくようになっていて、つけたりはずしたりはかんたんです。
閉じるのは持ち運びようかな
専用(?)のFAN HATというのが欲しくなってしまいました
https://www.amazon.com/Argon-Raspberry-Provides-Shutdown-Rebooting/dp/B07Y9LFP1J
==ハードウェア====
raspberry Pi 4 model-B
Buy a Raspberry Pi 4 Model B – Raspberry Pi
Argon NEO Pi 4 Raspberry Pi Case
https://www.argon40.com/argon-neo-raspberry-pi-4-case.html
========
ラズパイセットアップ
OSはいつも通りインストールします
ラズパイ4 GPIO覚え書き - konchangakita
一旦シャットダウンしてカメラを接続
起動後、カメラの接続を確認
「detected=1」になっていればOK
$ vcgencmd get_camera supported=1 detected=1
画像の撮影
$ raspistill -o test.jpg
ちゃんと撮れている模様
OpenCVのインストール
OpenCVは、Wikiの言葉をお借りすると
「OpenCV(オープンシーヴィ、英語: Open Source Computer Vision Library)とはインテルが開発・公開したオープンソースのコンピュータビジョン向けライブラリ。」
OpenCV - Wikipedia
OpenCVを使うと単体で物体認識や映像解析、フィルター処理、テンプレートマッチングなどなどなど、いろんなことができちゃいます、YOLOなんかでも中で使っていますね
画像を扱う処理では、必須(?)
https://opencv.org/
依存関係のあるライブラリを事前にインストール
sudo apt install libavutil56 libcairo-gobject2 libgtk-3-0 libqtgui4 libpango-1.0-0 libqtcore4 libavcodec58 libcairo2 libswscale5 libtiff5 libqt4-test libatk1.0-0 libavformat58 libgdk-pixbuf2.0-0 libilmbase23 libjasper1 libopenexr23 libpangocairo-1.0-0 libwebp6 libatlas-base-dev
opencv-pythonのインストール
バージョンを指定してインストール(最新はダメだった)
sudo pip3 install opencv-python==4.1.0.25
"import cv2" してみて、すんなり読み込めればOKです
$ python3 Python 3.7.3 (default, Dec 20 2019, 18:57:59) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> cv2.__version__
OpenCVを試してみる
シンプルにカメラの映像を映し出してみます
・"cv.VideoCapture(0)" - "0"がラズパイカメラを指定してます
・"cv.imshow('OpenCV - test', frame)" - デスクトップ上で映像を表示
・"cv.waitKey(10) == 27" - ESCキーを押すと終了します
import cv2 as cv #カメラインスタンス作成 cap = cv.VideoCapture(0) assert cap.isOpened(), 'Cannot capture source' try: while True: ret, frame = cap.read() if frame is None: print('--(!) No captured frame -- Break!') break cv.imshow('OpenCV - test', frame) if cv.waitKey(10) == 27: break except KeyboardInterrupt: # except the program gets interrupted by Ctrl+C on the keyboard. print("\nCamera Interrupt") finally: cap.release() cv.destroyAllWindows()
普通に実行するだけで、カメラ映像がラズパイのデスクトップで開くはずです
$ python3 cap_test.py
特にプレイヤーの設定もすることなく簡単にできました
Webカメラを RTSPで接続する
RTSP(Real Time Streaming Protocol)は、その名のとおりネットワークカメラなどからリアルタイムで映像・音声の配信を行うプロトコルです
Xi IoT への実装を考えるとこっちが本命かなって気もします
ネットワークカメラで RTSP設定(ユーザ名:パスワードやURL)してやって、python上でここを変えるだけです
# ネットワークカメラ側でRTSP設定する URL = "rtsp://rtsp:nutanix@192.168.199.196:8554/ipcam_h264.sdp" cap = cv.VideoCapture(URL)
ラズパイカメラよりラグはありますが、おうち内の無線LAN環境ではラグ1秒もなかったです
次回から物体認識へ