Fusic Tech Blog

Fusion of Society, IT and Culture

UnitV AI Cameraの使い方
2020/05/11

UnitV AI Cameraの使い方

岡嵜です。

少し前、M5Stack社が2020年2月に発売したUnitV AI Cameraを手に入れました。

UnitV AI Camera

早速、エッジAIで物体検知してみようと息巻いていたのですが、思いの外、文献を見つけるのに苦労しました。

見つけた公式ドキュメントと、いくつかの記事を参考に画像認識させることに成功したので手順をまとめます。尚、使用するPCはMacを想定しています。

公式ドキュメント

こちらです。

UnitV Quick Start

ところどころ M5StickV との記述がありますが、UnitV自体M5StickVのセンサー無し版なので、この手順であっているようです。

ただ、この手順通りに進めても上手くいかない点があったのと、物体検知までの道のりが遠かったという点を踏まえて、もう少し簡単に動かす手順を以降に記載します。

ファームウェアの書き込み

ファームウェアのダウンロード

こちらのリンクからダウンロードします。

https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/docs/M5StickV_Firmware_v5.1.2.kfpkg

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からダウンロードしてください。

http://dl.cdn.sipeed.com/maixpy-ide-mac-0.2.4.dmg

helloworld.pyをUnitVに書き込み&実行

[ファイル]>[例]>[01-Basics]>[helloworld.py] をクリックして、helloworld.pyを開きます。

UnitVをUSB接続した状態で、IDEの「接続する」をクリックし、接続します。

UnitV AI Camera

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

UnitV AI Camera

UnitV AI Camera

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

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

学習モデルの入手

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

https://colab.research.google.com/drive/1pjtPhnMyn-T2gfu1Qw_GtMFj44555nhM

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に接続することができないので、シリアル通信を介して他の機器と接続する必要があります。このあたりも、別途トライしてみたいと思います。

参考

yuuu

yuuu

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