見出し画像

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に慣れてないんだけど)これからも色々触って、なにか形にしてみようとおもいます。

開発したり研究したりするのに時間と費用がとてもかかるので、頂いたお気持ちはその費用に補填させていただきます。