[PYTHON] Maschinelles Lernen x Web App-Diagnose: Erkennen Sie CAPTCHA mit der Cloud Vision-API

Letztes Mal implementierte ein mehrschichtiges Perzeptron mit "Chainer" und versuchte, CAPTCHA-Bilder zu erkennen. .. Dieses Mal werde ich dasselbe mit der Bildanalyse-API von Google "Cloud Vision API" versuchen.

Agenda

  1. Implementierungscode
  2. Probieren Sie es aus
  3. Zusammenfassung
  4. Referenzen

0. Implementierungscode

Dieses Mal habe ich eine einfache Bildanalyseklasse zur Überprüfung erstellt. Wie Sie sehen, werden nur die von der Cloud Vision-API definierten JSON-formatierten Anforderungen POST.

MyRecognitionImage.py


#!/usr/bin/python
#coding:utf-8
import base64
import json
from requests import Request, Session


#Analysieren Sie Bilder mit der Cloud Vision API
class RecognizeImage():

    def __init__(self):
        return

    #Analyse von CAPTCHA
    def recognize_captcha(self, str_image_path):
        #Laden von CAPTCHA-Bildern
        bin_captcha = open(str_image_path, 'rb').read()

        #Codieren Sie CAPTCHA-Bilder mit base64
        str_encode_file = base64.b64encode(bin_captcha)

        #Geben Sie die API-URL an
        str_url = "https://vision.googleapis.com/v1/images:annotate?key="

        #API-Schlüssel im Voraus erhalten
        str_api_key = "XXXXXXXXX"

        # Content-Setzen Sie Type auf JSON
        str_headers = {'Content-Type': 'application/json'}

        #Definieren Sie die JSON-Nutzdaten gemäß den Cloud Vision-API-Spezifikationen.
        #Um Text aus dem CAPTCHA-Bild zu extrahieren, lautet der Typ "TEXT"._Stellen Sie "DETECTION" ein.
        str_json_data = {
            'requests': [
                {
                    'image': {
                        'content': str_encode_file
                    },
                    'features': [
                        {
                            'type': "TEXT_DETECTION",
                            'maxResults': 10
                        }
                    ]
                }
            ]
        }

        #Anfrage senden
        obj_session = Session()
        obj_request = Request("POST",
                              str_url + str_api_key,
                              data=json.dumps(str_json_data),
                              headers=str_headers
                              )
        obj_prepped = obj_session.prepare_request(obj_request)
        obj_response = obj_session.send(obj_prepped,
                                        verify=True,
                                        timeout=60
                                        )

        #Erfassung von Analyseergebnissen
        if obj_response.status_code == 200:
            print obj_response.text
            return obj_response.text
        else:
            return "error"

Die folgenden drei Punkte sollten bei der Verwendung der API beachtet werden.

Wenn der obige Code ausgeführt wird, wird die folgende Anforderung POSTED.

POST /v1/images:annotate?key=XXXXXXXXX HTTP/1.1
User-Agent: python-requests/2.8.1
Host: vision.googleapis.com
Accept: */*
Content-Type: application/json
Content-Length: 939

{
 "requests":[
  {
   "image":{
    "content": "iVBORw0KGgoAAAANSUhEUgA ・ ・ ・(Kürzung)・ ・ ・/EV4ihonpXVAAAAAElFTkSuQmCC"
   },
   "features":[
    {
     "type":"TEXT_DETECTION",
     "maxResults":10
    }
   ]
  }
 ]
}

Geben Sie Base64-codierte Bilddaten in "Inhalt" an und geben Sie den Analyseinhalt an, den Sie in "Typ" ausführen möchten. Da wir dieses Mal CAPTCHA erkennen möchten, geben Sie die Textextraktion "TEXT_DETECTION" an. Zusätzlich zur Textextraktion kann die folgende Analyse durchgeführt werden.

Wenn Sie beispielsweise ein Bild von Tokyo Station POSTEN, können Sie es als "Tokyo Station" erkennen. Wenn Sie ein Bild POSTEN, mit dem Sie zufrieden sind, können Sie es als "glücklich" erkennen. Ich würde diese gerne in Zukunft ausprobieren.

Die Bildanalyse erfordert ziemlich viel Maschinenleistung, daher war es eine große Hürde, als Hobby daran zu arbeiten. Mit dieser API kann jedoch jeder problemlos eine Bildanalyse durchführen. Was für eine wundervolle API!

1. Probieren Sie es aus

Verwenden wir dies, um CAPTCHA sofort zu erkennen.

Zunächst einmal von nun an. captcha0_neg.png

Der extrahierte Text wird an "description" ausgegeben.

1. Analyseergebnis


{
  "responses": [
    {
      "textAnnotations": [
        {
          "locale": "en",
          "description": "O l 4.67 9\n",
          "boundingPoly": {
            "vertices": [
              {
                "x": 6,
                "y": 1
              },
              {
                "x": 165,
                "y": 1
              },
              {
                "x": 165,
                "y": 35
              },
              {
                "x": 6,
                "y": 35
              }
            ]
          }
        }
      ]
    }
  ]
}

Das Ergebnis ist "O l 4,67 9". 0 (Null) ist der obere Buchstabe O "O", 1 (ichi) ist der untere Buchstabe "l", und es gibt seltsame Punkte, aber es ist ersichtlich, dass sie im Allgemeinen korrekt erkannt werden. Man kann sagen, dass die richtige Antwortrate 100% beträgt.

Als nächstes kommt der zweite. captcha1_neg.png

Dies war in früheren Validierungen enttäuschend, aber was ist mit der Cloud Vision-API?

Zweites Analyseergebnis


{
  "responses": [
    {
      "textAnnotations": [
        {
          "locale": "en",
          "description": "496'0,\n",
          "boundingPoly": {
            "vertices": [
              {
                "x": 6,
                "y": 10
              },
              {
                "x": 148,
                "y": 10
              },
              {
                "x": 148,
                "y": 70
              },
              {
                "x": 6,
                "y": 70
              }
            ]
          }
        }
      ]
    }
  ]
}

Die Ausgabereihenfolge des Textes wird geringfügig geändert, aber "4", "0", "9" und "6" können erkannt werden. Beim letzten Mal lag die Erkennungsrate bei 50%, sodass wir sehen können, dass sie sich verbessert hat.

Das ist das letzte. cp3.png

Drittes Analyseergebnis


{
  "responses": [
    {
      "textAnnotations": [
        {
          "locale": "en",
          "description": "425970\n",
          "boundingPoly": {
            "vertices": [
              {
                "x": 5,
                "y": 7
              },
              {
                "x": 97,
                "y": 7
              },
              {
                "x": 97,
                "y": 33
              },
              {
                "x": 5,
                "y": 33
              }
            ]
          }
        }
      ]
    }
  ]
}

gut gemacht!! Sie können sehen, dass alles genau erkannt werden kann.

Es ist möglich, Text mit ziemlich hoher Genauigkeit zu extrahieren, wahrscheinlich weil er auf der Grundlage der großen Menge an Bilddaten von Google lernt. Dies könnte für die CAPTCHA-Erkennung verwendet werden.

Übrigens wird in dem von Google entwickelten neuen CAPTCHA "reCAPTCHA" dasselbe Tier / Ding aus mehreren Bildern ausgewählt, wie unten gezeigt. Es scheint, dass es zwischen Menschen und Bots unterscheidet.

reCAPTCHA.png

In diesem Beispiel müssen dieselben Bilder wie das obere Bild (Katze) ausgewählt werden. Die richtige Antwort besteht darin, das erste von links oben und das zweite und dritte von links unten auszuwählen.

Übrigens habe ich bestätigt, dass die Cloud Vision API verwendet werden kann, um Katzen und Hunde genau zu unterscheiden.

2. Zusammenfassung

Ich habe versucht, CAPTCHA mithilfe der Cloud Vision-API zu erkennen. Obwohl es einige Verbesserungen gibt, reichen die Ergebnisse aus, um für die CAPTCHA-Erkennung verwendet zu werden.

Es wurde auch festgestellt, dass es möglich ist, nicht nur einfaches CAPTCHA (numerische Bilder usw.) zu durchbrechen, sondern auch fortgeschrittene wie reCAPTCHA. Diese API wird nach Ablauf der Testphase in Rechnung gestellt. Da Sie jedoch Ihren eigenen Code schreiben oder eine Maschine mit hohen Spezifikationen vorbereiten können, halten wir die Kostenleistung für hoch.

Nach wiederholter Überprüfung möchte ich es in Zukunft für die CAPTCHA-Erkennungs-Engine des automatischen Crawlers von Webanwendungen verwenden.

3. Referenzen

  1. Google Cloud Vision API

das ist alles

Recommended Posts

Maschinelles Lernen x Web App-Diagnose: Erkennen Sie CAPTCHA mit der Cloud Vision-API
Maschinelles Lernen x Webanwendungsdiagnose: Erkennen von CAPTCHA mit mehrschichtigem Perzeptron (Chainer Edition)
Einfaches maschinelles Lernen mit Scikit-Learn und Flask ✕ Web App
Probleme mit den Ausgabeergebnissen mit der Cloud Vision-API von Google
Textextraktion mit GCP Cloud Vision API (Python3.6)
Führen Sie eine Pipeline für maschinelles Lernen mit Cloud Dataflow (Python) aus.
Stellen Sie Echtzeit-Webanwendungen mit swampdragon x apache bereit
Ablauf des Extrahierens von Text in PDF mit der Cloud Vision API
Erstellen Sie eine App für maschinelles Lernen mit ABEJA Platform + LINE Bot
Maschinelles Lernen mit Python! Vorbereitung
Web-API mit Python + Falcon
Maschinelles Lernen Minesweeper mit PyTorch
Beginnend mit maschinellem Python-Lernen
Versuchen Sie es mit Kaggle leicht maschinell
So erstellen Sie mit AWS Lambda eine serverlose API für maschinelles Lernen