Danny Krastev, Mirabbos Umarov, Ekaterina Menshenina, Universidade ITMO, Sistemas de comunicação da informação, Ciência da computação. 2019

Resumo
Devido ao aumento interminável no volume de veículos em torno de nossas vidas diárias, o Reconhecimento Automático de Chapa de Matrícula (ANPR) tornou-se uma solução em evolução para gerenciar e monitorar veículos em todo o mundo para impor regras e impedir atividades criminosas, como violação de estacionamento, sinal vermelho violação, excesso de velocidade e roubo de veículo. Embora já exista uma variedade de métodos e bibliotecas públicas e privadas que foram desenvolvidas e usadas para obter o reconhecimento automático de números de matrículas de carros em todo o mundo, não houve muito foco em avançar na solução ANPR de plataforma cruzada que suporta todas as placas de veículos em todo o mundo. Este artigo apresenta o projeto Plate Vision, um aplicativo móvel e da Web construído em Ruby on Rails e React Native, que tem como objetivo servir como uma plataforma ANPR alternativa que suporta a detecção de todas as placas de automóveis em todo o mundo, utilizando vários OCR (reconhecimento de caracteres ópticos de código aberto) bibliotecas e otimizações de eficiência.
Palavras-chave e frases: rubi, trilhos, reagir nativo, reconhecimento de placas, extração de região de placas, reconhecimento óptico de caracteres (OCR), ANPR.
1. Introdução
Como a principal funcionalidade e desempenho do reconhecimento automático de matrículas (ANPR) é baseada em anos de pesquisa que utiliza combinações distintas de técnicas de reconhecimento óptico de caracteres (OCR) nas imagens para encontrar e ler as matrículas dos veículos e uma variedade de Como já existem soluções, não há necessidade de passar pelo desenvolvimento e treinamento estranhos necessários para recriar completamente a funcionalidade do OCR; portanto, o objetivo deste artigo é apresentar um exemplo de como combinar e otimizar as soluções existentes de OCR e ANPR em para desenvolver o Plate Vision, uma plataforma ANPR exclusiva que pode funcionar em qualquer dispositivo usando qualquer câmera, veículo, local.
O restante do trabalho segue da seguinte maneira. A seção 2 apresenta algumas soluções e dependências existentes. A Seção 3 descreve o back-end, o front-end e a integração nativa do Rails. A Seção 4 explica a otimização e teste da ANPR, bem como como o Plate Vision foi construído, hospedado e mantido online, enquanto a Seção 5 conclui o artigo.
2. Dependências de OCR
Embora muitos dos gigantes da tecnologia corporativa como Google, Amazon, Microsoft e IBM forneçam suas próprias APIs de visão em nuvem, capazes de analisar imagens e marcar certos objetos e recursos usando algoritmos que levaram anos de seus pesquisadores para desenvolver e treinar, eles são soluções pagas, que podem rapidamente se tornar caras ao tentar escalar ou até demonstrar uma plataforma como a ANPR para qualquer quantidade de usuários, portanto, o uso de estruturas e bibliotecas de código aberto não é apenas uma solução economicamente melhor, mas também uma que fornece a capacidade necessária para modificar e controlar os algoritmos de detecção ANPR.
De todas as várias soluções existentes atualmente, o OpenALPR é o único de código aberto e oferece a capacidade de modificar e controlar seus algoritmos de detecção de ANPR para países específicos, motivo pelo qual foi escolhido para ser usado no Plate Vision.
O OpenALPR também possui 2 dependências principais, OpenCV e Tesseract OCR, que servem como base para a execução do ANPR. É melhor manter a quantidade de dependências que uma plataforma tenha no mínimo para obter o melhor desempenho, no entanto, com qualquer projeto que integre OCR personalizado, é provável que existam várias dependências grandes [1].
3. Plataforma
A plataforma Plate Vision é construída usando as estruturas Ruby on Rails e React Native e, portanto, é composta por 2 aplicativos individuais, o aplicativo móvel React Native e o aplicativo Rails, que serve como site principal e back-end do aplicativo.
O Rails é um model - view - controller (MVC) e uma estrutura de aplicativo da Web do lado do servidor, escrita em Ruby, que fornece estruturas padrão para um banco de dados, um serviço da Web e páginas da Web. Ele incentiva e facilita o uso de padrões da web, como JSON ou XML para transferência de dados, e HTML, CSS e JavaScript para exibição e interface do usuário [2].
O React Native é uma estrutura de aplicativo móvel de código aberto criada pelo Facebook que permite escrever código JavaScript que pode ser convertido e interpretado em código nativo, permitindo assim a fácil compilação de aplicativos de plataforma cruzada para Android, iOS e UWP usando um único idioma [ 3]
OpenALPR é uma biblioteca de reconhecimento automático de placas de licença de código aberto escrita em C ++ com ligações em C #, Java, Node.js e Python. A biblioteca analisa imagens e fluxos de vídeo para identificar placas. A saída é a representação em texto de qualquer caractere de placa [1].
3.1 back-end
O back-end da plataforma é composto por vários controladores de gems (bibliotecas) e trilhos que lidam com as solicitações do site e do aplicativo móvel, respectivamente.
A seguir, lista e descreve as gemas usadas no back-end:
- ALPR - usado para chamar comandos openALPR
- Devise - é uma solução de autenticação flexível para Rails baseada em Warden
- Criação de token auth - autenticação simples, com vários clientes e segura para o Rails.
- Rmagick - uma interface entre a linguagem de programação Ruby e a biblioteca de processamento de imagens ImageMagick
- Rolify - biblioteca de funções simples, sem nenhuma aplicação de autorização que suporte o escopo no objeto de recurso.
A seguir, lista e descreve os controladores de aplicativos do site:
- Controlador de aplicativo - é o principal controlador que contém os métodos, que podem ser executados em todo o site.
- Controlador público - é um controlador herdado (formulário Controlador de aplicativo) que lida com solicitações das páginas públicas no site.
- Controlador de usuários - manipula solicitações da página da conta do usuário.
- Controlador de sessões - é um controlador de autenticação do usuário.
- Controlador de veículos - lida com a criação, edição e exclusão de veículos.
A seguir, lista e descreve os controladores de aplicativos que servem como uma API JSON tranqüila e manipulam as solicitações do React Native Mobile Application:
- Controlador Alpr - contém métodos para analisar a imagem, a fim de encontrar um número de placa.
- Controlador de dispositivos - contém métodos para salvar as informações do dispositivo do usuário no banco de dados.
- Controlador de locais - salva os dados de localização do dispositivo do usuário no banco de dados.
- Controlador de usuários - lida com a autorização / autenticação do usuário.
- Controlador de veículos - lida com os métodos de objeto do veículo (criar, editar, excluir) e salva os dados do veículo no banco de dados.
3.2 Frontend (site)
O frontend da plataforma é desenvolvido usando algumas jóias rails, bem como Bootstrap, jQuery e JavaScript personalizado, quando necessário.
O Bootstrap é uma estrutura de front-end de código aberto e gratuita para projetar sites e aplicativos da web. Ele contém modelos de design baseados em HTML e CSS para tipografia, formulários, botões, navegação e outros componentes da interface, além de extensões JavaScript opcionais. [4]
O jQuery é uma biblioteca JavaScript gratuita e de código aberto projetada para simplificar o script de HTML do lado do cliente. [5]
A seguir, lista e descreve as gemas usadas no frontend:
- Formulário Simples - aprimora o uso existente de formulários de trilhos padrão [6]
- Navegação simples - ajuda a criar navegações dinâmicas com facilidade [7]
- Rails Admin - fornece uma interface de administração dinâmica para o aplicativo [8]
A seguir, é apresentada uma lista das principais páginas do site e sua descrição: - Página inicial - Página de destino principal do site
- Índice de Veículos - Página em que todos os veículos criados estão listados
- Veículos Novos / Editar - Página com o formulário em que o veículo é criado e editado, e a placa do veículo é analisada
- Veículo Show - Página que mostra os detalhes sobre um veículo salvo específico.
- Inscreva-se - Página em que qualquer usuário convidado pode criar uma conta para a plataforma
- Entrar - Página em que qualquer usuário convidado pode entrar na plataforma
- Conta de usuário - página em que o usuário pode ver e editar detalhes sobre sua conta
- Esqueceu a senha - Página em que qualquer usuário pode solicitar para redefinir sua senha usando o email
3.3 Reagir aplicativo nativo (móvel)
A indústria de aplicativos hoje é governada por dois gigantes, a saber, Android e iOS. Para empresas e desenvolvedores, é essencial entregar um produto para a maioria dos usuários, portanto, a necessidade de adaptar as duas plataformas. As plataformas envolvem sua própria maneira de desenvolver aplicativos e possuem apenas pequenas semelhanças entre si. Esse foi um problema que a indústria de aplicativos enfrentou e superou ao contratar funcionários com conhecimento em Android ou iOS, ou ambos, para criar dois aplicativos separados que, por sua vez, exigem manutenção paralela [9].
As estruturas de plataforma cruzada que preenchem essa lacuna surgiram e desapareceram, não conseguindo criar aplicativos com o mesmo padrão visual ou funcional que as estruturas nativas fornecem. No entanto, o React Native promete oferecer uma experiência totalmente nativa com o uso de apenas uma base de código. [10] O React nativo requer e é executado na plataforma NodeJS. O Node.js é um ambiente de tempo de execução JavaScript de plataforma aberta e código-fonte que executa o código JavaScript do lado do servidor. [11]
Para entender um aplicativo React Native, é necessário conhecer alguns dos conceitos básicos do React, como JSX, estado, adereços e componentes. JSX - é uma extensão de sintaxe semelhante ao XML para ECMAScript sem nenhuma semântica definida. Componentes - são os blocos de construção de qualquer aplicativo nativo do React e um aplicativo nativo típico do React terá muitos deles. Simplificando, um componente é uma classe ou função JavaScript que opcionalmente aceita entradas, por exemplo, propriedades (props) e retorna um elemento React que descreve como uma seção da interface do usuário (interface do usuário) deve aparecer.
Existem dois tipos de dados que controlam um componente:
- Suportes: são imutáveis e são definidos pelos pais e são fixados durante a vida útil de um componente.
- Estado: é mutável. Isso significa que o estado pode ser atualizado no futuro, enquanto os objetos não podem. O estado pode ser inicializado no construtor e, em seguida, chamado por setState quando precisar ser alterado.
Por padrão, o React native fornece vários componentes internos, que podem ser usados em diferentes propósitos. Além disso, os desenvolvedores não se limitam aos componentes e APIs incluídos no React Native porque existem muitos pacotes (bibliotecas) diferentes que muitos outros desenvolvedores criaram para acelerar o desenvolvimento de outros.
A seguir, lista e descreve os pacotes usados com o nodeJS para desenvolver o aplicativo React Native:
- React - Uma biblioteca JavaScript declarativa, eficiente e flexível para criar interfaces de usuário. [12]
- React Native - Uma estrutura para criar aplicativos nativos com o React. [13]
- Expo - Um conjunto de ferramentas, bibliotecas e serviços que permitem a criação de aplicativos nativos para iOS e Android escrevendo JavaScript. [14]
- Redux - um contêiner de estado previsível para aplicativos JavaScript. [15]
- Axios - um cliente HTTP baseado em promessa para o navegador e node.js [16]
- Native Base - Componentes essenciais da interface do usuário para várias plataformas para o React Native [17]
- React Native Navigation - fornece navegação nativa da plataforma no iOS e Android para aplicativos React Native [18]
- React Form Builder - Biblioteca simples de gerador de formulários para reagir. [19]
- Il8next - Quadro de internacionalização para navegador ou qualquer outro ambiente javascript (por exemplo: Node.js) [20]
A seguir, é apresentada uma lista das páginas do aplicativo e sua descrição:
- Página inicial - página inicial do aplicativo principal do aplicativo
- Sobre - página do aplicativo que descreve o que é a plataforma
- Inscreva-se - página do aplicativo em que qualquer usuário convidado pode criar uma conta para a plataforma
- Entrar - página do aplicativo onde qualquer usuário convidado pode acessar a plataforma
- Índice de Veículos - Página do aplicativo na qual todos os veículos criados estão listados
- Veículos Novo / Editar - Página do aplicativo com o formulário em que o veículo é criado e editado e a placa do veículo é analisada
- Veículo Show - página do aplicativo que mostra os detalhes sobre um veículo salvo específico.
4. Teste e Hospedagem
Embora os testes e pesquisas iniciais desta plataforma sejam baseados em placas russas, o objetivo final da plataforma Plate Vision é poder ler placas de todo o mundo e, desde que o OpenALPR já havia sido treinado para países populares como EUA e Europa , assumiu-se inicialmente que também funcionaria bem com números de placas russas, uma vez que algumas das placas européias são semelhantes às russas.
No entanto, testes iniciais usando as configurações padrão europeias do OpenAlpr em placas russas mostram que, embora o OpenAlpr tenha sido capaz de identificar e reconhecer uma certa quantidade de placas russas, era necessária uma personalização adicional do OpenAlpr para obter resultados confiáveis e consistentes. Para melhorar a análise das placas russas sem nenhum treinamento extra usando o OpenAlpr, algumas configurações personalizadas foram criadas, derivadas e otimizadas das configurações europeias com modificações específicas baseadas em uma variedade de imagens de teste que contêm carros com placas russas.

Embora a plataforma tenha sido otimizada para funcionar com as melhores placas russas, ela já suporta muitas imagens de carros e placas de todo o mundo, porque executa várias configurações modificadas da biblioteca OpenAlpr, o que leva a muitos resultados possíveis e, no final, determina o melhor resultado com base na correspondência de padrões de placas da região mundial e na precisão da leitura.
Toda a plataforma é hospedada usando os serviços em nuvem do Heroku e é atualizada e mantida através do sistema de controle de versão git. No entanto, é importante observar que a configuração de dependências específicas como o OpenAlpr para trabalhar em um ambiente de servidor em nuvem como o Heroku foi difícil devido às restrições e desafios apresentados pelo ambiente do servidor em nuvem do Heroku. Portanto, os serviços do Docker também foram usados em combinação com o Heroku, a fim de superar as dificuldades de configurar e garantir que a nuvem OpenAlpr e todas as suas dependências funcionem da mesma forma que as do ambiente de desenvolvimento local [1].
5. Conclusão
Conclusivamente, o objetivo deste artigo foi apresentar a plataforma Plate Vision, bem como descrever seus três principais componentes funcionais e como ele planeja otimizar a ANPR enquanto ainda suporta qualquer dispositivo, câmera, veículo, localização no futuro. Embora a versão atual da plataforma implemente e use o OpenAlpr apenas com várias configurações para melhorar o reconhecimento automático de matrículas, ainda existem diferentes maneiras de obter a ANPR, e com pesquisas, testes e experimentos adicionais, a plataforma Plate Vision espera combinar técnicas e métodos exclusivos que fazem uso da melhor visão de código aberto e bibliotecas de OCR disponíveis para criar uma solução ANPR internacional realmente ideal.
Referências