Reconnaissance des écolabels à l'aide d'Azure Custom Vision à partir d'une application mobile

Dans cet article, je veux parler de l'utilisation du service Custom Vision pour reconnaître les photos d'étiquettes écologiques à partir d'une application mobile.


CustomVision fait partie des services cognitifs basés sur le cloud d'Azure.
À propos des technologies qui devaient être étudiées, comment travailler avec CustomVision, ce qu'elle est et ce qu'elle permet d'atteindre - plus loin.



La reconnaissance des écolabels est apparue il y a trois ans lorsque ma femme et moi avons commencé à discuter d'une application mobile que son organisation (une ONG dans le domaine de l'écologie) souhaitait réaliser pour diffuser des informations sur les écolabels.


Qu'est-ce que l'éco-étiquetage?


L'éco-étiquetage est un certificat et un logo correspondant émis par des organismes de certification qui vérifient la conformité des produits ou services du fabricant-fournisseur avec certains critères liés au cycle de vie du produit-service et axés sur son respect de l'environnement. Après la certification, le fabricant peut apposer le label écologique sur ses produits.


En outre, l'éco-étiquetage peut être attribué au marquage plastique par sa composition pour simplifier le dimensionnement et le traitement et d'autres signes similaires.


Par exemple, voici un signe:



Processus de sélection des technologies de reconnaissance


Les deux principales caractéristiques de l'application étaient de rechercher des magasins avec des produits respectueux de l'environnement et de reconnaître les écolabels. Si technologiquement tout est relativement simple avec la recherche de magasins, alors avec la reconnaissance ce n'est pas très simple. Le mot est à la mode, mais comment le rendre n'était pas clair. Et j'ai commencé à étudier la question.


Les logos de marquage sont normalisés et sont des objets idéaux pour la reconnaissance - il a pointé le téléphone vers l'image sur l'emballage des marchandises, a pris une photo et l'application indique quel type de signe cela signifie et s'il faut lui faire confiance.


J'ai commencé à réfléchir à la façon de faire la reconnaissance et d'analyser différentes options - j'ai essayé OpenCV avec ses algorithmes de reconnaissance (cascades Haar, SWIFT, correspondance de modèles, etc.) mais la qualité de la reconnaissance n'était pas très bonne - pas plus de 70% avec un ensemble de formation de plusieurs dizaines d'images .


Quelque part, j'ai peut-être mal compris quelque chose et fait quelque chose de mal, mais nous avons également demandé à un autre ami d'enquêter sur ce sujet et il a également déclaré que 70% des cascades de Haar étaient le maximum sur un tel ensemble de données.


Parallèlement à cela, des documents sur divers cadres de réseaux de neurones et l'utilisation réussie de réseaux de neurones pour résoudre de tels problèmes ont commencé à apparaître de plus en plus souvent. Mais partout, des tailles terrifiantes de jeux de données ont flashé (des centaines ou des milliers d'images pour chaque classe), qui ne me sont pas familiers avec Python, TensorFlow, la nécessité de mon backend - tout cela était un peu effrayant.


En tant que développeur .NET, j'ai regardé Accord.NET mais je n'ai pas non plus trouvé rapidement quelque chose qui conviendrait tout de suite.


A cette époque, nous étions occupés à finaliser la demande et à la lancer dans le prod, et j'ai reporté la procédure avec reconnaissance.


Il y a environ un an, je suis tombé sur un article décrivant l'aperçu précoce de Microsoft Custom Vision, un service de classification d'images cloud. Je l'ai testé sur 3 caractères et je l'ai aimé - un portail compréhensible où vous pouvez former et tester le classificateur sans connaissances techniques, former un ensemble de 100 images en 10-20 secondes, la qualité de la classification est supérieure à 90% même sur 30 images de chaque personnage - ce qui est nécessaire.


J'ai partagé la découverte avec ma femme et nous avons commencé à créer une version internationale moins fonctionnelle de l'application, qui ne contient pas d'informations sur les produits et les magasins, mais qui est capable de reconnaître les écolabels.


Passons aux détails techniques d'une application de reconnaissance en cours d'exécution.


Vision personnalisée


CV fait partie des services cognitifs dans Azure. Maintenant, il peut être officiellement publié et il paiera avec un abonnement Azure, bien qu'il soit toujours répertorié dans Aperçu.


En conséquence, comme tout autre produit Azure, CognitiveServices sont affichés et gérés sur le portail Azure.


CV fournit deux API REST, une pour la formation et une pour la prédiction. Je décrirai plus en détail l'interaction avec Prediction


En plus du portail Azure et de l'API, les utilisateurs de CV ont accès au portail customvision.ai, où il est très facile et clair de télécharger des images, de placer des marques dessus, vous pouvez voir des images et des résultats de reconnaissance qui sont passés par l'API.


Le portail et l'API customvision.ai peuvent être démarrés pour être utilisés sans aucune liaison avec Azure - à des fins de test, un projet est créé même sans abonnement Azure. Mais si vous souhaitez créer un projet de production à partir de votre projet de test à l'avenir, il est préférable de le faire immédiatement, sinon nous devions copier manuellement les images du projet de test et le re-marquer en production.


Pour créer un projet dans Azure, vous devez vous y inscrire et créer un abonnement. C'est relativement facile, les problèmes ne peuvent être que lors de la saisie et de la validation des données d'une carte de crédit - cela arrive parfois.


Après l'enregistrement, vous devez créer une instance ComputerVision via le portail Azure



Après avoir créé des ressources dans Azure, elles seront disponibles dans customvision.ai


Sur le portail customvision.ai, vous pouvez télécharger des images et les étiqueter - il peut y avoir plusieurs balises sur une même image, mais sans mettre en évidence les zones. Autrement dit, l'image appartient à plusieurs classes, mais à ce stade du développement du service, il est impossible de sélectionner un fragment spécifique dans l'image et de l'attribuer à la classe.


Après le marquage, vous devez commencer la formation en appuyant sur le bouton Train - la formation d'un modèle de 70 balises et de 3 000 images dure environ 30 secondes.


Les résultats de la formation sont stockés dans l'entité Itération. En fait, Iteration implémente la gestion des versions.


Chaque itération peut être utilisée indépendamment - c'est-à-dire que vous pouvez créer une itération, tester le résultat et le supprimer s'il ne correspond pas ou ne se traduit pas par défaut et remplacer l'itération par défaut actuelle, puis toute la reconnaissance des applications viendra au modèle à partir de cette itération.


La qualité du modèle est affichée sous forme de précision et de rappel (plus de détails ici ) à la fois pour toutes les classes à la fois et séparément.



Voici à quoi ressemble un projet avec des images déjà téléchargées et passées par la formation.



Sur le portail, vous pouvez exécuter la reconnaissance d'image à partir d'un disque ou d'une URL à l'aide du test rapide et tester la reconnaissance par une seule image.


Sur l'onglet Prédictions, vous pouvez voir les résultats de toutes les dernières reconnaissances - les pourcentages de marquage sont affichés directement dans l'image.



La possibilité de voir tous les résultats de la reconnaissance et de les ajouter à l'ensemble de formation en quelques clics de souris aide vraiment - tout le monde peut le faire sans aucune connaissance de l'IA ou de la programmation.


Utilisation de l'API


Custom Vision Service dispose d'une API REST très simple et intuitive pour la formation et la reconnaissance.


Notre application utilise uniquement l'API de reconnaissance et je parlerai de son utilisation


URL pour une reconnaissance de ce type:


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



southcentralus ** - le nom de la région Azure où se trouve le service. Jusqu'à présent, le service n'est disponible que dans la région centre-sud des États-Unis. Cela ne signifie pas que vous pouvez l'utiliser uniquement là-bas! Il vit là-bas - vous pouvez l'utiliser partout où il y a Internet.
{GUID de votre projet} ** - identifiant de votre projet. Vous pouvez le voir sur le portail customvision.ai


Pour la reconnaissance, il est nécessaire d'envoyer l'image via POST. Vous pouvez également envoyer une URL d'image accessible au public et le service la téléchargera vous-même.


De plus, vous devez ajouter l'en-tête «Prediction-Key» aux en-têtes vers lesquels vous pouvez transférer l'une des clés d'accès qui seront émises lors de l'inscription - elles sont disponibles à la fois sur le portail customvision.ai et sur le portail Azure.


Le résultat contient le champ suivant:


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

Où Probabilité indique la probabilité que l'image appartient à la balise spécifiée (classe).


En C #, ça ressemble à ça


  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()); } } 

Comme vous pouvez le voir - absolument rien de compliqué. Toute la magie opère du côté du service.


L'application et certains paramètres sélectionnés.


L'application est assez simple et se compose d'une liste d'écolabels, d'informations sur ce que sont les écolabels, comment ils sont subdivisés et le scanner lui-même.


La partie principale est écrite dans Xamarin.Forms, mais la fenêtre du scanner fonctionne avec la caméra et cela devait être fait en tant que rendus et implémenté pour chaque plate-forme séparément


Le niveau lorsque l'application décide que l'écolabel est reconnu exactement> = 90%, tandis que presque toutes les images sont reconnues si elles sont plus ou moins de qualité acceptable et qu'il n'y a pas d'autres signes sur l'image.
Ce nombre a été dérivé empiriquement - nous avons commencé avec 80, mais nous avons réalisé que 90 réduisaient les faux positifs. Et il y en a beaucoup - de nombreux marquages ​​sont similaires et contiennent des éléments similaires et le jeu de couleurs passe au vert.


Par exemple, ce n'est pas l'image de la plus haute qualité reconnue correctement avec une précision de 91%



B en même temps, cette classe a été formée sur 45 images.


J'espère que l'article a été utile et permettra aux lecteurs intéressés de jeter un œil aux nouveaux outils AI et ML.

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


All Articles