そういえば。

自己紹介文で「肩の力を抜いて読んでいただけるブログにする」って書いていた気がしますが、最近の記事はすっかり堅苦しい内容になってますね。でも今回もその姿勢は変えずいつも通り我が道を行きます。内容などもちょいちょい間違っていることがあって、あとからこっそりと修正していることもあるので、今回もそうなんだ~程度に肩の力を抜いてお読みください。^^;

さて、改めまして皆様こんにちは。いいちょです。

ある時私のもとに「QRコードが読み取りできない!」との相談がありました。但し、スマホでは読み取りできます。読み取りできないのは弊社所有のバーコードリーダや一部のQR読み取りアプリなど。

考えられるのはQRの組成が違っているのか、特別な設定のQRなのか。ただ、そのQRは大手企業が発行しているもの。組成が間違っていることは考えにくいです。

そこでいつも通りQRコード解析用のWindowsアプリを自作してみて何が原因かを探ってみることとします。

まず、QRの組成について。

これは以前ブログで紹介した通りなのでここでは割愛します。

QRコードを検証してみる

読み取りできないQRと同じ設定のQRがこちら。内容は“http://toyotomo.co.jp”です。

私が所有しているスマホでは読み取り可能ですが、会社のガラケー(SH-01J)では読み取りができませんでした。みなさんは読み取りできますか?

さて、QR読み取りアプリを作成するにあたり、まずは画像からQRを見つけ出す処理を行います。画像を2値化し、白黒対比が1:1:3:1:1となる位置検出パターンを3箇所探します。その3箇所の位置関係から画像の回転方向も把握できます。

次にセルピッチ(赤)を取得。

セルピッチを取得後、QRのセル単位の情報を取得します。

あとは形式情報(緑)から誤り訂正レベルやマスクパターンを取得し、作成とは逆の処理を行います。作成同様今度はデータの復号化に悩まされつつもなんとか形になりました。

Windowsの画面上で表示されているQRを選択すると、

QRの情報を通常のリーダでは表示されないレベルまで表示可能です。マスクパターン、モジュール構成、RSブロック、誤り数、誤り訂正レベルなど・・

残念ながら90度単位以外の角度補正が実装できなかったのでそれはまた次の課題として・・

さて、当初の問題に戻り読み取りできなかったQRを検証してみましょう。

読み取りした内容をモジュール単位で表示してみるとデータの最初にECIが付与されていることが分かります。

ECIとは拡張チャンネル解釈 (Extended Channel Interpretation)といい、文字集合を指定して読み込みする場合に使用するモード指示子です。

その文字集合が指定されているためにECIに対応していないバーコードリーダ若しくはアプリケーションで読み取りできないとの結論に至りました。

QRコードが世界中で使用されるようになり、今回のようにECIにより文字集合が指定されるQRや文字コードにSJISでは無くユニコードが使用されるQRが今後増えてくる可能性があります。ただ、弊社ではユニコード変換やECIを指定してQRを作成できるアプリケーションがなく今後の課題となりそうです。

以上、いいんちょでした。

※QRコードはデンソーウェーブの登録商標です。

この記事を書いた人

いいんちょ
トヨトモHP管理委員会の委員長を任されています、いいんちょです。みなさんにトヨトモの魅力を知って頂けるよう、商品情報から活動報告まで、肩の力を抜いて読んで頂けるブログを目指します。