leitura de matrícula de vagões utilizando processamento
Transcrição
leitura de matrícula de vagões utilizando processamento
INSTITUTO FEDERAL DO ESPÍRITO SANTO PÓS-GRADUAÇÃO LATO SENSU EM ENGENHARIA ELÉTRICA COM ÊNFASE EM SISTEMAS INTELIGENTES APLICADOS À AUTOMAÇÃO GUILHERME KREBEL PINHO LEITURA DE MATRÍCULA DE VAGÕES UTILIZANDO PROCESSAMENTO DIGITAL DE IMAGENS EM SOFTWARE LIVRE EMBARCADO VITÓRIA 2015 GUILHERME KREBEL PINHO LEITURA DE MATRÍCULA DE VAGÕES UTILIZANDO PROCESSAMENTO DIGITAL DE IMAGENS EM SOFTWARE LIVRE EMBARCADO Monografia apresentada ao Curso de PósGraduação Lato Sensu em Engenharia Elétrica com Ênfase em Sistemas Inteligentes Aplicados à Automação do Instituto Federal do Espírito Santo como requisito parcial para obtenção do certificado de Especialista em Sistemas Inteligentes Aplicados à Automação. Orientador: Prof. Dr. Hans Rolf Kulitz VITÓRIA 2015 (Biblioteca Nilo Peçanha do Instituto Federal do Espírito Santo) P654L Pinho, Guilherme Krebel. Leitura de matrícula de vagões utilizando processamento digital de imagens em software livre embarcado / Guilherme Krebel Pinho. – 2015. 43 f. : il. ; 30 cm Orientador: Hans Rolf Kulitz. Monografia (especialização) – Instituto Federal do Espírito Santo, Coordenadoria de Pós-Graduação em Engenharia Elétrica, Curso Pós-Graduação Lato Sensu em Engenharia Elétrica com Ênfase em Sistemas Inteligentes Aplicados à Automação, 2014. 1. Processamento de imagens – Técnicas digitais. 2. Software. 3. Engenharia elétrica. I. Kulitz, Hans Rolf. II. Instituto Federal do Espírito Santo. III. Título. CDD 21 – 006.42 GUILHERME KREBEL PINHO LEITURA DE MATRÍCULA DE VAGÕES UTILIZANDO PROCESSAMENTO DIGITAL DE IMAGENS EM SOFTWARE LIVRE EMBARCADO Monografia apresentada ao Curso de PósGraduação Lato Sensu em Engenharia Elétrica com Ênfase em Sistemas Inteligentes Aplicados à Automação do Instituto Federal do Espírito Santo como requisito parcial para obtenção do certificado de Especialista em Sistemas Inteligentes Aplicados à Automação. Apresentado em 12 de março de 2015 COMISSÃO EXAMINADORA ________________________________ Prof. Dr. Hans Rolf Kulitz Instituto Federal do Espírito Santo Orientador ________________________________ Prof. Msc. Douglas Almonfrey Instituto Federal do Espírito Santo ________________________________ Prof. Msc. Alexandre Secchin Instituto Federal do Espírito Santo DECLARAÇÃO DO AUTOR Declaro, para fins de pesquisa acadêmica, didática e técnico-científica, que este Trabalho de Conclusão de Curso pode ser parcialmente utilizado, desde que se faça referência à fonte e ao autor. Vitória, 01 de Fevereiro de 2015. ------------------------------------------------------------- Guilherme Krebel Pinho Dedico a minha família, pela cumplicidade e compreensão quanto ao tempo investido neste trabalho. AGRADECIMENTOS Agradeço primeiramente ao Deus criador do céu e terra, que em sua bondade ativa, nos preparou todos os recursos de modo a entendermos sua obra e suas determinações. Agradeço à minha família e os que irão fazer parte dela por me apoiarem nas decisões. RESUMO Este trabalho de conclusão de curso tem como objetivo descrever o desenvolvimento de um sistema para detecção de matrículas de vagão em um processo de carregamento. O sistema baseia-se na utilização de processamento digital de imagens em uma plataforma embarcada utilizando software livre. A partir de uma imagem capturada por uma câmera, obtém-se uma área de interesse. Essa área passa por técnicas de processamento onde é possível segregar os caracteres do fundo. Estes caracteres na imagem são apresentados a um software de reconhecimento que retorna os caracteres passiveis de serem lidos e transmitidos para outros sistemas como controladores programáveis ou servidores de dados. Palavras-chave: Processamento digital de imagens. Reconhecimento de caracteres em imagens. Visão Computacional. OpenCV. Raspberry. Linux. Segregação. Tesseract. ABSTRACT This course conclusion work aims to describe the development of a system to detect car registrations in a loading process. The system is based on the use of digital image processing in an embedded platform using free software. From an image captured by a camera, Is obtained an area of interest. This area involves processing techniques where you can segregate the characters background. These characters in the picture are presented with a recognition software that returns characters to be read and transmitted to other systems such as programmable controllers or data servers. Keywords: Digital image processing. Character recognition in images. Computer Vision. OpenCV. Raspberry. Linux. Segregation. Tesseract. LISTA DE FIGURAS Figura 1 – Esquema de infraestrutura para desenvolvimento.................................... 13 Figura 2 - Desktop do Rasbian via acesso remoto com o TightVNC.......................... 16 Figura 3 - Ambiente do VirtualBox.............................................................................. 17 Figura 4 - Ambiente do Ubuntu................................................................................... 18 Figura 5 - Raspberry Pi modelo B e B+...................................................................... 19 Figura 6 – Ambiente do Synaptic Package Manager. ................................................ 20 Figura 7 – Regiões candidatas para corte de letras. ................................................. 22 Figura 8 – Webcam Newlink. ..................................................................................... 23 Figura 9 – Webcam Multilaser. .................................................................................. 24 Figura 10 –Etapas do processamento da imagem. .................................................. 25 Figura 11 – Exemplo de imagem capturada. ............................................................ 26 Figura 12 – Exemplo de área de interesse. ............................................................... 27 Figura 13 – Representação do padrão RGB............................................................. 28 Figura 14 – Hexacone invertido como representação do padrão HSV....................... 28 Figura 15 – Representação da imagem em HSV...................................................... 29 Figura 16 – Segmentação em S................................................................................. 30 Figura 17 – Segmentação em V................................................................................. 31 Figura 18 – Imagem produzida pela OU entre segmentações em V e S.................... 31 Figura 19 – Imagem resultado da erosão................................................................... 32 Figura 20 – Imagem resultado da dilatação............................................................... 32 Figura 21 – Imagem capturada para teste................................................................. 34 Figura 22 – área de interesse para teste.................................................................... 34 Figura 23 – imagem segmentada para teste............................................................. 34 Figura 24 – imagem pós filtros para teste................................................................... 34 Figura 25 – Arquivo de texto com caracteres reconhecidos....................................... 35 Figura 26 – Imagem do vídeo do sistema em testes................................................. 36 Figura 27 – Matrícula com caractere faltante............................................................. 37 Figura 28 – Exemplo de excesso de sol contra imagem............................................ 37 Figura 29 – Tela do SDFormatter4. ........................................................................... 40 Figura 30 – Tela do Win32 Disk Imager. .................................................................... 41 Figura 31 – Tela de connection do TightVNC Viewer. ............................................... 43 LISTA DE TABELAS Tabela 1 – Características da Raspberry Pi.............................................................. 19 SUMÁRIO 1 INTRODUÇÃO ...............................................................................................12 1.1 CONTEXTUALIZAÇÃO ..................................................................................12 2 MATERIAIS E MÉTODOS .............................................................................13 2.1 SOFTWARE LIVRE ...................................................................................... 14 2.2 SOBRE O LINUX ...........................................................................................15 2.3 SOBRE A MÁQUINA VIRTUAL .................................................................... 16 2.4 RASPBERRY .................................................................................................18 2.5 TESSERACT ................................................................................................. 21 2.6 PYTON .......................................................................................................... 22 2.7 WEBCAM ...................................................................................................... 23 3 IDENTIFICAÇÃO DA MATRÍCULA DO VAGÃO ......................................... 25 3.1 ROI ................................................................................................................ 26 3.2 DETECÇÃO DE BORDAS ............................................................................ 27 3.3 MODELO HSV (Hue, Saturation, Value ou Intensity) ................................... 28 3.4 SEGMENTAÇÃO ........................................................................................... 29 3.4.1 Função In Ranges ........................................................................................ 29 3.5 DETERMINAÇÃO DOS VALORES PARA SEGMENTAÇÃO ....................... 30 3.6 FILTROS ....................................................................................................... 31 4 RESULTADOS .............................................................................................. 34 5 CONCLUSÃO E TRABALHOS FUTUROS .................................................. 37 REFERÊNCIAS ............................................................................................. 39 ANEXO A - Formatando o cartão SD e instalando a imagem do Rasbian .... 40 12 1 INTRODUÇÃO 1.1 CONTEXTUALIZAÇÃO O transporte de cargas é o principal componente dos sistemas logísticos das empresas. Sua importância pode ser medida por meio de, pelo menos, três indicadores financeiros: custo, faturamento e lucro. O transporte representa, em média, 64% dos custos logísticos, 4,3% do faturamento, e em alguns casos, mais que o dobro do lucro segundo Fleury e Wanke (2000) citando Bowerson, Closs e Stank (1999). Com o advento da revolução industrial e o emprego de máquinas a vapor e posteriormente o desenvolvimento de trens no século XVII, mais precisamente em 1804 quando Richard Trevithick construiu no país de Gales um carro a vapor sobre trilhos, o uso de vagões para o transporte de cargas se tornou um recurso útil até os dias de hoje. Algumas razões como o transporte econômico e a segurança tornam o transporte ferroviário preferido em relação ao rodoviário. Em ambientes industriais objetiva-se a alta confiabilidade. Neste sentido, é um desafio constante, para áreas como a mineração, manter alta confiabilidade em um cenário agressivo para equipamentos eletrônicos. Em muitos casos, nestes ambientes são comuns excessos de particulado no ar, altas temperaturas, interferências eletromagnéticas, má qualidade de energia elétrica e custos altos. Diante disto, todos os esforços para pensar em sistemas adaptados a esses locais são apreciados. Sistemas computacionais de única placa são bem vindos, já que apresentam um baixo custo, comparado a um computador especialmente desenvolvido para indústria, que pode chegar a valores de algumas dezenas de milhares de reais. A facilidade de programação está no fato de poucos periféricos e utilização de recursos de hardware que, para um sistema tradicional, não existem nativamente, por exemplo a utilização de pinos de entradas e saídas. Essas placas apresentam poucos componentes, o que significa menos interfaces e conexões e baixa dissipação de potência. A vantagem, por exemplo, de não possuir um ventilador para a troca de calor, aumenta consideravelmente a confiabilidade por permitir uma melhor vedação da carenagem ou abrigo destes sistemas. A isolação do mundo exterior evita entrada de poeira, entrada de água e impede que o equipamento seja habitat de insetos e pequenos animais. 13 2 MATERIAIS E MÉTODOS A raspberry permite que, conectando periféricos em suas portas USB e conectando sua saída de vídeo HDMI em um televisor ou monitor, utilizemos a sua interface gráfica. Este recurso também pode ser utilizado com o uso de softwares baseados no protocolo de acesso remoto VNC (Visual Network Computing). Entretanto, a interface gráfica do sistema operacional Rasbian consome significativamente a memória e processamento do hardware. Para aumentar a performance do sistema, optou-se pela utilização de ambiente de desenvolvimento externo à raspberry, representado pela figura 1. Figura 1 – Esquema de infraestrutura para desenvolvimento TightVNC Notebook Raspberry Windows 8 Rasbian Virtualbox LMV.sh Ubuntu Módulo.py Ethernet Câmera USB Fonte: Elaborado pelo Autor, 2015. O retângulo azul representa um notebook com Windows 8. Este sistema operacional, até sua versão XP, trazia embutido um software chamado de Hyperterminal. Este software é desenvolvido pela empresa Hilgraeve e se baseia no protocolo SSH (Secure Shell) que permite a conexão entre dois sistemas computacionais de forma a permitir a execução de comandos na estação remota. O que é útil para o acesso e gerenciamento da raspberry. O hyperterminal pode ser instalado no Windows 8 porém, como deixou de ser fornecido com o Windows, seu uso depende de licença paga. Como premissa do desenvolvimento, foi necessário a busca de um software SSH gratuito. O Linux é equipado com o Terminal, software que satisfaz a necessidades do SSH para este trabalho. Para sua utilização, optou-se pela instalação de Linux Ubuntu em máquina virtual com ajuda do software de código aberto VirtualBox. Com o Ubuntu, é possível utilizar também o Gedit, editor de texto nativo que conta com interpretador de sintaxe, o que auxiliou o desenvolvimento dos 14 códigos em python e shell script. O Ubuntu permitiu ainda através do SSH a facilidade de troca de arquivos entre o computador e a raspberry, aumentando o rendimento do trabalho. Ainda no computador, foi instalado o TigthVNC que, durante o desenvolvimento, era possível visualizar resultados dos testes a cada etapa. O retângulo verde representa a raspberry. Operacionalizada com o Rasbian, e tendo instalada a biblioteca OpenCV, é representada pelo retângulo verde. Nesta placa foi desenvolvido dois scripts. O primeiro foi desenvolvido em Shell Script e chamado de LMV.sh. É responsável pela inicialização do script desenvolvido em python, pelo acionamento do Tesseract e pela manipulação dos arquivos de texto gerados pelo software que reconhece os caracteres, validando-os e gerando o relatório final com a lista das matrículas dos vagões. O segundo script, desenvolvido em python, é responsável pelo monitoramento de entradas digitais que sinalizam a posição do vagão através de sensores, pela captura da imagem da lateral do vagão utilizando a câmera e pelo tratamento da imagem capturada, recortando, processando e salvando para análise do reconhecedor. Os componentes utilizados serão detalhados nas próximas seções. 2.1 SOFTWARE LIVRE O movimento do software livre é um movimento pelo compartilhamento do conhecimento tecnológico. Começou nos anos 1980 e se espalhou pelo mundo levado pela rede mundial de computadores. Seus defensores são em maioria acadêmicos, cientistas, os mais diferentes combatentes pela causa da liberdade e, mais recentemente, as forças político-culturais que apoiam a distribuição mais equitativa dos benefícios da chamada era da informação. Seus maiores opositores são megaempresas que vivem exclusivamente de um modelo econômico baseado na exploração de licenças de uso de software e do controle monopolístico dos códigos essenciais dos programas de computadores. Também se alinham a governantes, frações burocráticas e políticos que querem bloquear a disseminação dos conhecimentos básicos sobre o principal produto da sociedade em rede, o software. (CASTELLS, 1999). Como a tendência da economia capitalista é se tornar crescentemente baseada em informações e em bens intangíveis, a disputa pelo conhecimento das técnicas e 15 tecnologias de armazenamento, processamento e transmissão das informações assume o centro estratégico das economias nacionais. Saber fazer programas de computador será cada vez mais vital para empresas de um país. Tudo indica que os softwares serão elementos de crescente utilidade social e econômica e de alto valor agregado. 2.2 SOBRE O LINUX Os sistemas operacionais são programas com uma dimensão muito grande e que exigem na sua execução recursos significativos de memória. A utilização generalizada dos microcomputadores em todo tipo de dispositivos fez surgir a necessidade de se dispor de sistemas operacionais de dimensão reduzida e muito eficientes, para serem executados em arquiteturas de hardware com restrições quer na dimensão da memória, quer na capacidade de processamento; esses sistemas foram denominados sistemas embarcados (embedded systems), realçando a ideia de que o software é integrado com o hardware. O usuário de dispositivos baseados nesses sistemas não tem praticamente noção do sistema operacional, dado que este serve apenas de suporte à execução das aplicações e a única interface disponível é a destas aplicações. Entre os sistemas operacionais livres disponíveis, há o Linux, que foi utilizado neste trabalho. Existem diversos softwares livres que possuem comunidades de desenvolvedores espalhados por diversos países e com milhares de colaboradores que auxiliam na sua constante melhoria e correção. Sem dúvida, o software livre mais conhecido é o GNU/Linux. Neste trabalho, para atividades auxiliares foi utilizado o Ubuntu, uma distribuição Linux derivada de outra, o Debian. O termo Ubuntu é derivado de um conceito africado que significa “Humanidade para com os outros”. O sistema foi projetado para que qualquer pessoa possa utiliza-lo, independentemente do nível de conhecimento em informática ou nacionalidade, o que o fez se tornar muito intuitivo. (AGUIAR, et al, 2009). É possível que um software de fonte aberta não assegure as quatro liberdades (uso, cópia, modificações e redistribuição) que caracterizam o software livre. Por isso é 16 importante distinguir as categorias: software aberto, software gratuito e software livre. Existem vários softwares gratuitos que são proprietários. O fato de ser um software distribuído gratuitamente não significa que ele seja livre. Exemplos claros disso são os programas PGP, Real Player, Adobe Acrobat Reader, entre outros. Atualmente, a Free Software Foundation tem chamado o software livre de FOS, ou seja, Free Open Source. Em português significa um programa de fonte aberta e livre. (Amadeu, 2004). Neste trabalho o autor utiliza o Rasbian, distribuição do Linux baseado no Debian e desenvolvido especialmente para o computador de placa única Raspberry. A imagem com o sistema operacional pode ser baixada pelo site www.raspberrypi.com. Também é utilizado o software Tesseract, um reconhecedor de caracteres em imagens de código aberto mantido pela Google. Figura 2 -Desktop do Rasbian via acesso remoto com o TightVNC. Fonte: Elaborado pelo Autor, 2014. 2.3 SOBRE A MÁQUINA VIRTUAL O conceito de máquina virtual não é novo – suas origens remetem ao início da história dos computadores, no final dos anos de 1950 e início de 1960. As máquinas virtuais foram originalmente desenvolvidas para centralizar os sistemas de computador utilizados no ambiente VM/370 da IBM. Naquele sistema, cada máquina virtual simula 17 uma réplica física da máquina real e os usuários têm a ilusão de que o sistema está disponível para seu uso exclusivo. (Laureano, 2007). Os sistemas de computadores são projetados basicamente por dois elementos: hardware, software (melhor refazer esta frase, já que as aplicações são softwares). Ao longo do desenvolvimento, estes dois elementos costumeiramente são desenvolvidos por empresas diferentes e em tempos diferentes, o que traz em muitos casos uma incompatibilidade entre eles. As máquinas virtuais formam uma camada adicional que permite o uso de um hardware por um sistema operacional que não seria compatível com este hardware, a exemplo de sistemas supervisórios de plantas industriais que, desenvolvidos para ambientes Windows, poderiam ser executados em máquinas equipadas com Linux. Para a indústria, menos hardware significa economia em manutenção e maior confiabilidade. Várias máquinas virtuais em uma só máquina física representam menor tempo de reparo, já que máquinas virtuais podem ser copiadas. Figura 3 - Ambiente do VirtualBox Fonte: Elaborado pelo Autor, 2014. Neste trabalho, foi utilizado o software de virtualização chamado VirtualBox, desenvolvido pela Oracle em sua versão 4.3.12. Com este software podemos criar máquinas virtuais para a instalação de sistemas operacionais variados como Windows ou Linux. 18 Figura 4 - Ambiente do Ubuntu Fonte: Elaborado pelo Autor, 2014. Uma vez em rede, basta digitar o comando ssh [usuário]@[IP] e em seguida fazer o login que a máquina passa a fornecer o prompt do Linux embarcado na Raspberry. 2.4 RASPBERRY O Raspberry Pi, mostrado na figura 5, é um computador que executa o sistema operacional baseado em Linux. Ele tem portas USB nas quais você pode conectar um teclado e um mouse e uma saída de vídeo HDMI (High--Definition Multimedia Interface) na qual você pode conectar uma TV ou um monitor. Muitos monitores têm apenas um conector VGA e o Raspberry Pi não funcionará com eles. No entanto, caso o monitor tenha um conector DVI, pode-se usar adaptadores HDMI-para-DVI. (Monk, 2013). 19 Figura 5 - Raspberry Pi modelo B e B+ Fonte: Raspberry Pi Organization, 2014. Algumas palavras surgem repetidamente quando as pessoas falam sobre o Raspberry Pi: pequeno, barato, hackeável, educacional. No entanto, seria um erro descrevê-lo como somente um dispositivo plug-and-play, mesmo que seja fácil o suficiente para ligá-lo em um aparelho de TV e obter uma imagem na tela. Ele não é um dispositivo de consumo e, dependendo do que se pretende fazer com o seu Raspberry Pi, você precisará tomar uma série de decisões a respeito de dispositivos periféricos e software ao instalá-lo e configurá-lo. (Richadson e Wallace, 2013). No anexo 1 descreve-se como formatar e instalar a imagem na raspberry. A raspberry pi tem as seguintes características: Tabela 1 – Características dos modelos da Raspberry. Preço: CPU: Memória (SDRAM): Portas USB 2.0: Saídas de vídeo: Armazenamento: Rede onboard: Periféricos: Fonte de energia: Sistemas Operacionais: Modelo A Modelo A+ Modelo B US$25 US$20 US$35 700 MHz ARM1176JZF-S core (ARM11 family) 256 MB (compartilhada com GPU) 512 MB (compartilhada com GPU) 1 2 RCA (PAL & NTSC), HDMI HDMI Video composto SD / MMC / slot para cartão SDIO Nenhuma 10/100 Mbit/s (RJ45) 8 × GPIO, UART, I²C, SPI 5 V via MicroUSB ou header GPIO Debian GNU/Linux, Fedora, Arch Linux, Raspbian , RISC OS 20 Instalando o OpenCV A biblioteca OpenCV está disponível para a raspberry. Esse fato é um dos pilares deste trabalho, caso contrário teríamos que escolher outro sistema de placa. Das várias formas de instalar a biblioteca OpenCV na raspberry, descreve-se aqui a maneira utilizada com auxílio do Synaptic. Um recurso interessante utilizado nesta fase foi a instalação de um gerenciador de aplicativos para raspberry chamado de Synaptic. Um console de busca de aplicativos, inúmeros, com interface gráfica que auxilia o usuário quanto nos downloads e instalação dos aplicativos para a raspberry. Para instalar o synaptic, basta executar o comando: sudo apt-get install synaptic Figura 6 – Ambiente do Synaptic Package Manager. Fonte: Elaborado pelo Autor, 2014. Para executar o aplicativo, o comando Synaptic é necessário: Na interface gráfica escolher os componentes: 21 libopencv-core2.3 libopencv-features2d2.3 libopencv-flann2.3 libopencv-highgui2.3 libopencv-imgproc2.3 python opencv 2.5 TESSERACT Tesseract é um software de reconhecimento ótico de caracteres de código aberto (Licença Apache 2.0), originalmente desenvolvido pela Hewlett-Packard e atualmente mantido pelo Google. A versão utilizada no trabalho foi a 3.02 equipado com a biblioteca de visão computacional Leptônica. O Tesseract inicia o reconhecimento buscando linhas de texto. As linhas de texto são encontradas buscando a altura média das regiões com mesma intensidade, o que é a possibilidade de caractere. Nessa análise, são estimadas as linhas base, superior e linhas médias dos caracteres. Estas últimas desprezam acentos ou partes dos caracteres que estão fora da média. Por exemplo caracteres como p, g, q ou i entre outros. Após encontrar as linhas de texto o software corrige utilizando função quadrática. O próximo passo é o corte das palavras em caracteres utilizando a média de largura dos caracteres. Neste passo, se existir alguma lacuna entre caracteres que não respeite a média, é utilizada lógica fuzzy e a decisão pode ser tomada após o reconhecimento da palavra. O reconhecimento das palavras é iniciado com as palavras que estão dentro da faixa regular de médias de espaçamentos. As palavras que não estão nestas faixas são reconhecidas posteriormente com menor confiabilidade. O Tesseract parte para o corte de caracteres unidos. Utilizando vértices cônicos como locais de possíveis cortes, o software executa cortes e verifica a confiabilidade, caso piore, desfaz o corte e o faz em outro ponto selecionado até o caractere ser separado em dois confiáveis. A figura 7 mostra pontos de vértice cônico em que é provável fazer o corte separando dois caracteres. 22 Figura 7 – Regiões candidadas para corte de letras. Fonte: Ray Smith, 2012. Uma análise de caracteres quebrados é feita analisando caracteres pequenos próximos e unindo-os e reavaliando e incrementando uma tabela de casos particulares, aprendendo assim algumas situações que podem se repetir. Uma vez os caracteres cortados e bem delimitados o Tesseract cria uma lista de classes das características de cada caractere analisando pontos do espaço do caractere. Estes dados são comparados com os dados do armazenados e a menos distância de determinado caractere significa correspondência. 2.6 PYTON Python é uma linguagem de altíssimo nível (em inglês, Very High Level Language) orientada a objeto, de tipagem dinâmica, o que permite ao programador não declarar o tipo de variável previamente por exemplo (o que isto significa?), interpretada e interativa. O Python possui uma sintaxe clara e concisa, que favorece a legibilidade do código fonte, tornando a linguagem mais produtiva. A linguagem inclui diversas estruturas de alto nível (listas, dicionários, data / hora, complexos e outras) e uma vasta coleção de módulos prontos para uso, além de frameworks de terceiros que podem ser adicionados. Também possui recursos encontrados em outras linguagens modernas, tais como: geradores, introspecção, persistência, metaclasses e unidades de teste. Multiparadigma, a linguagem suporta programação modular e funcional, além da orientação a objetos. Mesmo os tipos básicos no Python são objetos. A linguagem é interpretada através de bytecode pela máquina virtual Python, tornando o código portável. Com isso é possível compilar aplicações em uma plataforma e rodar em outros sistemas ou executar direto do código fonte. 23 Python é um software de código aberto (com licença compatível com a General Public License (GPL), porém menos restritiva, permitindo que o Python seja inclusive incorporado em produtos proprietários). A especificação da linguagem é mantida pela Python Software Foundation2 (PSF). Além de ser utilizado como linguagem principal no desenvolvimento de sistemas, o Python também é muito utilizado como linguagem script em vários softwares, permitindo automatizar tarefas e adicionar novas funcionalidades. É possível integrar o Python a outras linguagens, como a Linguagem C. (Borges, 2010). Neste trabalho o Python é utilizado como linguagem básica de programação para o sistema. Um script para o shell do Linux é executado ao iniciar a Raspberry chamando o script em Python. A vantagem do Python está na existência de biblioteca de visão computacional na documentação oficial da OpenCV Fundation e bibliotecas para manipulação de entradas e saídas da Raspiberry (GPIO). 2.7 WEBCAM Webcam se tornou sinônimo de câmera de baixo custo com interface usb. Vários fabricantes comercializam vários modelos que diferem entre si a quantidade de pixels, foco regulável ou não, existência de LEDs para auxilio de iluminação e botão de snap shot que serve como disparo manual direto na câmera. Existe no site da comunidade da raspberry uma lista de câmera suportadas. Além de, claro, a câmera nativa da raspberry vendida separadamente com o mesmo custo da placa. Esta câmera acessa um barramento especial que eleva a taxa de quadros por segundo em trabalhos. Neste trabalho, destaca-se a experiência com duas câmeras. Figura 8 – Webcam Newlink. Fonte – Newlink, 2014. 24 Webcam Sun: WC302 A Resolução: 8 MP Plug and Play Botão snapshot segunda câmera utilizada, fabricada pela multilaser, apresentou funcionamento. Figura 9 – Webcam Multilaser. Fonte – Multilaser, 2014. Informações técnicas Lente: 2G lente de vidro S / N Radio: 45 dB Compatibilidade: Windows 2000,XP, Vista e 7 Interface: USB Resolução: 480K pixel via hardware/ 5.0 MP para foto e 1.3 MP para vídeo Software* bom 25 3 IDENTIFICAÇÃO DA MATRÍCULA DO VAGÃO Neste capítulo, descrevem-se as etapas da identificação da matrícula. O sistema, quando iniciado, aguarda a posição adequada do vagão para obter uma fotografia da sua lateral. Com essa imagem, obtém-se a área em que os caracteres estão presentes. Dessa região desejada, são detectadas bordas e preenchidas as áreas formadas. Utilizando a imagem dos caracteres antes da detecção de bordas é feita a segmentação por cor. Estes dois últimos produtos são entradas para o reconhecedor de caracteres que tem como saída o texto para ser editado na lista de vagões com matrículas reconhecidas. O fluxograma simplificado da imagem X mostra o funcionamento da solução. Figura 10 –Etapas do processamento da imagem. Início Vagão em posição Captura da Imagem Obtenção de região de interesse Detecção de bordas Preenchimento das bordas Segmentação por cores Reconhecedor de caracteres Análise dos dados Fonte: Elaborado pelo Autor, 2014. 26 Um vagão leva em média 40 segundos para ser carregado. Este é o tempo que o sistema tem para o reconhecimento. A câmera tem a oportunidade de capturar a imagem por cerca de 10 segundos, devido a posição da câmera instalada a dois metros de distância do vagão. Um frame é capturado quando o vagão está na posição. Um conjunto de sensores infravermelhos ou laser indica quando o vagão passa na região de interesse para a câmera capturar a imagem. O sensor recebe o sinal do emissor quando a lacuna entre um vagão e outro está em frente aos sensores. A imagem seguinte é uma amostra da imagem capturada pela câmera. Figura 11 – Exemplo de imagem capturada. Fonte: Elaborado pelo Autor, 2014. 3.1 ROI Usando a técnica de ROI (Region Of Interest), uma área de interesse é delimitada. Pode-se fazer isso devido ao fato de que os vagões têm dimensões semelhantes. A função Set Image ROI, Define uma região de interesse através de um retângulo Sintaxe: 27 cv.SetImageROI(image, rect) Onde os parâmetros são: image – Imagem sujeita a determinação da área de interesse, no caso a imagem capturada do vagão. rect – Retângulo com dimensões tais que representa a área de interesse. A maioria das funções do OpenCV suportam o uso de ROI e tratam imagem de interesse como uma imagem separada. Por exemplo, todas as coordenadas de pixel são contadas a partir do canto superior esquerdo (ou inferior esquerdo) da ROI, não a imagem original. A figura 12 mostra um exemplo de área de interesse. Figura 12 – Exemplo de área de interesse. Fonte: Elaborado pelo Autor, 2014. 3.2 DETECÇÃO DE BORDAS A imagem da região de interesse é convertida em escala de cinza. Foi utilizada a função Canny Edge para obtenção das bordas e a função Draw Contourns para o preenchimento dos caracteres formados pelas bordas. Os parâmetros da função de detecção das bordas são iniciados com o valor zero e são incrementados até a imagem preenchida resultante apresentar 10% de pixels brancos em relação ao fundo preto. Esse valor foi obtido empiricamente e está relacionado as dimensões das imagens e distância da câmera ao vagão. Esta imagem resultante é salva em arquivo para ser utilizado pelo reconhecedor de caracteres. 28 3.3 MODELO HSV (Hue, Saturation, Value ou Intensity) O modelo do HSV usa os conceitos de hue (H), saturation (S) e value (V) para explicar a ideia de cor. Hue (matiz, nuança da cor) é o que percebe-se como cor (vermelho, azul, verde). É dado pelo comprimento de onda dominante do espectro EM. Saturation (saturação) é o grau de pureza da cor; pode ser considerado como a proporção de branco misturado com a cor. A cor pura é 100% saturada. Value (valor ou intensidade) é a medida do brilho da cor. O sistema HSV utiliza o hexacone invertido para representar as cores, como mostrado na figura 14 ao invés do cubo como o sistema RGB, mostrado na figura 13. Figura 13 – Representação do padrão RGB. Fonte: cs.berkely.edu, 2012. Figura 14 – Hexacone invertido como representação do padrão HSV . Fonte: learn.colorotate.org, 2013. 29 A intensidade varia de 0 a 1, do ápice à base. A distância radial até o eixo central representa a saturação, que varia do branco até a cor pura. Quanto mais distante do branco, maior a saturação. O matiz é representado como uma sequência radial ao redor do eixo da intensidade. A vantagem do modelo HSV é definir as cores por três atributos (H,S,V) ao invés da intensidade das cores primárias. Estes atributos podem ser analisados e manipulados individualmente, ao contrário do sistema RGB, onde eles estão intrinsecamente interligados. Esta independência permite processar os atributos separadamente, por exemplo, realçar apenas a intensidade (V). 3.4 SEGMENTAÇÃO A imagem da região de interesse é convertida para o padrão HSV. Isso é valioso para o trabalho pois objetiva-se selecionar valores de baixa saturação e alta luminosidade, isto significa que tudo que é branco ou se aproxima do branco será aproveitado, mesmo que as letras estejam contaminadas com o óxido de ferro proveniente da corrosão da chapa do vagão, que tendência as letras a terem a mesma cor do vagão. A figura 15 mostra o trecho de interesse com uma projeção de HSV. Figura 15 – Representação da imagem em HSV Fonte: Elaborado pelo Autor, 2014. Com a função CV_InRanges, pode-se selecionar dentro da matriz, formada pela imagem em HSV, valores máximos e mínimos para obter a segmentação da imagem. 3.4.1 Função In Ranges Esta função do OpenCV checa se elementos de um array estão entre elementos de outros dois arrays Sintaxe: 30 ccv.InRangeS(src, lower, upper, dst) Os parâmetros são: src – Primeiro array de entrada lower – Array com valores mínimos upper – Array com valores máximos dst – Array de saída com o mesmo tamanho do array de src. Em outras palavras, a função seleciona os elementos da imagem src que estão dentro das faixas criadas pelos valores lower e upper. 3.5 DETERMINAÇÃO DOS VALORES PARA SEGMENTAÇÃO A luminosidade e a intensidade das cores, influenciam de modo que, não poderíamos estipular um valor fixo para as faixas de segregação. Testes empíricos dentro das dimensões da área de interesse e letras e números impressos nas laterias dos vagões (matrícula), sugerem que a informação, ou seja a matrícula do vagão, ocupa cerca de 10% da área da imagem. O script deve alterar os parâmetros de segmentação até atingir esta quantidade de informação. Esse percentual é medido em pixels claros em relação ao pixel pretos de fundo. A figura 16 mostra o produto da segmentação com a faixa V totalmente aberta (ou seja com valores de 0 a 255) e o S variando de 0 a 38. Figura 16 – Segmentação em S Fonte: Elaborado pelo Autor, 2014. A figura 17 mostra o produto da segmentação com a faixa S totalmente aberta (ou seja com valores de 0 a 255) e o V variando de 212 a 255. 31 Figura 17 – Segmentação em V Fonte: Elaborado pelo Autor, 2014. As duas imagens se completam, formando a matrícula em quase sua totalidade. O script desenvolvido faz uma lógica OU entre as duas imagens binárias, formando a imagem a seguir. Como os caracteres das matrículas tendem a se colorir devido ao óxido de ferro proveniente da corrosão dos vagões a segregação de faz necessária. Em outras aplicações, onde as letras e números são extremamente contrastantes em relação ao fundo, pode-se utilizar a binarização da imagem. Figura 18 – Imagem produzida pela OU entre segmentações em V e S Fonte: Elaborado pelo Autor, 2014. 3.6 FILTROS A imagem trouxe vários pontos que não representam a matrícula. São ruídos, basicamente proveniente de pixels com cor, saturação e luminosidade semelhantes aos que formam a matrícula. Para remoção destes pontos, é utilizada a técnica de erosão através da função Erode do OpenCV. Esta função erode uma imagem usando um elemento estrutural específico. 32 Sintaxe: Python: cv.Erode(src, dst, element=None, iterations=1) Parâmetros: src – Imagem de entrada. dst – Imagem de saída com o mesmo tamanho da imagem de entrada. element – Elemento estruturante utilizado na erosão. iterations – Número de interações que a erosão será aplicada. O resultado da erosão pode ser visto na figura 19. Figura 19 – Imagem resultado da erosão Fonte: Elaborado pelo Autor, 2014. Com o processo de erosão, partes importantes da imagem se perderam, apesar dos pontos terem desaparecido. A técnica de dilatação devolverá as bordas perdidas e os pontos que não existem não voltaram a aparecer na imagem. As aberturas, provenientes do processo de pintura por moldes, serão minimizadas e em alguns casos eliminadas. A figura 20 mostra o resultado desta etapa. Figura 20 – Imagem resultado da dilatação Fonte: Elaborado pelo Autor, 2014. 33 De posse dos caracteres segmentados, o script salva como arquivo no padrão JPG, deixando disponível para o Shell Script executar o Tesseract, apresentando a imagem para o reconhecimento, este último software então gera como resultado um arquivo de texto com os caráteres reconhecidos. 34 4 RESULTADOS As figuras 21, 22, 23, 24 e 25 exibem amostras dos resultados das etapas de captura, área de interesse, segmentação, filtros e conteúdo da saída do Tesseract, respectivamente. Figura 21 – Imagem capturada para teste Fonte: Elaborado pelo Autor, 2014. Figura 22 – área de interesse para teste Fonte: Elaborado pelo Autor, 2014. Figura 23 – imagem segmentada para teste Fonte: Elaborado pelo Autor, 2014. Figura 24 – imagem pós filtros para teste 35 Fonte: Elaborado pelo Autor, 2014. Figura 25 – Arquivo de texto com caracteres reconhecidos Fonte: Elaborado pelo Autor, 2014. Para efeito de teste, foram acompanhados dois carregamentos de 80 vagões cada. Os seguintes dados foram obtidos: Total de matrículas: 160 Total de reconhecimentos: 134 Reconhecimentos corretos: 129 Reconhecimentos incorretos: 5 Neste cenário de teste o sistema teve desempenho de 80,63%, com um erro de 3,73%. Reconhecimento significa que o sistema encontrou caracteres na imagem, não necessariamente corretos. Dentre os resultados, 26 matrículas não foram reconhecidas, ou seja, não houve qualidade da imagem suficiente para a detecção de bordas ou segmentação de cores. Isso se deve ao fato das matrículas dos vagões estarem demasiadamente sujas ou apagadas, necessitando de limpeza ou repintura. As matrículas tendem a desaparecer com a ação da oxidação do vagão. Dentre os resultados incorretos, ocorreu a confusão entre 3 e 8, 7 e 2. O sistema eventualmente confunde a letra D com 0 ou G com 6. Nestes dois últimos casos, como a matrícula do vagão sempre inicia com a sigla GDE, estes três caracteres são tratados com script. Para os demais, uma alternativa seria a obtenção de mais de uma imagem capturada em posições diferentes, o que em um tratamento estatístico, podese chegar aos caracteres possíveis. 36 Figura 26 – Imagem do vídeo do sistema em testes Fonte: Elaborado pelo Autor, 2015. 37 5 CONCLUSÃO E TRABALHOS FUTUROS Com este trabalho, chega-se à conclusão que é possível o reconhecimento de matrícula de vagões do processo de carregamento. Entretanto para o funcionamento com confiabilidade aceitável é necessário desenvolver mais artifícios para o script que altera os parâmetros de segmentação bem como a implementação de melhorias descritas a seguir. Um número significativo no banco de dados de imagens de vagões apresentou a falta de caracteres como exemplifica a imagem a seguir. O último algarismo é um digito verificador. No caso da falta de um único algarismo, este poderia ser deduzido a partir dos outros, porém na falta de dois, o sistema não teria condições de reconhecer. Uma solução seria duplicar as câmeras e analisar duas imagens, completando a informação que faltar. Figura 27 – Matrícula com caractere faltante Fonte: Elaborado pelo Autor, 2014. O excesso ou falta de iluminação, influencia no processo de captura e segmentação da imagem. É importante que o sistema tenha capacidade de auxiliar a iluminação do local. O ambiente conta com iluminação artificial durante o período noturno e é acionada por foto célula. A implementação de iluminação controlada pela raspberry é interessante para minimizar problemas relacionados a iluminação. Figura 28 – Exemplo de excesso de sol contra imagem Fonte: Elaborado pelo Autor, 2014. 38 Exemplo de influência do Sol na captura da imagem (obtida em campo aberto para exemplificação). Antes da imagem ser capturada, algumas matrículas apresentavam sujeiras que um jato de água aspergido previamente poderia retirar, limpando a região de interesse e aumentando o contraste entre o fundo e o caractere. 39 REFERÊNCIAS FLEURY, Peter; WANKE, Paulo Fernando. Transporte de cargas no Brasil: Estudo exploratório das principais variáveis relacionadas aos diferentes modais e às suas estruturas de custo. São Paulo: Ática, p. 410, 2000 CASTELLS, Manuel. A sociedade em rede. São Paulo, Paz e Terra, 1999. AGUIAR, Vicente Macedo de; ALENCAR, Anderson Fernandes de; MACHADO, Murilo Bansi; EVANGELISTA, Rafael; SILVEIRA, Sérgio Amadeu da. Software livre, cultura hacker e ecossistema da colaboração. São Paulo: Momento Editorial, 2009. AMADEU, Sérgio da Silveira. Software livre: a luta pela liberdade do conhecimento. São Paulo. Editora Fundação Perseu Abramo, 2004. LAUREANO, Marcos. Máquinas Virtuais e Emuladores: Conceitos, Técnicas e Aplicações. São Paulo. Novatec. 2007 MONK, Simon. Programando o Raspberry Pi Primeiros Passos com Python. São Paulo. Novatec, 2013. RICHARDSON, Matt; WALLACE, Shawn. Primeiros Passos com o Raspberry Pi. São Paulo. Novatec. 2013. BORGES, Luis Eduardo. Python para desenvolvedores. Rio de Janeiro. Edição do Autor. 2010 40 ANEXO A – Formatando o cartão SD e instalando a imagem do Rasbian Formatando o cartão SD (Colocar em anexo. No texto principal devemos nos concentrar na solução do problema. A colocação da infraestrutura em funcionamento não é o mais importante.) O cartão SD para raspberry, assim como é o HD para um computador convencional, funciona como a memória não volátil onde os arquivos que formam o sistema operacional ficam gravados. No boot da placa, estes arquivos são carregados na memória volátil trazendo a funcionalidade do board computer. A raspberry utilizada neste trabalho foi equipada com um cartão SD de 8GB. O fabricante da placa fornece um guia inicial onde é explicado como instalar o sistema operacional. No primeiro momento o cartão deve ser formatado. Foi utilizado o software SDFormatter4, indicado pelo fabricante da raspberry. Figura 29 – Tela do SDFormatter4. Fonte: Elaborado pelo Autor, 2014. Uma vez formatado, o SD está apto a receber o sistema operacional. Diferente de um computador onde iniciamos com a mídia de instalação, a raspberry já recebe em seu SD o sistema operacional instalado na forma de extração de imagem. Imagem esta 41 fornecida pelo fabricante da raspberry. Neste trabalho, foi utilizado o Rasbian, distribuição Debian especial para raspberry. Para a extração da imagem, que é um arquivo com extensão img, é utilizado o software Win32 Disk Imager. Figura 30 – Tela do Win32 Disk Imager. Fonte: Elaborado pelo Autor, 2014. Neste momento estamos prontos para ligar a raspberry pela primeira vez. O cartão SD pode ser inserido no slot da raspberry ligada a um monitor pela saída HDMI e energizada com a fonte de 5V 2A. O sistema vai iniciar até a tela azul de configurações básicas surgir, onde será questionado um login e senha para o usuário administrador. Algumas configurações adicionais são importantes, por exemplo a inicialização até o prompt ou até a interface gráfica. Esta tela pode ser acionada com o comando: sudo raspi-config Atribuindo IP Fixo A raspberry é capaz, por padrão, de obter IP um dinâmico. Porém neste trabalho optou-se pela utilização de IP fixo. Para alteração desse parâmetro utiliza-se a tela 42 azul de configuração inicial ou altera-se o arquivo etc/network/interfaces da seguinte forma: As seguintes linhas foram alteradas: iface eth0 inet dhcp Para: iface eth0 inet static address 192.168.0.20 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 Um recurso que foi instalado para o desenvolvimento do trabalho foi um servidor de VNC chamado de TightVNCServer, que é útil por permitir acesso remoto a interface gráfica da raspberry. Para a instalação deste, basta utilizar o comando: sudo apt-get install tightvncserver Acionar o servidor com o comando: sightvncserver Para disponibilizar a tela para os clientes, é preciso utilizar o comando: vncserver :1 -geometry 1024x728 -depth 16 1366x600 Este comando deve ser executado toda vez que a raspberry for inicializada, para deixar em automático pode-se gerar um shell script com o comando e acrescentar no arquivo etc/rc.local o caminho e nome do shell script, assim toda vez que a raspiberry inicializar, o script é executado. 43 No computador utilizado no desenvolvimento do protótipo, chamado de estação de engenharia, cliente para acesso remoto, é necessário a instalação do TightVNC (qual a sua função?) Viewer e na tela de acesso, entrar com o IP da raspberry acrescido da porta 5901: Figura 31 – Tela de connection do TightVNC Viewer. Fonte: Elaborado pelo Autor, 2014.
Documentos relacionados
Configurando Raspberry PI com câmera em modo de
Tamanho minúsculo e baixo custo são as duas linhas guias do projeto chamado de Raspberry PI. Ele é um mini microcomputador que, no exíguo espaço equivalente a um cartão de crédito, abriga processad...
Leia mais