M5StickV での QRコード認識
1.すごいデバイスが手に入った
AIoTと呼ばれる、AIとIoTを推進するデバイスがどんどんふえつつあります。
このM5StickVは、無線機能はついていないけれど、AIコアがついているので、畳み込みニューラルネットワーク(CNN)を比較的高速に処理できるマイコン(K210)が載っています。
まぁ、日本ではまだまだ入手困難で、タイミングを逃すとなかなか手に入りません。スイッチサイエンスか、共立電子エレショップから入手するのが無難でいいとおもいます。
こんなに小さいデバイスを使わない手はない!ってことで、なんとか手に入れて試してみることにしました。
2.とりあえず実用的にQR読み込みを!
このK210は、Tiny Yolo2をつかって簡単に物体認識ができます。そして、そのプログラムはデフォルトで入ってたりします。
まぁ、これはこれで使えるのですが、もうちょっと実用的なラインを!とおもって、まずはQRコードの認識をしてみることにしました。
ちなみに、M5Stack 自体は、QRコードを生成する関数があって簡単に表示ができるので、M5Stackのディスプレイ表示させたものを、M5StickVで読み込ませて何かアクションさせる・・・という使い方もできそうです。
まずは、試してみましょう。
3.ソースコード
プログラムは、MaixPy IDEで開発し、SDカードにプログラムをboot.pyという名前で入れておくと、スタンドアロンでうごくようになります。
このベースとなったサンプルコードは、公式ドキュメントにあります。
import sensor
import image
import lcd
import time
clock = time.clock()
lcd.init()
lcd.rotation(2) #Rotate the lcd 180deg
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(0)
sensor.set_hmirror(0)
sensor.run(1)
sensor.skip_frames(30)
img.lens_corr(1.8)
while True:
clock.tick()
img = sensor.snapshot()
res = img.find_qrcodes()
fps =clock.fps()
if len(res) > 0:
img.draw_string(2,2, res[0].payload(), color=(0,128,0), scale=2)
print(res[0].payload())
lcd.display(img)
ドキュメントにあるコードはそのままでは動かなかったり、M5StickVではちょっと動きがおかしかったので、少し直してあります。
このプログラムが起動して、QRコードが認識すると、シリアル画面に認識したコードに埋め込まれている文字列が表示されます。
最後の「print(res[0].payload())」の部分を変更して、他の端末に送付するように変更したり、出力指示をだしたり、SDに記録指示をだしたり…とすれば、QRコードをもとに何かを動かす、ということができるようになります。
4.こんな感じに。
今のサンプルコードだと、こんな感じ(最下行)で、デコードされた文字列が出るようになります。
今回のQRコードは、Google画像検索にあるものをつかって、適当に読ませましたが、会社の資産コードをいれたQRコードとか、ハッシュコードなどをいれておけば、簡単なチェック機器ができあがります。
5.認識率を上げるポイント
M5StickVは、割とフォーカス合わせするのがとっても大事です。最近、ツイッターにこういう報告がありました。このちょっとした調整で、普段使う程度の距離にフォーカスを合わせておくと、認識がとってもよくなります。
6.最後に
今回の学びはここまで。みなさんも、ぜひ、いろいろためしてみてください。僕も(pythonに慣れてないんだけど)これからも色々触って、なにか形にしてみようとおもいます。
開発したり研究したりするのに時間と費用がとてもかかるので、頂いたお気持ちはその費用に補填させていただきます。