CAPTCHAは、マシンが単語を検出しないようにするために作成されました。人間だけが読むことを目的としています。視覚障害者や聴覚障害者が読みやすくすることで、機械がそれらを再び理解できるようになるリスクが高まり、その結果、その効果が無効になります。
スパマーは、より人気のあるCAPTCHAを破る非常に効果的な方法を見つけました。彼らはただ彼らを読むために安い労働者を雇うだけで、その見返りに働くアカウントごとに数セントです。その結果、CAPTCHAを破って数百万のアカウントを作成し、それを使用してさらにスパムを送信することをめぐる小さな業界があります。スパマーによって得られた金額と比較して、コストはほとんどありません。同様の解決策は、CAPTCHA画像を中国やその他の場所の安価な労働者に送信する視覚障害者/聴覚障害者が使用できます。そこでは正しい言葉で返信し、視覚障害者/聴覚障害者は先に進むことができます。残念ながら、目の不自由な人はこのサービスを数回しか必要としないのに対し、スパマーは継続的なフローを必要とするため、これらの労働者は代わりにスパマーのために働くことを好みます。(賃金はより良いです。)それでも、
ReCAPTCHAスタイルも単語を読み取ります。音声認識にはさらに最適化が必要ですが、単純な音声認識アプリケーションで発言内容を認識できる場合があります。それでも、その角度から作業して、代わりにアプリケーションにサウンドバイトをリッスンさせることをお勧めします。
CAPTCHAを破ることができるとき、彼らはより良いCAPTCHAのような方法を考えるでしょう。OCR技術はまだ改善されているため、CAPTCHAをより困難にするためにさらに多くの作業が行われます。つまり、OCRが単語の認識において人間の目と同じくらい良くなるまで...
遅いですが、アルゴリズムを作成できます。26個の小文字と26個の大文字と10桁の数字で、アルゴリズムを思い付くのはそれほど難しくないはずです。ただし、SerifフォントとSans-serifフォントでは、組み合わせの数を2倍にする必要があります。それでも、CAPTCHAの文字と同じようにすべての文字をカーブさせようとすると、CAPTCHA文字で最も覆われている文字を検出できるはずです。そして、それが最も可能性の高い候補です。それでも、人間の目がコンピュータよりも認識しにくい画像から、線、汚れ、その他の遺物を取り除く必要があります。次の手順が必要です。
- 画像をクリーンアップします。
- 文字の場所を検出します。
- すべての文字について3a。左側を確認して、文字の曲線を決定します。3b。考えられるすべての文字/数字をオーバーレイして、それを最もよくカバーするものを見つけます。(それが最も可能性の高い手紙です。)
- 単語を見つけたら、辞書チェックを行って、それが本物の単語であることを確認します。(CAPTCHAが実際の単語を使用しない場合を除きます。)
CAPTCHAの文字をねじることはできますが、すべての文字の左側を見て、すべての文字に同じ曲線を適用しようとするだけで、使用したねじれの回転を検出できるはずです。(52の組み合わせに加えて、数字も使用されている場合は10桁。)基本的に、すべての文字をボックスで囲み、空白が最も少ない文字を確認します。それが最も可能性の高い手紙です。
これがOCRにあまり使用されない主な理由は、基本的に速度の必要性です。ステップ3a/bは、特にフォントスタイルを考慮する必要がある場合は、遅くなる傾向があります。
この回答を大きくしますが、コメントの1つに返信します。
画像をクリーンアップする方法はいくつかあります。カラーフィルタリング、ノイズリダクション、および画像全体のノイズの多い線を認識できるアルゴリズムが必要になります。デフコン_あなたが指摘したスライドショーは、ノイズの一部を取り除くためのいくつかの簡単なテクニックを示しています。これは、基本的な画像処理ツールによって、マシンが読み取るために画像をはるかに鮮明にすることができることを示しています。単純なぼかしはランダムなドットと細い線をクリーンアップし、カラーフィルターはノイズの多い色をフィルターで除去します。次のステップは、CAPTCHA内のすべての文字の周りにボックスを配置して、システムがそれらの場所を認識できることを期待することです。このための実用的なアルゴリズムはわかりませんが、それらを認識する方法があるはずです。ビットマップからベクター画像を作成できるソフトウェアがあるので、文字の周りのボックスを計算できるソフトウェアがあるはずです。このボックスには長方形の角がない可能性が高いため、同じボックスに一致するように52文字すべてを歪める必要があります。イタリックまたはボールドはすべきではありません これらのスタイルは単なる追加の歪みであるため、大きな違いがあります。ただし、SerifまたはSans-serifは違いを生みます。セリフフォントには、スパイクや装飾がいくつかある傾向があります。幸いなことに、ボックスを4つの角を持つ他の図に変換できるアルゴリズムがあります。
通常のOCRアプリケーションは、文字がほとんどまっすぐであると想定し、一致するものを見つけるためにいくつかのホットスポットをチェックするだけです。したがって、彼らは時々ノイズのためにそれを間違えます。CAPTCHAをクラックするには、より感度の高い一致が必要です。できれば、CAPTCHA文字の画像を52文字のいずれかの画像と「XOR」してから、黒と白のスポットの数を数えて比率を計算します。白=1および黒=0と仮定すると、XORの結果は、最良の一致のためにほぼ黒になるはずです。
いくつかのスパマーは、CAPTCHAを解読するためのいくつかの有用なアルゴリズムをすでに見つけていると思いますが、彼らにとって、これらのアルゴリズムを秘密にしておくことは、ビジネスを維持するだけです。
別のコメント、より多くのテキスト。:-)
セグメンテーションは問題になりますが、解決することは不可能ではありません。非常に複雑です。ただし、画像をクリーンアップすると、2行を計算できるようになります。すべての文字の下部に接する1行と、上部に接する2行目。ただし、優れたCAPTCHAは同じ行に文字を配置しなくなりますが、あまり優れていないCAPTCHAは、行をたどるだけで文字が割れる可能性があります。(推測?ReCAPTCHAは2行の間に文字を入れます!)2行では、最初の文字が左から始まることがわかります。したがって、一致するものが見つかるまで、52の可能性すべてをオーバーレイしてみることができます。1つを見つけたら、2番目のものを右に移動します。そしてさらにあなたがすべての手紙を読むまで。あなたを導くための2本の線で、あなたは完全な箱を必要としません。
文字は、幅と高さの間で一定の比率を使用する傾向があります。2行で、完全な文字の高さを計算できるため、一致する幅を適切に見積もることができます。
それでも、これをすべて計算するための正しいアルゴリズムを作成することは、私の貧弱な数学のスキルには少し多すぎます。このアルゴリズムを解読するには、専門の数学者が必要です。