マイコンで機械学習モデルを使ってみます。TinyML というやつです。
まずは、Raspberry Pi Pico というマイコン上でカメラを使ってみます。
マイコンで物体検出(Detection)などをしようとすればカメラは必要です。
Switchscienceではセットで販売してます。
が、Pico W を使いたい場合はバラで集めます。
全体の取り合わせはこんな感じ。
カメラはArducam HM01B0 QVGA Camera Module
スペック:解像度320 x 320ピクセル(QVGAウインドウ対応、モノクロ、最大QVGA @ 60 fps)
開発はArduino IDE とC/C++ の2バージョンでやってみます。
Arduino IDE
●開発環境はArduino IDE
●母艦はラズパイ3Model B
OSイメージは、表示に使うProcessing 用に32-bitのDesktopがいいかもしれません。
●これらを使ってカメラ用のファームウェアを作ってインストール
●その後カメラ画像はシリアル経由でProcessingを通じて表示
という段取りになります。
ラズパイ3 Model B にArduino IDE をインストール(1/5)
1 2 3 |
sudo apt-get update sudo apt-get install arduino -y |
メニュに2か所現れています。
Raspberry Pi Pico にカメラを接続(2/5)
今回使うカメラ:Arducam HM01B0 QVGA Camera Module for Raspberry Pi Pico
結線はこんな感じ。VCC は3.3Vでも5Vでもどっちでもいいです。
ラズパイ3にPico を接続してArduion IDE でコーディング(3/5)
カメラ用のコードをファームウェアとしてインストールするので、Pico のBOOTSELボタンを押しながらラズパイのUSBポートに接続します。
ラズパイからPico はストレージ・ドライブとして認識されています。
ls /dev/tty*
Arduino IDE 起動
ファイルー>環境設定
追加のボードマネージャーのURLに以下を記述してOKをクリック。
https://www.arducam.com/downloads/Pico/package_pico4ML_index.json
ツールー>ボードー>ボードマネージャーからライブラリインストール
検索フィルターにpicoを入力して検索
ArducamPico4MLをインストール
ボードマネージャーからArducamPico4MLをアサイン
シリアルポート設定
ツールー>シリアルポート
/dev/ttyAMA0
カメラ用のファームウェアを作成してインストールします。
ファイルー>スケッチ例ー>Cameraー>exampleー>HM01B0_USB
書き込みボタンをクリック
コンパイル実行後、UF2ファイルがPico のフラッシュメモリーに書き込まれます。
UF2ファイルなので終了後Picoは再起動されます。
再起動後のシリアルポートを再確認
ls /dev/tty* を見ると新しいポート名が確認できます。控えておきます。
以上で、Arduino IDE はお役御免です。
終了します。
ラズパイ3にProcessing をインストール(4/5)
processingを使ってカメラ画像を取得表示してみます。
現バージョンは4系ですが、安定を求めてここは3系をインストールします。
1 2 3 |
wget https://github.com/processing/processing/releases/download/processing-0269-3.5.3/processing-3.5.3-linux-armv6hf.tgz tar xvzf processing-3.5.3-linux-armv6hf.tgz |
注:64-bitのOSではうまく動かないようです。
以下にアクセスしてラズパイの64-bit版をダウンロード・解凍して使いましょう。
Need another version ?のRaspberry Pi をクリック
ちなみに、OSが32-bitか64-bitかを判別するコマンドです。32とか64が表示されます。
>getconf LONG_BIT
カメラ画像をProcessing で表示(5/5)
以下から、Processing 表示用のスクリプトを入手します。
https://github.com/ArduCAM/RPI-Pico-Cam/blob/master/rp2040_hm01b0/display/preview.pde
このスクリプトを1部修正します。
3/5で控えておいたPicoのポート番号を使います。
4/5で解凍したフォルダーに移動して、Processing を起動します。
1 2 3 |
cd processing-3.5.3/ ./processing |
注:Error: Could not create the Java Virtual Machineというようなエラーメッセージが出た場合
多分OSは64-bitだと思われます。32-bit版のOSで再実行してみましょう。
開始
上記で修正したpreview.pdeを読み込むかコピー・ペーストして実行します。
カメラからの画像が表示されます、モノクロですけど………。
C/C++
元ネタはこちら
USBシリアル変換コネクタを使っています。
結線はこんな感じ。
コード
元ネタとはツリー構造が違っていたので、若干修正。
Clone Arducam library
1 2 |
cd ~/ git clone https://github.com/ArduCAM/RPI-Pico-Cam.git |
Compile
1 2 3 4 5 |
cd RPI-Pico-Cam/rp2040_hm01b0 mkdir build cd build cmake .. make |
buildフォルダーにarducam_firmware.uf2が生成されているのを確認。
上記と同様に
Pico のBOOTSELボタンを押しながらラズパイのUSBポートに接続します。
ラズパイからPico はストレージ・ドライブとして認識されています。
arducam_firmware.uf2をドラッグ・ドロップしてPico を再起動。
上記と同様にProcessing を起動してカメラ画像を確認しますが、ポート番号と通信速度は以下のようになります。
1 |
myPort = new Serial(this, "/dev/ttyUSB0", 115200); |
カメラ画像が表示されます。
Leave a Reply