[PYTHON] Ich habe die Google Cloud Vision-API zum ersten Mal ausprobiert

Sie haben die Vison-API während der Bildverarbeitung noch nie verwendet. Ich fand es großartig, aber ich habe nichts dagegen getan.

Vorerst habe ich beschlossen, es zu versuchen, auch wenn es hell war, also habe ich es in Python geschrieben! Dieser Artikel wurde zu dieser Zeit als Memo hinterlassen ~

Übrigens, der Registrierungsvorgang usw. erfolgt unter Bezugnahme auf diesen Bereich ~

Vision API-Clientbibliothek

Verwendete Funktionen

Die folgenden Funktionen wurden diesmal verwendet. Ich bringe die Erklärung vom Beamten.

** Automatische Erkennung von Objekten ** Mit der Cloud Vision-API können Sie mithilfe der Objektlokalisierung mehrere Objekte in einem Bild erkennen und extrahieren. Die Objektlokalisierung identifiziert die Objekte im Bild und gibt LocalizedObjectAnnotation für jedes Objekt an. Jede LocalizedObjectAnnotation identifiziert Informationen über das Objekt, den Standort des Objekts und den Rand des Bereichs im Bild, in dem sich das Objekt befindet. Die Objektlokalisierung identifiziert sowohl markante als auch weniger markante Objekte im Bild.

Quellcode

Es ist rau, aber bitte vergib mir ... Ich wollte auch die erkannten Startpunkt- und Endpunktkoordinaten, also ziehe ich sie mit einer groben Technik heraus. So überprüfen Sie den JSON-Schlüssel Ist das richtig? Ich fühle mich so.


ENDPOINT_URL = 'https://vision.googleapis.com/v1/images:annotate'
API_KEY = 'API-Schlüssel'

#json Schlüsselwort
RESPONSES_KEY = 'responses'
LOCALIZED_KEY = 'localizedObjectAnnotations'
BOUNDING_KEY = 'boundingPoly'
NORMALIZED_KEY = 'normalizedVertices'
NAME_KEY = 'name'
X_KEY = 'x'
Y_KEY = 'y'
def get_gcp_info(image):

    image_height, image_width, _ = image.shape
    min_image = image_proc.exc_resize(int(image_width/2), int(image_height/2), image)

    _, enc_image = cv2.imencode(".png ", min_image)
    image_str = enc_image.tostring()
    image_byte = base64.b64encode(image_str).decode("utf-8")

    img_requests = [{
        'image': {'content': image_byte},
        'features': [{
            'type': 'OBJECT_LOCALIZATION',
            'maxResults': 5
        }]
    }]

    response = requests.post(ENDPOINT_URL,
                             data=json.dumps({"requests": img_requests}).encode(),
                             params={'key': API_KEY},
                             headers={'Content-Type': 'application/json'})

    # 'responses'Wenn der Schlüssel existiert
    if RESPONSES_KEY in response.json():
        # 'localizedObjectAnnotations'Wenn der Schlüssel existiert
        if LOCALIZED_KEY in response.json()[RESPONSES_KEY][0]:
            # 'boundingPoly'Wenn der Schlüssel existiert
            if BOUNDING_KEY in response.json()[RESPONSES_KEY][0][LOCALIZED_KEY][0]:
                # 'normalizedVertices'Wenn der Schlüssel existiert
                if NORMALIZED_KEY in response.json()[RESPONSES_KEY][0][LOCALIZED_KEY][0][BOUNDING_KEY]:

                    name = response.json()[RESPONSES_KEY][0][LOCALIZED_KEY][0][NAME_KEY]

                    start_point, end_point = check_recognition_point(
                        response.json()[RESPONSES_KEY][0][LOCALIZED_KEY][0][BOUNDING_KEY][NORMALIZED_KEY],
                        image_height,
                        image_width
                    )

                    print(name, start_point, end_point)

                    return True, name, start_point, end_point

    print("non", [0, 0], [0, 0])
    #Wenn nicht genügend Informationen vorhanden sind
    return False, "non", [0, 0], [0, 0]

def check_recognition_point(point_list_json, image_height, image_width):
    #X Startpunkt (%) der Erkennungskoordinaten
    x_start_rate = point_list_json[0][X_KEY]
    #Y Startpunkt (%) der Erkennungskoordinaten
    y_start_rate = point_list_json[0][Y_KEY]
    #X-Endpunkt (%) der Erkennungskoordinaten
    x_end_rate = point_list_json[2][X_KEY]
    #Y-Endpunkt (%) der Erkennungskoordinaten
    y_end_rate = point_list_json[2][Y_KEY]

    x_start_point = int(image_width * x_start_rate)
    y_start_point = int(image_height * y_start_rate)
    x_end_point = int(image_width * x_end_rate)
    y_end_point = int(image_height * y_end_rate)

    return [x_start_point, y_start_point], [x_end_point, y_end_point]

Der Name des erkannten Objekts wird in name zurückgegeben, und die Koordinaten des erkannten Objekts werden in start_point und end_point zurückgegeben.

Am Ende

Ich habe es mit Kleidung und Schuhen versucht, aber ich konnte es richtig erkennen! (Obwohl der Name ziemlich rau war) Es wäre interessant, ein Modell mit AUTOML selbst zu erstellen.

Recommended Posts

Ich habe die Google Cloud Vision-API zum ersten Mal ausprobiert
Ich habe zum ersten Mal versucht, Python zu programmieren.
Ich habe Mind Meld zum ersten Mal ausprobiert
Ich habe Python zum ersten Mal auf dem Mac ausprobiert.
Ich habe Python zum ersten Mal mit Heroku ausprobiert
AI Gaming Ich habe es zum ersten Mal versucht
Ich habe "License OCR" mit der Google Vision API ausprobiert
Ich habe "Receipt OCR" mit der Google Vision API ausprobiert
Ich habe versucht, Zeichen aus Untertiteln zu extrahieren (OpenCV: Google Cloud Vision API)
Erster Kaggle (Kaggle ①)
Kaguru zum ersten Mal
Was ich zum ersten Mal in Python bekommen habe
Ich habe die Naro-Roman-API 2 ausprobiert
Ich habe vorerst versucht, PIFuHD unter Windows auszuführen
Siehe Python zum ersten Mal
Ich habe die neuartige API von Naruro ausprobiert
Starten Sie Django zum ersten Mal
Ich habe versucht, die checkio-API zu verwenden
[Für Anfänger] Ich habe versucht, die Tensorflow-Objekterkennungs-API zu verwenden
Bis Sie die Google Cloud Vision-API ausprobieren (Erkennung schädlicher Bilder)
Lassen Sie uns vorerst Googles Vision API von Python berühren
Verwenden Sie die Google Cloud Vision-API von Python
MongoDB mit Python zum ersten Mal
Ich habe versucht, die COTOHA-API zu berühren
Versuchen wir zum ersten Mal Linux
Ich habe versucht, die BigQuery-Speicher-API zu verwenden
Ich habe zum ersten Mal versucht, mit DynamoDB und Step Functions eine serverlose Stapelverarbeitung zu erstellen
Zum ersten Mal in Numpy werde ich es von Zeit zu Zeit aktualisieren
Da ich frei bin, hat der Front-End-Ingenieur Python (v3.7.5) zum ersten Mal ausprobiert
Ich habe in der Bibliothek nach der Verwendung der Gracenote-API gesucht
[Python] Ich habe versucht, den Funktionsnamen durch den Funktionsnamen zu ersetzen
So verwenden Sie MkDocs zum ersten Mal
Ich habe versucht, die Qiita-API von Anfang an zu aktivieren
vprof - Ich habe versucht, den Profiler für Python zu verwenden
Ich habe zuerst die SARS-Analyse vor dem Corona-Virus versucht
Verwendung der Google Cloud Translation API
Versuchen Sie zum ersten Mal, in Qiita zu posten
Als ich versuchte, die Computer Vision API von Microsoft zu verwenden, erkannte ich das Galapagos-Zeichen "Stop".
Rückblick auf den Wettbewerb für maschinelles Lernen, an dem ich zum ersten Mal gearbeitet habe
GTUG Girls + PyLadiesTokyo Meetup Ich ging zum ersten maschinellen Lernen
Ich habe das MNIST-Tutorial von tensorflow für Anfänger ausprobiert.
Registrieren Sie zum ersten Mal eine Aufgabe in cron
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Versuchen Sie vorerst, Arch Linux zu installieren.
Ich habe versucht, die API mit dem Python-Client von echonest zu erreichen
Ich habe versucht, mit der Cloud Vision API von GCP automatisch erotische Bilder von Twitter zu sammeln
Ich möchte zum ersten Mal eine Django-Studie zur Mittagsdatenbank [EP1] erstellen
Ich möchte zum ersten Mal eine Django-Studie zum Mittagessen [EP1-4] erstellen
Ich habe versucht, den für TensorFlow geschriebenen Code nach Theano zu portieren
Ich habe das in Google Cloud Dataflow vorinstallierte Python-Paket überprüft
Ich habe versucht, zum Zeitpunkt der Bereitstellung mit Fabric und ChatWork Api automatisch in ChatWork zu posten
Ich möchte vorerst Selen bewegen [für Mac]
Ich habe versucht, mich mit Spring Boot + Spring Security REST API anzumelden
Zusammenfassung der Stolperpunkte in Django zum ersten Mal
[Für diejenigen, die TPU verwenden möchten] Ich habe versucht, die Tensorflow Object Detection API 2 zu verwenden
Ich habe versucht, die Qiita-API zu berühren
Stellen Sie sich zum ersten Mal bei Qiita vor (Testbeitrag)