Table of Contents
公式ドキュメント
こちらです。
ところどころ M5StickV
との記述がありますが、UnitV自体M5StickVのセンサー無し版なので、この手順であっているようです。
ただ、この手順通りに進めても上手くいかない点があったのと、物体検知までの道のりが遠かったという点を踏まえて、もう少し簡単に動かす手順を以降に記載します。
ファームウェアの書き込み
ファームウェアのダウンロード
こちらのリンクからダウンロードします。
Kflashのインストール・ファームウェアの書き込み
UnitV Quick Startでは、ファームウェアはKflash_GUIを使って書き込む旨が記載されていますが、Macだとこのツールが起動できませんでした。
このため、kflash.pyをインストールし、これを使って書き込むことにしました。
$ pip install kflash
以下コマンドでファームウェアを書き込みます。PCとUnitVをUSBで接続してコマンドを実行すると、ポートは自動判別してくれました。
$ kflash -B goE -b 1500000 -t ./M5StickV_Firmware_v5.1.2.kfpkg
MaixPy IDEによるプログラムの実行
MaixPyのインストール
MicropythonをK210上で実行するためにMaixPy IDEをインストールします。以下URLからダウンロードしてください。
helloworld.pyをUnitVに書き込み&実行
[ファイル]>[例]>[01-Basics]>[helloworld.py]
をクリックして、helloworld.pyを開きます。
UnitVをUSB接続した状態で、IDEの「接続する」をクリックし、接続します。
無事接続できたら「開始」をクリックすることでプログラムが開始されます。
ジャンケンの手の形を認識する
簡単な画像認識の例として、ジャンケンの手の形を認識させます。
学習モデルの入手
今回はこちらのNotebookをお借りしました。
3点、修正します。
batch_size=BATCH_SIZE = 32
をbatch_size=BATCH_SIZE
に修正(2箇所あります)acc = history.history['acc']
をacc = history.history['accuracy']
に修正acc = history.history['val_acc']
をacc = history.history['val_accuracy']
に修正
修正後、 [ランタイム]>[すべてのセルを実行]
をクリックすると、K210用のモデルがダウンロードできます。
SDカードにモデルを書き込む
取得したモデルファイル( labels.txt
, model.kmodel
)をSDカードのルートに書き込みます。
このとき、 boot.py
は書き込まないよう注意してください。
SDカードのルートに
boot.py
が存在する場合、このプログラムが優先的に読み込まれます。 今回はIDEからプログラムを実行したいので、SDカードにはboot.py
を配置しないようにします。
プログラムを作成&実行
以下のプログラムを作成します。
import sensor
import image
import KPU as kpu
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((224, 224))
sensor.set_vflip(0)
sensor.set_hmirror(0)
sensor.run(1)
f = open('/sd/labels.txt', 'r')
labels = f.readlines()
f.close()
print(labels)
task = kpu.load("/sd/model.kmodel")
while(True):
img = sensor.snapshot()
fmap = kpu.forward(task, img)
plist = fmap[:]
pmax = max(plist)
max_index = plist.index(pmax)
print(labels[max_index].strip())
print(pmax)
a = kpu.deinit(task)
これを実行して、カメラの前に手をかざすとグー・チョキ・パーを判別することができます。
まとめ
わずか2000円弱でAIカメラを作ることができました。このAIカメラを、IoTシステムと組み合わせて使うことで可能性が拡がる予感がしています。
ただし、UnitVは直接BluetoothやWiFiに接続することができないので、シリアル通信を介して他の機器と接続する必要があります。このあたりも、別途トライしてみたいと思います。