konchangakita

KPSを一番楽しんでいたブログ 会社の看板を背負いません 転載はご自由にどうぞ

ラズパイで物体認識シリーズ OpenCV の準備

そろそろ周辺知識がそろってきたので、Xi IoTのアプリ実装に向けて進み始めます

【ラズパイで物体認識シリーズ】
OpenCV の準備←イマココ
HaarCascades を使った物体検出
YOLO v5のセットアップ
・Xi IoTへの組み込み ちょっと延期


カメラ画像の物体認識を導入する為に、新たにラズパイ4B を購入
画像物体認識はなんだか負荷が高そうなので、今回は冷却性能がつよそうなアルミケースを選んでみました@千石電商
f:id:konchangakita:20200726115250p:plain

重量感あります
f:id:konchangakita:20200726115437p:plain

ちょっと面白いのは、ケース全体がヒートシンクをになっているので、密着させるために「しりこんさーまるぱっど」なるものをCPUとRAMにペタッとはって上からアルミケースをかぶせます
f:id:konchangakita:20200726115813p:plain


上のカバーは磁石くっつくようになっていて、つけたりはずしたりはかんたんです。
閉じるのは持ち運びようかな
f:id:konchangakita:20200726120626p:plainf:id:konchangakita:20200726121920p:plain


専用(?)の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

カメラ、SSHVNCを有効にしておきます
f:id:konchangakita:20200726133857p:plain

一旦シャットダウンしてカメラを接続
f:id:konchangakita:20200726144855p:plain

起動後、カメラの接続を確認
「detected=1」になっていればOK

$ vcgencmd get_camera
supported=1 detected=1

画像の撮影

$ raspistill -o test.jpg

ちゃんと撮れている模様
f:id:konchangakita:20200726151109p:plain


OpenCVのインストール

OpenCVは、Wikiの言葉をお借りすると
OpenCV(オープンシーヴィ、英語: Open Source Computer Vision Library)とはインテルが開発・公開したオープンソースのコンピュータビジョン向けライブラリ。」
OpenCV - Wikipedia

OpenCVを使うと単体で物体認識や映像解析、フィルター処理、テンプレートマッチングなどなどなど、いろんなことができちゃいます、YOLOなんかでも中で使っていますね
画像を扱う処理では、必須(?)
https://opencv.org/

Pythonバージョンの確認
$ python3 --version
Python 3.7.3


依存関係のあるライブラリを事前にインストール
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

特にプレイヤーの設定もすることなく簡単にできました
f:id:konchangakita:20200726203753p:plain

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秒もなかったです

次回から物体認識へ