[Azure] Klicken Sie mit Python auf Custom Vision Service

Einführung

"Custom Vision Service" ist ein Bilderkennungsdienst, der als eines der Produkte von Microsoft Azure bereitgestellt wird.

image.png

Es ist ein Dienst, der Ihnen sagt, wie nah ein Bild an welchem Tag ist, indem er ein Tag hochlädt, das den Bildtyp und mehrere damit verbundene Bilder angibt, und es so lernt.

image.png

Im obigen Beispiel wird als Ergebnis des Lernens von Geige, Oboe und Knolle und des Hochladens eines Fotos einer Geige mit einer etwas anderen Zusammensetzung erkannt, dass eine Wahrscheinlichkeit von 99,9% besteht, dass es sich um ein Foto einer Geige handelt.

Dieses Mal werde ich versuchen, die API dieses Dienstes von Python aus auszuführen.

Gesamtdurchfluss

Der allgemeine Ablauf der Nutzung dieses Dienstes ist

  1. Registrieren Sie Bilder zum Lernen mit Tags
  2. Führen Sie das Lernen durch
  3. Laden Sie das zu identifizierende Bild hoch und erhalten Sie das Ergebnis

Es ist eine sehr einfache Sache, und selbst eine Person wie ich, die überhaupt kein maschinelles Lernen oder keine Bildverarbeitung durchführt, kann es irgendwie leicht bewegen. Von diesen waren die folgenden Artikel sehr hilfreich für die Ausführung von 1, 2 und 3 im Browser. Bitte beziehen Sie sich auf sie.

Ich habe versucht, Custom Vision Service --Qiita zu verwenden

Dieser Artikel beschreibt, wie Teil 3 in Python ausgeführt wird.

Hauptthema

Grundsätzlich schreiben Sie das Programm jedoch einfach und führen es gemäß der Referenz aus.

Overview - Custom Vision Service

Wenn Sie auf dieser Seite das linke Menü "Referenz"> "API-Referenz für benutzerdefinierte Vision-Vorhersage" öffnen, werden die Testkonsole und die Seite mit Beispielcode für jede Programmiersprache sowie die API-Spezifikationen angezeigt.

Wählen Sie dieses Mal Python aus.

image.png

Die obere Hälfte des angezeigten Codes ist der 2.X-Code und die untere Hälfte ist der 3.x-Code. Erstellen Sie eine Python-Datei, indem Sie die für Ihre Umgebung geeignete kopieren. (Dieses Mal fahren wir mit 3.x fort.)

customvisionapi.py


import io, http.client, urllib.request, urllib.parse, urllib.error, base64

headers = {
    # Request headers
    'Content-Type': 'multipart/form-data',
    'Prediction-key': 'xxxxxxxxxxxxxxxxxxxxxxxx',
}

params = urllib.parse.urlencode({
    # Request parameters
    'iterationId': 'xxxxxxxxxxxxxxxxxxxxxxxx',
})

try:
    conn = http.client.HTTPSConnection('southcentralus.api.cognitive.microsoft.com')
    f = open("violin_a.jpg ", "rb", buffering=0)
    conn.request("POST", "/customvision/v1.0/Prediction/xxxxxxxxxxxxxxxxxxxxxxxx/image?%s" % params, f.readall(), headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    # print("[Errno {0}] {1}".format(e.errno, e.strerror))
    print(e)

Hier kann jeder in `xxxxxxxxxxxxxxxxxxxxxxxxx beschriebene Parameter aus dem Folgenden bestätigt werden.

Vielleicht gibt es einen besseren Weg, es nachzuschlagen, aber der, den ich gefunden habe, war der oben.

Nachdem Sie jeden Wert festgelegt haben, müssen Sie lediglich die Vergleichsdatei im selben Verzeichnis wie die Python-Datei ablegen und ausführen.

$ python customvisionapi.py
b'{"Id":"bxxxxxxxxxxxxxxxxxxxxxxxx","Project":"xxxxxxxxxxxxxxxxxxxxxxxx","Iteration":"xxxxxxxxxxxxxxxxxxxxxxxx","Created":"2017-06-06T13:59:23.5590916Z","Predictions":[{"TagId":"8fe34be4-eeff-495b-a83f-2a74bd25f035","Tag":"instrument","Probability":0.9999934},{"TagId":"bd2281d4-e4ff-48f1-a9ab-d525277479f9","Tag":"violin","Probability":0.9987756},{"TagId":"f33cdfdd-7eb2-47a2-8a30-2162a8f9e7fa","Tag":"oboe","Probability":3.22442238E-22},{"TagId":"b1490919-c0ab-4771-9564-13752bcfb96c","Tag":"tuba","Probability":7.720858E-24}]}'

Du hast das Ergebnis. Es ist ein wenig schwer zu verstehen, aber Sie können sehen, dass die "Wahrscheinlichkeits" -Daten für jedes Tag zurückgegeben werden und die "Wahrscheinlichkeit" des "Violin" -Tags so hoch wie "0,9999934" ist.

Jetzt kann das Programm das Bild erkennen! Sie können Ihre Träume erweitern, indem Sie es in ein IoT-Gerät integrieren oder mit einer Webanwendung wie "Django" kombinieren.

Ich bekomme BadRequestImageFormat!

Nun, dies ist das Ende des Verfahrens, aber als ich dies versuchte, war ich beunruhigt über das Phänomen, dass "BadRequestImageFormat" auftrat und das Ergebnis etwa eine Stunde lang nicht erhalten werden konnte, daher werde ich die Lösung aufschreiben. (Die Ursache ist nicht klar ...)

$ python customvisionapi.py
b'{"Code":"BadRequestImageFormat","Message":""}'

Übrigens, auch wenn ich den Google-Lehrer so gefragt habe, wurde mir nur gesagt, dass ich nichts darüber wusste.

image.png

Hier ist also die Lösung.

Obwohl es sich um den obigen Beispielcode handelt, wird der Code zum Einfügen der Bilddatei in den Anforderungshauptteil im Dokument nur durch Schreiben von "{body}" weggelassen.

conn.request("POST", "/customvision/v1.0/Prediction/{projectId}/image?%s" % params, "{body}", headers)

Zuerst dieser Teil

imagefile = open("./violin_a.jpg ", "rb")
conn.request("POST", "/customvision/v1.0/Prediction/{projectId}/image?%s" % params, imagefile, headers)

Ich habe versucht, die Methode open () zu verwenden, aber es hat nicht funktioniert.

Achten Sie also beim Betrachten von io Modulreferenz und beim Ausprobieren auf Folgendes. Ich fand heraus, dass ich die API ohne Fehler treffen konnte.

__ (Korrigiert am 25. Juni 2017) Was mit PNG-Bildern nicht gut funktionierte, war ein Problem mit der PNG-Datei selbst, mit der ich den Vorgang überprüft habe. Mit demselben Quellcode haben wir bestätigt, dass die Ergebnisse auch mit PNG-Bildern erzielt werden können, daher werden wir sie korrigieren. (/ Richtig) __

Ich kenne die Bedeutung von keinem von ihnen, aber ich werde nur erwähnen, dass es vorerst funktioniert hat. (Im Fall von Python2.x funktionierte es unabhängig von etwas anderem als dem dritten JPG. Was für ein Durcheinander.)

Infolgedessen entspricht das funktionierende Programm den Angaben im Text.

Zusammenfassung

das ist alles. Obwohl jeder Azure-Dienst einige Unannehmlichkeiten mit wenig Informationen aufweist, habe ich den Eindruck, dass er eine Reihe von APIs bereitstellt, die für etwas verwendet werden könnten. Es gibt auch einen freien Rahmen für 20.000 Yen, so dass ich auch in Zukunft verschiedene Dinge ausprobieren werde.

Recommended Posts

[Azure] Klicken Sie mit Python auf Custom Vision Service
Verwenden Sie Python / Django mit dem Windows Azure Cloud Service!
Python-Code zum Trainieren und Testen mit Custom Vision of Cognitive Service
Textextraktion (Lese-API) mit Azure Computer Vision-API (Python3.6)
Klicken Sie mit Python auf die Etherpad-Lite-API
Verwenden Sie benutzerdefinierte Python-Skripte mit StackStorm
[GUI mit Python] PyQt5 -Custom Widget-
Python-Dienst
Verwenden von Python und MeCab mit Azure Databricks
Verwenden Sie den Amazon Simple Notification Service mit Python
Bearbeiten von Azure CosmosDB aus Python Part.2
Infer Custom Vision Modell mit Raspeye
Verwenden Sie Python und MeCab mit Azure-Funktionen
Statistik mit Python
Textextraktion mit GCP Cloud Vision API (Python3.6)
Python mit Go
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Verwenden Sie Python und word2vec (gelernt) mit Azure Databricks
[Azure-Funktionen / Python] Kettenfunktionen mit Warteschlangenspeicherbindung
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
Erstellen Sie mit Azure Custom Vision explosionsartig ein Bildklassifizierungsmodell und implementieren Sie es mit Flask
Lernen Sie die Service Bus-Warteschlange mit Azure SDK for Go kennen (1)
Geben Sie Azure LUIS-Lerntexte einfach mit Python-Skripten ein
Arbeiten mit Azure CosmosDB aus Python (Schnellstart)
Speichereingabe- / Ausgabememo von Python in Azure-Funktionen
E-Mail Hipchat mit Postfix, Fluentd und Python auf Azure
Zip, entpacken mit Python
Django 1.11 wurde mit Python3.6 gestartet
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Python lernen mit ChemTHEATER 03
Sequentielle Suche mit Python
"Objektorientiert" mit Python gelernt
Führen Sie Python mit VBA aus
Umgang mit Yaml mit Python
Serielle Kommunikation mit Python
Python lernen mit ChemTHEATER 05-1
Lerne Python mit ChemTHEATER
Führen Sie prepDE.py mit python3 aus
1.1 Erste Schritte mit Python
Tweets mit Python sammeln
Binarisierung mit OpenCV / Python
3. 3. KI-Programmierung mit Python
Kernel-Methode mit Python
Nicht blockierend mit Python + uWSGI
Scraping mit Python + PhantomJS