M5StickVでQRコードを読ます

概要

  • M5StickVのプログラム練習でQRコードリーダーを写経した
  • MaixPyのサンプルと違う点(M5StickV固有の問題、原点のズレと液晶とカメラの向きの違い)がある

書いたコードと説明

QRコード読み取り自体はライブラリを呼べばいいだけですが、MaixPy公式のQRコードリーダーサンプルそのままでは動きません。
(参考: M5StickV での QRコード認識
おそらくは、M5StickVはK210を搭載しているものの純正の評価ボードではないためMaixPyのドキュメントそのままでは動作しないのでしょう、購入時に入っているboot.pyを参考に書き換える必要があります。

1つめは「lcd.rotation(2)」です。カメラの入力をそのままLCDに出力するとひっくり返った画像が表示されます。おそらくはLCDとカメラの物理的な実装の向きが一致していないためでしょうか?
※QRコードは本体を縦にしてスキャンしました。上の写真はそれを横にして撮影しています。
※写真のように横にした状態で、原点は左上にあります。

2つめはLCDにおける原点の位置です。上記コードの26行目で赤色の矩形を描画していますが座標が(40,53)であるにも関わらず写真では原点のように見えます。逆に原点から矩形を描画すると見かけ上の原点からは描画されません。これも何かの都合でズレているのでしょう。

個体差があるのかなどは判りませんが、私のモノでは矩形は(40,53,240,134)と覚えておきます。
実は変な使い方をしていて、原点は(0,0)だという使い方ができればぜひご指摘ください。

原因?(追記)

カメラの解像度がQQVGAなので320×240で、M5StickVのディスプレイ解像度が240×135です。

整理すると、カメラで取得した「img = sensor.snapshot()」のimgは320×240のオブジェクトの可能性が高いです。
それを240×135を表示するにあたり原点から描画ではなく、中心をあわせたうえで周辺をカットしているとすれば納得がいきます。

カメラの解像度(320×240) – ディスプレイ(240×135) = カットされる領域は横80,縦105
カメラ画像とディスプレイの中心で合わせているなら原点は(40,52.5)、これで計算が合いました。

スポンサーリンク
WPC-336 x 280
WPC-336 x 280

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
WPC-336 x 280