カメラとマイクのファームウェア

ChmiCo-SAN ChemiCo-SAN Ear
ChemiCo-SAN

カメラのファームウェア

前回少し触れましたが、ESP-EYE AI Board I Espressif用のAIカメラファームウェアを公開します。ChemiCo-SAN/FirmWare/Chemico-san_eye at main · eeAI-works/ChemiCo-SAN (github.com) Arduinoスケッチです。Arduino_secret.hにSSIDとパスワードを入れてお使いください。

Espressifのカメラサーバソフトはそのままで顔認識ができたりと高機能ですが、このプログラムはAI用にでデチューンしたものです。GETリクエストで48×48ドットのカラー画像をJSONフォーマットで返します。48×48ドットというと心許ないと思われる方もいるかもしれませんが、CIFAR-10 Dataset | Papers With Codeが32×32ドットですのでそこそこ使い道はあるのではないかと思います。

評価用にChemiCo-SAN/camera.py at main · eeAI-works/ChemiCo-SAN (github.com)をお使いください。matplotlibが必要です。ソース中のカメラサーバアドレスを書き換えてご利用ください。

どちらも短いプログラムですのでソースを読んでいただければ解説の必要はないかと思われます。

解像度等に不満がありましたら、JSONhttpd.cpp中のpx,pyの値を変更してお使いください。カメラキャプチャーの一部を切り取って送信するようになっていますので、デジタルズームとキャプチャー画像、送信画像の解像度の関連性に配慮して値を変えてみてください。max_x,max_yの値を変える場合にはFRAME_SIZEの値を変える必要があります。一応RGB_888で安定する最大の値をFRAME_SIZEにしています。これ以上の値にしたい場合はフォーマットをJPEGにして部分切り出しRGB_888に変換するなどしてください。

マイクのファームウェア

Arduino MKR WiFi 1010 — Arduino Online Shop専用になりますが、AIロボット用の"耳"に相当するマイクのファームウェアです。ChemiCo-SAN/FirmWare/2Mic-FFT at main · eeAI-works/ChemiCo-SAN (github.com)カメラと違ってChemiCo-SAN_earではないのは、まだ修正拡張する部分があるからです。ADCの高速化についてはArduino M0のanalogRead関数を高速化する(1) – しなぷすのハード製作記 (synapse.kyoto)を参考に、というか丸パクリさせていただきました。この場を借りてお礼させていただきます。

上記プログラムはhttpクライアントとして動作し、FFT後のマイク入力データをサーバーにPOSTリクエストで送信します。したがって、データの受信サーバが必要です。カメラソフトと同様にArduino_secret.hにSSIDとパスワードを入れてお使いください。デファルトの受信サーバアドレスが”febmarch04″になっていますので、ここを後述の受信サーバアドレスに書き換えてください。

受信サーバはChemiCo-SAN/listen_mongo.py at main · eeAI-works/ChemiCo-SAN (github.com)です。mongoDBとFlaskが必要です。MongoDB: The Developer Data Platform | MongoDB:Welcome to Flask — Flask Documentation (2.2.x) (palletsprojects.com):

いったんデータベースにため込んだFFTデータを表示するのがChemiCo-SAN/show_graph_listen.py at main · eeAI-works/ChemiCo-SAN (github.com)です。受信サーバとsession_idを合わせてお使いください。後述のムービーのようにMAP表示をしてみたい場合は、ChemiCo-SAN/show_map__listen.py at main · eeAI-works/ChemiCo-SAN (github.com)をお使いください。どちらもmatplotlibが必要です。

mongoDBとFlaskが必要な分、カメラよりも敷居が高いと思います。短いわりには、簡単といえるレベルではないプログラムですが解説はしませんのでがんばってください。カメラとマイクでクライアントとサーバの向きが逆になっていますのでご注意ください。理由についてはおいおい説明することになるかと思います。

サンプル例(Youtube動画)

この2つのプログラム群を紹介しているのが以下の動画です。

カメラとマイクの動作検証

こんな感じのデータになりますが、実際には表示させるのではなくて、これらのデータをもとに内部処理して「知能」を生み出すことになります。さて、うまくいくかどうか。こればかりはやってみないとわかりません。

コメント

タイトルとURLをコピーしました