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.
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!
Verwenden wir dies, um CAPTCHA sofort zu erkennen.
Zunächst einmal von nun an.
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.
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.
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.
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.
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.
das ist alles
Recommended Posts