この記事はIoTLT Advent Calendar 13日目です。
今回は清水さんに顔認識して欲しいと思い、噂のMAiXDUiNOを導入したのでその辺りを書きます。
清水さんは御任夢彦(みとうゆめひこ)さんが生んだキャラクターで、IoT開発に利用したいという申し出に対し、ご厚意により利用フリーにしていただいております。
IoTLT Vol.56で初登場し、対話をしたり、撫でると照れたりといったコミュニケーション型のインタラクションの開発で活躍してます。
この度、誰でもご利用OKとの確認が取れましたので開発にご活用ください。
<<[Downloadはこちら](https://github.com/morikentech/shimizu)>>
みなさんにご活用いただけばいただくほど、コンテンツが増えるかもしれません。
*あくまで作者のご厚意ですので、モラルと節度をもった利用をお願いします。
#MAiXDUiNO
MAiXDUiNOとはcannan社製のAIチップKendryte K210搭載のMaixシリーズのAI開発ボードです。K210といえば最近はM5StickVにも搭載されておりお手軽に画像認識ができると人気があります。
Arduino IDEやK210用のMicroPython環境であるMaixPyでの開発が可能となっています。
ちなみに、このMAiXDUiNOの開発者はM5STACKの開発者と師匠を同じくした兄弟弟子とのことです。いうなれば、亀仙流における悟空とクリリンみたいなものですね。
とにもかくにも、これさえあれば清水さんに顔を覚えてもらえる!
と思ったのでまずは動かしてみます。
(・.・)oO(MAiXDUiNOのスペルは"i"だけ小文字って覚えると覚えやすい)
#ファームウェア書き込み
##ファームのダウンロード
こちらから最新のファームをダウンロードしてください。
2019.12.13現在v0.4.0が最新。バージョンが合わないと簡単にエラーを起こします。
必要なファイルは***"maixpy_v0.4.0_50_gcafae9d.bin"***です。
こちらから顔認識モデルをダウンロードしてください。
2019.12.13現在v0.3.2が最新。v0.4.0のところにはないのでv0.3.2のところから持ってきます。
https://github.com/sipeed/MaixPy/releases/tag/v0.3.2
必要なファイルはface_model_at_0x300000.kfpkgです。
##書き込み用ツールのK-Flashを準備する
ファームの書き込みには専用のツールを使います。
これにはいくつかありますが、私は1のK-Flash v0.4.1でうまく書き込めました。
私の環境ではK-Flash guiは起動でハマってしまいました。
1.K-Flash v0.4.1 ←私がつかったやつ
https://kendryte.com/downloads/
2.K-Flash gui ←別のやつ
https://github.com/sipeed/kflash_gui/releases
可愛いアイコンのK-Flash v0.4.1を開くと小さいウィンドウが出てくるので入力していきます。
Device
USB-TypeCで接続すると、ポートが2つでてきます。一方がアタリで他方がハズレです。
ポートが若い方がアタリという噂があります。
ハズレを選んだ場合、書き込みがうまくいかずエラーがでるだけなのでTry & Errorで力押ししましょう。
Baude rate
ボーレートも力押しで!速い方から試せば効率的にTry & Errorができます。
私の場合は1500000で行けました。
Chip
In-Chipにします。
Firmware
先ほどダウンロードしたファームを選択します。
Open terminal after flash
どっちでもいいですが、terminal開いてもやることないのでチェックを外した方が煩わしくないです。
*同じ条件でも繰り返すと書き込めたりします。
#MaixPy IDEの導入
最新のMaixPyをダウンロードします。
2019.12.13現在、最新はv0.2.4ですが、v0.2.4のディレクトリはひっかけなので注意してください。
本物は一番上の"_"ディレクトリに隠されています。
その中から自分のPC用のインストーラをダウンロードしてインストールします。
*解凍できない場合はいろいろな解凍ソフトを試してみてください。私は愛用のLhaplusで開けませんでした。
#Wifi繋げて顔認識
顔認識やWifi接続に関してはsipeedのgithubにサンプルコードがあります。
これらを合体して下記のコードを作ります。
顔認識のサンプルコード
https://github.com/sipeed/MaixPy_scripts/blob/master/machine_vision/demo_find_face.py
wifi接続のサンプルコード
https://github.com/sipeed/MaixPy_scripts/blob/master/network/demo_esp32_network.py
WIFI_SSIDとWIFI_PASSWDに自分の環境のID/PASSを入れます。
import sensor
import image
import lcd
import KPU as kpu
import network
from Maix import GPIO
from fpioa_manager import fm, board_info
WIFI_SSID = "*****"
WIFI_PASSWD = "*****"
# IO map for ESP32 on Maixduino
fm.register(25,fm.fpioa.GPIOHS10)#cs
fm.register(8,fm.fpioa.GPIOHS11)#rst
fm.register(9,fm.fpioa.GPIOHS12)#rdy
fm.register(28,fm.fpioa.GPIOHS13)#mosi
fm.register(26,fm.fpioa.GPIOHS14)#miso
fm.register(27,fm.fpioa.GPIOHS15)#sclk
nic = network.ESP32_SPI(cs=fm.fpioa.GPIOHS10,rst=fm.fpioa.GPIOHS11,rdy=fm.fpioa.GPIOHS12, mosi=fm.fpioa.GPIOHS13,miso=fm.fpioa.GPIOHS14,sclk=fm.fpioa.GPIOHS15)
# Wifi connection
nic.connect(WIFI_SSID, WIFI_PASSWD)
print(nic.ifconfig())
print(nic.isconnected())
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
task = kpu.load(0x300000) # you need put model(face.kfpkg) in flash at address 0x300000
# task = kpu.load("/sd/face.kmodel")
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
while(True):
img = sensor.snapshot()
code = kpu.run_yolo2(task, img)
if code:
for i in code:
print(i)
a = img.draw_rectangle(i.rect())
a = lcd.display(img)
a = kpu.deinit(task)
#動作テスト
MaixPyの左下にある緑色の鎖マークを押してMAiXDUiNOと接続します。
*このとき、ファームやMaixPyのバージョンが一部古いなどの相性が悪いとポート接続が一生終わりません。
鎖マークが赤くなって下の再生マークが緑になったら再生マークで実行します。
顔を認識しました。
#MAiXDUiNO単体で動かす方法
マイコンさんにはMaixPy IDEからの再生ボタンではなく、モバイルバッテリーなど電源いれるだけで動いて欲しいです。
どう書き込めばいいのかよくわからなかったのですが、MicroSDから動かせそうなのでやってみました。
結論からいうと、boot.pyとリネームしてMicroSDに書き込んでおけば、boot.pyを実行します。
Pythonだとmain.pyに書くらしいのですが、PicroPythonでマイコン動かすときはboot.pyに書いてみたら動きました。これが正しいのかわかりませんが、動いたので今日のところはよしとします。
#まとめ
- MAiXDUiNOで顔認識とWifi接続までできた
- ツールやファームのバージョンに気を付けないとすぐに行き詰まる
- MAiXDUiNOは環境作るの不安定だけど、安定後はサクサクできた
- Noodl使うところまでいけなかったけど、ここまできたらMQTTでいけそう
- 清水さんが公開されました
#所感
深圳の風を感じたいと思ってMAiXDUiNOを使ってみたところ、同じところで躓いてる人が少なくて悲しみでした。でも同じレベルの人の助けになれたらと思います。
公式フォーラム神。
顔認識を動かしてみて、人間のコミュニケーションが高度なセンシングで成り立ってることを肌で実感しました。今後はコミュニケーションに関わる技術を中心に深堀りできたらと思います。
今年はIoTLTのおかげでIoT, LT, アウトプットデビューができました!
みなさまのおかげで充実した年になりました、ありがとうございます。
来年もいろいろと挑戦します。
満月の夜に感謝をこめて