Qraft (クラフト)

画像認識

読み: がぞうにんしき

画像認識は、デジタル画像や映像からパターン、オブジェクト、文字、顔などを自動的に識別 / 分類する技術です。機械学習やディープラーニングの発展により精度が飛躍的に向上し、自動運転、医療画像診断、顔認証、OCR など幅広い分野で実用化されています。

QR コードのスキャン (デコード) は、探すべき図形が規格で決まっている特殊なケースで、処理は前処理から始まります。まず、カメラが撮影したカラー画像を明度だけのグレースケールに変換し、しきい値を引いて画素ごとに白か黒かの 2 値に直します。この二値画像に対してファインダーパターン (3 隅にある正方形の位置検出パターン) を探索し、見つかった 3 点の位置関係と、大きい型番が持つアライメントパターンとを合わせて、撮影時の傾きや遠近による歪みを打ち消す射影変換を組み立てます。あとは補正後の座標系でモジュールの格子を 1 つずつ標本化して白黒の配列に直し、形式情報と型番情報を読み取ってからリード・ソロモン符号で誤り訂正をかけ、元のデータを復元します。

最新のスマートフォンでは、この一連の処理がリアルタイムで実行されます。カメラのプレビュー画面に QR コードが映った瞬間に認識が完了し、ユーザーがシャッターボタンを押す必要すらありません。ここで働いているのは、第 1 段落で述べた学習型の画像認識ではなく、しきい値処理と幾何変換を組み合わせた古典的な画像処理です。探す図形が固定されているため、各フレームを数行おきに走査して、ファインダーパターン特有の明暗の並び (1:1:3:1:1 の比) が現れた場所だけを詳しく調べる、という枝刈りが効きます。読み取れなければ次のフレームで試し直せることも、1 フレームあたりの処理を軽く保てる理由です。