Leistungsstarke Bildanalyse mit Google Cloud Vision und Python
Veröffentlicht: 2022-03-10Vor kurzem habe ich eine Web-App entwickelt, um die persönlichen Ausgaben der Benutzer zu verwalten. Seine Hauptfunktionen sind das Scannen von Einkaufsbelegen und das Extrahieren von Daten zur weiteren Verarbeitung. Die Google Vision API hat sich als großartiges Tool erwiesen, um einen Text aus einem Foto zu erhalten. In diesem Artikel führe ich Sie in einem Beispielprojekt durch den Entwicklungsprozess mit Python.
Wenn Sie ein Anfänger sind, machen Sie sich keine Sorgen. Sie benötigen nur sehr grundlegende Kenntnisse dieser Programmiersprache – weitere Fähigkeiten sind nicht erforderlich.
Fangen wir an, sollen wir?
Noch nie von Google Cloud Vision gehört?
Es ist eine API, die es Entwicklern ermöglicht, den Inhalt eines Bildes durch extrahierte Daten zu analysieren. Zu diesem Zweck verwendet Google maschinelle Lernmodelle, die mit einem großen Datensatz von Bildern trainiert wurden. All dies ist mit einer einzigen API-Anfrage verfügbar. Die Engine hinter der API klassifiziert Bilder, erkennt Objekte, Gesichter von Personen und erkennt gedruckte Wörter in Bildern.
Um Ihnen ein Beispiel zu geben, bringen wir das beliebte Giphy zur Sprache. Sie haben die API übernommen, um Beschriftungsdaten aus GIFs zu extrahieren, was zu einer erheblichen Verbesserung der Benutzererfahrung führte. Ein weiteres Beispiel ist realtor.com, das die OCR der Vision-API verwendet, um Text aus Bildern von For Sale-Schildern zu extrahieren, die mit einer mobilen App aufgenommen wurden, um weitere Details zur Immobilie bereitzustellen.
Maschinelles Lernen auf einen Blick
Beginnen wir mit der Beantwortung der Frage, die viele von Ihnen wahrscheinlich schon einmal gehört haben – was ist maschinelles Lernen?
Die Grundidee besteht darin, ein programmierbares Modell zu entwickeln, das Muster in den gegebenen Daten findet. Je hochwertiger die Daten, die Sie liefern, und je besser das Design des von Ihnen verwendeten Modells ist, desto intelligenteres Ergebnis wird erzielt. Mit „freundlichem maschinellem Lernen“ (wie Google sein maschinelles Lernen über API-Dienste nennt) können Sie ganz einfach einen Teil der künstlichen Intelligenz in Ihre Anwendungen integrieren.
Empfohlene Lektüre : Erste Schritte mit maschinellem Lernen
Erste Schritte mit Google Cloud
Beginnen wir mit der Registrierung bei Google Cloud. Google erfordert eine Authentifizierung, aber es ist einfach und schmerzlos – Sie müssen nur eine JSON-Datei speichern, die den API-Schlüssel enthält, den Sie direkt von der Google Cloud Platform erhalten können.
Laden Sie die Datei herunter und fügen Sie den Pfad zu den Umgebungsvariablen hinzu:
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/your/apikey.json
Alternativ können Sie sich bei der Entwicklung mit der Methode from_serivce_account_json()
unterstützen, die ich in diesem Artikel weiter beschreiben werde. Weitere Informationen zur Authentifizierung finden Sie in der offiziellen Dokumentation von Cloud.
Google stellt ein Python-Paket bereit, um mit der API umzugehen. Lassen Sie uns Ihrer App die neueste Version von google-cloud-vision==0.33 hinzufügen. Zeit zum Coden!
So kombinieren Sie Google Cloud Vision mit Python
Lassen Sie uns zunächst Klassen aus der Bibliothek importieren.
from google.cloud import vision from google.cloud.vision import types
Wenn das erledigt ist, brauchen Sie jetzt eine Instanz eines Clients. Dazu verwenden Sie eine Texterkennungsfunktion.
client = vision.ImageAnnotatorClient()
Wenn Sie Ihre Anmeldeinformationen nicht in Umgebungsvariablen speichern, können Sie sie in diesem Stadium direkt zum Client hinzufügen.
client = vision.ImageAnnotatorClient.from_service_account_file( '/path/to/apikey.json' )
Angenommen, Sie speichern zu verarbeitende Bilder in einem Ordner „images“ in Ihrem Projektkatalog, öffnen wir eines davon.
image_to_open = 'images/receipt.jpg' with open(image_to_open, 'rb') as image_file: content = image_file.read()
Der nächste Schritt besteht darin, ein Vision-Objekt zu erstellen, mit dem Sie eine Anfrage senden können, um mit der Texterkennung fortzufahren.
image = vision.types.Image(content=content) text_response = client.text_detection(image=image)
Die Antwort besteht aus erkannten Wörtern, die als Beschreibungsschlüssel gespeichert sind, ihrer Position auf dem Bild und einer Sprachvorhersage. Schauen wir uns zum Beispiel das erste Wort genauer an:
[ ... description: "SHOPPING" bounding_poly { vertices { x: 1327 y: 1513 } vertices { x: 1789 y: 1345 } vertices { x: 1821 y: 1432 } vertices { x: 1359 y: 1600 } } ... ]
Wie Sie sehen können, müssen Sie, um nur Text zu filtern, eine Beschreibung „für alle Elemente“ erhalten. Glücklicherweise kommt mit Hilfe Pythons leistungsstarkes Listenverständnis.
texts = [text.description for text in text_response.text_annotations] ['SHOPPING STORE\nREG 12-21\n03:22 PM\nCLERK 2\n618\n1 MISC\n1 STUFF\n$0.49\n$7.99\n$8.48\n$0.74\nSUBTOTAL\nTAX\nTOTAL\nCASH\n6\n$9. 22\n$10.00\nCHANGE\n$0.78\nNO REFUNDS\nNO EXCHANGES\nNO RETURNS\n', 'SHOPPING', 'STORE', 'REG', '12-21', '03:22', 'PM', 'CLERK', '2', '618', '1', 'MISC', '1', 'STUFF', '$0.49', '$7.99', '$8.48', '$0.74', 'SUBTOTAL', 'TAX', 'TOTAL', 'CASH', '6', '$9.', '22', '$10.00', 'CHANGE', '$0.78', 'NO', 'REFUNDS', 'NO', 'EXCHANGES', 'NO', 'RETURNS']
Wenn Sie genau hinschauen, können Sie feststellen, dass das erste Element der Liste den gesamten im Bild erkannten Text als Zeichenfolge enthält, während die anderen getrennte Wörter sind. Drucken wir es aus.
print(texts[0]) SHOPPING STORE REG 12-21 03:22 PM CLERK 2 618 1 MISC 1 STUFF $0.49 $7.99 $8.48 $0.74 SUBTOTAL TAX TOTAL CASH 6 $9. 22 $10.00 CHANGE $0.78 NO REFUNDS NO EXCHANGES NO RETURNS
Ziemlich genau, oder? Und offensichtlich ziemlich nützlich, also lasst uns mehr spielen.
Was können Sie von Google Cloud Vision erhalten?
Wie ich oben erwähnt habe, geht es bei Google Cloud Vision nicht nur um das Erkennen von Text, sondern auch um Gesichter, Orientierungspunkte, Bildeigenschaften und Webverbindungen zu entdecken. Lassen Sie uns in diesem Sinne herausfinden, was es Ihnen über Webassoziationen des Bildes sagen kann.
web_response = client.web_detection(image=image)
Okay Google, weißt du eigentlich, was auf dem Bild zu sehen ist, das du erhalten hast?
web_content = web_response.web_detection web_content.best_guess_labels >>> [label: "Receipt"]
Gute Arbeit, Google! Es ist tatsächlich eine Quittung. Aber lassen Sie uns Ihnen ein bisschen mehr Bewegung geben – können Sie noch etwas sehen? Wie wäre es mit mehr Vorhersagen in Prozent ausgedrückt?
predictions = [ (entity.description, '{:.2%}'.format(entity.score))) for entity in web_content.web_entities ] >>> [('Receipt', '70.26%'), ('Product design', '64.24%'), ('Money', '56.54%'), ('Shopping', '55.86%'), ('Design', '54.62%'), ('Brand', '54.01%'), ('Font', '53.20%'), ('Product', '51.55%'), ('Image', '38.82%')]
Viele wertvolle Einblicke, gut gemacht, mein allmächtiger Freund! Können Sie auch herausfinden, woher das Bild stammt und ob es Kopien gibt?
web_content.full_matching_images >>> [ url: "https://www.rcapitalassociates.com/wp-content/uploads/2018/03/receipts.jpg", url:"https://media.istockphoto.com/photos/shopping-receipt-picture-id901964616?k=6&m=901964616&s=612x612&w=0&h=RmFpYy9uDazil1H9aXkkrAOlCb0lQ-bHaFpdpl76o9A=", url: "https://www.pakstat.com.au/site/assets/files/1172/shutterstock_573065707.500x500.jpg" ]
Ich bin beeindruckt. Danke Google! Aber eins ist nicht genug, können Sie mir bitte drei Beispiele für ähnliche Bilder geben?
web_content.visually_similar_images[:3] >>>[ url: "https://thumbs.dreamstime.com/z/shopping-receipt-paper-sales-isolated-white-background-85651861.jpg", url: "https://thumbs.dreamstime.com/b/grocery-receipt-23403878.jpg", url:"https://image.shutterstock.com/image-photo/closeup-grocery-shopping-receipt-260nw-95237158.jpg" ]
Süss! Gut gemacht.
Gibt es wirklich eine künstliche Intelligenz in Google Cloud Vision?
Wie Sie im Bild unten sehen können, kann der Umgang mit Quittungen etwas emotional werden.
Sehen wir uns an, was die Vision-API Ihnen über dieses Foto sagen kann.
image_to_open = 'images/face.jpg' with open(image_to_open, 'rb') as image_file: content = image_file.read() image = vision.types.Image(content=content) face_response = client.face_detection(image=image) face_content = face_response.face_annotations face_content[0].detection_confidence >>> 0.5153166651725769
Nicht schlecht, der Algorithmus ist zu mehr als 50 % sicher, dass ein Gesicht auf dem Bild zu sehen ist. Aber können Sie etwas über die Emotionen dahinter lernen?
face_content[0] >>> [ ... joy_likelihood: VERY_UNLIKELY sorrow_likelihood: VERY_UNLIKELY anger_likelihood: UNLIKELY surprise_likelihood: POSSIBLE under_exposed_likelihood: VERY_UNLIKELY blurred_likelihood: VERY_UNLIKELY headwear_likelihood: VERY_UNLIKELY ... ]
Überraschenderweise können Sie mit einem einfachen Befehl die Wahrscheinlichkeit einiger grundlegender Emotionen sowie von Kopfbedeckungen oder Fotoeigenschaften überprüfen.
Wenn es um die Erkennung von Gesichtern geht, muss ich Ihre Aufmerksamkeit auf einige der potenziellen Probleme lenken, auf die Sie stoßen können. Sie müssen bedenken, dass Sie ein Foto an eine Maschine übergeben, und obwohl die API von Google Modelle verwendet, die mit riesigen Datensätzen trainiert wurden, ist es möglich, dass sie einige unerwartete und irreführende Ergebnisse liefert. Im Internet finden sich Fotos, die zeigen, wie leicht sich künstliche Intelligenz bei der Bildanalyse austricksen lässt. Einige von ihnen können lustig sein, aber es gibt einen schmalen Grat zwischen unschuldigen und anstößigen Fehlern, besonders wenn ein Fehler ein menschliches Gesicht betrifft.
Ohne Zweifel ist Google Cloud Vision ein robustes Tool. Außerdem macht es Spaß damit zu arbeiten. Die REST-Architektur von API und das weit verbreitete Python-Paket machen es für alle noch zugänglicher, unabhängig davon, wie fortgeschritten Sie in der Python-Entwicklung sind. Stellen Sie sich vor, wie erheblich Sie Ihre App verbessern können, indem Sie ihre Fähigkeiten nutzen!
Empfohlene Lektüre : Anwendungen des maschinellen Lernens für Designer
Wie können Sie Ihr Wissen über Google Cloud Vision erweitern?
Die Möglichkeiten zur Anwendung des Google Cloud Vision-Dienstes sind praktisch unbegrenzt. Wenn die Python-Bibliothek verfügbar ist, können Sie sie in jedem Projekt basierend auf der Sprache verwenden, egal ob es sich um eine Webanwendung oder ein wissenschaftliches Projekt handelt. Es kann Ihnen sicherlich dabei helfen, ein tieferes Interesse an maschinellen Lerntechnologien zu wecken.
Die Google-Dokumentation bietet einige großartige Ideen zur Anwendung der Vision-API-Funktionen in der Praxis und gibt Ihnen die Möglichkeit, mehr über das maschinelle Lernen zu erfahren. Ich empfehle besonders, sich die Anleitung zum Erstellen einer erweiterten Bildsuch-App anzusehen.
Man könnte sagen, dass das, was Sie in diesem Artikel gesehen haben, wie Magie ist. Wer hätte schließlich gedacht, dass eine einfache und leicht zugängliche API von einem so leistungsstarken, wissenschaftlichen Tool unterstützt wird? Sie müssen nur noch ein paar Zeilen Code schreiben, Ihrer Fantasie freien Lauf lassen und das grenzenlose Potenzial der Bildanalyse erleben.