Top View


Author Yuhei Okazaki

UnitV AI Cameraの使い方

2020/05/11

公式ドキュメント

こちらです。

ところどころ 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の「接続する」をクリックし、接続します。

UnitV AI Camera

無事接続できたら「開始」をクリックすることでプログラムが開始されます。

UnitV AI Camera

UnitV AI Camera

ジャンケンの手の形を認識する

簡単な画像認識の例として、ジャンケンの手の形を認識させます。

学習モデルの入手

今回はこちらのNotebookをお借りしました。

3点、修正します。

  1. batch_size=BATCH_SIZE = 32batch_size=BATCH_SIZE に修正(2箇所あります)
  2. acc = history.history['acc']acc = history.history['accuracy'] に修正
  3. 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に接続することができないので、シリアル通信を介して他の機器と接続する必要があります。このあたりも、別途トライしてみたいと思います。

参考

Yuhei Okazaki

Yuhei Okazaki

Twitter X

2018年の年明けに組込み畑からやってきた、2児の父 兼 Webエンジニアです。 mockmockの開発・運用を担当しており、組込みエンジニア時代の経験を活かしてデバイスをプログラミングしたり、簡易的なIoTシステムを作ったりしています。主な開発言語はRuby、時々Go。