Loading [MathJax]/extensions/Safe.js
MENU

Pi Pico でエッジAI を試してみる(2-2)人物検出(Person Detection)by B0067


前回、カメラの解像度の低さが気になったので、今回はOV2640使用200万画素カメラ フレームバッファ付き M12ピンホール B0067に変えてやってみます。

開発環境はラズパイ4 Model B にビルトインされているC/C++ 。

元ネタはArduCAM/RPI-Pico-Cam

上記ページではカメラはHM01B0が参照されていますが、実際に使われているの2MPのB0067 です。

 

 

 

 

 

 

 

データ送信にUSBシリアル変換用コンバーターモジュールも使います。

 

 

 

 

 

 

 


カメラとPico の結線

 

 

 

 

 

 

 

 

 

 

 

 

USBtoTTL とPico の結線

 

 

 

 

 

 

 

 

 

 

 


ラズパイ4ModelB でPico のセットアップ

 

 

 

 

 

 

表示用に使っているアプリProcessing との相性で32-bitを使用。

OSはDebian 12 (Bookworm)Desktop (32-bit

このセットアップで何が実行されるのかは、PICO Arducam Examplesの Quick Pico Setupに書かれています。

Raspberry Pi 4B または Raspberry Pi 400 で Raspberry Pi Pico 用に開発している場合、インストールの大部分はこの入門ガイドの手順は、セットアップ スクリプトを実行することでスキップできます。

セットアップシェルを実行

● pico というディレクトリを作成します

● 必要な依存関係をインストールします

● pico-sdk、pico-examples、pico-extras、pico-playground リポジトリをダウンロードします

● ~/.bashrc で PICO_SDK_PATH、PICO_EXAMPLES_PATH、PICO_EXTRAS_PATH、PICO_PLAYGROUND_PATH を定義します

● pico-examples/build/blink と pico-examples/build/hello_world で blink と hello_world の例をビルドします

● picotool をダウンロードしてビルドします 。/usr/local/bin にコピーします。 • picoprobe をダウンロードしてビルドします 。

● OpenOCD をダウンロードしてコンパイルする (デバッグ サポート用)

● Visual Studio Code をダウンロードしてインストールする

● 必要な Visual Studio Code 拡張機能をインストールする (詳細については第 6 章を参照)

● Raspberry Pi UART を Raspberry Pi Pico で使用するように構成する

● 実行したら、Raspberry Pi を再起動

 


実行環境用ファイル(uf2)をソースからコンパイル

ソースダウンロード

TensorFlow Lite Micro を使ったTinyML の人物検出の実行環境を作成します。

主に浮動小数点演算を8bit整数演算に変換することで実行サイズを削減する手法が使われているようです。精度は少々低下しますが、TinyML ではよく使われる方法です。

コンパイル実行

RPI-Pico-Cam/tflmicro/build/examples/person_detection で以下のファイルを確認

person_detection_int8.uf2

 

*ソース

RPI-Pico-Cam/tflmicro/examples/person_detection

 

注:make に失敗した場合

●numeric_limits、max、min関連でerrorが発生していたら……..

~/RPI-Pico-Cam/tflmicro/src/tensorflow/lite/micro/micro_utils.hに以下のインクルードファイルを追加して再度makeを実行してみてください。

#include <limits>

コンパイルが通ったら~/RPI-Pico-Cam/tflmicro/build/examples/person_detectionにperson_detection_int8.uf2が作成されていることを確認

 

 

 

 

 

 

 

 

person_detection_int8以外に5つほどuf2ファイルが作成されています。どういう機能を持っているかは調査中。

 

ArduCAM/RPI-Pico-Camからコンパイル済みのuf2ファイルをダウンロードする手もあります。

person_detection_int8.uf2のzipファイル

 


UF2ファイルをPico のフラッシュメモリにコピーして、再起動

BOOTSEL ボタンを押しながらUSBケーブルを接続

 

 

 

 

 

 

 

Pico はストレージとして認識されます。

上記のperson_detection_int8.uf2をドラッグ・ドロップ。

uf2ファイルがコピーされるとPico は即再起動されます。

 


Processingで画像と実行結果表示

インストールはPi Pico でエッジAI を試してみる(1)カメラ4/5を参照

更に、processing のフォルダーにあるinstall.sh を実行してメニュに追加。Touch 周りの警告がいっぱいでますが、気にしません。

メニュにProcessing IDE が現れます。ここから起動できます。

 

 

 

 

 

 

 

 

 

 

 

シリアルポートを以下のコマンドでUSBtoTTLを抜き差しして、確認します。

ls /dev/tty*

 

 

 

 

 

 

 

 

 

 

processingの実行スクリプトを以下から取得します。

person_detection_display.pde

 

ls /dev/tty*

 

 

 

 

 

 

 

 

確認したポート名でmyport を変更(Windows版をコメントアウトしてLinux版を採用するだけでOK)。

 

変更したpdeスクリプトを読み込むかコピー・ペーストして実行します。

もしカメラ画像がグレーのままの場合は、ボーレートを921600から115200に変更して再実行してみてください。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

カメラで検出

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

かなり高い検出結果になりました。

でも、真っ暗な画面でも50%以上の値を示しています、大丈夫でしょうか?

画像はバストショットかちょっと引いた感じで検出率は上がります。

 

 

 

 

 

 

 

 

 

 

 

 

この段階ではPico のMicro-Bポートとラズパイを接続しているUSBケーブルは給電しかしていないのでモバイルバッテリに切り替えてもOKです。

 

 

 

 

 

 

 

 

 

 

 

 


Appendix

ラズパイでもChatAI を動かせるらしいライブラリ GGML についての記事

 


 

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*