Reconhecimento de dígitos no microcontrolador
Olá Giktayms!UPD: Há uma demonstração em vídeo .Como o nome indica, este artigo se concentrará no reconhecimento de números no microcontrolador. Quero fazer uma reserva imediatamente de que o código-fonte não será fornecido neste artigo, a tecnologia ou o algoritmo de reconhecimento serão considerados. Só posso dizer que as idéias de uma abordagem de sistema são usadas. Alguns deles são apresentados em nossos artigos ( aqui , aqui e aqui ). Isso se deve ao fato de que nossa abordagem se baseia na originalidade, mas requer esclarecimentos sobre algumas questões. Alguém pode dizer: "outro artigo sobre programação de microcontroladores". De maneira alguma, a busca por esses projetos não deu nenhum resultado inteligível, exceto neste vídeo. Das discussões nos fóruns, uma coisa é clara: a idéia de obter esse dispositivo (câmera + microcontrolador = resultado de reconhecimento na saída e não apenas uma imagem capturada) chegou a muitos, mas permaneceu sem implementação. Sim, e o reconhecimento, em todas as contas, requer muitos recursos de computação e os microcontroladores não são adequados para isso, em particular, havia declarações sobre o Arduino de que isso é impossível. Se ficou interessante, eu peço gato.
Para que não houvesse perguntas óbvias, responderemos a elas:- Não, este não é um serviço de reconhecimento de imagem.
- Não, este não é o OpenCV
- Não, essas não são redes neurais.
- Uma análise morfológica dos objetos que compõem a figura é usada.
- Sim, o reconhecimento é feito precisamente pelo microcontrolador!
Ideia
Em suma, tudo começou com o desejo de tentar a sua mão e testar suas idéias no reconhecimento de imagens. Durante a discussão, chegamos à conclusão de que podemos fazer com pequeno poder de computação para resolver esse problema. Por razões óbvias, os detalhes dessas discussões não serão descritos.Instalação
Portanto, a tarefa está definida, a implementação é necessária. Sem nos afastarmos dos princípios já estabelecidos ,tomamos o que está à mão. E havia um par de Arduino Uno, um velho mouse óptico e uma unidade de CD. A propósito, um artigo nos levou a usar um sensor óptico de mouse como câmera para aquisição de imagensleia muito tempo atrás, bem, na verdade o resto é sobre material de "mouse". A única coisa que tivemos foi dessoldar o sensor e todo o seu chicote para facilitar o uso, bem como conectar uma lente a ele, que nós "arrancamos" cuidadosamente da unidade de CD. Isso foi necessário para aumentar a distância do objeto à câmera, caso contrário, o número do nosso tamanho não se ajustou e apenas uma pequena parte ficou visível. A propósito, na frente das lentes da unidade de CD, tentamos conectar a ótica da câmera da web, mas de alguma forma não crescemos juntas.
Surgiu então a questão de como posicionar esta câmera sobre o assunto. Aqui, um velho microscópio quebrado que estava ocioso nos ajudou muito. Com respeito, eles removeram o mecanismo para controlar a tabela de assuntos. Esse mecanismo nos permitiu mover a câmera ao longo de apenas dois eixos; então, surgiu a idéia de usar o guia da cabeça do laser na unidade de CD. Tudo isso foi corrigido no gabinete a partir de uma unidade de CD que sofria muito. Como resultado, obtivemos um mecanismo de posicionamento legal da câmera.
Total: temos a chamada câmera, temos um mecanismo de posicionamento, resta colocar um pedaço de papel com uma câmera digital e obter uma imagem da câmera. E então os "problemas" começaram. Como as características do sensor óptico do “mouse” são muito ruins para usá-lo como câmera, eles começaram a improvisar com luz de fundo.
Ficou claro que apenas destacar não dá certo, a intensidade é importante, a direção da luz externa também faz ajustes. Eu tive que incluir outro "arduinka" no meu trabalho para controlar a intensidade da luz de fundo (é claro, poderia ser controlada de maneira diferente, mas depois não apenas a luz de fundo, mas também alternando os números no indicador ). Como resultado, verificou-se que fotografar na luz era muito melhor. E se, por exemplo, você usar um indicador luminoso de sete segmentos como alvo, o sensor o verá perfeitamente. Então, agora temos um indicador e uma faixa com números brancos inundados com um fundo preto como objetos de filmagem.
à esquerda, a imagem em escala de cinza obtida do indicador (obtemos essa imagem do sensor), à direita, binarizada.
Vista geral da montagem completa


Bloco de reconhecimento
Um papel importante em nossa instalação é desempenhado pela chamada unidade de reconhecimento (na imagem acima). Como você pode ver, ele consiste no Arduino Uno e no conhecido transmissor wifi ESP8266 . Eu explico, precisamos de um transmissor wifi para ver o resultado do reconhecimento no tablet. O aplicativo no tablet envia uma solicitação, "arduinka", recebendo uma solicitação, "pega" a imagem do sensor do mouse e a binariza. Após a binarização, ocorre o reconhecimento e, após sua conclusão, é formada uma resposta. Na resposta, enviamos o resultado do reconhecimento e 41 bytes para criar uma imagem binarizada na tela do tablet, por assim dizer, para maior clareza. Se você olhar para trás, no “arduinka” é atribuída uma boa funcionalidade: trabalhar com a câmera e reconhecimento, e trabalhar com esp8266. O que não podia deixar de afetar o trabalho - eu tive que lidar com a falta de memória. Eu nunca pensei que teria que conquistar cada byte de memória.Processo de reconhecimento
Em vez de uma conclusão
Só isso. Ainda há muito trabalho pela frente. E a primeira tarefa: reconhecimento de números (uma sequência de dígitos) gravados por uma câmera "humana" (e não um "sensor de mouse") e transferência da tecnologia desenvolvida para o ESP8266 e uma redução na intensidade da luta por cada byte de memória.Estamos felizes em responder a perguntas. Source: https://habr.com/ru/post/pt397193/
All Articles