Spresense (1) の続きです。
前回の記事の url は以下です。
https://qiita.com/tech888/items/48da99985efb3112fc7b
ライブカメラ構築まで
Processing のインストール
以下のサイトで ダウンロード、インストールを済ませておく。
https://processing.org/
USBSerial の準備
baggio63446333 さんの USBSerial を使います。以下にアクセス。
https://github.com/baggio63446333/USBSerial
緑色の 「<> Code ▼」をクリックして出てくる Download ZIP をクリックすると、
USBSerial-master.zip がダウンロード フォルダに格納される
Arduino IDE で、スケッチ → ライブラリをインクルード → .ZIP形式のライブラリをインストールで 上記のZIPファイルを指定する。
Spresense-Playground の準備
TomonobuHayakawaさんの Spresense-Playground を利用します。以下にアクセス。
https://github.com/TomonobuHayakawa/Spresense-Playground
緑色の 「<> Code ▼」をクリックして出てくる Download ZIP をクリックすると、
Spresense-Playgraound-master.zip がダウンロード フォルダに格納されるので、好きな場所に展開する。
Arduino IDE を開く
- 展開したフォルダの中の IntegrationWithProcessing → LiveCamera → viaUSBSerial → Spresense → Spresense.ino をクリックし、Arduino IDE で開く
- 以下の行をコメントアウト(先頭に // 追加)して、VGAの行の // を削除し、メインボードに書き込む( HDの場合、PCのスペックによっては画像転送時に遅延が生じるため)
int16_t width = CAM_IMGSIZE_HD_H, height = CAM_IMGSIZE_HD_V; - USBケーブルをメインボードから拡張ボードにつなぎ替える
- メインボードの4つあるLEDのうち端から2番目のLEDが点滅するのを確認する(つなぎ変えてから、点滅が始まる)
- COMポート番号が変化しているので、デバイスマネージャーで確認する
Processing を開く
- 展開したフォルダの中の IntegrationWithProcessing → LiveCame → viaUSBSerial → Processing → Processing.pde をクリックし、Processing で開く
- 8行目の COMポートを自分の環境に修正する (COM10 を COM6 などに変更)
final String SERIAL_PORTNAME = "COM10"; - void setup() の以下の HD の行をコメントアウトし、VGA の行の // を削除する
size(1280, 720); // HD - (▶)をクリックして実行すると、ウィンドウが開きカメラ画像がリアルタイムで表示される(はず)。
- HD から VGAに画素数を落としたのは、PCの性能によっては遅延が生じるためです。
注意
メインボードが拡張ボードに深く挿さっていないと、うまく動きません。おかしいなと思ったら、強く上から押してみましょう。
数字認識AI
画像データの準備
- 学習用数字画像を準備する。以下のURLで、「RAW」のところをクリックしてZIPファイルをダウンロードして展開しする。できた number フォルダの下に、id_train.zip と id_valid.zip があるので、この二つも展開する。
https://github.com/TE-YoshinoriOota/Spresense-LowPower-EdgeAI/blob/main/Chap04/nnc_dataset/number.zip - id_tarin.zip から id_train フォルダができ、この中に フォルダー群(0,1,2,...9,a)と id_train.csv があることを確認する。
- id_valid.zip から id_valid フォルダができ、この中に フォルダー群(0,1,2,...9,a)と id_valid.csv があることを確認する。
AI学習構築用情報の準備
- 後でインストールするソフト NNC(Neural-Network Console・・・)で使うファイルを準備する。以下のURLで、「RAW」のところをクリックしてダウンロードする。この number_recognition.sdcproj はテキストファイルで、圧縮はかかっていません。
https://github.com/TE-YoshinoriOota/Spresense-LowPower-EdgeAI/blob/main/Chap04/nnc_project/number_recognition.sdcproj
NNC のインストール
NNC(Neural-Network Console)は、ドロップダウンでAI学習ができるSONYの便利ツールをインストールします。入口のURLは以下です。
https://github.com/sony/neural-network-console/tree/main/document/ja
そこから、インストールのURLへ移ります。neural_network_console_350.7z をダウンロードして、展開します。フォルダーをたどっていくと、neural_network_console.exe があるので、これを起動します。
https://github.com/sony/neural-network-console/releases
NNC での学習
- データセットを読み込む
起動画面の左端の上から2段目の「データセット」をクリックし、上段に出てきた「データセットを開く」で、id_train.csv と id_valid.csv を一つずつ選択しておく。 - NNCのプロジェクトを読み込む
起動画面の左端の上から1段目の「プロジェクト」をクリックし、上段に出てきた「プロジェクトを開く」で、number_recognition.sdcproj を選択しておく。すると、畳み込み(C)、Maxpooling(M)、Relu(R)、全結合層(Affine)、Softmax関数(S)などのブロックの積み木が現れる。 - ここで、画面一番上で右側の「データセット」をクリックする(起動画面の左端のものとは別物)と、左端に Training と Validation がでてくる。
- Training をクリックした後、右上の「データセット」の下の □↗ をクリックする。表示されたリストから id_train.csv を選択する。画像が表示されるのを確認する。ここで、「Image Normalization (1.0/255.0)」にチェックをいれること。
- Validation をクリックした後、右上の「データセット」の下の □↗ をクリックする。表示されたリストから id_valid.csv を選択する。画像が表示されるのを確認する。ここで、「Image Normalization (1.0/255.0)」にチェックをいれること。
- 左上の「編集」をクリックし、右上の「実行」をクリックすると学習が始まる。Cost、Trainig Error、Validation Error がエポック数に対してプロットされる。
- 左上の「編集」から隣の「学習」に自動的に移動しているのを確認し、右上の「実行をクリック」する。
ラジオボタンで出力結果、混同行列の表示を切り替えることができる。 - 左上の「学習」から隣の「評価」に自動的に移動しているのを確認し、「評価」の下の「アクション」をクリックする。出てきたメニューから、「エクスポート」⇒「NNB(NNabra C Runtime file format)」を選択すると、自動的に学習モデルが保存される。
- そのなかたの model.nnb を number.nnb にリネームして、マイクロSDカードのルートに保存し、拡張ボードに挿しておく。
Spresenseでカメラ画像を判定する
Arduino を開く
- すでに展開済みの Spresense-Playgraound-master → IntegrationWithProcessing → AiCamera → viaUSBSerial → Spresense → Spresense.ino をクリックし、Arduino IDE で開く
- 以下の行をコメントアウト(先頭に // 追加)して、VGAの行の // を削除し、メインボードに書き込む( HDの場合、PCのスペックによっては画像転送時に遅延が生じるため)
int16_t width = CAM_IMGSIZE_HD_H, height = CAM_IMGSIZE_HD_V; - USBケーブルをメインボードから拡張ボードにつなぎ替える
Processing を開く
- 展開したフォルダの中の IntegrationWithProcessing → AiCamera → viaUSBSerial → Processing → Processing.pde をクリックし、Processing で開く
- 8行目の COMポートを自分の環境に修正する (COM10 を COM6 などに変更)
8行目 final String SERIAL_PORTNAME = "COM10"; - void setup() の以下の HD の行をコメントアウトし、VGA の行の // を削除する
size(1280, 720); // HD - (▶)をクリックして実行すると、ウィンドウが開き、カメラ画像がリアルタイムで表示される。
- PC画面に映る赤枠の中に数字が映るように、カメラの位置を移動すると、赤枠右上に判定した数字とその確率が表示される。
- PCの性能によっては、遅延が発生する場合もあります。
謝辞
ハンズオン講習会で大変お世話になり、Qiita記事の掲載をご了承して頂いた講師の方、ハンズオンを開催していただいたCQ出版株式会の皆様に感謝申し上げます。
参考URL
https://github.com/baggio63446333/USBSerial
https://github.com/TomonobuHayakawa/Spresense-Playground
https://github.com/TE-YoshinoriOota/Spresense-LowPower-EdgeAI/