QRコードリーダー
アップロードした画像やカメラからQRコードをブラウザ内でそのまま解読します — アプリのインストール不要、サーバーには何もアップロードされません。
231回閲覧
QRコードは実際にはどのように解読されるのか
QR(Quick Response)コードはデータの「画像」ではありません — ビットを直接エンコードする白黒モジュールの格子であり、それを読み取ることは単純な照合ではなく、複数段階からなるコンピュータービジョンの問題です。最初のステップは、そもそもコードの位置を特定することです。すべてのQRコードは、3つの角にある特徴的なファインダーパターン(入れ子になった正方形のリング)を持ち、それぞれが中心を通るどの走査線上でも1:1:3:1:1という非常に特徴的な明暗モジュール比を示します。デコーダーは画像を行ごとに走査し、この正確な比率を探します。なぜなら、通常の画像コンテンツの中に偶然この比率が現れることは統計的にほぼあり得ず、まさにそれゆえに「指紋」として選ばれたからです。3つのファインダーパターンすべてを見つけることで、たとえ斜めから撮影された写真であっても、デコーダーはコードの回転、拡大縮小率、おおよその位置を把握できます。
向きが定まると、デコーダーは各モジュールの中心をサンプリングして1か0かを読み取り、ファインダーパターンの隣にあるフォーマット情報のストライプを使って、適用された誤り訂正レベルとマスクパターンを把握します。次にXORマスクを解除します(QRコードは、同一モジュールが長く連続するとファインダーパターンの探索が混乱してしまうため、それを避けるために8種類のパターンのいずれかで自らのデータをあえて撹拌しています)。そして最後にリード・ソロモン誤り訂正を実行して元のバイト列を復元します — これはCDや衛星通信で使われているのと同じ数学的手法であり、だからこそQRコードは、生成時に選ばれた誤り訂正レベルに応じて最大約30%が物理的に破損・隠蔽されていても、なお読み取ることができるのです。
このツールは、オープンソースのQRデコードライブラリを使って、こうした解読処理をすべてJavaScriptでローカルに実行します。アップロードした静止画に対しても、デバイスのカメラから1フレームずつ取得したライブ映像に対しても、同じ方法で解析されます。何かがサーバーに送信されることは一切ありません — Wi-Fiパスワードや個人の連絡先情報を含んでいるかもしれないQRコードを、まずどこかに画像をアップロードするのではなく、完全にブラウザ内だけで解読することには、プライバシー上の大きな違いがあります。
解読されたテキストが実際に意味すること
- http://またはhttps://で始まるURLには「リンクを開く」ボタンが表示されます。それ以外のもの(プレーンテキスト、Wi-Fi認証情報の文字列、vCardなど)は、URL以外の内容に対して自動的に何かを実行するのは予測不能であるため、そのまま解読結果のテキストとして表示されます。
- カメラでのスキャンは、有効なコードが見つかるまで1秒間におよそ60回(ブラウザのアニメーションフレームレートに合わせて)各フレームをチェックし、見つかった時点で自動的に停止します — 動画を録画・保存することは一切ありません。
- 誤り訂正レベルが高い(作成時にL/M/Q/Hで示される)QRコードほど、物理的な損傷への耐性は高くなりますが、格子のより多くの部分が内容ではなく冗長性に割り当てられるため、コードの大きさあたりに保存できる実データ量は少なくなります。
- 写真での解読が失敗する最も一般的な原因は、手ブレ、極端な角度からの撮影、あるいはフレーム内でコードが小さすぎて個々のモジュールがにじんで見分けられなくなることであり、コード自体が根本的に読み取り不能というわけではありません。
よくある質問
スキャナーは写真の中のQRコードをどうやって見つけるのですか?
3つの角にある入れ子状の正方形リングという特徴的な3つのファインダーパターンを、走査線に沿った独自の1:1:3:1:1の明暗比を手がかりに探索します。この比率が偶然現れる可能性は極めて低く、だからこそ雑然とした写真の中でも信頼できる「指紋」として機能するのです。
破損したり一部が隠れているQRコードが、それでも読み取れるのはなぜですか?
QRコードは、CDや衛星通信で使われているのと同じ数学的手法であるリード・ソロモン誤り訂正を採用しており、実際の内容と一緒に冗長データも保存しています。コード作成時に選ばれた誤り訂正レベルによっては、最大でおよそ30%が欠損・破損していても正しく解読できます。
写真やカメラの映像はどこかにアップロードされますか?
いいえ。アップロードした画像を使う場合も、ライブカメラを使う場合も、解読はすべてブラウザ内でJavaScriptによって行われます — 画像や映像フレームがサーバーに送信されることは一切ありません。
このツールが一部のコードにだけ「リンクを開く」ボタンを表示するのはなぜですか?
解読されたテキストがhttp://またはhttps://で始まる場合にのみ表示されます。それ以外のQRの内容 — プレーンテキスト、Wi-Fi認証情報、連絡先カードなど — は、URL以外のデータに対して自動的に何かを実行するのは予測可能でも安全でもないため、代わりにそのままテキストとして表示されます。
写真に明らかにQRコードが写っているのに、スキャンが失敗するのはなぜですか?
最も多い原因は、手ブレ、格子の形状を歪めるような急な角度からの撮影、あるいはフレーム内でコードが小さすぎて個々のモジュールを識別できないことです。コード自体が読み取り不能だと決めつける前に、よりピントの合った、正面から、より近づいた写真で試してみてください。
関連ツール
問題を報告
QRコードリーダー
コメント
まだコメントはありません — 最初のコメントを書いてみましょう!