この記事について
- 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 に入ってたやつそのまま
Raspberry Pi ボードは以下のモデルでTensorFlow Lite がサポートされているようです。
- Raspberry Pi 2
- Raspberry Pi 3
- Raspberry Pi 4
- Raspberry Pi Zero 2
準備するもの
- Raspberry Pi カメラモジュール もしくは USB カメラ
- HDMI ケーブル(Raspberry Pi をモニターに接続)
- モニター
- キーボード(SSH接続するなら無くても良いかも)
- マウス(SSH接続するなら無くても良いかも)
サンプルプログラムについて
- TensorFlow公式の tensorflow/examples を使います。
- その中の lite/examples/object_detection/raspberry_pi ディレクトリに物体検出のサンプルプログラムが入っています。
- Raspberry Pi 上の Python でTensorFlow Liteを使用して、Pi カメラからストリーミングされた画像を使用してリアルタイムの物体検出を実行します。カメラプレビューで検出された各物体の周囲に境界ボックスを描画します。
雰囲気を感じる
ハードウェアのセットアップ
まずは、 Raspberry Pi OS を使用してRaspberry Pi をセットアップする必要があります。
Raspberry Pi Foundation 公式の資料がありますし、「Raspberry Pi 初期セットアップ」でネット検索してもいろいろ情報が見つかるはずです。
Raspberry Pi のアップデート
sudo apt update && sudo apt full-upgrade
# のちにGitを使うのでインストールしておく
sudo apt install git
# OpenCVを使うために必要らしい
sudo apt install libatlas-base-dev
カメラのセットアップ
サンプルプログラムはRaspberry Pi カメラモジュール 、USB カメラのどちらでも機能するようです。
Raspberry Pi カメラモジュールを使用する場合は、カメラモジュールを有効化する必要があります。Raspberry Pi のターミナルからraspi-config
コマンドを打ち設定画面を開きます。
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
さいごに
一見簡単そうでしたが、やってみると最初はなかなかうまくいきませんでした。
元氣があればなんでもできる!
ダメになりそうな時それが一番大事!
本記事は以下のモクモク會での成果です。みなさんから刺激と元氣をいただき、ありがとうございました。
もしご興味のある方はお氣輕にご參加ください。