【RaspberryPi】TensroFlow Liteを使ったカメラモジュールでの物体認識

  • URLをコピーしました!

今回はRaspberry Piベースのスパイダーロボット、PiCrawlerにGoogleの機械学習ライブラリTensorFlow Liteを実装して物体認識をしてみましたので、その手順を記事にしたいと思います。
ロボットは無くても、Raspberry Piとカメラモジュールだけあれば同じ環境を構築、動作させられます。

目次

TensorFlow Liteとは

TensorFlow Liteは、Googleの機械学習ライブラリTensorFlowを、マイコンなどのエッジデバイスで高速に推論できるよう最適化されたツールセットです。TensorFlowで学習したモデルを、TensorFlow Lite用ファイル(.tflite)に変換することで、TensorFlow Liteで推論処理を実行することができます。

環境

ハードウェア:Raspberry Pi 3 ModelB
OS:Raspbian 10.11
OpenCV:4.1.0.25
カメラ:OV5647
TensorflowLite-bin:2.5.0

OpenCVのインストール

カメラモジュールへのアクセス、画像処理のためRaspberry PiにOpenCVをインストールします。手順は過去にブログで記載していますので、以下の記事ををご覧ください。

使用するTensorFlow学習済みライブラリ

今回はPINTO0309さんが公開されているTensorFlow LiteのGitHubリポジトリ「TensorFlow Lite-bin」を使用させて頂くことにしました。推論エンジンも軽量、高速化のために最適化されているようです。

インストール手順

実際にTensorFlowLiteをインストールしていきます。
インストールするバージョンについて、最新を導入したい方は↓の補足をご覧ください。

Raspberry Pi OS(Raspbian)で以下のコマンドを実行してください。

sudo apt install swig libjpeg-dev zlib1g-dev python3-dev \
                   unzip wget python3-pip curl git cmake make
sudo pip3 install numpy==1.20.3
wget "https://raw.githubusercontent.com/PINTO0309/TensorflowLite-bin/main/2.5.0/download_tflite_runtime-2.5.0-cp37-none-linux_armv7l.whl.sh"
chmod 755 download_tflite_runtime-2.5.0-cp37-none-linux_armv7l.whl.sh
 ./download_tflite_runtime-2.5.0-cp37-none-linux_armv7l.whl.sh
sudo pip3 install --upgrade tflite_runtime-2.5.0-cp37-none-linux_armv7l.whl

以上でセットアップは完了です。

※補足 最新バージョンのインストールについて

尚、私が参考にさせて頂いたサイトの情報が少し前のものだったので、最新のバージョンではありません。これからインストールされる方はPINTO0309さんのリポジトリで公開されている最新のバージョンをインストールされると良いと思います。

2022/02/04現在の最新のバージョンは2.8.0のようです。
リポジトリの「README.md」ファイルを開くと、「**Python3.7 – Buster**」と書かれている項目のところにある手順に従ってインストールしてみてください。

動作テスト

まずは静止画を使って推論ができるかを確認してみます。以下のコマンドを実行してください。

cd && git clone https://github.com/PINTO0309/TensorflowLite-bin
cd ~/TensorflowLite-bin
python3 mobilenetv2ssd.py

TensorFlow Liteが正しく動作していれば以下のようなログが出力されます。

INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
time:  0.18894076347351074
[[(124, 231), (315, 544), 0.97265625, 'dog'], [(114, 132), (564, 429), 0.953125, 'bicycle'], [(461, 81), (696, 172), 0.87890625, 'car']]
coordinates: (124, 231) (315, 544). class: "dog". confidence: 0.97
coordinates: (114, 132) (564, 429). class: "bicycle". confidence: 0.95
coordinates: (461, 81) (696, 172). class: "car". confidence: 0.88

また、以下のようにPythonのソースコードがあるディレクトリ内に以下のようなJPEGファイルが生成されています。

サンプル画像での推論結果

写真に写ってる犬や自転車が正しく判別できていることが確認でしました。

カメラモジュールを使ってリアルタイム推論処理

実際にカメラで撮影した動画をリアルタイムに推論してみます。Raspberry Piのカメラモジュールを使用する場合はPythonを実行する際”raspi_cam”と指定します。

cd ~/TensorflowLite-bin
python3 mobilenetv2ssd-sync-usbcam.py --camera_type="raspi_cam"

実際に動作させている動画

ロボットに搭載したRaspberry Piで、実際にTensorFlow Lite-Binで推論してみた動画です。

リアルタイムに「ラップトップ」、「キーボード」などの物体認識ができているのが見て頂けるかと思います。

まとめ

いかがだったでしょうか?
PINTO0309さんが公開されているリポジトリを使用することで、3時間もあればリアルタイム推論環境が構築できてしまいました。エッジデバイスに最適化されているため、カメラに映った物体を非常に高速に識別でき、私のロボットの用途では十分すぎるパフォーマンスでした。

TensorflowLite-binを使って検出したオブジェクトの画面上の座標を取得するプログラムを以下の記事で解説しています。


機械学習を学びたい方向けに以下の記事を公開しています。


また、ラズベリーパイの画像認識についてさらに深く学びたい方にはUdemyの以下の講座がおすすめです。

【初心者向けAI・IoT講座】 ラズベリーパイ(Raspberry Pi)とOpenCVで作る簡単画像認識システム icon


それでは、また次の記事でお会いしましょう。

おすすめ記事

参考

よかったらシェアしてね!
  • URLをコピーしました!
目次