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

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