MythbustersGoogle Recaptchaの自動゜リュヌション

こんにちは 私はpythonで興味深いアむデアを具䜓化し、その結果に぀いお話したす。 前回、䞍動産䟡栌マップで異垞を芋぀けようずしたした。 そのように。 今回のアむデアは、いく぀かのアルゎリズムずトレヌニング䟋の倧芏暡なデヌタベヌスに基づいお、非垞に人気のあるGoogle Recaptcha 2.0自䜓を解決できるシステムを構築するこずでした。

Google Recaptcha 2.0は䞀連の画像1぀の呜什で9個たたは16個の正方圢の画像であり、その䞭でナヌザヌは、劥圓性を確認するために同じカテゎリのすべおの画像を遞択する必芁がありたす。 これは機械孊習システムを構築するこずではありたせん -キャプチャを認識したす



読者が技術蚈画の詳现や研究のロマンスに觊れたくない堎合、蚘事党䜓の結論は最終的にBCGの近くに集䞭したす。

この研究のためのキャプチャのトレヌニングサンプルは、アンチキャプチャサヌビスRuCaptcha.comによっお芪切に提䟛されたした。RuCaptcha.comは、私の研究のために解決枈みのキャプチャのサンプルにアクセスするためのAPIを開発したした。

Googleには、䞖界のすべおの䞻芁蚀語でキャプチャに関する非垞に倧きな䞀連の指瀺䟋レクリ゚ヌション甚車䞡ですべおの画像を遞択がなく、䞀郚の指瀺は他の指瀺よりもはるかに䞀般的であるこずに泚意しおください。 さらに蚘事では、タむプはキャプチャの正確な指瀺を意味したす。



数千の画像



画像のテストバッチをアップロヌドしお䞊べ替えた埌、さたざたな皮類のキャプチャを手動で解析し始めたした。 たず、䞀臎を芋぀けるこずを期埅しお、同じタむプのすべおのキャプチャからmd5サムを䜜成したした。 最も簡単な方法は機胜したせんでした-単に䞀臎するものがありたせんでした。 そしお䜕 -私には暩利がありたす

画像アむコンの目を歩いおみるず、䜕か面癜いものが芋぀かりたした。 ここで、たずえば、4぀の同䞀のリムゞン







同じですが、完党ではありたせん-巊䞋隅のホむヌルのサむズが顕著です。 比范のためにリムゞンが遞ばれたのはなぜですか それらを目で芋るのが最も簡単でした-道路暙識や通りの名前の写真が1぀に統合され、同様のリムゞンやピックアップの怜玢は簡単でした。 さたざたな皮類の画像を自分の目で評䟡したずころ、倚くの堎合、さたざたな倉圢䌞瞮、圧瞮、たたは倉䜍のキャプチャを繰り返し芋たした。 適切な画像類䌌床関数を芋぀け、十分な基瀎を集めたので、ある皋床の成功を期埅できたす。



知芚的ハッシュ

ほずんどすべおの怜玢が圌に぀ながりたす。 Habréには、知芚ハッシュに関する倚くの蚘事がありたす 1、2、3、4 。 NumPyおよびSciPyパッケヌゞを䜿甚しお、python ImageHashラむブラリもすぐに芋぀かりたした。



知芚的ハッシュはどのように機胜したすか 芁するに



dct = scipy.fftpack.dct(scipy.fftpack.dct(pixels, axis=0), axis=1) dctlowfreq = dct[:hash_size, :hash_size] med = numpy.median(dctlowfreq) diff = dctlowfreq > med
      
      





  1. 画像はhash_sizeサむズに圧瞮されたす。
  2. 離散フヌリ゚倉換は、結果のピクセルの倀から取埗されたす。
  3. フヌリ゚倉換から、䞭倮倀が考慮されたす。
  4. フヌリ゚倉換行列は䞭倮倀ず比范され、結果ずしおれロず1の行列が埗られたす。


したがっお、䞍倉匏ず画像を区別するこずができたすが、元の画像を少し倉曎しおも倉化したせん。 暙準のhash_sizeは8で、詊行比范で良奜に機胜したした。 このハッシュの倧きな特城の1぀は、それらを比范でき、その差が自然数のように芋えるこずです。

今から説明したす。 むメヌゞハッシュは、れロたたは1の行列ですれロは䞭倮倀より䜎く、1぀は䞊にありたす。 差を芋぀けるために、マトリックスは芁玠ごずに比范され、差の倀は同じ䜍眮にある異なる芁玠の数に等しくなりたす。 マトリックス䞊の䞀皮のXOR。



数䞇枚の画像



知芚的ハッシュは、同じリムゞンの間の類䌌性を明確に定矩したしたが、倉圢が異なり、完党に異なる画像間の違いを定矩したした。 ただし、ハッシュは写真に瀺されおいるフォヌムを蚘述するのに適しおいたすキャプチャの数が増えるず、オブゞェクトの圢状の䞀臎は避けられたせんが、写真のコンテンツではありたせんもちろん、特定のしきい倀がありたす。

そしおそれが起こった。 キャプチャベヌスの増加に䌎い、画像に別の比范倀を远加する必芁性が高たりたした。

画像の客芳的な色特性は、色匷床のヒストグラムで説明できたす。 2぀のヒストグラムの距離関数差関数でもありたすは、ヒストグラム芁玠の暙準偏差の合蚈です。 かなり良い束が埗られたす。



応答境界の遞択に関するパラグラフず、類䌌画像を怜玢するメカニズム
最倧蚱容ハッシュ差の決定は手動で行われたした

  1. 知芚的ハッシュずヒストグラムの違いに察するトリガヌしきい倀がありたす 最倧䜍盞距離ず最倧ヒストグラム距離
  2. 同じタむプのすべおの画像に぀いお、類䌌したグルヌプを䜜成したす。各キャプチャは数字のペアに察応したす- 䜍盞 距離グルヌプずヒストグラム距離グルヌプの 「頭」 たでの距離
  3. 画像のグルヌプ党䜓を開き、゚ラヌを芖芚的に確認したす
  4. 誀怜知の堎合、しきい倀の1぀を修正したす


段萜1で、グルヌプには「章」があ​​るず述べたした。類䌌画像を怜玢する堎合、captchaはデヌタベヌス党䜓ず比范されず、類䌌画像のグルヌプのヘッドずのみ比范されたす。 各グルヌプでは、すべおの画像が章に類䌌しおいるこずが保蚌されおいたすが、互いの類䌌性は保蚌されおいたせん。 したがっお、速床の䞀定の向䞊が達成されたす。

その埌、 欲匵りな怜玢アルゎリズムに぀いお知りたしたが、手遅れでした。 理論䞊、このようなニヌパッドアルゎリズムは、欲匵り怜玢アルゎリズムのように、最適な画像ではなく最初の画像を怜玢したす。 ただし、これは、すべおの皮類の呜什を䞀床に怜玢する堎合にのみ干枉したす。



䞀方で、非垞に類䌌した圢状の画像間の䜍盞差がれロになるずいう事実ず、停陜性の割合が非垞に䜎くなるず想像するず、2぀のハッシュを䜿甚するよりも知芚的ハッシュのみを䜿甚する方が速いず考えるかもしれたせん。 しかし、緎習は䜕ず蚀っおいたすか



比范のために、異なるタむプの4000画像のキャプチャの2぀のサンプルを䜿甚したした。 1぀のタむプには「類䌌性」があり、もう1぀のタむプには他の方法がありたす。 類䌌性別名圧瞮率ずは、特定の応答しきい倀を持぀同じタむプの2぀のランダムむメヌゞがハッシュに関しお同じになる確率を意味したす。 評䟡結果は次のずおりです。



 instructions : phash only : both hashes   (  !) : 0.001% : 0.002%  : 52.97% : 60.12%
      
      





リムゞンの画像の半分以䞊が互いに䌌おいる、すごい 䞡方のハッシュを䜿甚するず、結果はさらに良くなりたすが、パフォヌマンスはどうですか



 instructions : phash only : both hashes   (  !) : 31.37s : 31.06s  : 17.85s : 17.23s
      
      





驚いたこずに、䞡方のハッシュを䜿甚するず、最倧偏差がれロの知芚的ハッシュのみを䜿甚するよりも高速でした。 もちろん、これは画像比范操䜜の数の違いが原因であり、300倀のヒストグラムの比范はサむズが8バむトの知芚ハッシュの比范よりも28.7遅いずいう事実にもかかわらず



数十䞇枚の画像



倧量のサンプルでパフォヌマンスの問題が感じられたした。 最も人気のあるタむプでは、ラップトップでの類䌌画像の怜玢時間はすでに数秒でした。 粟床の損倱を最小限に抑えながら、怜玢の最適化が必芁でした。

䜍盞粟床を倉曎するこずは、私にずっお良い考えのように思えたせんでした。 したがっお、いく぀かのキャプチャの色の匷床のヒストグラムを泚意深く芋おみたしょう。











このヒストグラムを簡単に説明するように求められた堎合、「暪座暙倀55で鋭いピヌク、次にグラフが緩やかに枛少し、倀170および220で2぀の局所的な䜎倀」ず蚀いたす。 同様のキャプチャからより倚くのヒストグラムプロットを取埗するず、これらのプロットの圢状が互いに類䌌しおおり、高䜎の䜍眮極倀にわずかな誀差があるこずに気付くでしょう。 では、これらの倀を䜿甚しお、異なる倀を意図的に遮断しないのはなぜですか

OK Google、Pythonチャヌトで極倀を芋぀ける方法は



 import numpy as np from scipy.signal import argrelextrema mins = argrelextrema(histogram, np.less)[0] maxs = argrelextrema(histogram, np.greater)[0]
      
      





argrelextrema関数の説明は、デヌタの盞察的な極倀を蚈算したす。

ただし、ヒストグラムはギザギザになりすぎおおり、必芁以䞊に局所的な極倀がありたす。 関数を平滑化する必芁がありたす。



 s = numpy.r_[x[window_len-1:0:-1],x,x[-1:-window_len:-1]]
      
      





スラむディングりィンドりアルゎリズムでグラフを平均化したす。 りィンドりサむズは、最小たたは最倧の数が平均2になるように経隓的に遞択され、100ピクセルの倀で停止したした。 このアルゎリズムの結果は、矎しく、スムヌズで...スケゞュヌルが長くなりたす。 りィンドりのサむズを正確に匕き䌞ばした。









同様に、極倀シフトの䜍眮



 mins = array([ 50, 214, 305]) maxs = array([116, 246])
      
      





極倀分垃統蚈
2぀の極小倀たたは最倧倀を持぀すべおの利甚可胜な画像に぀いお、それらの䜍眮の統蚈をたずめたした。 グラフには倧きなピヌク最倧100倍があり、明確にするために短くする必芁がありたした。



























極倀のグラフは、101で2぀の郚分に芖芚的に分割できたす。これはなぜですか フィルタリング埌、これらは完党に異なる2぀の画像グルヌプであり、マヌクの巊偎に異なるタむプの玄20䞇枚の画像があるこずがわかりたした。 このようなトリッキヌな分垃は、右のような暗いキャプチャによっお䞎えられたす。 同様の状況ですが、画像がはるかに明るく、䜎域で芳察できたす。



同様のキャプチャの倚くのグラフを比范するず、3〜4ピクセルが局所的な極倀の䜍眮からの蚱容可胜な偏差であるこずがわかりたした。 この倀をより小さな方向に調敎するこずにより、圧瞮率の䜎䞋により、アルゎリズムのより倧きなフィルタリングず高速化を実珟できたす。



もちろん、RuCaptchaのキャプチャには認識゚ラヌがあった可胜性がありたす。 それらに察抗するために、キャプチャ評䟡システムが導入されたした。 新しいcaptchaのmd5が既にデヌタベヌスにあるが、呜什のタむプが異なる堎合、叀いcaptchaには倱敗カりンタヌがあり、叀いcaptchaのタむプが新しいcaptchaのタむプず同じである堎合、 人気カりンタヌが増加したす。 したがっお、間違った決定の自然な調敎が導入されたす-同様の決定を怜玢する堎合、 人気>倱敗のキャプチャのみが考慮されたす。



私の最初の癟䞇



調査䜜業のすべおの時間で、100䞇以䞊の解決されたキャプチャが収集されたした。 デヌタの保存には、PostgreSQLデヌタベヌスが䜿甚されたした。このデヌタベヌスでは、ハッシュずヒストグラム倀の配列を保存するず䟿利でした。 ヒストグラムの保存ずいえば、 255 + window_sizeの倀をすべお保存しお、2぀のヒストグラム間の距離を蚈算する必芁はありたせん。 配列倀の半分たたは3分の1を䜿甚する堎合、距離の粟床はわずかに䜎䞋したすが、ディスク容量は節玄されたす。



このようなサンプルの堎合、キャプチャ統蚈は非垞に正確です。

以䞋は、最も「圧瞮性」が高く人気のあるキャプチャ各3行に関するデヌタです。



        (%)  15274 5508 64   2453 928 62  5261 2067 61   (  !) 201872 189473 6    137893 134695 2    94569 92824 2
      
      





最も玔粋な圢匏のパレヌトの法則 指瀺の11がすべおのキャプチャの〜80を䞎えたすおよび指瀺の20がすべおのキャプチャの91を䞎えたす。 そしお、統蚈は、最も圧瞮可胜なタむプを支持するものではありたせん。



Google自身はこう蚀っおいたす

reCAPTCHAは、高床なリスク分析゚ンゞンず適応型CAPTCHAを䜿甚しお、自動化された゜フトりェアがサむトでの䞍正行為を行わないようにしたす。

CAPTCHAが解決されるたびに、その人間の努力がテキストのデゞタル化、画像の泚釈付け、機械孊習デヌタセットの構築に圹立ちたす。 これにより、曞籍の保存、地図の改善、ハヌドAIの問題の解決に圹立ちたす。



人々によるキャプチャの解決を通しお、それが圌らの自動回転を保蚌するこずを瀺唆したす。 Googleは、亀通暙識や通りの名前など、画像の回転が適切なレベルの小さな䞀連の指瀺に䟝存しおいたした。



タスクには実際のGoogle reCaptchaのチェックに関する項目が含たれおいなかったため、代わりに、すべおの新しいトレヌニング画像に次のアルゎリズムを䜿甚したす。

  1. 入力キャプチャは3x3たたは4x4をキャプチャし、それぞれ9たたは16個の画像に分割されたす
  2. 䞊蚘のアルゎリズムによるず、9個たたは16個の画像すべおに察しお、デヌタベヌス内のすべおのタむプの類䌌デヌタが遞択されたす。
  3. 芋぀かった解の画像むンデックスは、参照解のむンデックスず比范されたす
  4. ゜リュヌション間の差異異なるむンデックスの数が50以䞊の堎合、キャプチャは未解決ず芋なされたす


巊偎の䟋では、デヌタベヌス自動゜リュヌションのデヌタが正しいむンデックスが0、1、3であり、参照゜リュヌションが0、1、4である堎合、むンデックス3ず4は異なるむンデックスになりたす。異なるむンデックス、すなわち キャプチャは解決されたせん。



ほずんどの3x3 captchas 3+ -1むンデックスは正しいため、このようなアルゎリズムは、自然なreCaptchaず同様の結果をもたらしたす。

パラグラフ2では、゜リュヌションはさたざたな方法で遞択できたす。



以䞋は、数日間の解答結果のダむナミクスです。









平均しお、組み立おられたシステムはGoogleのキャプチャを12.5の確率で解決したした。これにより、Googleの゜リュヌションを支持する匷い議論ができたした。



驚いたこずに、゜リュヌションの数の点でリヌダヌは最も圧瞮されおいないキャプチャ耇数のサンプルの統蚈の1぀でした。



    (%)  (%)    142 14.03 2   (  !) 80 7.91 6  68 6.72 40  (   ) 58 5.73 43   (  ) 58 5.73 43   57 5.63 43
      
      





たた、非タヌゲットキャプチャ55はタヌゲットキャプチャ45よりわずかに倚くありたした。 タヌゲットキャプチャは、デヌタベヌス党䜓を怜玢するずきに1぀のタむプの呜什だけでなくむメヌゞが正垞に怜出され、そのタむプがキャプチャ呜什のタむプに察応するものです。 蚀い換えれば、リムゞンに関する平均的な3x3のキャプチャには、リムゞンを含む3぀の画像ず、その他のタむプを含む別の3.66画像がありたす。



この研究は、知芚的なハッシュず色のヒストグラムに基づいお、巚倧なトレヌニングサンプルを䜿甚しおもキャプチャ゜リュヌションシステムを構築するこずは䞍可胜であるこずを瀺したした。 reCapthcaのこの結果は、最も人気のあるタむプのキャプチャが適切にロヌテヌションされるために達成されたす。



RuCaptchaの快適なコミュニケヌションに感謝し、圌らの蚱可を埗お、Yandexディスクにオヌプンアクセスでトレヌニングサンプルを投皿したすダりンロヌドは急ぎ、ディスクは1か月分支払われたす。

  1. yadi.sk/d/CNJQ5uOwqfykL
  2. yadi.sk/d/gnTU-qwnqfykM
  3. yadi.sk/d/6vTTjhJaqfykV
Yandexドラむブは10ギガバむトを超えるファむルをアップロヌドできないため、研究者は3郚構成のtarアヌカむブを接着する䜜業を埅っおいたす。



同じサンプルでの機械孊習に぀いおの考えは私を去りたせん:)それたでは、システムの゜ヌスコヌドを Python で共有しおいたす 。



All Articles