前回の記事で作成した model.kmodel を、M5StickV で試す方法について説明する。
用意しておくもの
- Windows 10 の動いている PC
- M5StickV デバイス
- 転移学習により作成した画像分類用の model.kmodel ファイル
ファームウェアとアプリの準備
ファームウェア
このリンクから M5StickV のファームウェアのファイル(M5StickV_Firmware_v5.1.2.kfpkg)をダウンロードする。
ファームウェア書き込みアプリ
このリンクからファームウェアを書き込むのに使うアプリ(kflash_gui_v1.5.3_windows.7z)をダウンロードする。
このファイルは 7-zip 形式で圧縮されているので、適当な 7-zip の解凍アプリを使って展開しておく。
MaixPy IDE
このページから v0.2.5 のフォルダを選び、Windows 版の MaixPy IDE (maixpy-ide-windows-0.2.5.exe)をダウンロードする。
ダウンロードしたら、ファイルを起動してアプリをインストールする。
ファームウェアの書き込み
展開したファームウェア書き込みアプリを起動して、Open File をクリックしてダウンロードしたファームウェアを指定する。
また、M5StickV をUSBでPCに接続しておく。
Board に M5StickV を指定し、Port に COM6 のように M5StickV を接続したシリアルポートを指定したら、Download ボタンを押してファームウェアを書き込む。
モデルファイルの転送
作成した model.kmodel ファイルを、SDカードに保存する。M5StickV や M5UnitV はカードとの相性問題があり、不適切なカードを使うと認識されない。
M5Stack のサイトにはカードとの適合について説明したページがあるが、必ずしも正しい訳ではなさそうだ。
いずれにせよ、適切なカードを選んで、 model.kmodel ファイルを、SDカードのルートフォルダにコピーしておく。
プログラムの転送
MaixPy IDE を使って M5StickV のプログラムを転送する。まず、スタートから MaixPy IDE を選んで実行する。
次にファイルメニューから新規を選び、表示されているプログラムを以下の内容で置き換える。(コピペする)
import lcd import image import time import uos import sys import sensor import KPU as kpu import os lcd.init(freq=15000000) lcd.rotation(2) lcd.clear() sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.skip_frames(time = 2000) sensor.set_windowing((224, 224)) clock = time.clock() task = kpu.load("/sd/model.kmodel") while(True): clock.tick() img = sensor.snapshot() fmap = kpu.forward(task, img) plist = fmap[:] pmax = max(plist) if not(pmax>2) and not(pmax<2): continue max_index = plist.index(pmax) fps = clock.fps() lcd.display(img) lcd.draw_string(70, 20, str(max_index)) lcd.draw_string(70, 40, repr(pmax)) lcd.draw_string(70, 60, repr(fps))
以上の準備が整ったら、画面左下にある接続ボタン(緑色のクリップのようなアイコン)をクリックして、M5StickV に接続する。(問題なく接続できたらクリップが赤色に変わる)
接続できたら、その下の開始ボタンを押してプログラムを実行する。プログラムが起動すると、カメラの画像にオーバーラップして3つの数値が表示される。
上から、
- 認識した中で最も確率の高い画像のインデックス(0から始まる値)
- 確率値
- フレームレート(FPS)
となっている。
M5StickV にプログラム保存
プログラムを M5StickV に書き込みたい場合は、接続しプログラムを実行していない状態で、ツールメニューから「Save open script to board(boot.py)」を選んで転送する。こうしておくと、電源オンでプログラムが起動する。