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

  • URLをコピーしました!

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

\ 機械学習を学びたい人には自宅で学べるUdemyがおすすめ! /

講座単位で購入できます!

目次

Raspberry Piとは

ラズベリーパイ(Raspberry Pi)はイギリスのラズベリーパイ財団が教育用に開発したボードコンピュータです。

最新のRaspberry Pi 4では、ARMアーキテクチャを採用したBroadcom製の高性能SoC BCM2711を搭載しており、1.5GHzで動作するARM Cortex-A72が4コアとマイコンボードの中では非常に高速な処理能力を持っています。また、ユーザーがアクセス可能な40ピンのGPIOも搭載しており、外部ハードウェアを制御することが可能です。

詳細なスペック等は以下の記事で解説していますので、あわせてご覧ください。

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の以下の講座がおすすめです。数学的な理論からPythonでの実装までを習得できます。(私自身もこの講座を受講しています)

icon icon 【徹底的に解説!】人工知能・機械学習エンジニア養成講座(初級編~統計学から数字認識まで~) icon

また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。

スキルアップや副業にぜひ活用してみてください。

スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。

講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。


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

\ 機械学習を学びたい人には自宅で学べるUdemyがおすすめ! /

講座単位で購入できます!

おすすめ記事

参考

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