Reconhecimento de rótulos ecológicos usando o Azure Custom Vision de um aplicativo móvel

Neste artigo, quero falar sobre o uso do serviço Custom Vision para reconhecer fotos com rótulo ecológico de um aplicativo móvel.


O CustomVision faz parte dos Serviços Cognitivos baseados em nuvem do Azure.
Sobre quais tecnologias precisavam ser estudadas, como trabalhar com o CustomVision, o que é e o que permite alcançar - além disso.



A tarefa de reconhecer rótulos ecológicos apareceu três anos atrás, quando minha esposa e eu começamos a discutir um aplicativo móvel que sua organização (uma ONG no campo da ecologia) queria fazer para divulgar informações sobre rótulos ecológicos.


O que é rotulagem ecológica?


A rotulagem ecológica é um certificado e o logotipo correspondente emitido por organizações de certificação que verificam os produtos ou serviços do fabricante-fornecedor quanto à conformidade com certos critérios relacionados ao ciclo de vida do produto-serviço e focados em sua preocupação com o meio ambiente. Após a certificação, o fabricante pode colocar o rótulo ecológico em seus produtos.


Além disso, a rotulagem ecológica pode ser atribuída à marcação plástica por sua composição para simplificar o dimensionamento e o processamento e outros sinais semelhantes.


Por exemplo, aqui está um sinal:



Processo de seleção de tecnologia de reconhecimento


As duas principais características do aplicativo deveriam ter sido a busca de lojas com produtos ecológicos e o reconhecimento de rótulos ecológicos. Se tecnologicamente tudo é relativamente simples com a busca por lojas, então com o reconhecimento não é muito simples. A palavra está na moda, mas como fazê-la não estava clara. E comecei a estudar a questão.


Os logotipos de marcação são padronizados e são objetos ideais para reconhecimento - ele apontou o telefone para a imagem na embalagem, tirou uma foto e o aplicativo fornece que tipo de sinal significa e se deve ser confiável.


Comecei a pensar em como fazer reconhecimento e analisar opções diferentes - experimentei o OpenCV com seus algoritmos de reconhecimento (cascatas Haar, SWIFT, correspondência de modelos etc.), mas a qualidade do reconhecimento não era muito boa - não mais que 70% com um conjunto de treinamento com várias dezenas de imagens .


Talvez em algum lugar eu tenha entendido algo errado e feito algo errado, mas também pedimos a outro amigo que investigasse esse tópico e ele também disse que 70% das cascatas de Haar é o máximo nesse conjunto de dados.


Paralelamente, materiais sobre várias estruturas de redes neurais e o uso bem-sucedido de redes neurais para resolver esses problemas começaram a aparecer cada vez mais. Mas em todo lugar, alguns tamanhos assustadores de conjuntos de dados brilhavam (centenas ou milhares de imagens para cada classe), desconhecidos para mim, Python, TensorFlow, a necessidade do meu back-end - tudo isso era um pouco assustador.


Como desenvolvedor .NET, olhei para o Accord.NET, mas também não encontrei rapidamente algo que caberia imediatamente.


Nesse momento, estávamos ocupados finalizando o aplicativo e lançando-o no prod, e adiei o processo com reconhecimento.


Há cerca de um ano, deparei-me com um artigo descrevendo a prévia da Microsoft, Custom Vision, um serviço de classificação de imagens em nuvem. Eu testei em 3 caracteres e gostei - um portal compreensível onde você pode treinar e testar o classificador sem conhecimento técnico, treinando um conjunto de 100 imagens em 10 a 20 segundos, a qualidade da classificação é superior a 90%, mesmo em 30 imagens de cada personagem - o que é necessário.


Compartilhei a descoberta com minha esposa e começamos a criar uma versão internacional menos funcional do aplicativo, que não contém informações sobre mercadorias e lojas, mas é capaz de reconhecer rótulos ecológicos.


Vamos passar para os detalhes técnicos de um aplicativo de reconhecimento em execução.


Visão personalizada


O CV faz parte dos Serviços Cognitivos no Azure. Agora, ele pode ser emitido oficialmente e pagará com uma assinatura do Azure, embora ainda esteja listada na Visualização.


Assim, como qualquer outro produto do Azure, os Serviços Cognitivos são exibidos e gerenciados no portal do Azure.


O CV fornece duas APIs REST, uma para treinamento e outra para previsão. Mais detalhadamente, descreverei a interação com a Predição


Além do portal do Azure e da API, os usuários do CV têm acesso ao portal customvision.ai, onde é muito fácil e claro fazer upload de imagens, colocar marcas nelas e ver fotos e resultados de reconhecimento que passaram pela API.


O portal e a API customvision.ai podem ser iniciados para uso sem nenhuma ligação ao Azure - para fins de teste, um projeto é criado mesmo sem a Assinatura do Azure. Mas se você deseja criar um projeto de produção a partir do seu projeto de teste no futuro, é melhor fazê-lo imediatamente, caso contrário, tivemos que copiar manualmente as fotos do projeto de teste e marcá-las novamente na produção.


Para criar um projeto no Azure, você precisa se registrar lá e criar uma assinatura. Isso é relativamente fácil, os problemas só podem ocorrer com a entrada e validação de dados de um cartão de crédito - às vezes isso acontece.


Após o registro, você precisa criar uma instância da ComputerVision através do portal do Azure



Depois de criar recursos no Azure, eles estarão disponíveis em customvision.ai


No portal customvision.ai, você pode fazer upload de imagens e marcá-las - pode haver várias tags em uma única imagem, mas sem destacar áreas. Ou seja, a imagem pertence a várias classes, mas nesta fase do desenvolvimento do serviço, é impossível selecionar um fragmento específico na imagem e atribuí-lo à classe.


Após marcar, você precisa iniciar o treinamento pressionando o botão Treinar - o treinamento de um modelo de 70 tags e 3.000 imagens dura cerca de 30 segundos.


Os resultados do treinamento são armazenados na entidade Iteration. De fato, a Iteração implementa o controle de versão.


Cada iteração pode ser usada independentemente - ou seja, você pode criar a iteração, testar o resultado e excluí-lo se ele não se ajustar ou transferir para o padrão e substituir a iteração padrão atual e, em seguida, todo o reconhecimento dos aplicativos chegará ao modelo a partir dessa iteração.


A qualidade do modelo é exibida na forma Precision e Recall (mais detalhes aqui ), para todas as classes de uma vez e separadamente.



É assim que um projeto se parece com imagens já carregadas e passadas por treinamento.



No portal, você pode executar o reconhecimento de imagem de um disco ou URL usando o Teste Rápido e testar o reconhecimento por uma única imagem.


Na guia Previsões, você pode ver os resultados de todos os reconhecimentos mais recentes - as porcentagens de marcação são exibidas diretamente na imagem.



A capacidade de ver todos os resultados de reconhecimento e adicioná-los ao conjunto de treinamento com apenas alguns cliques do mouse ajuda muito - qualquer um pode fazer isso sem nenhum conhecimento de IA ou programação.


Uso da API


O Custom Vision Service possui uma API REST muito simples e intuitiva para treinamento e reconhecimento.


Nosso aplicativo usa apenas a API de reconhecimento e falarei sobre seu uso


URL para reconhecimento desse tipo:


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


onde
southcentralus ** - o nome da região do Azure em que o serviço está localizado. Até o momento, o serviço está disponível apenas na região Centro-Sul dos EUA. Isso não significa que somente lá você pode usá-lo! Ele simplesmente mora lá - você pode usá-lo de qualquer lugar onde haja Internet.
{GUID do seu projeto} ** - identificador do seu projeto. Você pode vê-lo no portal customvision.ai


Para reconhecimento, é necessário enviar a imagem via POST. Você também pode enviar um URL de imagem acessível ao público e o serviço fará o download você mesmo.


Além disso, você precisa adicionar o cabeçalho “Chave de Previsão” aos Cabeçalhos para os quais você pode transferir uma das Chaves de Acesso que serão emitidas no registro - elas estão disponíveis no portal customvision.ai e no portal do Azure.


O resultado contém o seguinte campo:


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

Onde Probability indica a probabilidade de a imagem pertencer à tag especificada (classe).


Em C #, parece com isso


  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 você pode ver - absolutamente nada complicado. Toda a mágica acontece no lado do serviço.


A aplicação e alguns parâmetros selecionados.


O aplicativo é bastante simples e consiste em uma lista de rótulos ecológicos, informações sobre o que são rótulos ecológicos, como são subdivididos e o próprio scanner.


A parte principal está escrita no Xamarin.Forms, mas a janela do scanner funciona com a câmera e tinha que ser feita conforme renderizada e implementada para cada plataforma separadamente


O nível em que o aplicativo decide que o rótulo ecológico é reconhecido exatamente> = 90%, enquanto quase todas as imagens são reconhecidas se tiverem qualidade mais ou menos aceitável e não houver outros sinais na imagem.
Esse número foi derivado empiricamente - começamos com 80, mas percebemos que 90 reduz falsos positivos. E existem muitas delas - muitas marcações são semelhantes e contêm elementos semelhantes, e o esquema de cores passa para verde.


Por exemplo, esta não é a imagem da mais alta qualidade reconhecida corretamente com uma precisão de 91%



B ao mesmo tempo, essa aula foi treinada em 45 imagens.


Espero que o artigo tenha sido útil e permita que os leitores interessados ​​dêem uma olhada nas novas ferramentas de IA e ML.

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


All Articles