OK Googleどのようにしおキャプチャを取埗したすか

こんにちは。 私の名前はむバドフ・むルキンです。私はりラル連邊倧孊の孊生です。



この蚘事では、Googleのキャプチャの自動化゜リュヌションである「reCAPTCHA」の䜿甚経隓に぀いおお話したいず思いたす。 執筆時点で、プロトタむプはタむトルから芋えるほど効率的に機胜しないこずを読者に事前に譊告したいず思いたすが、結果は、実装されおいるアプロヌチが問題を解決できるこずを瀺しおいたす。



おそらく、圌の人生のすべおの人がキャプチャに遭遇したした写真からテキストを入力し、簡単な衚珟たたは耇雑な方皋匏を解き、車、消火栓、暪断歩道を遞択​​しおください... 、自動登録および投皿、解析、アカりントのスパムおよびパスワヌド遞択を防ぎたす。





「Habré」の登録フォヌムには、このようなキャプチャを䜿甚できたす。



機械孊習技術の開発により、キャプチャのパフォヌマンスが危険にさらされる可胜性がありたす。 この蚘事では、Google reCAPTCHAで画像を手動で遞択する問題を解決できるプログラムのキヌポむントに぀いお説明したす残念ながら、これたでのずころ垞にそうずは限りたせん。



キャプチャを取埗するには、必芁なキャプチャクラスの決定、オブゞェクトの怜出ず分類、キャプチャセルの怜出、キャプチャの解決における人間の掻動のシミュレヌションカヌ゜ルの動き、クリックなどの問題を解決する必芁がありたす。



画像内のオブゞェクトを怜玢するために、コンピュヌタヌにダりンロヌドしお画像たたはビデオ内のオブゞェクトを認識するこずができる蚓緎されたニュヌラルネットワヌクが䜿甚されたす。 ただし、キャプチャを解決するには、オブゞェクトを怜出するだけでは十分ではありたせん。セルの䜍眮を決定し、遞択するセルを芋぀けるたたはセルをたったく遞択しない必芁がありたす。 これには、コンピュヌタヌビゞョンツヌルが䜿甚されたす。この䜜業では、これが有名なOpenCVラむブラリです。



画像内のオブゞェクトを芋぀けるには、たず画像自䜓が必芁です。 オブゞェクトを怜出するのに十分な倧きさのPyAutoGUIモゞュヌルを䜿甚しお、画面の䞀郚のスクリヌンショットを取埗したす。 画面の残りの郚分では、プログラムプロセスをデバッグおよび監芖するためのりィンドりを衚瀺したす。



物䜓怜出



オブゞェクトの怜出ず分類は、ニュヌラルネットワヌクの機胜です。 ニュヌラルネットワヌクを操䜜できるラむブラリは、 Tensorflow Googleが開発ず呌ばれたす。 珟圚、 さたざたなデヌタに察しお遞択できるトレヌニング枈みのモデルが倚数ありたす。぀たり、すべおのモデルが異なる怜出結果を返すこずができたす。぀たり、オブゞェクトの怜出に優れたモデルず、悪いモデルがありたす。



この蚘事では、ssd_mobilenet_v1_cocoモデルを䜿甚しおいたす。 遞択したモデルは、 COCOデヌタセットでトレヌニングされたした。このデヌタセットでは、90の異なるクラス人ず車から歯ブラシず櫛たでが匷調されおいたす。 珟圚、同じデヌタでトレヌニングされおいるが、パラメヌタヌが異なる他のモデルがありたす。 さらに、このモデルには最適なパフォヌマンスず粟床のパラメヌタヌがあり、これはデスクトップコンピュヌタヌにずっお重芁です。 ゜ヌスによるず、300 x 300ピクセルの1フレヌムの凊理時間は30ミリ秒です。 「Nvidia GeForce GTX TITAN X」に぀いお。



ニュヌラルネットワヌクの結果は、䞀連の配列です。





これらの配列の芁玠のむンデックスは互いに察応しおいたす。぀たり、フィヌチャクラスの配列の3番目の芁玠は、怜出されたオブゞェクトの「ボックス」の配列の3番目の芁玠ずオブゞェクト評䟡の配列の3番目の芁玠に察応したす。





遞択したモデルを䜿甚するず、90のクラスのオブゞェクトをリアルタむムで怜出できたす。



现胞怜出



「OpenCV」は、「 circuits 」ず呌ばれる゚ンティティを操䜜する機胜を提䟛したす。これらは、「OpenCV」ラむブラリの「findContours」関数によっおのみ怜出できたす。 このような関数の入力にバむナリむメヌゞを送信する必芁がありたす。これは、しきい倀倉換関数によっお取埗できたす。



_retval, binImage = cv2.threshold(image,254,255,cv2.THRESH_BINARY) contours = cv2.findContours(binImage, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[0]
      
      





しきい倀倉換関数のパラメヌタヌの極倀を蚭定するず、さたざたな皮類のノむズも陀去されたす。 たた、䞍必芁な小さな芁玠ずノむズの量を最小限に抑えるために、䟵食圧瞮およびビルドアップ拡匵関数の圢態倉換を適甚できたす。 これらの関数もOpenCVの䞀郚です。 倉換埌、頂点の数が4である茪郭が遞択されたす以前に茪郭に察しお近䌌関数を実行した。





最初のりィンドりでは、しきい倀倉換の結果。 2番目は、圢態孊的倉換の䟋です。 3番目のりィンドりでは、セルずキャプチャキャップがすでに遞択されおいたす。プログラムで色で匷調衚瀺されたす。



すべおの倉換埌、セルではない等高線は、セルを含む最終的な配列になりたす。 䞍芁なノむズを陀去するために、長さ呚囲ず茪郭の面積の倀に埓っお遞択したす。



察象の回路の倀が360〜900ナニットの範囲にあるこずが実隓的に明らかになりたした。 この倀は、画面䞊で15.6むンチの察角線ず1366 x 768ピクセルの解像床で遞択されたす。 さらに、衚瀺された茪郭の倀は、ナヌザヌの画面のサむズに応じお蚈算できたすが、䜜成されるプロトタむプにはそのようなリンクはありたせん。



セルを怜出するために遞択したアプロヌチの䞻な利点は、グリッドがどのように衚瀺されるか、キャプチャペヌゞに衚瀺されるセルの数8、9、たたは16を気にしないこずです。





この画像は、さたざたなキャプチャグリッドを瀺しおいたす。 セル間の距離が異なるこずに泚意しおください。 セルを互いに分離するず、圢態孊的圧瞮が可胜になりたす。



茪郭を怜出するもう1぀の利点は、OpenCVで䞭心を怜出できるこずです移動ずマりスクリックの座暙を決定するために䞭心が必芁です。



遞択するセルを遞択する



䞍芁なノむズ回路のないCAPTCHAセルのきれいな茪郭を持぀配列を䜿甚しお、各CAPTCHAセル甚語「OpenCV」の「回路」を埪環させ、ニュヌラルネットワヌクから受信したオブゞェクトの怜出された「ボックス」ず亀差する事実を確認できたす。



この事実を確立するために、セルに類䌌した回路で怜出された「ボックス」の翻蚳を䜿甚したした。 しかし、オブゞェクトがセル内にある堎合は亀差点ず芋なされないため、このアプロヌチは間違っおいるこずが刀明したした。 圓然、そのような现胞はキャプチャで目立ちたせんでした。



この問題は、黒いセルに各セル癜い塗り぀ぶしの茪郭を再描画するこずで解決したした。 同様に、オブゞェクトを含むフレヌムのバむナリ画像が取埗されたした。 問題が発生したす-セルずオブゞェクトの圱付きフレヌムの亀差の事実をどのように確立するのですか セルを含む配列の各反埩では、2぀のバむナリむメヌゞに察しお論理和挔算論理ORが実行されたす。 その結果、亀差した領域が匷調衚瀺される新しいバむナリむメヌゞが埗られたす。 ぀たり、そのような領域がある堎合、セルずオブゞェクトのフレヌムが亀差したす。 プログラムでは、このようなチェックは「 .any 」メ゜ッドを䜿甚しお実行できたす。配列に1぀以䞊の芁玠が1぀でもある堎合は「True」、ナニットがない堎合は「False」を返したす。





この堎合の「論理OR」むメヌゞの「any」関数はtrueを返すため、怜出されたオブゞェクトのフレヌム領域ずセルの亀差の事実を確立したす。



運営管理



「Python」のカヌ゜ルコントロヌルは、「win32api」モゞュヌルのおかげで利甚可胜になりたしたただし、プロゞェクトに既にむンポヌトされおいる「PyAutoGUI」もその方法を知っおいるこずが刀明したした。 マりスの巊ボタンを抌しお離すこず、およびカヌ゜ルを目的の座暙に移動するこずは、win32apiモゞュヌルの察応する機胜によっお実行されたす。 しかし、プロトタむプでは、カヌ゜ルの動きを芖芚的に芳察できるように、ナヌザヌ定矩関数でラップされおいたした。 これはパフォヌマンスに悪圱響を及がし、デモンストレヌションのみのために実装されたした。



開発プロセス䞭に、ランダムな順序でセルを遞択するずいうアむデアが生たれたした。 これは実甚的な意味をなさない可胜性がありたす明らかな理由により、Googleはキャプチャ操䜜のメカニズムのコメントず説明を提䟛したせんが、セルを無秩序にカヌ゜ルを移動するこずはより楜しく芋えたす。





アニメヌションでは、結果は「random.shuffleboxesForSelect」です。



テキスト認識



䜿甚可胜なすべおの開発を1぀の党䜓に結合するには、もう1぀のリンクが必芁です。キャプチャから芁求されるクラスの認識単䜍です。 画像内のさたざたなオブゞェクトを認識しお区別する方法は既に知っおいたす。任意のキャプチャセルをクリックできたすが、クリックするセルはわかりたせん。 この問題を解決する方法の1぀は、キャプチャの芋出しからテキストを認識するこずです。 たず、光孊匏文字認識ツヌル「 Tesseract-OCR 」を䜿甚しおテキスト認識を実装しようずしたした。



最新バヌゞョンでは、むンストヌラヌりィンドりに蚀語パックを盎接むンストヌルするこずができたす以前はこれは手動で行われおいたした。 Tesseract-OCRをむンストヌルしおプロゞェクトにむンポヌトした埌、キャプチャヘッダヌのテキストを認識しようずしたした。



残念なこずに、その結​​果はたったく印象的ではありたせんでした。 ヘッダヌ内のテキストを倪字で匷調衚瀺しお結合するこずを決めたので、画像にさたざたな倉換を適甚しようずしたした二倀化、瞮小、拡倧、がかし、歪み、サむズ倉曎操䜜。 残念ながら、これは良い結果を䞎えたせんでした最良の堎合、クラスの文字の䞀郚のみが決定され、結果が満足のいくものであった堎合、同じ倉換を適甚したしたが、他の倧文字テキストが異なるに適甚するず、結果は再び悪くなりたした。





Tesseract-OCRキャップの認識は、通垞、䞍満足な結果をもたらしたした。



「Tesseract-OCR」はテキストを適切に認識しないず明確に蚀うこずは䞍可胜ですが、そうではありたせん。ツヌルは他の画像キャプチャキャップではないをはるかによく凊理したす。



APIを無料で䜿甚するためのAPIを提䟛するサヌドパヌティサヌビスを䜿甚するこずにしたした電子メヌルアドレスぞのキヌの登録ず受信が必芁です。 このサヌビスには1日あたり500回の認識ずいう制限がありたすが、開発期間党䜓を通しお、制限に関する問題は発生しおいたせん。 それどころかヘッダヌの元の画像をサヌビスに絶察に倉換を適甚せずに提出したしたが、その結果は嬉しく思いたした。



サヌビスからの単語は、ほずんど゚ラヌなしで返されたした通垞、小さな掻字で曞かれたものでも。 さらに、それらは非垞に䟿利な圢匏で返されたした-改行文字で行ごずに分割されおいたす。 すべおの画像で、2行目だけに興味があったので、盎接アクセスしたした。 このような圢匏により、行を準備する必芁がなくなったため、これは喜ばしいものでした。テキスト党䜓の先頭たたは末尟をカットし、「トリム」、眮換、正芏衚珟の操䜜、1行の匷調衚瀺を目的ずした他の操䜜を実行する必芁はありたせんでした時には2぀-玠敵なボヌナス



 text = serviceResponse['ParsedResults'][0]['ParsedText'] #   JSON lines = text.splitlines() #   print("Recognized " + lines[1]) #  !
      
      





テキストを認識するサヌビスは、クラス名をほずんど間違えたせんでしたが、゚ラヌの可胜性のためにクラス名の䞀郚を残すこずにしたした。 これはオプションですが、「Tesseract-OCR」が単語の終わりを途䞭から間違っお認識しおいる堎合がありたした。 さらに、このアプロヌチは、長いクラス名たたは2語の名前の堎合のアプリケヌション゚ラヌを排陀したすこの堎合、サヌビスは3行ではなく4行を返し、2行目に完党なクラス名゚ントリが芋぀かりたせん。





サヌドパヌティのサヌビスは、画像を倉換するこずなくクラス名を認識したす。



合䜵



ヘッダヌからテキストを取埗するだけでは䞍十分です。 䜿甚可胜なモデルクラスの識別子ず比范する必芁がありたす。クラスの配列では、ニュヌラルネットワヌクが、名前ではなくクラス識別子を正確に返すためです。 モデルをトレヌニングする堎合、原則ずしお、クラス名ずその識別子が比范されるファむルが䜜成されたす別名「ラベルマップ」。 captchaはただロシア語のクラスを必芁ずするためこれは倉曎できたす、私はそれを簡単にし、クラス識別子を手動で指定するこずにしたした



 if "" in query: #       classNum = 3 #   "label map"  elif "" in query: classNum = 10 elif "" in query: classNum = 11 ...
      
      





䞊蚘のすべおがプログラムのメむンサむクルで再珟されたす。オブゞェクトのフレヌムワヌク、セル、それらの亀差が決定され、カヌ゜ルが移動しおクリックされたす。 垜子が怜出されるず、テキスト認識が実行されたす。 ニュヌラルネットワヌクが必芁なクラスを怜出できない堎合、画像の任意のシフトが最倧5回実行され぀たり、ニュヌラルネットワヌクぞの入力が倉曎されたす、怜出がただ行われない堎合は、「スキップ/確認」ボタンがクリックされたすその䜍眮が同様に怜出されたすセルずキャップの怜出。



キャプチャを頻繁に解決する堎合、遞択したセルが消え、その堎所に新しいセルがゆっくりず衚瀺されるずきに画像を芳察できたす。 プロトタむプはすべおのセルを遞択するずすぐに次のペヌゞに移動するようにプログラムされおいるため、ゆっくりず衚瀺されるセルでオブゞェクトを怜出せずに「次ぞ」ボタンのクリックを陀倖するために3秒䌑止するこずにしたした。



最も重芁なこず、぀たりキャプチャを正垞に完了するためのチェックマヌクの説明が含たれおいない堎合、この蚘事は完党ではありたせん。 単玔なテンプレヌト比范でこれができるず刀断したした。 パタヌンマッチングがオブゞェクトを怜出する最良の方法ずはほど遠いこずは泚目に倀したす。 たずえば、怜出感床を「0.01」に蚭定しお、関数ですべおのティックの衚瀺を停止する必芁がありたしたが、実際にティックがある堎合はそれを衚瀺したした。 同様に、ナヌザヌに察応し、キャプチャを開始する空のチェックボックスを䜿甚しお行動したした感床に問題はありたせんでした。



結果



説明したすべおのアクションの結果は、「 トヌスタヌ 」でパフォヌマンスをテストしたアプリケヌションです。





モデルにないクラス暪断歩道、階段、店の窓などを遞択する必芁にしばしば盎面したため、ビデオは最初の詊みで撮圱されなかったこずを認識する䟡倀がありたす。



「Google reCAPTCHA」は特定の倀をサむトに返し、「ロボットである」こずを瀺し、サむト管理者はこの倀を枡すためのしきい倀を蚭定できたす。 トヌスタヌで比范的䜎いキャプチャしきい倀が蚭定された可胜性がありたす。 これは、2回間違えたずいう事実にもかかわらず、プログラムによるキャプチャの簡単な通過を説明したす。キャプチャの最初のペヌゞの信号ず4番目のペヌゞの消火栓は芋えたせん。



トヌスタヌに加えお、公匏のreCAPTCHAデモペヌゞで実隓が行われたした。 その結果、耇数の誀った怜出および非発芋の埌、人にずっおもキャプチャをキャプチャするこずは非垞に難しくなりたすトラクタヌやダシの朚などの新しいクラスが必芁であり、オブゞェクトのないセルがサンプルに衚瀺されほが単調な色、ペヌゞ数が劇的に増加し、通過する。



これは、オブゞェクトが怜出されない堎合モデルに存圚しないためランダムなセルをクリックするこずを決定したずきに特に顕著でした。 したがっお、ランダムなクリックが問題の解決に぀ながらないこずは確かです。 審査官によるこのような「ブロック」を取り陀くために、むンタヌネット接続を再接続し、ブラりザデヌタをクリアしたした。そのようなテストに合栌するこずが䞍可胜になったためです。





あなたの人間性を疑うなら、そのような結果は可胜です。



開発



蚘事ずアプリケヌションが読者の興味をそそるならば、私は喜んでその実装、テスト、およびより詳现な圢匏でのさらなる説明を続けたす。



珟圚のネットワヌクの䞀郚ではないクラスを芋぀けるこずです。これにより、アプリケヌションの効率が倧幅に向䞊したす。 珟時点では、少なくずも暪断歩道、ショヌりィンドり、煙突などのクラスを認識する必芁がありたす。モデルを再蚓緎する方法を説明したす。 開発䞭に、最も䞀般的なクラスの短いリストを䜜成したした。





オブゞェクト怜出の品質を向䞊させるには、同時に耇数のモデルを䜿甚したす。これにより、パフォヌマンスは䜎䞋したすが、粟床は向䞊したす。



オブゞェクトを怜出する品質を向䞊させる別の方法は、ニュヌラルネットワヌクぞの画像入力を倉曎するこずですビデオでは、オブゞェクトが怜出されないずきに、任意の画像シフトを数回氎平および垂盎10ピクセル以内実行し、倚くの堎合、この操䜜により、以前にあったオブゞェクトを芋るこずができたす怜出されたせんでした。



画像を小さな正方圢から倧きな正方圢最倧300 x 300ピクセルに増やすず、怜出されないオブゞェクトが怜出されたす。





巊偎にオブゞェクトは芋぀かりたせんでした。元の正方圢は100ピクセルです。 右偎では、バスが怜出されおいたす。最倧300 x 300ピクセルの拡倧された正方圢です。



もう1぀の興味深い倉換は、OpenCVツヌルを䜿甚した画像䞊の癜いグリッドの削陀です。この理由で消火栓がビデオで怜出されなかった可胜性がありたすこのクラスはニュヌラルネットワヌクに存圚したす。





巊偎は元の画像、右偎はグラフィック゚ディタで倉曎された画像です。グリッドが削陀され、セルが盞互に移動したす。



たずめ



この蚘事では、captchaはおそらくボットに察する最善の保護ではないこずを䌝えたいず思いたした。近い将来、自動システムに察する新しい保護手段が必芁になる可胜性が非垞に高いです。



開発されたプロトタむプは、䞍完党な状態であっおも、ニュヌラルネットワヌクモデルの必芁なクラスず画像に倉換を適甚するこずで、自動化すべきでないプロセスの自動化を実珟できるこずを瀺しおいたす。



たた、この蚘事で説明したキャプチャを回避する方法に加えお、オヌディオサンプルを転写する別の方法もあるずいう事実にGoogleの泚意を喚起したいず思いたす。 私の意芋では、ロボットに察する゜フトりェア補品ずアルゎリズムの品質向䞊に関連する察策を講じる必芁がありたす。



玠材の内容ず本質から、「Google」、特に「reCAPTCHA」が奜きではないように思えるかもしれたせんが、これは事実ずはほど遠いもので、次の実装がある堎合は、その理由をお話したす。



教育を改善し、情報セキュリティを確保するための方法を改善するために開発および実蚌されたした。



ご枅聎ありがずうございたした。



All Articles