M5stickを購入してはや1か月、やっとまともに動かせるようになってきました。
今回は画像認識→GPIO制御をやっていきます。
まずはM5tsticVのGROVEケーブルが必要になってきます。
一応コネクタも紹介しておきます。
そしてブレッドボード、こちらはなんでもいいです。
ここで注意していただきたいのですが、直接接続できません。抜け防止の引っかけはニッパーで切って強引に入れました笑 (手配ミス??)
あとはLEDがあればハード的な準備はOK。画像判別の学習ファイルは
こちらで作成していきます。
V-trainingで作成されたboot.pyを下記のようにいじっていきます。
import image
import lcd
import sensor
import sys
import time
import KPU as kpu
from fpioa_manager import *
import KPU as kpu
lcd.init()
lcd.rotation(2)
try:
img = image.Image("/sd/startup.jpg")
lcd.display(img)
except:
lcd.draw_string(lcd.width()//2-100,lcd.height()//2-4, "Error: Cannot find start.jpg", lcd.WHITE, lcd.RED)
task = kpu.load("/sd/作成した学習ファイル名")
labels=["1","2","3","4","5"] #You can check the numbers here to real names.
fm.register(34, fm.fpioa.GPIOHS0, force=True)
fm.register(35, fm.fpioa.GPIOHS1, force=True)
pinout34 = GPIO(GPIO.GPIOHS0, GPIO.OUT)
pinout34.value(0)
pinout35 = GPIO(GPIO.GPIOHS1, GPIO.OUT)
pinout35.value(0)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((224, 224))
sensor.run(1)
lcd.clear()
while(True):
img = sensor.snapshot()
fmap = kpu.forward(task, img)
plist=fmap[:]
pmax=max(plist)
max_index=plist.index(pmax)
a = lcd.display(img)
print(labels[max_index])
b = int(labels[max_index])
if pmax > 0.85 and b == 1: #このbを変更すればclassを変更できます。
lcd.draw_string(50, 40, "Accu:%.2f Type:%s"%(pmax, labels[max_index].strip()))
print('max!!')
pinout34.value(1)
time.sleep_ms(1000)
pinout34.value(0)
a = kpu.deinit(task)
制御できるのはGPIO 34なので、判別したのがtype1であれば3.3Vを出力していきます。
これで画像を認識→GPIO出力ができるようになりました。(マウスを学習させてます)
顔認証からドアを開けるといったこともできそうですね。何mA流せるか不明ですが…
10月6日
M5stick5本体のLEDで光らせてみました。