QRコードの探求
バーコードやQRコードは傾いていても読み取れることが一大特長です。読み取るためのアルゴリズムやプログラミングコードなどは恐らく公開されているのではないでしょうか。
QRコードは右図のように3個の升があるのでそれが方向を検知する目安になっているようです。4個でないのがみそです。4個では90度回転させたら元に戻って意味をなさないでしょう。
チェックサムとは
チェックサムとは読み取りの信頼性を確保するための冗長なデータのことです。例えば、バーコードに8桁の数字が印刷されている場合、最後の8桁目はチェックディジットと呼ばれる誤り検出用の数字になります。
多くは7桁の数字を加算し、あふれを無視して一の位の数字を当てます。読み取り側も同様の計算を行い最後の桁の数値に一致するかどうかを確認して読み取りに誤りがあるかどうかを判断しています。
両者が一致すれは誤りはなかったとみなされます。一致していても100%正しいとは言い切れません。複数個所で検出ミスが起き、相殺されてチェックサム値が正常値に等しくなることがないわけではありません。一致しながら読み込みエラーになる確率は極めて低いです。検索すれば論文や詳細な解説記事を発見することができるでしょう。
移動させる意味
スーパーのレジでキャッシャーが商品をスキャナーにかざして移動させます。そこには大きな意味がありそうです。
QRコードを回転させ、いつも同じ検出位置で読み取ると回転角によって読み取れないという現象に突き当たりました。
右上図のように検出位置を一方向にずらすと読み込めるようになりました。レジで支払いを済ませているとき、読み取り完了を知らせる音が鳴るまで何度も挑戦している様に出会います。理論的なことはわかりませんが、ひとつの検出方向にたいして検出可能範囲が必ず存在しているようです。
検証
読み取るための関数は公開されています。回転させたり、検出位置を変えるにもプログラミングして確実な再現性のもとに検出結果を整理したいものです。