[電子工作]Sipeed Maix Bit(Kendryte K210)でA.I.を体験ーーーー目次ーーーー WAVファイルの作成方法 AVIファイルの作成方法 3.Arduino IDEのMaix環境(Maixduino)の使い方 ーーーーーーーーーー 1.Sipeed Maixとは?中国のKendryte(勘智)社が開発したK210というマイコンを搭載し、Sipeed社が開発した評価ボードが Maixシリーズです。Maixボードには、どれもカメラI/F、LCD I/F、MicroSDカードを搭載しており、これらの 機能についてはほぼ共通に使えるようです。それ以外の、マイク、センサー、無線通信などはボード毎に 異なるので、どれを買うか決める時は精査下さい。 K210の仕様は次の通りで、組み込み用マイコンとは思えない仕様です。 ・64bit RISC-Vプロセッサ、キャッシュ付き、400MHz(600MHzまでクロックアップ可能。電圧アップ すると800MHzで動作するらしい)を2個 ・6MBの汎用RAMと2MBのCNN用RAM ・音声認識、音声合成用プロセッサAPU ・CNNアクセラレータKPU ・FFTアクセラレータ ・AES、SHA256などのアクセラレータ という訳で、A.I.処理に最適なマイコンです。ADCや無線通信は標準で持たないので、外付けが必要です。 私は、RISC-Vアーキテクチャが発表された時に、単純な命令が動作するところまで自分でRTL設計した 事があるので、64bitのRISC-Vアーキテクチャのプロセッサだけでもそそられます。 ところで、CPU設計はどうなったのか?って。32bitの基本関数は動くようになって、割り込み処理の 実現方法を調査していて、中国で設計されたHummingbirdというプロセッサのRTLがネットに無料で 落ちているのを見つけて止めました...中国には敵わない... ですが、2020年、コロナ禍の中、一先ず完成させました。詳細はこちら。
ソフト開発は、ディフォルトでMaixPyというMicroPythonがファームウェアに書かれていました。自分で 学習データをフラッシュに書き込むことで、カメラから映像を読み込み、顔認識や物体認識し、LCDに 表示するプログラムをPythonで書けます。QVGA解像度で、約20fpsで動作します。詳細は下記の通り。 また、Arduino IDEで開発可能で、高速処理を行いたい時は、こちらを使うべきです。
なお、Sipeed社の各種ボードの仕様や回路図は、こちらにあります。
注意.原因不明ですが、Windows10 32bit版をインストールしたノートPCでは、MaixBitのCH552が 正常に認識されず、使うことができませんでした。(ドライバを手で入れても駄目!) Windows10 64bitやLinux(Ubuntu 64bit)では、特にドライバを入れなくても認識されました。 よって、Windows10 32bitで使おうとしている方は注意が必要です。
2.MaixPyの使い方(1)MaixPyとは? MicroPythonをベースに、Maixシリーズの機能を活かせるように関数を拡張したものがMaixPyです。 詳細は、こちらをご覧ください。
(2)MaixPy IDEのインストール 標準のMicroPythonの環境も使えますが、Sipeed社がもっと良いものを準備しています。それが MaixPy IDEです。本来は、Sipeed社のダウンロードページからダウンロードするのですが、なぜか 不安定なので、M5STACK社の方が安定しているようですし、設定の説明も分かりやすい。 特徴は、カメラ映像とヒストグラムが標準で見れるところ。( USB3.0ポートに接続するとカメラ映像とヒストグラムが表示されましたが、USB2.0ポートでは表示 できないようです。仕様かバグか、不明。)
(3)MaixPy IDEの使い方 ツールーSelectBoard でボードを選択。 左下の鎖ボタンで接続。 左下の三角ボタンで開始。 起動プログラムを本体に書き込みたい場合は、ツールーSave open script to board(boot.py) を行うと、本体の電源を入れるとそのプログラムが実行されます。
(4)各種サンプルの実行方法 ・準備 1.ファームウェアの書き換えや学習データを書き込むため、最初にK-Flash又はKflash_guiを インストール。Pythonの環境を持つPCなら、次のコマンドでインストール可能。(私はこれ) >>pip3 install kflash 又は >>pip install kflash *.binや*.kfpkgをコマンドラインから書き込む方法は次の通り。GUIはネットで探して下さい。 Windows >>kflash -p COM3 -b 115200 ???.bin Linux >>kflash -p /dev/ttyUSB0 -b 1500000 ???.bin 注意.ポート名は、環境に合わせて変更すること。 注意.Linuxで/dev/ttyUSB0にアクセスできない場合、次のコマンドを実行して、再起動。 >>sudo usermod -a -G dialout $USER 2.ここの最新のフォームウェアをK-Flashで書き込む。 試したところ、サンプル毎に、必要なファームウェアが異なります。 A.I.を使ったものは「_minimum_with_ide_support」の付いた小さなサイズのもの、 複雑な画像処理を行うものは「_with_lvgl」の付いた最も大きなサイズのものを 書き込んで下さい。詳細は、次の3.を参照下さい。 3.各種サンプルは、ここにあります。但し、A.I.の学習データやNESのROMコードは 別の場所からダウンロードする必要があります。ファイルのコメントなどを参考に、 頑張ってネットから探して下さい。 私が試したところ、必要なファームウェアは次の通り。 applicationの下:最も大きな「_with_lvgl」の付いたファームウェア multimediaの下:最も大きな「_with_lvgl」の付いたファームウェア demo_scan_qr_code:最も大きな「_with_lvgl」の付いたファームウェア machine_visionの下でA.I.を使うもの:「_minimum_with_ide_support」の付いた小さなファームウェア。 cameraやlcdを使った単純なもの:どれでもOK また、カメラの映像が反転している場合は、次のコマンドを「sensor.run(1)」の前に追加下さい。 sensor.set_hmirror(1) sensor.set_vflip(1)
・AVIファイルの再生:「_with_lvgl」の付いたファームウェアを書き込めば、microSDカードの AVIファイルを再生可能。 ここの「multimedia/video/demo_video_play.py」を実行すると、microSDカード上の、「badapple.avi」 というファイルが再生できます。Sipeed社の「badapple_320_240_15fps.avi」をお使い下さい。 I2SにDACとスピーカを接続すれば、音も再生できます。でも、「badapple」って日本語の 歌だったのですね。知りませんでした。映像も音も一見の価値があります。 なお、youtubeの映像をAVIファイルに変換する方法はこちらです。 注意.映像が出ない場合があります。原因はLCDパネルの初期化が行われていないため。 よって、LCDパネルを使ったソフトの後なら問題ありませんが、電源入れた直後には 映像が出ません。次のコマンドをビデオ再生コマンドの前に実行しておく必要があります。 import lcd lcd.init()
・カメラ映像の録画/再生:「_with_lvgl」の付いたファームウェアを書き込めば、microSDカードに AVI形式で映像を保存、再生可能。 ここの「multimedia/video/demo_video_record.py」を実行すると、100コマ分の映像を保存。 「multimedia/video/demo_video_play.py」のファイル名を"/sd/capture.avi"に変更すれば、 保存した映像を再生できます。
・カメラ映像から顔認識:人の顔を検出して、枠を表示 ここから「maixpy_yolo2.zip」をダウンロードし、「face_3M.kfpkg」をK-flashで書き込み。 「maixpy_yolo2.py」をMaixPy IDEで実行。
・カメラ映像から20class分類:人、いす、TVモニタ、車、犬、猫など20種類のものを見つけ分類 ここから「maixpy_20class.zip」をダウンロードし、「20class.kfpkg」をK-flashで書き込み。 「20class.py」をMaixPy IDEで実行。
・MobileNet:1000種類のものを分類 ここから「maixpy_mbnet.zip」と「labels.zip」をダウンロードし、「mbnet75.kfpkg」をK-Flashで 書き込み、「labels.txt」をチップ内のflashメモリかmicroSDカードに置く。 同じページにサンプルプログラムが書かれているので、エディタにコピー・ペーストし、 「mobilenetv1_1000class.py」等の名前で保存し、MaixPy IDEで実行。
・NESのエミュレータ:「_with_lvgl」の付いたファームウェアを書き込めば、NESのゲーム が動きます。但し、Maix BitにはDACもスピーカも付いていませんので、音は出ません。 音を出したい場合は、こちらを参照。 microSDに*.nesファイルを書き込み、ここの「application/nes_emulator.py」を実行すると 実行できます。フリーのNESソフトがありますので、これで動作確認して下さい。 サンプルの「mario.nes」は自分で、ネットから探して下さい。私は、動きました。 なお、キーボードで操作する場合、MaixPy IDEでboot.pyで保存し、MaixPy IDEを切断し、 PCと115200bpsでシリアル接続し、W/A/S/D/J/K/enterのキーで遊んで下さい。 (同時に複数のキーを入力できないので、まともにゲームできないが...) PS2のコントローラを接続して、「application/nes_ps2.py」を実行すれば、コントローラで 操作できるようです。(方法は、ネットで検索下さい。) できるようにし、更にI2SのDAC、アンプ、スピーカを接続して音も出るようにしました。
3.Arduino IDEのMaix環境(Maixduino)の使い方(1)Maixduinoとは? Maixduinoとは、Sipeed社が販売しているK210とESP32の2つのマイコンを搭載しArduino互換の コネクタを持つ開発ボードであり、かつ、Arduino IDEを使ったMaixシリーズの開発環境でもあります。 私のHPでは、後者の開発環境として説明しています。詳細はこちらをご覧ください。
(2)Arduino IDEのインストール まず、Arduino IDEをインストールしてください。 その後、ファイルー環境設定の追加のボードマネージャのURLに http://dl.sipeed.com/MAIX/Maixduino/package_Maixduino_k210_index.json を追加し、ツールーボードのボードマネージャで「maix」等で検索し、インストールします。詳細はこちら。 その後、ツールを次のように設定下さい。 (Linuxで書き込めない場合は、>>sudo apt install python3-serial もお試し下さい。) ボード:Sipeed Maix Bit-Mic Board シリアルポート:Maix Bitが繋がっているポートを選択(2つポートが出るので試行下さい) 書込装置:k-flash
で、いきなりバグや注意点があります! 1.少なくとも、2020年2月の段階で、カメラを使ったサンプルを実行すると、エラーで 停止します。原因は、OV2640のライブラリのファイルのタイプミス! 対策方法は次の通り。 Windowsの場合、 C:\Users\xxxxx\AppData\Local\Arduino15\packages\Maixduino\hardware\k210\0.3.11\libraries\Sipeed_OV2640\src Linuxの場合、 ~/.arduino15/packages\Maixduino\hardware\k210\0.3.11\libraries\Sipeed_OV2640\src にある、「Sipeed_OV2640.cpp」と「Sipeed_OV2640.h」にタイプミスがあり、それぞれ1箇所ずつ、 setRotaion→setRotation に書き換えてください。これで、問題なくコンパイルできます。 しかし、4ヶ月もこのまま、っていうのはどうしたものか...
2.SpeechRecognitionのサンプルを実行しても、音が全く取れません。原因は、 Maix BitのMEMSマイクはL/R=VDD、他のボードはL/R=GND。つまり、右の音と左の音が Maix Bitは他のボードと逆になっているため。 対策は次の通り。 Windowsの場合、 C:\Users\xxxxx\AppData\Local\Arduino15\packages\Maixduino\hardware\k210\0.3.11\libraries\Maix_Speech_Recognition\src Linuxの場合、 ~/.arduino15/packages\Maixduino\hardware\k210\0.3.11\libraries\Maix_Speech_Recognition\src にある、「Maix_Speech_Recognition.cpp」で、g_rx_dma_buf[2 * i]→g_rx_dma_buf[2 * i + 1] に2箇所変更下さい。 ついでに、speeking→speaking に直しておくと、他の人に見せる時に恥ずかしくないかも...
(3)ファイルースケッチ例 に様々なサンプルが含まれています。主なものは次の通り。 ・Maix-KPUーmobilenet_v1:1000種類のものの分類 上記、対策をすること! コメントの通り、ファイルをダウンロードし、展開し、「m.kmodel」を「m」に名前を変え、 SDカードに書き込む必要があります。 ・Maix_Speech_Recognition:音声認識のサンプル 上記、対策を行うこと! また、LEDの色が違っているようですので、#include文の後に、次のコマンドを追加。 #define LED_RED 13 #define LED_BLUE 14 #define LED_GREEN 12 4.Kendryte SDKの使い方
|