Erkennung von Umweltzeichen mit Azure Custom Vision aus einer mobilen Anwendung

In diesem Artikel möchte ich über die Verwendung des Custom Vision-Dienstes zum Erkennen von Umweltzeichenfotos aus einer mobilen Anwendung sprechen.


CustomVision ist Teil der Cloud-basierten kognitiven Dienste von Azure.
Darüber, welche Technologien untersucht werden mussten, wie mit CustomVision gearbeitet werden sollte, was es ist und was damit erreicht werden kann - weiter.



Die Aufgabe, Umweltzeichen zu erkennen, trat vor drei Jahren auf, als meine Frau und ich anfingen, über eine mobile Anwendung zu diskutieren, die ihre Organisation (eine NGO auf dem Gebiet der Ökologie) zur Verbreitung von Informationen über Umweltzeichen erstellen wollte.


Was ist Umweltzeichen?


Das Umweltzeichen ist ein Zertifikat und ein entsprechendes Logo, das von Zertifizierungsorganisationen ausgestellt wurde, die die Produkte oder Dienstleistungen des Herstellers und Lieferanten auf Übereinstimmung mit bestimmten Kriterien im Zusammenhang mit dem Lebenszyklus der Produktdienstleistung prüfen und sich auf deren Umweltfreundlichkeit konzentrieren. Nach der Zertifizierung kann der Hersteller das Umweltzeichen auf seinen Produkten anbringen.


Das Umweltzeichen kann aufgrund seiner Zusammensetzung auch der Kunststoffkennzeichnung zugeordnet werden, um die Größenbestimmung und Verarbeitung sowie andere ähnliche Zeichen zu vereinfachen.


Hier ist zum Beispiel ein Zeichen:



Auswahlverfahren für Erkennungstechnologien


Die beiden Hauptmerkmale der Anwendung waren die Suche nach Geschäften mit umweltfreundlichen Produkten und die Erkennung von Umweltzeichen. Wenn technologisch alles bei der Suche nach Geschäften relativ einfach ist, dann ist es bei der Erkennung nicht sehr einfach. Das Wort ist in Mode, aber wie man es macht, war nicht klar. Und ich fing an, das Thema zu studieren.


Die Markierungslogos sind standardisiert und ideale Erkennungsobjekte - er richtete das Telefon auf das Bild auf der Warenverpackung, machte ein Foto und die Anwendung gibt an, welche Art von Zeichen es bedeutet und ob es vertrauenswürdig sein sollte.


Ich begann darüber nachzudenken, wie man verschiedene Optionen erkennt und analysiert - ich habe OpenCV mit seinen Erkennungsalgorithmen (Haarkaskaden, SWIFT, Vorlagenabgleich usw.) ausprobiert, aber die Erkennungsqualität war nicht sehr gut - nicht mehr als 70% mit einem Trainingssatz von mehreren zehn Bildern .


Vielleicht habe ich irgendwo etwas falsch verstanden und etwas falsch gemacht, aber wir haben auch einen anderen Freund gebeten, dieses Thema zu untersuchen, und er sagte auch, dass 70% der Haar-Kaskaden das Maximum in einem solchen Datensatz sind.


Parallel dazu tauchten immer häufiger Materialien über verschiedene neuronale Netze und den erfolgreichen Einsatz neuronaler Netze zur Lösung solcher Probleme auf. Aber überall blitzten einige erschreckende Größen von Datensätzen auf (Hunderte oder Tausende von Bildern für jede Klasse), die mir Python, TensorFlow und die Notwendigkeit meines Backends nicht vertraut waren - all dies war ein wenig beängstigend.


Als .NET-Entwickler habe ich mir Accord.NET angesehen, aber auch nicht schnell etwas gefunden, das sofort passt.


Zu diesem Zeitpunkt waren wir damit beschäftigt, den Antrag fertigzustellen und im Produkt zu starten, und ich habe das Verfahren mit Anerkennung verschoben.


Vor ungefähr einem Jahr stieß ich auf einen Artikel, in dem die frühe Vorschau von Microsoft Custom Vision, ein Cloud-Bildklassifizierungsdienst, beschrieben wurde. Ich habe es an 3 Zeichen getestet und es hat mir gefallen - ein verständliches Portal, auf dem Sie den Klassifizierer ohne technisches Wissen trainieren und testen können. In 10 bis 20 Sekunden werden 100 Bilder trainiert. Die Qualität der Klassifizierung liegt sogar bei 30 Bildern jedes Zeichens über 90%. was benötigt wird.


Ich teilte den Fund mit meiner Frau und wir begannen, eine weniger funktionierende internationale Version der Anwendung zu erstellen, die keine Informationen über Waren und Geschäfte enthält, aber Umweltzeichen erkennen kann.


Kommen wir zu den technischen Details einer laufenden Erkennungsanwendung.


Kundenspezifische Vision


CV ist Teil von Cognitive Services in Azure. Jetzt kann es offiziell ausgestellt werden und wird mit einem Azure-Abonnement bezahlt, obwohl es immer noch in der Vorschau aufgeführt ist.


Dementsprechend werden CognitiveServices wie jedes andere Azure-Produkt im Azure-Portal angezeigt und verwaltet.


CV bietet zwei REST-APIs, eine für das Training und eine für die Vorhersage. Im Detail werde ich die Interaktion mit der Vorhersage weiter beschreiben


Zusätzlich zum Azure-Portal und der API haben CV-Benutzer Zugriff auf das Portal customvision.ai, in dem sie sehr einfach und visuell Bilder hochladen, Markierungen darauf platzieren und Bilder und Erkennungsergebnisse anzeigen können, die über die API übertragen wurden.


Das customvision.ai-Portal und die API können ohne Bindung an Azure gestartet werden. Zu Testzwecken wird ein Projekt auch ohne Azure-Abonnement erstellt. Wenn Sie jedoch in Zukunft ein Produktionsprojekt aus Ihrem Testprojekt erstellen möchten, ist es besser, dies sofort zu tun. Andernfalls mussten wir die Bilder aus dem Testprojekt manuell kopieren und in der Produktion neu markieren.


Um ein Projekt in Azure zu erstellen, müssen Sie sich dort registrieren und ein Abonnement erstellen. Dies ist relativ einfach, Probleme können nur bei der Eingabe und Validierung von Daten von einer Kreditkarte auftreten - manchmal passiert dies.


Nach der Registrierung müssen Sie eine ComputerVision-Instanz über das Azure-Portal erstellen



Nach dem Erstellen von Ressourcen in Azure sind diese in customvision.ai verfügbar


Auf dem Portal customvision.ai können Sie Bilder hochladen und mit Tags versehen. Ein Bild kann mehrere Tags enthalten, ohne jedoch Bereiche hervorzuheben. Das heißt, das Bild gehört mehreren Klassen an, aber in dieser Phase der Entwicklung des Dienstes ist es unmöglich, ein bestimmtes Fragment im Bild auszuwählen und es der Klasse zuzuweisen.


Nach dem Markieren müssen Sie das Training durch Drücken der Train-Taste starten. Das Training eines Modells mit 70 Tags und 3.000 Bildern dauert etwa 30 Sekunden.


Die Trainingsergebnisse werden in der Iterationsentität gespeichert. Tatsächlich implementiert Iteration die Versionierung.


Jede Iteration kann unabhängig verwendet werden. Das heißt, Sie können eine Iteration erstellen, das Ergebnis testen und löschen, wenn es nicht passt oder in eine Standardübersetzung übersetzt wird, und die aktuelle Standarditeration ersetzen. Anschließend wird die gesamte Erkennung von Anwendungen aus dieser Iteration in das Modell übernommen.


Die Qualität des Modells wird in Form von Präzision und Rückruf (weitere Details hier ) sowohl für alle Klassen gleichzeitig als auch separat angezeigt.



So sieht ein Projekt mit Bildern aus, die bereits hochgeladen und durch Schulungen geleitet wurden.



Auf dem Portal können Sie die Bilderkennung mithilfe des Schnelltests von einer Festplatte oder URL ausführen und die Erkennung anhand eines einzelnen Bildes testen.


Auf der Registerkarte Vorhersagen können Sie die Ergebnisse aller neuesten Erkennungen anzeigen. Die Prozentsätze der Markierungen werden direkt im Bild angezeigt.



Die Möglichkeit, alle Erkennungsergebnisse mit nur wenigen Mausklicks anzuzeigen und zum Trainingssatz hinzuzufügen, hilft sehr - jeder kann dies ohne KI- oder Programmierkenntnisse tun.


API-Nutzung


Custom Vision Service verfügt über eine sehr einfache und intuitive REST-API für Schulung und Erkennung.


Unsere Anwendung verwendet nur die Erkennungs-API und ich werde über ihre Verwendung sprechen


URL für die Anerkennung dieser Art:


https://southcentralus.api.cognitive.microsoft.com/customvision/v2.0/Prediction/{Your project GUID} / image


wo
southcentralus ** - Der Name der Azure-Region, in der sich der Dienst befindet. Bisher ist der Service nur in der Region South Central US verfügbar. Dies bedeutet nicht, dass Sie es nur dort verwenden können! Er lebt einfach dort - Sie können es von jedem Ort aus nutzen, an dem es Internet gibt.
{Ihre Projekt-GUID} ** - Kennung Ihres Projekts. Sie können es auf dem Portal customvision.ai sehen


Zur Erkennung muss das Bild per POST gesendet werden. Sie können auch eine öffentlich zugängliche Bild-URL senden, die der Dienst selbst herunterlädt.


Darüber hinaus müssen Sie den Headern, in die Sie einen der bei der Registrierung ausgestellten Zugriffsschlüssel übertragen können, den Header "Prediction-Key" hinzufügen. Diese sind sowohl im customvision.ai-Portal als auch im Azure-Portal verfügbar.


Das Ergebnis enthält das folgende Feld:


"Predictions":[ {"TagId":"35ac2ad0-e3ef-4e60-b81f-052a1057a1ca","Tag":"dog","Probability":0.102716163}, {"TagId":"28e1a872-3776-434c-8cf0-b612dd1a953c","Tag":"cat","Probability":0.02037274} ] 

Wobei Wahrscheinlichkeit die Wahrscheinlichkeit angibt, dass das Bild zum angegebenen Tag (Klasse) gehört.


In C # sieht es so aus


  var client = new HttpClient(); client.DefaultRequestHeaders.Add("Prediction-Key", "{Acess key}"); string url = "https://southcentralus.api.cognitive.microsoft.com/customvision/v2.0/Prediction/{Your project GUID}/image"; HttpResponseMessage response; List<RecognitionResult> recognitions = new List<RecognitionResult>(); using (var content = new ByteArrayContent(imageBytes)) { content.Headers.ContentType = new MediaTypeHeaderValue ("application/octet-stream"); response = await client.PostAsync(url, content); if (response.IsSuccessStatusCode) { string strRes = await response.Content.ReadAsStringAsync(); dynamic res = (dynamic) JsonConvert.DeserializeObject(strRes); foreach (var pr in res.predictions) { recognitions.Add( new RecognitionResult() { Tag = pr.tagName, RecognPercent = pr.probability }); } } else { Debug.WriteLine( "Non successful response. " + response.ToString()); } } 

Wie Sie sehen können - absolut nichts kompliziertes. Die ganze Magie geschieht auf der Serviceseite.


Die Anwendung und einige ausgewählte Parameter.


Die Anwendung ist recht einfach und besteht aus einer Liste von Umweltzeichen, Informationen darüber, was Umweltzeichen sind, wie sie unterteilt sind und dem Scanner selbst.


Der Hauptteil ist in Xamarin.Forms geschrieben, aber das Scannerfenster funktioniert mit der Kamera und musste als Rendering ausgeführt und für jede Plattform separat implementiert werden


Der Grad, in dem die Anwendung entscheidet, dass das Umweltzeichen genau> = 90% erkannt wird, während fast alle Bilder erkannt werden, wenn sie mehr oder weniger von akzeptabler Qualität sind und keine anderen Zeichen im Bild vorhanden sind.
Diese Zahl wurde empirisch abgeleitet - wir haben mit 80 begonnen, aber festgestellt, dass 90 falsch positive Ergebnisse reduziert. Und es gibt ziemlich viele davon - viele Markierungen sind ähnlich und enthalten ähnliche Elemente, und das Farbschema wird auf Grün verschoben.


Dies ist beispielsweise nicht das Bild mit der höchsten Qualität, das mit einer Genauigkeit von 91% korrekt erkannt wurde



B gleichzeitig wurde diese Klasse an 45 Bildern trainiert.


Ich hoffe, der Artikel war nützlich und ermöglicht interessierten Lesern, einen Blick auf die neuen AI- und ML-Tools zu werfen.

Source: https://habr.com/ru/post/de424379/


All Articles