"Custom Vision Service" ist ein Bilderkennungsdienst, der als eines der Produkte von Microsoft Azure bereitgestellt wird.
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.
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.
Der allgemeine Ablauf der Nutzung dieses Dienstes ist
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.
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.
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.
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.
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.
buffering = 0
in das dritte Argument von open ()
jpg
Bilder anstelle von ~~ png
(!) ~~__ (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.
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