Erkennen Sie japanische Zeichen anhand von Bildern mithilfe der Cloud Vision-API von Google mit Python

Erkennen Sie japanische Zeichen anhand von Bildern mithilfe der Cloud Vision-API von Google mit Python

Einführung

Hands-on-Artikel, um zurückzublicken und das durch die Entwicklung von Serverless Web App Mosaic gewonnene Wissen zu korrigieren. / 87b57dfdbcf218de91e2), und ich plane insgesamt 17 Artikel, derzeit 13 Artikel und 4 weitere, aber ich werde es ein wenig leid. Ich habe es satt oder möchte mit der Implementierung neuer Funktionen beginnen. Deshalb habe ich angefangen. Hinzufügen einer Zeichenerkennungsfunktion.

Zeichenerkennung? Zeichenerkennung? Es klingt wie OCR (Optical Character Recognition). Es scheint, dass Zeichen auch mit AWS Rekognition erkannt werden können, aber leider scheint es kein Japanisch zu unterstützen. (Stand Januar 2020. Ich habe es nicht ausprobiert, aber es scheint, dass es noch nicht unterstützt wird.) Die Cloud Vision-API von Google unterstützt jedoch auch Japanisch. Daher habe ich mich für diese entschieden.

Cloud Vision API aktiviert

Also machen wir es gleich. Gehen Sie zu Google Cloud Platform oder Google Developpers Console> APIs und Dienste. https://console.cloud.google.com/apis https://console.developers.google.com/apis

Klicken Sie oben auf dem Bildschirm auf die Schaltfläche "+ API und Dienste aktivieren". Screenshot 2020-01-11 at 11.55.13.png Screenshot 2020-01-11 at 11.56.22.png

Suchen und aktivieren Sie die Cloud Vision-API. Screenshot 2020-01-11 at 11.56.55.png Screenshot 2020-01-11 at 11.58.07.png

Ein Dienstkonto wird als Authentifizierungsinformation hinzugefügt, aber hier weggelassen, da es sich mit [diesem Artikel] überschneidet (https://qiita.com/w2or3w/items/b66a4a8e45e6001a9c46).

Verwenden Sie die Google Vision API mit Lambda (Python3)

Informationen zum Importieren der Bibliothek, die zum Aufrufen der Google-API mit einem Dienstkonto erforderlich ist, finden Sie in diesem Artikel wie zuvor.

Der Code, der die lokale Bilddatei an die Vision-API übergibt und Gesicht und Text erkennt, sieht folgendermaßen aus:

lambda_function.py


  : 
def detectFacesByGoogleVisionAPIFromF(localFilePath, bucket, dirPathOut):
    try:
        keyFile = "service-account-key.json"
        scope = ["https://www.googleapis.com/auth/cloud-vision"]
        api_name = "vision"
        api_version = "v1"
        service = getGoogleService(keyFile, scope, api_name, api_version)
        
        ctxt = None
        with open(localFilePath, 'rb') as f:
            ctxt = b64encode(f.read()).decode()
        
        service_request = service.images().annotate(body={
            "requests": [{
                "image":{
                    "content": ctxt
                  },
                "features": [
                    {
                        "type": "FACE_DETECTION"
                    }, 
                    {
                        "type": "TEXT_DETECTION"
                    }
                ]
            }]
        })
        response = service_request.execute()
        
    except Exception as e:
        logger.exception(e)

def getGoogleService(keyFile, scope, api_name, api_version):
    credentials = ServiceAccountCredentials.from_json_keyfile_name(keyFile, scopes=scope)
    return build(api_name, api_version, credentials=credentials, cache_discovery=False) 

In diesem Beispielcode werden "FACE_DETECTION" und "TEXT_DETECTION" angegeben. Darüber hinaus können Sie "LABEL_DETECTION", "LANDMARK_DETECTION", "LOGO_DETECTION" usw. angeben. Wenn Sie dies jedoch angeben, wird die Gebühr entsprechend hinzugefügt. Wenn der Zweck nur die Zeichenerkennung ist, ist es daher besser, nur "TEXT_DETECTION" anzugeben. Screenshot 2020-01-12 at 14.58.06.png Ich werde nicht auf die Details eingehen, die für Funktionen angegeben werden können, und der JSON wird zurückgegeben. Weitere Informationen finden Sie in der Dokumentation zur Cloud Vision-API (https://cloud.google.com/vision/docs?hl=ja). Klicken Sie hier, um Preisdetails anzuzeigen (https://cloud.google.com/vision/pricing?hl=ja).

Ich wollte unbedingt Vision für Dateien, die auf Google Drive hochgeladen wurden

Aber ich konnte nicht.

test.py


        imageUri = "https://drive.google.com/uc?id=" + fileID
        service_request = service.images().annotate(body={
            "requests": [{
                "image":{
                    "source":{
                      "imageUri": imageUri
                    }
                  },
                "features": [
                    {
                        "type": "FACE_DETECTION"
                    }, 
                    {
                        "type": "TEXT_DETECTION"
                    }
                ]
            }]
        })
        response = service_request.execute()

Ich dachte, es wäre so cool, aber ich habe den folgenden Fehler erhalten und verschiedene Dinge ausprobiert, aber ich konnte es doch nicht tun.

response.json


{"responses": [{"error": {"code": 7, "message": "We're not allowed to access the URL on your behalf. Please download the content and pass it in."}}]}
{"responses": [{"error": {"code": 4, "message": "We can not access the URL currently. Please download the content and pass it in."}}]}ass it in."}}]}

Ich kann Vision aufrufen, aber anscheinend kann ich von Vision aus nicht auf das Bild (imageUri) im Web zugreifen. Es hat nicht funktioniert, selbst wenn ich den direkten Link des Bildes im öffentlichen Bucket von S3 angegeben habe. Geheimnis ist. Lass es mich wissen, bitte.

Funktionsprüfung

TEXT_DETECTION enthält zwei Elemente: "textAnnotations" und "fullTextAnnotation". Das Ergebnis des Einschließens des durch textAnnotations erkannten Bereichs in Blau und des durch fullTextAnnotation in Grün erkannten Bereichs war wie folgt. faces-aaaaaa.png

Ich denke, dass die Ergebnisse vernünftig sind, aber ich habe den Eindruck, dass der Bereich eines Zeichens für das blaue etwas unterschiedlich ist, wahrscheinlich weil es japanisch ist.

Es scheint auch schwach zu sein, wenn jedes Zeichen unabhängig ist, wie in der Abbildung unten gezeigt. Ob dies auch ein japanisches Problem ist, ob es erkannt werden kann, wenn es sich um ein anderes Merkmal handelt, oder ob es mit anderen Parametern angepasst werden kann, habe ich nicht tief verfolgt, aber ich habe trotzdem nicht das erwartete Ergebnis erzielt. Es ist schmerzlich zu hoffen, dass das API-Lernen in Zukunft Fortschritte macht und die Zeichen in diesem Bild ohne Auslassung erkannt werden können. faces-IMG_20190901_094815-200126131521-1387a884261.jpg Wenn Akatsuki, dessen AWS-Erkennung Japanisch für die Zeichenerkennung unterstützt, denke ich daran, dieses Bild zuerst zu bewerten!

Nachwort

Ich weiß, dass es wichtig und notwendig ist, es als Artikel zusammenzustellen, aber es macht am meisten Spaß, wenn ich etwas Neues erstelle. Mit diesem Ablauf konnte ich diesen Vision-API-Artikel reibungslos schreiben. Es wäre mühsam, später einen Artikel zu schreiben, daher hielt ich es für wichtig, ihn schnell zu schreiben, während ich neu in meinem Gedächtnis war und unter Hochspannung stand.

Ich verwende Mosaic, eine serverlose Web-App, die ich mache, im Grunde die AWS-Infrastruktur, aber irgendwann möchte ich dasselbe mit GCP erstellen. Bis Ende 2020. Ich denke, es wäre besser, die Infrastruktur auf einheitliche Weise aufzubauen, aber für Web-API-Dienste wie Rekognition und Vision API ist entweder einer in Ordnung oder derjenige, der das erreichen kann, was Sie tun möchten, wird ausgewählt. Beide rufen nur die API auf, es ist also keine große Sache, und es mag zwar für jedes System gleich sein, aber es macht das Gefühl wie ein Plastikmodell, das durch das Kombinieren von Teilen hergestellt wird. Ich denke nicht, dass Sie alles wissen müssen, aber ich denke nicht, dass es gut ist, sich zu sehr an einen zu halten.

Ich bin froh zu sehen, wie einfach es ist, maschinell erlernte, hochpräzise Dienste zu nutzen, aber es ist schmerzhaft, stecken zu bleiben, wenn nicht die erwarteten Ergebnisse erzielt werden. In meinem zukünftigen Forschungsbereich kann ich jedoch nichts tun, sodass ich nur auf die Ergebnisse warten kann, die ich eines Tages erwarten werde.

Recommended Posts

Erkennen Sie japanische Zeichen anhand von Bildern mithilfe der Cloud Vision-API von Google mit Python
Verwenden Sie die Google Cloud Vision-API von Python
Laden Sie Bilder von der URL mit Pillow in Python 3
[Rails] Erkennen radikaler Bilder durch Analysieren von Bildern mithilfe der Cloud Vision API
Extrahieren Sie Zeichen aus Bildern mithilfe der Zeichenerkennungs-API von docomo
PUSH-Benachrichtigung von Python an Android mithilfe der Google-API
Ich habe versucht, mit der Cloud Vision API von GCP automatisch erotische Bilder von Twitter zu sammeln
Prognostizieren Sie das Geschlecht anhand des Namens mithilfe der Gender-API und von Pykakasi in Python
Verwenden von Cloud-Speicher aus Python3 (Einführung)
Führen Sie Ansible über Python mithilfe der API aus
Lassen Sie uns vorerst Googles Vision API von Python berühren
Mausbedienung mit Windows-API in Python
Versuchen Sie es mit der Wunderlist-API in Python
Tweet mit der Twitter-API in Python
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Laden Sie Bilder von der URL-Liste in Python herunter
Python ruft die Google Cloud Vision API von LINE BOT über AWS Lambda auf
Ich habe versucht, Zeichen aus Untertiteln zu extrahieren (OpenCV: Google Cloud Vision API)
Probleme mit den Ausgabeergebnissen mit der Cloud Vision-API von Google
Textextraktion mit GCP Cloud Vision API (Python3.6)
Versuchen Sie es mit der BitFlyer Ligntning API in Python
Holen Sie sich die Bild-URL mithilfe der Flickr-API in Python
[WP REST API v2] Laden Sie Bilder mit Python hoch
Versuchen Sie, die ChatWork-API und die Qiita-API in Python zu verwenden
Versuchen Sie, die DropBox Core-API mit Python zu verwenden
Zeigen Sie Bilder in OpenCV von Python mit einer externen USB-Kamera auf Ihrem MacBook an
Laden Sie eine JPG-Datei mit der Google Drive-API in Python hoch
Grundeinstellungen bei Verwendung der foursquare-API mit Python
Holen Sie sich LEAD-Daten mit der REST-API von Marketo in Python
OpenVINO verwendet die Inference Engine Python API in einer PC-Umgebung
Sprachtranskriptionsverfahren mit Python und Google Cloud Speech API
Generieren Sie Word Cloud aus Testfalldaten mit Python3
Evernote-API in Python
Japanische Ausgabe mit Python
C-API in Python 3
Steuern Sie Smart Light "Yeelight" von Python aus, ohne die Cloud zu verwenden
Ablauf des Extrahierens von Text in PDF mit der Cloud Vision API
Beseitigen Sie verstümmelte japanische Zeichen in JSON-Daten, die von der API erfasst wurden.
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
Holen Sie sich Ihre Herzfrequenz von der Fitbit-API in Python!
Das japanische Zeichen verstümmelte die Eliminierung von Matplotlib und NetworkX der Python-Bibliothek
Entfernen Sie einzeilige Kommentare einschließlich Japanisch aus dem Quellcode in Python
Bilderkennung mit API aus null Wissen mit AutoML Vision
Versuchen Sie, Lebensmittelfotos mithilfe der Google Cloud Vision-API zu beurteilen
Ermöglichen Sie die schnelle Ausführung von Python-Skripten in Cloud Run mithilfe des Responders
Lösen Sie das japanische Problem, wenn Sie das CSV-Modul in Python verwenden.
Stellen Sie die umgekehrte Geokodierung auf Japanisch mit der Python Google Maps-API bereit
Hit Mastodons API in Python
Mit Python abflachen
Speichern Sie Bilder mit Python3-Anforderungen
Ich habe Python auf Japanisch geschrieben
Base64-Codierung von Bildern in Python 3
OCR aus PDF in Python
Blender Python API in Houdini (Python 3)
Ich verstehe Python auf Japanisch!
Übersetzt mit Googletrans in Python
Erkennen Sie Tastenanschläge in Python (tty)
Verwenden des Python-Modus in der Verarbeitung
Verwenden Sie die e-Stat-API von Python
Holen Sie sich japanische Synonyme mit Python