1450円($13.50)の AIカメラ Sipeed M1n Module AI Development Kit based on K210 の試用

秋月電子通商で1450円で売られているAIカメラを試してみました。

特長

本機は、中国Sipeed社が開発したAIカメラで、その中核となるAIエンジンにはKENDRYTE社が開発したK210というRISC-V(64bitデュアルコア・400MHz)プロセッサを搭載しています。ソフトウェアは、Sipeed社から統合開発環境(IDE)MaixPyと、MicroPython用ファームウェアなどが配布されています。

AI用 K210 RISC-V プロセッサ

AI用に開発された64bitデュアルコア・プロセッサで、FPU(浮動小数点演算ユニット)を内蔵しているのはもちろんのこと、AI演算用にKPU(Neural Network Processing Unit)と呼ばれるニューラル・ネットワーク・プロセッサや、APU(Audio Processing Unit)と呼ばれる最大8ch入力、最大192kHzサンプル、FFT演算機能などを含むオーディオ用プロセッサを内蔵しています。
SRAMは8Mbit(1Mバイト)を内蔵し、うち2MBitはAI処理専用です。
また、M1n Moduleボード上には、ファームウェアやプログラム、データの保持用に128MBit(16Mバイト)のフラッシュ・メモリを実装しています。

参考文献:Sipeed_M1n_Datasheet_V1.0

処理能力

データシート(参考文献)によると、AI用に開発されたプロセッサ K210は、VGA(640×480)解像度の画像認識を最大30フレーム/秒の速度で実行することが出来、8チャンネルまでの音声認識が出来るようです。また、ディープ・ラーニング用のエンジンにはTensorflowおよびKeras、Darknetが使用できるようです。
また、配布されているMicroPython用ファームウェアとサンプル・プログラムを使えば、YOLOv2(Tensorflow/Keras)を使った(と思われる)リアルタイムの顔認識や顔検知のデモをMicroPythonのAPIで実行できます。

統合開発環境(IDE)MaixPy

Sipeed社が配布する統合開発環境MaixPyを使えば、より簡単にAIを利用したプログラムを開発することが出来ます。(予めファームウェアと学習モデルをM1n Moduleボードに書き込んでおく必要がある。)
下図は、MicorPythonで書かれた顔検知のサンプル・プログラムを実行したときの様子です。3人分の顔検知を約25ms(40フレーム/秒)の速度で処理することができました。

Sipeed社が配布する統合開発環境MaixPyを使えば、MicorPythonで書かれた顔検知のサンプル・プログラムを簡単に利用することが出来る。3人分の顔検知を約25ms(40フレーム/秒)の速度で処理できた

統合開発環境MaixPyは、下記からダウンロードすることが出来ます。本ブログではv0.2.5をダウンロードしました。

統合開発環境(IDE)MaixPy:
https://dl.sipeed.com/shareURL/MAIX/MaixPy/ide/

顔検知のサンプル・プログラム

M1n Moduleボード上でサンプル・プログラムdemo_find_face.pyを実行し、インターネット・検索で表示した3人分の顔を表示したPC用のLCDモニタをM1n Moduleボード上のカメラで撮影し、検知した3人分の顔の位置を出力したときの様子を示します。

M1n Moduleボード上でサンプル・プログラムdemo_find_face.pyを実行し、カメラを、インターネット・検索で表示した3人分の顔を表示したLCDモニタに向け、検知した3人分の顔の位置を出力した

検索には「いやすとや」「顔」を入力し、検索対象「画像」を選択しました。

検索には「いやすとや」「顔」を入力し、検索対象「画像」を選択した

サンプル・プログラムを動かしてみよう

本サンプル・プログラムを実行するには、予めMicroPython用のファームウェアと顔認証用の機械学習モデルをM1n Moduleボードに書き込んでおく必要があります。また、Windows PCからファームウェアをM1n Moduleボードに書き込むには、K-Flashが必要です。以下に、その手順を示します。

MicroPython用のファームウェア

ファームウエア(BINファイル)は、下記からダウンロードします。

MicroPython用のファームウェア:
https://dl.sipeed.com/MAIX/MaixPy/release/master/

筆者はmaixpy_v0.6.2(maixpy_v0.6.2_72_g22a8555b5.bin)をダウンロードし、Windowsのダウンロード・フォルダに保存しました。

機械学習モデルKModel

顔認証用の機械学習モデル(kfpkgファイル)は、下記からダウンロードします。ファイル名の0x300000は、本モデル・データの書き込み先のメモリ・アドレスです。プログラムから呼び出すときにアドレスが必要です。

KModel:
https://dl.sipeed.com/shareURL/MAIX/MaixPy/model
face_model_at_0x300000.kfpkg

書き込みツールK-Flash

ダウンロードしたファームウェア(BINファイル)と機械学習モデル(kfpkgファイル)をM1n Moduleボードに書き込むには、書き込みツールK-Flashが必要です。

Sipeed社のサイトにてWindowsのGUI環境の書き込みツールkflash_gui_v1.6.5が配布されているものの、当方のWindows 10ではインストールが出来ませんでしたので、今回は、プロセッサK210の開発元のGitHubのサイトからK-Flash v0.4.1をダウンロードして書き込みました(更新日付はSipeed社のよりも古い)。

書き込みツール(Windows GUI版):
https://github.com/kendryte/kendryte-flash-windows/releases

インストールし、実行すると下図のような画面が表示されるので、COMポートと、ビット・レート(115200などを選択)、Chip(In-Chipを選択)、ファームウェアのファイルを選択し、Open terminalのチェックを外しておきます。

COMポートと、ビット・レート(115200などを選択)、Chip(In-Chipを選択)、ファームウェアのファイルを選択し、Open terminalのチェックを外す

M1n ModuleボードをWindows搭載PCに接続し、ボード上のBOボタンを押しながらRSTを押し、ファームウェアの書き換えモードに設定してから、K-Flashの「Flash」ボタンを押すと、ファームウェアを転送することが出来ます。

同じように機械学習モデル(kfpkgファイル)も書き込んでください。

なお、ビット・レートが初期設定のままだと書き込みに失敗することがあったので、115200に設定しましたが、転送するのに数分の時間を要します。頻繁に書き換える場合は、加減してください。

サンプル・プログラム

MicroPythonで書かれたサンプル・プログラム(拡張子py)は下記で配布されています。ダウンロードして、統合開発環境MaixPyで開きます。

サンプル・プログラム:
https://github.com/sipeed/MaixPy_scripts

今回、試用したサンプルは下記のdemo_find_face.pyです。

今回使用したサンプル:
https://github.com/sipeed/MaixPy_scripts/blob/master/machine_vision/face_find/demo_find_face.py

顔検知した座標をシリアル出力するには、for obj in objects内にprint(obj.rect())を追加てください。

実行するには、統合開発環境MaixPy画面の左下にある、接続ボタンをクリックしてから、実行ボタンをクリックしてください。

フレーム・バッファの内容が画面右上に表示され、結果がシリアル・ターミナルに出力されました。
USBシリアル変換による仮想シリアルCOMポートが2つあり、片方がMicroPythonとのインタフェース用、もう片方がフレーム・バッファなどの転送として動作しているようです。(筆者環境ではCOM3がMicroPython用、COM4がフレーム・バッファ用だった)

おわりに

K210の処理能力の高さと、1450円で買える手軽さから、簡易なAIカメラとして普及が期待できる商品だと感じました。
その一方で、デバイスやソフトウェアの安全性については、良く分からない部分もあります。開発環境を使用する際や、カメラとして運用する際は、一定のRiskが想定されることを認識したうえで活用すると良いでしょう。
例えば、専用のPC(古いものでよいが初期状態のもの)を準備し、開発環境をインストール後、ネットワークを非接続の状態にして実験を行えば、万が一、開発環境に脆弱性があった場合の対策になります。また、応用する際は結果だけをシリアル・インタフェース経由で他のマイコンと連携すれば、カメラで撮影した生データの流出を防止することが出来ます。

by bokunimo.net

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です