Raspberry Pi TensorFlow Liteで物体検出を楽しむ
この記事について
Raspberry Pi、TensorFlow、Pythonのいずれにも詳しくない筆者が、物体検出をやって楽しんだ成果の記録です。
TensorFlow公式の物体検出のサンプルプログラムを実行します。
動作環境
ボード
- Raspberry Pi 4 Model B
OS
Raspberry Pi OS (32-bit または 64-bit)
デスクトップ環境
カメラ
Python
Python 3.9
執筆時点で Raspberry Pi OS に入ってたやつそのまま
準備するもの
HDMI ケーブル(Raspberry Pi をモニターに接続)
モニター
キーボード
マウス
サンプルプログラムについて
TensorFlow公式の tensorflow/examples を使います。
その中の lite/examples/object_detection/raspberry_pi ディレクトリに物体検出のサンプルプログラムが入っています。
Raspberry Pi 上の Python でTensorFlow Liteを使用して、Pi カメラからストリーミングされた画像を使用してリアルタイムの物体検出を実行します。カメラプレビューで検出された各物体の周囲に境界ボックスを描画します。
https://github.com/tensorflow/examples/tree/master/lite/examples/object_detection/raspberry_pi
雰囲気を感じる
ハードウェアのセットアップ
まずは、 Raspberry Pi OS を使用してRaspberry Pi をセットアップする必要があります。
Raspberry Pi Foundation 公式の資料がありますし、「Raspberry Pi 初期セットアップ」でネット検索してもいろいろ情報が見つかるはずです。
https://projects.raspberrypi.org/ja-JP/projects/raspberry-pi-setting-up
カメラのセットアップ
サンプルプログラムはRaspberry Pi カメラモジュール 、USB カメラのどちらでも機能するようです。
Raspberry Pi カメラモジュールを使用する場合は、カメラモジュールを有効化する必要があります。Raspberry Pi のターミナルからraspi-config
コマンドを打ち設定画面を開きます。
https://zenn.dev/technicarium/articles/449294af295d5c
https://www.raspberrypi.com/documentation/computers/configuration.html
Raspberry Pi カメラモジュールには向きがありますので、正しく接続するように注意してください。
サンプルプログラムをダウンロードする
Raspberry Pi のターミナルから以下のようにサンプルプログラムGitリポジトリをクローンします。
# コードを置く場所をつくり、その中に入る
mkdir -p ~/src && cd ~/src
# サンプルプログラムを全部ダウンロード
# 「--depth 1」オプションをつけて不要なGit関連データを取り込まないようにする
git clone https://github.com/tensorflow/examples --depth 1 tensorflow_examples
# 物体検出のディレクトリが深い階層にあるのでアクセスしやすいところにコピーする
cp -r ~/src/tensorflow_examples/lite/examples/object_detection/raspberry_pi \
~/src/tflite_object_detection
# 他のコードは不要なので消してもよい
rm -rf ~/src/tensorflow_examples
サンプルプログラムに付属のスクリプトを使用して必要な Python パッケージをインストールし、EfficientDet-Lite モデルをダウンロードします。
# 物体検出のディレクトリへ入る
cd ~/src/tflite_object_detection
# 必要な Python パッケージをインストールし、EfficientDet-Lite モデルをダウンロード
./setup.sh
サンプルプログラムを実行する
モニターにデスクトップが表示されている状態でターミナルからサンプルプログラムを実行します。実行すると、物体検知用のウインドウが開きます。
よくわかりませんが、環境変数DISPLAY=:0
がセットされていないとエラーになりました。
DISPLAY=:0 python3 detect.py
さいごに
一見簡単そうでしたが、やってみると最初はなかなかうまくいきませんでした。
元氣があればなんでもできる!
ダメになりそうな時それが一番大事!
本記事は以下のモクモク會での成果です。みなさんから刺激と元氣をいただき、ありがとうございました。
https://okazakirin-beam.connpass.com/
https://autoracex.connpass.com
もしご興味のある方はお氣輕にご參加ください。