この記事は「AntFinancialTechnology」パブリックアカウントから引用されており、元のテキストは元々Alipay技術チームによって共有されていました。このコレクションには変更があります。
1はじめに
2Dコードスキャン機能との最初の接触は2011年でした。モバイルインターネットはまだ始まったばかりでした。誰もがスマートフォンはもっと強力になる可能性があると感じていましたが、どの機能を調査して革新する必要があります。2Dコードスキャン機能は、これらの革新的な機能の1つです。
もちろん、2Dコードスキャンは最終的な分析では依然として画像認識です。このテクノロジーは通常の企業では処理できないため、最も一般的に使用されている2DコードスキャンライブラリはZXingです。多くの人がこのライブラリに精通しているはずです。このライブラリを使用したことのある人は、基本的に次の図(ZXingのロゴ)を覚えています。
▲ZXingエンジニアリングのロゴ
このライブラリを使用するための前提条件は、携帯電話のカメラがオートフォーカス機能を備えている必要があることです。携帯電話のコストは現在ほど低くはないため、オートフォーカス機能がすべてで利用できるわけではありません。一部のローエンドで2Dコードスキャン機能を制限する携帯電話。携帯電話の使用は、スキャンコード機能の普及も制限します。
その後、WeChatのソーシャルIMがますます普及していることを誰もが知っています。WeChatの「スキャン」機能を使用してQRコードをスキャンし、友達を追加できるため、2Dコードスキャン機能はほぼIMソフトウェアの標準になります。
▲初期のWeChatの「スキャン」機能
現在、WeChatは2人のWeiyouの友達をスキャンして友達を追加するだけでなく、QRコードをスキャンして支払いやさまざまな画像認識機能を利用できるようになり、ますます豊富になっています。2Dコードスキャン機能は、単一の画像認識技術からモバイルラインネットワーキングの入力機能へと徐々に進化してきました。
昨年から、WeChatは2Dコードスキャン機能をアップグレードしました。これにより、ユーザーはUIでスキャンした2Dコードの中心点を知ることができるだけでなく、最大3つの2Dコードを同時に認識できます。これは非常に強力です。
▲現在のWeChatは最大3つの2Dコードを同時に認識できます(緑色の点に注意してください)
上の図に示すように、誰もが慣れていた2Dコードスキャン機能はとてもフレンドリーです。
Alipayが共有するこの2Dコードスキャン最適化の記事を見たばかりです。このテクノロジーを実際に共有する記事は市場にほとんどありません。IMの最も一般的な機能の1つとして、2Dコードスキャンと友達の追加は最も一般的な機能の1つです。 IMで。開発者にとって、彼らは彼ら自身の底から開発する必要はありませんが、それでもこの知識を理解する必要があります。
この記事では、2Dコードスキャン機能の2Dコードが不完全、変形、変色しているなどの過酷な条件下で、スキャン認識率と認識速度を向上させる方法に関するAlipayの技術的実践の概要を共有します。あなたに刺激を与えたいと思っています。
研究交換:
-インスタントメッセージング/プッシュテクノロジーの開発と交換のための5つのグループ:215477170 [推奨]
-モバイルIM開発の概要:「初心者には1つのエントリで十分です:モバイルIMを最初から開発する」
-オープンソースのIMフレームワークのソースコード:https://github.com/JackJiang2011/MobileIMSDK
(この記事はhttp://www.52im.net/thread-3150-1-1.htmlで同時に公開されました)
2.技術的背景
Alipayのオフラインシナリオの継続的な拡大に伴い、集金コード、口コミ、共有自転車、パワーバンク、駐車場の支払いなどの製品により、私たちの生活はますます便利になっています。
低コストで互換性に優れているため、QRコードは最も重要なオンライン接続ツールになり、新しい課題に直面しています。
QRコードはドットマトリックス情報のエンコード方式であるため、視覚的な欠陥、曲がり、光の影響が認識成功率に大きく影響します。認識が難しい場合は、ユーザーが諦めることを選択する可能性があり、支払いに影響します。経験と認識成功率にも影響します。ユーザーマインド。
ユーザーのスキャンエクスペリエンスにとって最も重要な要素は、次の要素です。
- 1)認識率:スキャンコードサービスの基本的な指標です。認識率は認識能力を直接反映することができます。認識率を向上させることができない場合、多くのユーザーがより便利に使用できなくなることを意味します。サービス;
- 2)認識に時間がかかる:アプリの起動時間と画像認識に時間がかかることを含め、これはユーザーがアプリをクリックしてコンテンツを正しく認識するのにかかる時間の尺度です。1が増えるごとに、かなりの数のユーザーは待つことをあきらめて去ります。
- 3)正確なフィードバック:認識結果は、時間内にユーザーにフィードバックする必要があるだけでなく、特に複数のQRコードが存在する現在のオフラインシーンでは非常に正確である必要があり、ユーザーは二次操作を回避する必要があります。
上記の3つの側面から、この記事では、AlipayのQRコードスキャン技術チームが、ユーザーに究極の正確で高速かつ安定したQRコードスキャンエクスペリエンスを提供する方法を共有します。
ユーザーのフィードバックについて多くの統計分析を行ったところ、認識の失敗のほとんどは非標準のQRコードが原因であることがわかりました。残念ながら、認識率テストに初期スキャンコードバージョンを使用したところ、認識率はわずか60%でした。以下の文章は、まず認識率向上の方向から始まります。
3.認識率戦略の改善1:パイルポイント検索アルゴリズムのアスペクト比の許容範囲を最適化する
以前のスキャンアルゴリズムでは、アスペクト比をチェックするときに40%の差が許容されていましたが、順方向エラーを使用しているため、判断結果は長さと幅のシーケンスに関連しています。これにより、一部のコードの幅外の比率が発生します。スキャンすることはできません。垂直方向に90度回転しますが、一掃することはできます(^ OMG ^)。
最適化戦略の要約:
- 1)アスペクト比の判定ルールを変更することにより、アスペクト比がシーケンスの影響を受けなくなります。
- 2)既知の長さの場合、改訂されたルールにより、許容可能な幅の範囲が拡大され、アスペクト比の許容範囲が拡張されます。
比較テストセットでは、認識率が約1%向上しています。
4.認識率を向上させるための戦略2:1:5:1パイルポイント認識モードを追加します
写真では、QRコードを見つけるための鍵は、QRコードの機能の場所を見つけることです。
三隅の背面形状のパターンは、QRコードの特徴の位置決めポイントです。
中央の黒と白のブロックの比率は1:1:3:1:1:です。
以前のコードスキャンアルゴリズムでは、ステーク認識は、ステートマシンを介して11311パターンを見つけ、中央の位置を取得してx位置を決定し(スキャンラインは最初のライン11311の比率にあります)、11311パターンを縦方向に検索します。 x位置で、y位置を決定し、(x、y)を使用します。位置は11311の比率で水平方向に検索され、x位置が修正されます。
このモードでは、杭が汚れている場合の認識能力が低くなります。11311パターン検索で干渉点が検出される限り、1ピクセルのごま塩ノイズでさえ杭検索が失敗する可能性があります。(Alipay Blueのステークは、青い領域で多くのノイズを生成し、認識率が低くなります)
この目的のために、新しい杭点認識方法を追加しました。ステートマシンが151モードに達すると、ステークポイントの確認を開始します。(この時点で、スキャンラインは最初の行の151の比率になっています)。
最適化効果:
- 1)新しい検索方法は、パイルポイントの中心またはエッジの改ざんの影響を受けなくなり、Alipayの青いパイルポイントコードの認識率が大幅に向上します。
- 2)改訂後、全体の認識率は1%近く上昇しましたが、認識失敗にかかる時間は増加しています。
5.認識率を向上させるための戦略3:対角フィルタリングルールを追加する
考えられるすべてのステークの組み合わせO(N ^ 3)を列挙する前に、すべての疑わしいステークに対して対角チェックフィルターを実行します。ステークポイントの対角線も11311パターンを満たす必要があるため、このルールを使用して疑わしいフィルタリングを行うと、計算量を効果的に削減し、時間のかかる成功と失敗の識別を効果的に削減できます。
6.認識率を向上させるための戦略4:ロジスティック回帰に基づく2次元コード分類器
以前のスキャンコードアルゴリズムでは、3つのステークを取得した後、含まれている角度、長さの偏差、および単位の長さに基づいて3つの値を確認し、簡単な式を使用してしきい値を計算し、それが可能なQRコードであるかどうかを判断します。誤判断の可能性は比較的高いです。
この目的のために、機械学習にロジスティック回帰アルゴリズムモデルを導入します。
Alipayの豊富なQRコードデータセットに基づいて、ロジスティック回帰モデルはQRコード分類子としてトレーニングされます。これにより、誤判定の可能性が大幅に減少し、QRコードなしで認識失敗の時間が大幅に短縮されます。
7.認識率を向上させるための戦略5:スキップスキャン間隔の数を変更する
入力カメラフレームの高解像度、多くのピクセル、および大量の計算のために、以前のスキャンコードアルゴリズムは、計算のために水平および垂直方向のサンプリングをスキップします。ただし、実際の計算では、スキップされた列が多すぎるため、11311パターンの1つの位置ポイントが欠落し、ステーク検索が失敗しました。
スキップ計算行の数を設定可能な項目に変更することで、オンラインABグレースケールテストを通じて最適なスキップ戦略を取得しました。このスキップ戦略の全体的な構成後、認識率が大幅に向上しました。
テストセットでの上記の最適化のパフォーマンス:
最適化を要約すると、スキャンコードのコア認識能力は、7744画像テストセットで6.95パーセントポイント増加しました。
8.特別な戦略の最適化
上記の一般的なコードスキャンの最適化に加えて、特別なシナリオでコードをスキャンする機能も改善されました。
8.1歪み?恐れていない、または恐れていない!
オフラインシーンは複雑で変更可能です。飲料ボトル本体の変形したQRコード、スーパーマーケットのレシートの角が曲がったQRコード、路傍のベンダーによる不均一または折りたたまれたQRコード...これらの歪んだQRコードは、簡単に識別の難しさを増す可能性があります。認識の失敗。
以前のスキャンアルゴリズムの歪み防止戦略では、最初に透視変換関係を使用してマッピング関係を確立します。
利点は次のとおりです。ほとんどのアプリケーションシナリオに対応できる優れた適応性。
欠点も明らかです。バージョン1のコードの場合、マッピング関係がアフィン変換に縮退しているため、効果が低く、識別を容易にするために携帯電話をコード平面に平行にする必要があります。材料の表面が平らでない場合、効果は不十分です。
最適化戦略:
- 1)2次元コード座標系へのサンプリング座標系がより複雑なマッピング関係に従うと仮定し、材料表面のカールが小さいと仮定すると、このマッピング関係は2次関数を使用することでより適切に適合できます。
- 2)実際の請求書のQRコードのバージョンは通常7以上であり、QRコードの上位バージョンには複数の補助ポジショニングポイントがあり、セカンダリマッピングテーブルの作成に役立ちます。
- 3)上記の推論に基づいて、新しいマッピングを使用して、より正確なサンプリングのために古いパースペクティブ変換を置き換えます。
新しい戦略により、請求書コードシーンの2次元コード認識機能が大幅に改善されました。
▲注:アルゴリズムが強化されているため、QRコードを調整してしばらくお待ちください
サンプルテスト結果:
8.2フォールトトレラント認識機能の改善
マーチャントまたはサプライヤーがQRコードを生成した後、通常、QRコードの中央部分にロゴを貼り付けます。この部分により、QRコードのデコードでエラーが発生する可能性があります。
最適化戦略:
サンプリング後に得られたビットマトリックスについては、中央部の長方形領域内の点について、フォールトトレランス境界のチェックに合格できるように、中間点の値を変更するためのいくつかの戦略が採用されています。現在、2つの戦略が使用されています。1つは反転で、もう1つは各ポイントの値をランダムに選択することです。現在取られている長方形の領域は、長さと幅の4分の1です。
この最適化の後、スキャンコードのフォールトトレランスも大幅に改善されました。
9.時間のかからない認識
認識効率のために、GPUを使用して2値化を計算し、単一フレームの認識にかかる時間を短縮します。
いわゆる画像の2値化とは、画像上のピクセルのグレー値を0または255に設定することです。つまり、画像全体に白黒のみの明らかな視覚効果を与えることです。下の図の左側は元の画像で、右側は2値化された画像です。
スキャンアルゴリズムがデコードされる前に、2値化計算があります。画像の2値化計算は、画像内のデータ量を大幅に削減し、画像のぼけを弱め、色のコントラストが強くない、光が強すぎる/弱すぎる、画像がにじむなど。他の情報からの干渉の場合は、検出と識別に役立ちます。
従来のアルゴリズムは、CPUリソースを大量に消費するCPUで2値化操作を実行しますが、実際には、GPUは大規模な並列計算に優れているため、2値化計算にはGPUを使用することにします。AndroidプラットフォームでのRenderScriptの使用と iOSプラットフォームでのMetalの使用 は、どちらも非常に低レベルのフレームワークです。
1)iOSの最適化の結果:バッテリー、角度、光などの環境変数を統合し、iPhone6で5つのコアカメラの2値化アルゴリズムをテストします。
パフォーマンスは次のとおりです。
Metalは、画像の2値化において非常に高い利点を持っていることがわかります。元の純粋なCPU処理と比較して、CPUリソースを約50%削減しながら、ほぼ150%高速です。
2)Andriodの最適化の結果: Androidモデルの数が多いため、オンラインデータを抽出しました。これにより、GPUにより、2値化プロセスでの単一フレームの消費時間が30%以上大幅に削減されたことがわかります。
10.アルゴリズム分類、シーン分類、科学的スケジューリング
QRコードが隠れたり、汚れたり、ぼやけたり、角度が非常に悪いなど、いくつかの不満足なシーンを解決するには、時間のかかる、より強力なアルゴリズムを使用する必要がありますが、通常の状況では必要ありませんこれらのアルゴリズム。
したがって、コード認識アルゴリズムに優先順位を付け、タイムラプス、フレームスキップトリガーなどを介してスケジュールします。
優先度:
- 1)高優先度:すべてのフレームを実行します。
- 2)中優先度:フレームレートの実行が低い。
- 3)低優先度:低フレームレートでの実行。
優先度の異なる機能の実行タイミングを設定できます。さまざまな機能が属する優先度は構成可能です
特別なシナリオのアルゴリズム機能:
- 1)逆カラーコードの認識能力。
- 2)フォールトトレラントな境界コードを識別する機能。
- 3)損傷した杭などを特定する機能。
- 4)バーコード認識機能。
付録:Aliチームが共有するその他の記事
「ソーシャルソフトウェアの赤いエンベロープ技術の復号化(7):Alipayの赤いエンベロープの大規模な同時実行性の技術的実践」
「AliDingTalkテクノロジーの共有:バックエンドアーキテクチャにおけるエンタープライズレベルのIMKing-DingTalkの優れた機能」
「AliOpenIMから:安全で信頼性の高いインスタントメッセージングサービスを作成するための技術的実践の共有」
「淘宝網技術共有:ハンド淘宝網10億レベルのモバイルアクセスレイヤーゲートウェイの技術進化の道」
「Alibabaテクノロジーの共有:Alibabaのデータベーステクノロジーソリューションにおける10年の変化の歴史を解明する」
「Alibabaテクノロジーの共有:Alibabaの自己開発の財務レベルデータベースOceanBaseの成長への困難な方法」
「作者は「アリババJava開発マニュアル(法令)」の裏話について語っています。
「淘宝網技術共有:ハンド淘宝網10億レベルのモバイルアクセスレイヤーゲートウェイの技術進化の道」
「モバイル淘宝網メッセージプッシュシステム(オーディオ+ PPT)のアーキテクチャと実践[添付ファイルのダウンロード]」
「ヘビーリリース:「AlibabaAndroid開発マニュアル(法令)」[添付ファイルのダウンロード]」
「AliTechnologyCrystal:「AlibabaJava開発マニュアル-v1.6.0-大山版」[添付ファイルのダウンロード]」
(この記事はhttp://www.52im.net/thread-3150-1-1.htmlで同時に公開されました)