En este artículo quiero hablar sobre el uso del servicio Custom Vision para reconocer fotos de etiquetas ecológicas desde una aplicación móvil.
CustomVision es parte de los servicios cognitivos basados en la nube de Azure.
Acerca de qué tecnologías tuvieron que estudiarse, cómo trabajar con CustomVision, qué es y qué permite lograr, aún más.

La tarea de reconocer las etiquetas ecológicas apareció hace tres años cuando mi esposa y yo comenzamos a discutir una aplicación móvil que su organización (una ONG en el campo de la ecología) quería hacer para difundir información sobre etiquetas ecológicas.
¿Qué es el etiquetado ecológico?
El etiquetado ecológico es un certificado y el logotipo correspondiente emitido por organizaciones de certificación que verifican que los productos o servicios del fabricante-proveedor cumplan con ciertos criterios relacionados con el ciclo de vida del servicio del producto y se centren en su respeto al medio ambiente. Después de la certificación, el fabricante puede colocar la etiqueta ecológica en sus productos.
Además, el etiquetado ecológico se puede atribuir a las marcas de plástico por su composición para simplificar el tamaño y el procesamiento y otros signos similares.
Por ejemplo, aquí hay una señal:

Proceso de selección de tecnología de reconocimiento
Las dos características principales de la aplicación deberían haber sido la búsqueda de tiendas con productos ecológicos y el reconocimiento de etiquetas ecológicas. Si tecnológicamente todo es relativamente simple con la búsqueda de tiendas, entonces con el reconocimiento no es muy simple. La palabra está de moda, pero cómo hacerlo no estaba claro. Y comencé a estudiar el tema.
Los logotipos de marcado están estandarizados y son objetos ideales para el reconocimiento: señaló el teléfono con la imagen en el paquete de productos, tomó una foto y la aplicación muestra qué tipo de signo significa y si se debe confiar en él.
Comencé a pensar en cómo hacer el reconocimiento y analizar diferentes opciones: probé OpenCV con sus algoritmos de reconocimiento (cascadas Haar, SWIFT, coincidencia de plantillas, etc.) pero la calidad del reconocimiento no fue muy buena: no más del 70% con un conjunto de entrenamiento de varias decenas de imágenes .
Tal vez en algún lugar no entendí algo e hice algo mal, pero también le pedimos a otro amigo que investigara este tema y también dijo que el 70% de las cascadas de Haar es el máximo en ese conjunto de datos.
En paralelo con esto, los materiales sobre diversos marcos de redes neuronales y el uso exitoso de redes neuronales para resolver tales problemas comenzaron a aparecer cada vez con más frecuencia. Pero en todas partes, aparecieron algunos tamaños de conjuntos de datos (cientos o miles de imágenes para cada clase), Python, TensorFlow, la necesidad de mi backend, todo esto era un poco aterrador.
Como desarrollador de .NET, miré a Accord.NET pero tampoco encontré rápidamente algo que encajara de inmediato.
En este momento, estábamos ocupados finalizando la aplicación y lanzándola en el producto, y pospuse los procedimientos con reconocimiento.
Hace aproximadamente un año, me encontré con un artículo que describe la vista previa temprana de Microsoft, Custom Vision, un servicio de clasificación de imágenes en la nube. Lo probé en 3 caracteres y me gustó: un portal comprensible donde puedes entrenar y probar el clasificador sin conocimiento técnico, entrenando un conjunto de 100 imágenes en 10-20 segundos, la calidad de la clasificación es superior al 90% incluso en 30 imágenes de cada personaje. lo que se necesita
Compartí el hallazgo con mi esposa y comenzamos a hacer una versión internacional menos funcional de la aplicación, que no contiene información sobre productos y tiendas, pero es capaz de reconocer etiquetas ecológicas.
Pasemos a los detalles técnicos de una aplicación de reconocimiento en ejecución.
Visión personalizada
CV es parte de los Servicios Cognitivos en Azure. Ahora se puede emitir oficialmente y pagará con una suscripción de Azure, aunque todavía aparece en la Vista previa.
En consecuencia, como cualquier otro producto de Azure, CognitiveServices se muestran y administran en el portal de Azure.
CV proporciona dos API REST, una para entrenamiento y otra para predicción. Con más detalle describiré la interacción con Prediction más adelante
Además del portal de Azure y la API, los usuarios de CV tienen acceso al portal customvision.ai, donde es muy fácil y claro cargar imágenes, colocar marcas en ellas y ver imágenes y resultados de reconocimiento que pasaron por la API.
El portal y la API customvision.ai se pueden comenzar a usar sin ningún vínculo con Azure; para fines de prueba, se crea un proyecto incluso sin la suscripción de Azure. Pero si desea hacer un proyecto de producción a partir de su proyecto de prueba en el futuro, es mejor hacerlo de inmediato, de lo contrario, tuvimos que copiar manualmente las imágenes del proyecto de prueba y volver a marcarlo en producción.
Para realizar un proyecto en Azure, debe registrarse allí y crear una suscripción. Esto es relativamente fácil, los problemas solo pueden estar relacionados con la entrada y validación de datos de una tarjeta de crédito, a veces esto sucede.
Después del registro, debe crear una instancia de ComputerVision a través del portal de Azure

Después de crear recursos en Azure, estarán disponibles en customvision.ai
En el portal customvision.ai puede cargar imágenes y etiquetarlas; puede haber varias etiquetas en una sola imagen, pero sin resaltar áreas. Es decir, la imagen pertenece a varias clases, pero en esta etapa del desarrollo del servicio, es imposible seleccionar un fragmento específico en la imagen y asignarlo a la clase.
Después de marcar, debe comenzar el entrenamiento presionando el botón Train: el entrenamiento de un modelo de 70 etiquetas y 3 mil imágenes dura aproximadamente 30 segundos.
Los resultados de la capacitación se almacenan en la entidad de iteración. De hecho, Iteration implementa el control de versiones.
Cada iteración se puede usar de forma independiente, es decir, puede crear la iteración, probar el resultado y eliminarlo si no se ajusta o no se traduce en predeterminado y reemplazar la iteración predeterminada actual y luego todo el reconocimiento de las aplicaciones llegará al modelo desde esta iteración.
La calidad del modelo se muestra en forma de precisión y recuperación (más detalles aquí ) tanto para todas las clases a la vez como por separado.

Así es como se ve un proyecto con imágenes ya cargadas y pasadas a través de la capacitación.

En el portal, puede ejecutar el reconocimiento de imágenes desde un disco o URL utilizando la Prueba rápida y el reconocimiento de prueba por una sola imagen.
En la pestaña Predicciones, puede ver los resultados de todos los últimos reconocimientos: los porcentajes de etiquetado se muestran directamente en la imagen.

La capacidad de ver todos los resultados de reconocimiento y agregarlos al conjunto de entrenamiento con solo un par de clics del mouse ayuda mucho, cualquiera puede hacer esto sin ningún conocimiento de IA o programación.
Uso de la API
Custom Vision Service tiene una API REST muy simple e intuitiva para capacitación y reconocimiento.
Nuestra aplicación usa solo la API de reconocimiento y hablaré sobre su uso
Url para reconocimiento de este tipo:
https://southcentralus.api.cognitive.microsoft.com/customvision/v2.0/Prediction/{Su proyecto GUID} / image
donde
southcentralus ** : el nombre de la región de Azure donde se encuentra el servicio. Hasta ahora, el servicio solo está disponible en la región centro sur de los EE. UU. ¡Esto no significa que solo allí pueda usarlo! Él solo vive allí, puedes usarlo desde cualquier lugar donde haya Internet.
{Tu proyecto GUID} ** - identificador de tu proyecto. Puedes verlo en el portal customvision.ai
Para el reconocimiento es necesario enviar la imagen a través de POST. También puede enviar una URL de imagen de acceso público y el servicio la descargará usted mismo.
Además, debe agregar el encabezado “Clave de predicción” a los encabezados a los que puede transferir una de las claves de acceso que se emitirán al registrarse; están disponibles tanto en el portal customvision.ai como en el portal de Azure.
El resultado contiene el siguiente campo:
"Predictions":[ {"TagId":"35ac2ad0-e3ef-4e60-b81f-052a1057a1ca","Tag":"dog","Probability":0.102716163}, {"TagId":"28e1a872-3776-434c-8cf0-b612dd1a953c","Tag":"cat","Probability":0.02037274} ]
Donde Probabilidad indica la probabilidad de que la imagen pertenezca a la etiqueta (clase) especificada.
En C #, se ve así
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()); } }
Como puede ver, absolutamente nada complicado. Toda la magia ocurre en el lado del servicio.
La aplicación y algunos parámetros seleccionados.
La aplicación es bastante simple y consiste en una lista de etiquetas ecológicas, información sobre qué son las etiquetas ecológicas, cómo se subdividen y el escáner mismo.
La parte principal está escrita en Xamarin.Forms, pero la ventana del escáner funciona con la cámara y tuvo que hacerse como renders e implementarse para cada plataforma por separado.
El nivel cuando la aplicación decide que la etiqueta ecológica se reconoce exactamente> = 90%, mientras que casi todas las imágenes se reconocen si tienen una calidad más o menos aceptable y no hay otros signos en la imagen.
Este número se obtuvo empíricamente: comenzamos con 80, pero nos dimos cuenta de que 90 reduce los falsos positivos. Y hay muchos de ellos: muchas marcas son similares y contienen elementos similares y el esquema de color se cambia a verde.
Por ejemplo, esta no es la imagen de más alta calidad reconocida correctamente con una precisión del 91%

B al mismo tiempo, esta clase fue entrenada en 45 imágenes.
Espero que el artículo haya sido útil y permita a los lectores interesados echar un vistazo a las nuevas herramientas de IA y ML.