Desenvolvimento de uma Aplicação Android para o - iMobilis

Transcrição

Desenvolvimento de uma Aplicação Android para o - iMobilis
Universidade Federal de Ouro Preto
Instituto de Ciências Exatas e Aplicadas
Colegiado de Engenharia de
Computação
Desenvolvimento de uma
Aplicação Android para o
Controle de Gastos Através da
Digitalização de Cupons Fiscais
Giovani Romani Ferreguetti
Junior
TRABALHO DE
CONCLUSÃO DE CURSO
ORIENTAÇÃO:
Vicente J. P. de Amorim
Março, 2016
João Monlevade/MG
Giovani Romani Ferreguetti Junior
Desenvolvimento de uma Aplicação Android
para o Controle de Gastos Através da
Digitalização de Cupons Fiscais
Orientador: Vicente J. P. de Amorim
Coorientador: Thiago Luange Gomes
Monografia apresentada ao curso de Engenharia de
Computação do Departamento de Computação e Sistemas da Universidade Federal de Ouro Preto como
requisito parcial para obtenção do grau de Bacharel
em Engenharia de Computação
Universidade Federal de Ouro Preto
João Monlevade
Março de 2016
Giovani Romani Ferreguetti Junior
Desenvolvimento de uma Aplicação Android para o Controle de Gastos Através
da Digitalização de Cupons Fiscais/ Giovani Romani Ferreguetti Junior. – João
Monlevade, 22 de março de 201668 p. : il. (algumas color.) ; 30 cm.
Orientador: Vicente J. P. de Amorim
Monografia (graduação) – Universidade Federal de Ouro Preto, 22 de março de
2016.
1. Computação Móvel. 2. Reconhecimento Ótico de Caracteres(OCR). 3.
Processamento Digital de Imagens. 4. Pós-Processamento. 5. Android. 6. OpenCV.
7. Tesseract. 8. SpellingChecker. I. Vicente J. P. Amorim. II. Thiago Luange
Gomes. III. Universidade Federal de Ouro Preto. IV. Instituto de Ciências Exatas
e Aplicadas. V. Título de bacharel em Engenharia de Computação.
CDU 02:141:005.7
Este trabalho é dedicado a minha família e a todas as pessoas que me ajudaram a atingir
este tão sonhado objetivo.
Agradecimentos
Agradeço primeiramente ao meu pai Giovani, que sempre me apoiou em minhas
decisões e que, infelizmente, não pôde me ver concluir o que sempre sonhei. Agradeço
a minha mãe Elza por sempre ter acreditado em mim e por me fazer acreditar que eu
conseguiria. Agradeço, também, aos meus avós Jair e Olívia que sempre me orientaram e
me ajudaram a passar pelas dificuldades que tive durante o percurso.
Agradeço ao meu orientador, Prof. Vicente J. P. Amorim, ao meu coorientador
Prof. Thiago Luange Gomes e ao Prof. Igor Muzetti pela orientação, dedicação e pela
paciência que tiveram.
Agradeço aos meus amigos que fizeram com que eu me tornasse uma pessoa melhor
e permaneceram sempre ao meu lado, nos bons e maus momentos. Em especial ao Belmir
Júnior, Lorraine Campos, Mateus Oliveira, Paula Montenegro e ao pessoal do laboratório
iMobilis.
Por fim, agradeço a todas as pessoas que, diretamente ou indiretamente, contribuíram para a minha formação profissional e pessoal durante esses anos.
“I’ve loved, I’ve laughed and cried
I’ve had my fill, my share of losing
And now, as tears subside
I find it all so amusing
To think I did all that
And may I say, not in a shy way
Oh no, oh no, not me
I did it my way”
(Frank Sinatra, 1968)
Resumo
Estima-se que apenas 3,1% da população brasileira realize o controle de gastos através
de aplicativos digitais. Considerando tal cenário, aplicativos que possibilitem o controle
automático dos gastos podem minimizar o esforço requerido ao usuário tornando-os mais
atraentes. Utilizando técnicas de processamento digital de imagens, reconhecimento ótico de
caracteres e pós-processamento, este trabalho apresenta uma abordagem de reconhecimento
automático dos dados de um cupom fiscal. Abordagem essa que resultou em uma maior
similaridade entre os dados reais e os dados reconhecidos pelo aplicativo. O aplicativo
desenvolvido em Android é responsável pela digitalização de cupons fiscais através de fotos
tiradas pelos usuários. Este trabalho visa contribuir com melhorias que possibilitem um
maior controle de gastos e qualidade de vida das famílias.
Palavras-chaves: Computação Móvel. Reconhecimento Ótico de Caracteres(OCR). Processamento Digital de Imagens. Pós-Processamento. Android. OpenCV. Tesseract. SpellingChecker.
Abstract
It is estimated that only 3.1% of the Brazilian population controls their expenses through
digital applications. Considering the current usage, applications providing a more automated control of expenditures would simplify use for the average user, making them
a more attractive option. Using digital image processing techniques, optical character
recognition, and post-processing, a novel program was developed in Android for automatic
recognition of receipts allowing mobile users to monitor expenses using scanned photos.
The information recognized by the application replicated the actual receipt with great
similarity. This project contributes to improving control of the expenses and quality of
families life.
Key-words: Mobile Computing. Optical Character Recognition(OCR). Digital Image
Processing. Post-processing. Android. OpenCV. Tesseract. SpellingChecker.
Lista de ilustrações
Figura 1 – Elementos de um sistema de processamento digital de imagens(FILHO;
NETO, 1999). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Figura 2 – Resultado de um reconhecimento ótico de caracteres. . . . . . . . . . .
Figura 3 – Asus Zenfone 2(ASUS, 2016). . . . . . . . . . . . . . . . . . . . . . . .
Figura 4 – MacBook Pro(APPLE, 2016). . . . . . . . . . . . . . . . . . . . . . . .
Figura 5 – Integração do NDK e das bibliotecas OpenCV e Tesseract. . . . . . . .
Figura 6 – Controle de versão com o BitBucket . . . . . . . . . . . . . . . . . . .
Figura 7 – Exemplo de detecção de borda utilizando a biblioteca OpenCV. . . . .
Figura 8 – Arquitetura do Tesseract(PATEL; PATEL; PATEL, 2012) . . . . . . .
Figura 9 – Processos de desenvolvimento de software proposto pelo BOPE(ALMEIDA;
PEREIRA, 2015) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Figura 10 – Versão do Tesseract utilizada na realização dos testes. . . . . . . . . . .
Figura 11 – Importando as bibliotecas do OpenCV. . . . . . . . . . . . . . . . . . .
Figura 12 – Biblioteca do OpenCV integrada ao projeto do Android Studio. . . . .
Figura 13 – Biblioteca do Tesseract, Tess-two, integrada ao projeto do Android Studio
Figura 14 – Utilização do NDK no Android Studio . . . . . . . . . . . . . . . . . .
Figura 15 – Criação de um arquivo “.box” no programa qt-box-editor. . . . . . . . .
Figura 16 – Comandos necessários para a criação do arquivo de treinamento “.traineddata”. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Figura 17 – É possível perceber que o dígito 9 possui uma maior degradação no
resultado do algoritmo Wolf em relação ao Sauvola. Isso pode ser
explicado através da má qualidade da impressão, ocasionando em uma
menor variação entre o dígito e o fundo. . . . . . . . . . . . . . . . . .
Figura 18 – Gráfico comparativo dos melhores métodos de binarização de imagens.
Os testes foram realizados utilizando o conjunto inicial de 50 cupons
com o objetivo de determinar a melhor técnica de binarização, para
que então, fosse implementada no aplicativo. Para mais informações,
consulte a tabela 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Figura 19 – Gráfico comparativo dos melhores métodos de segmentação de imagens.
Os testes foram realizados utilizando o conjunto inicial de 50 cupons
com o objetivo de determinar o melhor método de segmentação de
imagens, para que então fosse implementado no aplicativo. Para mais
informações, consulte a tabela 2. . . . . . . . . . . . . . . . . . . . . .
20
22
30
30
31
32
33
35
36
37
38
38
39
40
41
41
44
45
47
Figura 20 – Gráfico comparativo dos treinamentos que apresentam os melhores
resultados. Os testes foram realizados utilizando o conjunto inicial de
50 cupons com o objetivo de determinar qual treinamento produzia o
melhor resultado, para que então fosse utilizado no aplicativo. Para
mais informações, consulte a tabela 2. . . . . . . . . . . . . . . . . . .
Figura 21 – Gráfico comparativo indicando a porcentagem de caracteres e números
que os melhores treinamentos reconhecem. Os testes foram realizados
utilizando o conjunto inicial de 50 cupons com o objetivo de determinar
qual a porcentagem de reconhecimento de caracteres e números, proporcionada pelos treinamentos. Para mais informações, consulte a tabela
3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Figura 22 – Gráfico comparativo mostrando o resultado da aplicação da técnica de
pós-processamento no reconhecimento gerado pelo arquivo de treinamento “por”. Os testes foram realizados utilizando o conjunto de 30
cupons com o objetivo de validar as melhorias proporcionadas pelos
métodos selecionados na fase de testes. Para mais informações, consulte
a tabela 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Figura 23 – Gráfico comparativo mostrando o resultado da aplicação da técnica de
pós-processamento no reconhecimento gerado pelo arquivo de treinamento “t16”. Os testes foram realizados utilizando o conjunto de 30
cupons com o objetivo de validar as melhorias proporcionadas pelos
métodos selecionados na fase de testes. Para mais informações, consulte
a tabela 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Figura 24 – Instalando o OpenCV Manager através do site GooglePlay(GOOGLE. . . ,
2016). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Figura 25 – Instalando o OpenCV Manager através do aplicativo Play Store. . . . .
Figura 26 – Ícone do aplicativo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Figura 27 – Tela inicial do aplicativo. . . . . . . . . . . . . . . . . . . . . . . . . . .
Figura 28 – Tela do aplicativo com o reconhecimento de bordas ativado. . . . . . .
Figura 29 – Estrutura interna dos diretórios criados pelo aplicativo. . . . . . . . . .
Figura 30 – Álbum contendo as fotos utilizadas pelo aplicativo. . . . . . . . . . . .
48
50
51
53
56
56
57
58
59
59
60
Lista de tabelas
Tabela 1 – Tabela apresentando o resultado do reconhecimento utilizando alguns
algoritmos de binarização. . . . . . . . . . . . . . . . . . . . . . . . .
Tabela 2 – Tabela apresentando o resultado do reconhecimento utilizando diversos
treinamentos e métodos de segmentação. . . . . . . . . . . . . . . . .
Tabela 3 – Tabela apresentando o resultado do reconhecimento de caracteres e
números utilizando alguns treinamentos. . . . . . . . . . . . . . . . .
Tabela 4 – Tabela contendo a porcentagem de reconhecimento antes e depois do
pós-processamento utilizando o treinamento “por”. . . . . . . . . . .
Tabela 5 – Tabela contendo a porcentagem de reconhecimento antes e depois do
pós-processamento utilizando o treinamento “t16”. . . . . . . . . . .
. 46
. 49
. 50
. 52
. 54
Lista de abreviaturas e siglas
GPS
Global Positioning System
NDK
Native Development Kit
SDK
Software Development Kit
API
Application Programming Interface
CPU
Central Processing Unit
SPC
Serviço de Proteção ao Crédito
IBOPE
Instituto Brasileiro de Opinião Pública e Estatística
OCR
Optical Character Recognition
ONG
Organização Não-Governamental
NFC-e
Nota Fiscal de Consumidor Eletrônica
RAM
Random Access Memory
MB
Megabyte
GB
Gigabyte
MHz
Megahertz
IDE
Integrated Development Environment
GHz
Gigahertz
Blob
Binary Large Object
CNPJ
Cadastro Nacional de Pessoa Jurídica
Sumário
Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
I
REFERENCIAIS TEÓRICOS
1
1.1
1.1.1
1.2
1.2.1
1.3
1.4
1.5
CONCEITOS BÁSICOS . . . . . . . .
Dispositivos Móveis . . . . . . . . . .
Android . . . . . . . . . . . . . . . . . .
Processamento Digital de Imagens .
Binarização . . . . . . . . . . . . . . . .
Binarização Adaptativa Global . . . . . . . .
Binarização Adaptativa Local . . . . . . . . .
Niblack . . . . . . . . . . . . . . . . . . .
Sauvola . . . . . . . . . . . . . . . . . . .
Reconhecimento Ótico de Caracteres
Pós-Processamento . . . . . . . . . .
Algoritmo de Distância Levenshtein .
2
PESQUISAS RELACIONADAS . . . . . . . . . . . . . . . . . . . . . 24
II
PREPARAÇÃO DA PESQUISA
3
3.1
3.2
MOTIVAÇÃO E OBJETIVOS . . . . . . . . . . . . . . . . . . . . . 27
Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4
4.1
4.1.1
4.1.2
4.1.3
4.1.4
4.1.5
4.1.6
4.1.7
4.1.8
MATERIAIS E MÉTODOS . . . . . . . . . . . . . . . . . . . . . . .
Materiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Smartphone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Plataforma de Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . .
Android Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Android Native Development Kit . . . . . . . . . . . . . . . . . . . . . . .
BitBucket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Framework Para a Verificação de Ortografia(Framework Spelling Checker ) .
OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tesseract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1.1
1.2.1.2
1.2.1.2.1
1.2.1.2.2
17
. . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
18
18
18
19
19
20
21
21
21
22
22
23
26
29
29
29
29
30
30
31
32
32
33
4.2
Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5
5.1
5.2
5.3
5.4
5.5
5.6
PREPARAÇÃO DO AMBIENTE E PLANEJAMENTO DO PROJETO
Configuração do Ambiente com o Tesseract . . . . . . . . . . . . . .
Configuração do Ambiente com o OpenCV . . . . . . . . . . . . . . .
Integração do OpenCV ao Android Studio . . . . . . . . . . . . . . .
Integração do Tesseract ao Android Studio . . . . . . . . . . . . . . .
Integração do Código em C++ ao Android Studio . . . . . . . . . .
Treinando o Tesseract . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
37
37
38
38
39
39
III
RESULTADOS
42
6
6.1
6.2
6.3
6.4
RESULTADOS DOS TESTES . . . . . . . . . . . . . . . . . . . . .
Melhores Métodos de Binarização . . . . . . . . . . . . . . . . . . . .
Melhor Método de Reconhecimento . . . . . . . . . . . . . . . . . . .
Melhores Treinamentos . . . . . . . . . . . . . . . . . . . . . . . . . .
Reconhecimento Ótico de Caracteres e Pós-Processamento Aplicados a Novos Cupons Fiscais . . . . . . . . . . . . . . . . . . . . . . . .
43
43
45
45
7
7.1
7.2
7.3
7.3.1
O APLICATIVO ANDROID DE RECONHECIMENTO DE CUPONS
FISCAIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Técnicas utilizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pré-requisitos para o Funcionamento do Aplicativo no Android . . .
Câmera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Salvamento dos Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
55
55
55
56
57
Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Dificuldades e Desafios Encontrados . . . . . . . . . . . . . . . . . . 64
REFERÊNCIAS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
15
Introdução
De acordo com uma pesquisa realizada pelo Serviço de Proteção ao Crédito(SPC
Brasil)(BRUNO; MIRET, 2016), apenas quatro em cada dez brasileiros realizam o controle
dos seus gastos. Segundo a economista-chefe do SPC Brasil, Marcela Kawauti, “A pesquisa
comprova que muitos dos que dizem fazer um controle sistemático de seus gastos o fazem
com uma frequência bastante aquém da adequada”. A pesquisa revelou, também, que
apenas 3,1% de todos os entrevistados realizam o controle por meio de aplicativos digitais
e para 8,2%, a justificativa de não realizarem o controle dos gastos é a falta de tempo.
Analisando as duas últimas pesquisas anuais realizadas pelo SPC Brasil, a (GANDRA, 2015) e (BRUNO; MIRET, 2016), é possível perceber que a porcentagem de
entrevistados que utilizavam aplicativos para o controle de gastos reduziu de 4% para
3,1% após um ano. Ademais, a porcentagem de entrevistados que utilizavam o caderno de
anotações para o controle dos gastos, aumentou de 23% para 29,8%. Podemos concluir com
essas informações que os consumidores estão, cada vez mais, voltando ao meio tradicional
e trabalhoso de controle de gastos.
Uma pesquisa realizada com mil internautas, através da plataforma Conecta, do
grupo IBOPE(ADMINISTRADORES, 2013), mostrou que 69% dos brasileiros acreditam
que as tecnologias móveis, como exemplo: tablets e smartphones, contribuem positivamente
para uma melhora na qualidade de vida da população brasileira. Além disso, 66% dos
entrevistados acreditam que esses dispositivos móveis são importantes para a formação de
consumidores mais informados.
Portanto, embora a maioria dos consumidores acreditem que os smartphones
são importantes para se tornarem consumidores mais informados, os consumidores que
realizam o controle dos gastos estão abandonando o uso desses dispositivos. Algumas
hipóteses podem ser levantadas para justificar essa afirmação, como exemplo: as funções
disponibilizadas por esses aplicativos não suprem as necessidades dos consumidores ou
demandam muito tempo e esforço, resultando meramente em um trabalho manual.
Logo, são necessárias ferramentas que possam, por exemplo, auxiliar os consumidores a controlarem de forma simples os seus gastos por meio de cálculos e reconhecimento
automático das informações contidas nos cupons fiscais. Dessa forma, o usuário pode ter
todos os seus gastos devidamente classificados e registrados. Tal fato poderia resultar em
uma maior adoção dos meios digitais para o controle de gastos por parte dos consumidores.
Com o intuito de tentar resolver ou contribuir para a resolução dos problemas
citados acima, este trabalho propôs o desenvolvimento de um aplicativo que utiliza técnicas
de processamento digital de imagens e reconhecimento ótico de caracteres para realizar o
Introdução
16
controle de gastos. É necessário apenas que o usuário tire uma foto do cupom fiscal, tendo
este, suas informações reconhecidas e analisadas automaticamente.
Ao final, os resultados apresentados pelo algoritmo aqui utilizado atingiu uma
porcentagem média de reconhecimento igual a 63.34% considerando todos os cupons,
e uma porcentagem de reconhecimento máxima igual a 76.32%. É válido notar que os
cupons utilizados para essa validação possuíam características distintas, como: tipo de
fonte, tamanho da fonte, tamanho do cupom, qualidade da impressão e etc.
Parte I
Referenciais Teóricos
18
1 Conceitos Básicos
Este trabalho aborda diversas áreas e tecnologias da computação, portanto, nas
próximas seções serão apresentados conceitos importantes e trabalhos relacionados que
auxiliarão o leitor a obter um melhor entendimento sobre o seu desenvolvimento.
1.1 Dispositivos Móveis
No final de 2010 as vendas de smartphones já haviam ultrapassado as vendas de
computadores pessoais(TELEGRAPH, 2011). O trabalho apresentado em (GRAC et al.,
2012) tenta explicar o porquê dessa mudança no mercado, relatando que tal popularidade
pode ser parcialmente atribuída às incríveis funcionalidades fornecidas pelos mesmos e a
conveniência que oferecem aos usuários finais. De fato, os dispositivos móveis não servem
apenas para ligações e mensagens de texto, mas para entretenimento, navegação na internet,
uso de redes sociais, navegação GPS(Global Positioning System), transferências bancárias
e etc. Ademais, os aplicativos móveis podem ser facilmente baixados de várias lojas de
aplicativos online. Em julho de 2015, foram estimados 1 milhão e 600 mil aplicativos
apenas na loja de aplicativos do Google(STATISTA, 2015).
Neste trabalho decidiu-se pelo desenvolvimento de uma aplicação para dispositivos
móveis devido a portabilidade, ao fácil acesso e as ferramentas avançadas proporcionadas
pelos mesmos.
1.1.1 Android
O Android é um framework de código aberto mantido pela Google e utilizado na
maioria dos smartphones atuais. Ele foi criado com foco em usuários que querem um
dispositivo com um bom visual, de fácil usabilidade, câmera, jogos e etc. Além disso, por
ter sua licença flexível, é permitido ao fabricante realizar alterações no código-fonte para
personalizar o seu produto(LECHETA, 2015).
Além da facilidade que provê aos desenvolvedores através de uma plataforma
com diversos recursos, o sistema operacional do Android é baseado no kernel do Linux,
responsável por gerenciar a memória, os processos, as threads, segurança dos arquivos e
pastas, além de redes e drivers(LECHETA, 2015).
A aplicação proposta por este trabalho foi desenvolvida em Android devido aos
seguintes fatores: maior integração com as ferramentas utilizadas, código aberto, extensa
documentação disponível na internet, e, além desses fatores, estima-se que o Android
Capítulo 1. Conceitos Básicos
19
represente 89,6% do mercado brasileiro(DIGITAL, 2015). Portanto, o seu desenvolvimento
torna-se mais interessante devido ao maior público alvo.
1.2 Processamento Digital de Imagens
Gonzalez e Woods (2010) explicam que o processamento digital de imagens envolve
processos cujas entradas e saídas são imagens. Tais processos nos permite aprimorar a
qualidade da imagem, possibilitando um melhor reconhecimento de suas características.
Uma imagem digital é composta por um número finito de elementos, denominados
pixels, cada um com localização e valor específicos(GONZALEZ; WOODS, 2010). Assim,
quando falamos sobre a resolução de uma imagem, estamos nos referindo a quantidade de
pixels ao longo de sua largura e altura.
O início do processamento digital de imagens ocorreu na indústria dos jornais,
quando as imagens eram enviadas por cabo submarino, entre Londres e Nova York, que eram
codificadas por um equipamento de impressão, e logo após, a imagem era reconstruída.
Atualmente, o processamento digital de imagens é utilizado por diversas áreas, como
exemplo: em medicina auxilia no diagnóstico médico, em biologia possibilita a contagem
de células contidas em uma imagem do microscópio. É utilizado em geoprocessamento,
entre outras áreas(FILHO; NETO, 1999).
A Figura 1 ilustra os principais componentes de um sistema de processamento
digital de imagens. O primeiro componente é responsável pela aquisição da imagem, que
pode ocorrer, por exemplo, por meio de uma câmera ou um scanner. O segundo componente
é responsável pelo armazenamento da imagem, o terceiro é responsável pelo processamento,
que envolve os procedimentos sob a forma algorítmica que irão tratar a imagem. E, por
fim, o quarto componente representa o modo como a mesma será exibida.
1.2.1 Binarização
Os algoritmos de binarização objetivam a separação de uma imagem em duas
classes: fundo(background) e frente(foreground). O algoritmo recebe como entrada, uma
imagem em escala de cinza e o valor de um limiar, que pode ser estabelecido de maneira fixa
pelo desenvolvedor ou automática. Nesse caso um algoritmo analisaria a imagem e definiria
um limiar para toda a imagem(seção 1.2.1.1) ou para cada região(seção 1.2.1.2). Portanto,
com o valor do limiar de uma região e o valor dos pixels contidos nela, é realizada uma
comparação: se o valor do pixel for menor ou igual ao valor do limiar, o valor resultante do
pixel no será 0(fundo). Se o valor do pixel for maior que o valor do limiar, então o valor
resultante do pixel será 1(frente). Dessa forma, teremos uma imagem binarizada em preto
e branco(GONZALEZ; WOODS, 2010).
20
Capítulo 1. Conceitos Básicos
Figura 1: Elementos de um sistema de processamento digital de imagens(FILHO; NETO,
1999).
1.2.1.1 Binarização Adaptativa Global
O algoritmo de binarização adaptativa global escolhe um limiar(T ) através de
uma função aplicada ao longo da imagem(ft (x, y)), e compara o valor de intensidade de
cada pixel da imagem(f (x, y)) com o limiar determinado pelo algoritmo. Se a intensidade
do pixel for maior que o limiar determinado pelo algoritmo, o valor de g(x, y) será
1(frente)(GONZALEZ; WOODS, 2010). Se a intensidade do pixel for menor ou igual ao
limiar do algoritmo, o valor de g(x, y) será 0(fundo). Uma imagem binarizada (g(x, y)) é
definida como:
T = T (f (x, y), ft (x, y))
g(x, y) =
Y
]
0
[ 1
se f (x, y) Æ T
se f (x, y) > T
(1.1)
(1.2)
Como exemplo, temos o algoritmo Otsu(OTSU, 1979), que é um dos mais antigos
e famosos.
Neste trabalho, essa técnica não se mostrou eficaz devido a variação de intensidade
da luz ao longo da imagem considerada (cupom fiscal), como exemplo, o efeito da sombra.
21
Capítulo 1. Conceitos Básicos
1.2.1.2 Binarização Adaptativa Local
De acordo com Addicam, Malik e Tian (2012), a binarização local adaptativa
estabelece o limiar baseando-se na análise de uma área local imediata relacionada a cada
pixel da imagem. Portanto, eles operam de formas diferentes em imagens e regiões distintas,
variando, por exemplo, o limiar ao longo de uma mesma imagem.
Essa técnica se mostrou muito eficaz, e, por isso, foi utilizada neste trabalho.
1.2.1.2.1 Niblack
O algoritmo de binarização adaptativa local Niblack calcula o limiar através da
passagem de uma janela retangular sobre a imagem em escala de cinza. A computação
do limiar é baseada na média local m e o desvio padrão s de todos os níveis de cinza dos
pixels da janela, através da equação abaixo, onde: N P é o número de pixels na imagem, m
é a média dos valores dos pixels e k é fixado a -0.2 pelos autores(KHURSHID et al., 2009).
Û
TN iblack = m + k ú s = m + k ú
ÿ
1
ú
(pi ≠ m)2
NP
(1.3)
Uma vantagem do algoritmo é que ele sempre identifica as regiões de texto corretamente mas tende a produzir muito ruído em regiões que não possuem texto(KHURSHID
et al., 2009).
1.2.1.2.2 Sauvola
O algoritmo de binarização adaptativa local Sauvola foi desenvolvido para melhorar
o método proposto pelo algoritmo Niblack através da computação do limiar usando um
intervalo dinâmico(R) do desvio padrão(s) da imagem em escala de cinza. Onde k possui
o valor fixado a 0.5 e R a 128(KHURSHID et al., 2009).
TSauvola = m ú (1 ≠ k ú (1 ≠
s
))
R
(1.4)
Esse método obtém um desempenho melhor que o Niblack em imagens onde os pixels
do texto possuem valores perto de 0, e os pixels do fundo, valores próximos a 255, ambos
em escala de cinza. Entretanto, em imagens onde os valores de cinza do texto e do fundo
são próximos uns dos outros, os resultados se degradam significativamente(KHURSHID et
al., 2009).
Capítulo 1. Conceitos Básicos
22
1.3 Reconhecimento Ótico de Caracteres
Segundo Bhaskar, Lavassar e Green (2010), o Reconhecimento Ótico de Caracteres(OCR) é a tradução mecânica ou eletrônica de imagens escaneadas, escritas à mão ou
impressas por meios eletrônicos, para textos codificados em máquinas.
A área de reconhecimento ótico de caracteres vem sendo desenvolvida há mais de 80
anos, com a primeira patente criada pelo alemão Gustav Tauschek, em 1929. Atualmente,
ela possui muitas aplicações, como exemplo: serviço postal, tradução de textos, digitalização
de livros antigos e reconhecimento de placas de veículos(BHASKAR; LAVASSAR; GREEN,
2010). A Figura 2 mostra um exemplo do resultado de um reconhecedor ótico de caracteres.
Figura 2: Resultado de um reconhecimento ótico de caracteres.
1.4 Pós-Processamento
O pós-processamento é a última atividade de uma série de estágios que definem
o reconhecimento ótico de caracteres. Seu principal objetivo é detectar e corrigir erros
linguísticos advindos da saída da ferramenta que é utilizada para o reconhecimento(BASSIL;
ALWANI, 2012).
Bassil e Alwani (2012) explicam que dois tipos de erros podem surgir de um
reconhecimento ótico de caracteres:
• Erro sintático, por exemplo, a palavra “testd’; e
• Erro semântico, por exemplo, na frase: “como está o seu dia?”. Se o resultado fosse
“comum está seu dia?”, haveria um erro de reconhecimento, porém a palavra pertence
ao dicionário.
Em relação aos tipos de correção que podem ser realizadas no texto, Bassil e Alwani (2012),
abordam os três principais: correção de erro manual, correção de erro baseado em dicionário
e correção de erro baseado em contexto. A primeira abordagem é, intuitivamente, a maneira
mais fácil de corrigir um erro causado por um reconhecimento ótico de caracteres. Nesse
caso, um grupo de pessoas será contratado para corrigir manualmente os erros. Embora a
Capítulo 1. Conceitos Básicos
23
técnica seja a maneira mais fácil de corrigir o problema, necessitará de intervenção humana
contínua. A segunda abordagem corrige as palavras com base em um dicionário, através
da seleção das palavras candidatas a substituir a palavra errada. A terceira abordagem
corrige os erros baseando-se no erro gramatical e na análise do contexto, portanto, poderá
resolver ambos os tipos de erros descritos anteriormente.
Neste trabalho foi usada a segunda abordagem, pois ela não requer a conexão ativa
com a internet.
1.5 Algoritmo de Distância Levenshtein
O algoritmo de distância Levenshtein, também conhecido como distância de edição, calcula o número mínimo de operações necessárias para transformar um segmento
de caracteres em outro. As operações permitidas são: inserção, substituição e remoção(LEVENSHTEIN, 2016).
A implementação desse algoritmo(ALGORITHM. . . , 2016) foi utilizada para calcular a porcentagem de reconhecimento de caracteres dos cupons utilizados para os testes.
Neste trabalho ela foi utilizada no aplicativo para determinar a porcentagem de similaridade
das palavras sugeridas pelo dicionário e a palavra errada que deve ser substituída.
24
2 Pesquisas Relacionadas
Na literatura atual existem muitos trabalhos correlatos ao aqui descrito, mas,
eles se diferem pelos objetivos, técnicas ou pela sequência de passos utilizados para
o reconhecimento dos cupons fiscais. Nos próximos parágrafos, serão apresentados os
trabalhos correlatos e as suas principais diferenças.
O trabalho proposto por Heng (2013) tem como o objetivo principal facilitar a
divisão de contas em bares, restaurantes e etc. Para isso, o usuário deverá tirar uma foto da
conta e, manualmente, definir as regiões que contém os itens e os preços na imagem. Dessa
forma, os dados serão reconhecidos, listados, e quem for dividir a conta, irá selecionar os
itens consumidos. No artigo(HENG, 2013), há menção ao uso de um algoritmo adaptativo
para a binarização, entretanto, não é especificada a técnica utilizada. Após essa fase, a
imagem é reconhecida, utilizando a biblioteca Tesseract sem treinamento, e tem o seu texto
processado, de forma que são identificados os itens contidos nas imagens. O artigo não
apresenta resultados numéricos, como exemplo, porcentagem de reconhecimento de palavras
ou caracteres, ele apenas relata que a aplicação obteve sucesso no seu funcionamento.
Hasnat, Rahman e Khan (2009) propõem um software de reconhecimento ótico
de caracteres para a linguagem Bengali, que combina o Tesseract a um software de
reconhecimento ótico de caracteres, denominado BanglaOCR. Portanto, este trabalho
foca principalmente no treinamento do Tesseract e nas técnicas de pós-processamento.
Inicialmente foram criados quatorze treinamentos diferentes para determinar qual combinação de treinamentos produzia os melhores resultados. Logo após, foi desenvolvido
um pós-processamento em dois níveis: o primeiro corrige problemas de reconhecimento
baseando-se em regras específicas do próprio idioma, como exemplo a ordem dos caracteres.
E o segundo passo, utiliza um dicionário de cento e oitenta mil palavras, cuja função é
verificar a grafia das palavras contidas no texto. O resultado final do reconhecimento foi
de 93% para imagens com boa qualidade.
O trabalho desenvolvido por Bassil e Alwani (2012), propõe um algoritmo de
pós-processamento cujo objetivo é corrigir as palavras com erros sintáticos e semânticos
baseando-se em seu próprio contexto. O algoritmo utiliza o serviço de correção de palavras
online mantido pela Google. Ele divide o texto resultante do reconhecimento ótico de
caracteres em blocos de cinco palavras, quantidade julgada suficiente para haver um
contexto. Tais blocos são enviados ao serviço do Google, e quando a resposta não contém
a frase “você quis dizer...”, considera-se o bloco como correto. Caso contenha tal trecho
possa ser encontrado na resposta, substitui-se o bloco que está sendo consultado pelo bloco
recomendado pelo serviço. Segundo Bassil e Alwani (2012), o algoritmo proposto melhorou
Capítulo 2. Pesquisas Relacionadas
25
a taxa de erro em 690% para um documento em inglês e 403% para um documento em
árabe.
Outros projetos possuem uma proposta bastante similar a deste trabalho, como
exemplo: o NFSCAN(NFSCAN, 2015). O referido projeto utiliza técnicas de processamento
digital de imagens e reconhecimento ótico de caracteres para o reconhecimento de dados
dos cupons fiscais, para facilitar a doação dos créditos gerados pelas notas fiscais às
ONGs(Organização Não-Governamental). Embora correlata, ela possui uma aplicabilidade
muito específica e por isso reconhece apenas 4 informações dos cupons, que são: data,
número do Cadastro Nacional de Pessoas Jurídicas(CNPJ), número de emissão e o valor
da compra. A ausência de uma documentação específica sobre sua implementação e seus
resultados, impede uma discussão mais aprofundada.
Parte II
Preparação da Pesquisa
27
3 Motivação e Objetivos
3.1 Motivação
O Serviço de Proteção ao Crédito(SPC Brasil) realizou um estudo que revelou que
apenas 48,1% dos entrevistados se consideram organizados financeiramente, enquanto que
62,8% admitem sentir algum tipo de dificuldade para realizar o controle de suas receitas,
despesas e investimentos. Ademais, dentre os consumidores entrevistados, apenas 3,1%
afirmam realizar o controle através de aplicativos digitais, diante de 21% que o fazem
através de planilhas, e 29,8% através do caderno de anotações(BRUNO; MIRET, 2016).
Diante deste cenário, tornam-se necessárias ferramentas que possam auxiliar os
consumidores a controlarem de forma simples os seus gastos e eliminar a tarefa de digitar
todas as informações do cupom fiscal. Tais ferramentas devem permitir a interpretação
de maneira automática dos dados de um cupom fiscal, além de realizar todos os cálculos
necessários para o controle dos gastos. O usuário teria todos os seus gastos devidamente
registrados e classificados, necessitando apenas da foto de um cupom fiscal tirada através
de seu dispositivo móvel.
Para implementar uma aplicação baseada no reconhecimento de imagem para
o controle dos gastos são necessárias técnicas de processamento digital de imagens e
reconhecimento ótico de caracteres de forma a permitir a obtenção automática dos dados
dos cupons fiscais. Entretanto, dependendo da qualidade do cupom e da fonte utilizada
para a sua escrita, essas duas técnicas podem não ser suficientes. Alguns trabalhos prévios,
como os propostos por Hasnat, Rahman e Khan (2009) e Bassil e Alwani (2012) abordam
um último passo chamado de pós-processamento, que é uma técnica cujo objetivo é
melhorar o resultado do reconhecimento ótico de caracteres através de dicionários online
ou offline. Considerando que a internet não está disponível todo o tempo, faz-se necessário
o desenvolvimento de uma aplicação que possibilite todas essas funções sem esse recurso.
No Brasil, até o momento, o projeto de código aberto NFScan é o que possui
uma maior semelhança com este trabalho devido às técnicas de processamento digital
de imagens e reconhecimento ótico de caracteres aplicadas às fotos obtidas pelo usuário.
Entretanto, diferentemente do objetivo proposto por esse trabalho, seu objetivo é fazer a
doação para uma ONG(Organização Não-Governamental) do crédito gerado pelas notas
fiscais(NFSCAN, 2015).
Capítulo 3. Motivação e Objetivos
28
3.2 Objetivos
O principal objetivo desta pesquisa foi a implementação de um aplicativo em
Android que pudesse, por meio de uma foto obtida pelo usuário com o smartphone, realizar
o reconhecimento dos caracteres e obter todas as informações contidas no cupom fiscal de
forma automática. Assim, a única função a ser desempenhada pelo usuário é tirar uma
foto. O aplicativo realiza as seguintes funções:
1. Permite que o usuário tire uma foto do cupom fiscal com apenas um clique na
tela. Algumas instruções visuais orientam o usuário para que ele possa ajustar o
alinhamento da câmera.
2. Utiliza uma técnica de binarização da imagem, para, além de diminuir o espaço
ocupado pela mesma na memória interna do dispositivo, possibilite o reconhecimento
de caracteres.
3. Realiza o reconhecimento de caracteres utilizando uma ferramenta cujo treinamento
produz os melhores resultados.
4. Com o auxílio de um dicionário do próprio Android, corrige as palavras que apresentam erros de reconhecimento.
29
4 Materiais e Métodos
Neste capítulo serão apresentadas as ferramentas que foram utilizadas no decorrer
deste trabalho, assim como os métodos utilizados durante o desenvolvimento.
4.1 Materiais
4.1.1 Smartphone
Para os testes de execução do aplicativo e as análises dos diversos métodos utilizados
no desenvolvimento deste projeto foi utilizado o Smartphone Zenfone 2 da Asus(ASUS,
2016), como na Figura 3, com as seguintes especificações:
1. Sistema Operacional: Android 5.0 ASUS ZenUI Lollipop.
2. Memória RAM: 4GB.
3. Processador: Intel Atom 64-bit 2.3GHz.
4. Processador gráfico: PowerVR 6430 533MHz.
5. Resolução do display: 1920x1080 pixels.
6. Resolução da Câmera: PixelMaster 13 MP abertura f/2.0.
7. Memória interna: 32GB.
4.1.2 Plataforma de Desenvolvimento
As análises dos métodos que produzem os melhores resultados no reconhecimento
ótico de caracteres e todo o desenvolvimento do aplicativo foram realizadas em um MacBook
Pro, como na Figura 4, com as seguintes especificações:
1. Sistema Operacional: Mac OS X El Capitán versão 10.11.1.
2. Memória RAM: 16GB 1600 MHz DDR3.
3. Processador: Intel Core i7 2.9GHz.
4. Processador gráfico: Intel HD Graphics 4000 1536 MB.
5. Disco Rígido: 750GB.
Capítulo 4. Materiais e Métodos
30
Figura 3: Asus Zenfone 2(ASUS, 2016).
Figura 4: MacBook Pro(APPLE, 2016).
4.1.3 Android Studio
O Android Studio(Figura 5) é uma IDE(Integrated Development Environment) baseada no InteliJ Community Version cuja função é prover um ambiente de desenvolvimento,
depuração, testes e profile multiplataforma para Android(CARVALHO, 2013).
Neste trabalho, o Android Studio foi utilizado devido a necessidade de integração da
aplicação com a biblioteca OpenCV, a biblioteca do Tesseract e o NDK(Native Development
Kit). Por isso, foi necessária uma ferramenta que pudesse proporcionar um desenvolvimento
integrado.
4.1.4 Android Native Development Kit
O NDK(Native Development Kit) é um kit de ferramentas que permite a implementação de partes de um aplicativo Android utilizando linguagens de código nativo (C
e C++). Segundo NDK (2016a) o NDK é mais utilizado em aplicações que demandam
Capítulo 4. Materiais e Métodos
31
Figura 5: Integração do NDK e das bibliotecas OpenCV e Tesseract.
muito da CPU, como jogos, processamento de sinais e simulações físicas.
Neste trabalho foi necessária a utilização do NDK para integrar um código em
C++(WOLF, 2009) que implementa o método de binarização adaptativa local (Sauvola),
seção 1.2.1.2.2.
4.1.5 BitBucket
Ao desenvolver um aplicativo é interessante que haja um controle de versão para
evitar situações como: conflitos durante as alterações do código, perda de código ou, até
mesmo a perda completa do projeto. Por isso, para possibilitar uma melhor produtividade
e uma maior seguraça durante o desenvolvimento, foi utilizado o controle de versão de
código aberto Git(GIT, 2016), com o serviço de hospedagem BitBucket(BITBUCKET,
2016).
O BitBucket(Figura 6) permite ao usuário obter uma quantidade ilimitada de
repositórios privados gratuitamente, diferentemente do GitHub(GITHUB, 2016), que
permite apenas o armazenamento em repositórios públicos.
Capítulo 4. Materiais e Métodos
32
Figura 6: Controle de versão com o BitBucket
4.1.6 Framework Para a Verificação de Ortografia(Framework Spelling Checker )
Conforme discutido na seção 1.4, o pós-processamento implementado neste trabalho utiliza um dicionário do próprio sistema operacional Android para corrigir as
palavras que contenham erros de grafia. Para isso foi utilizado o Framework Spelling
Checker(SPELLING. . . , 2016), que faz parte das APIs de serviços de texto fornecidas pela
plataforma Android.
Quando recebe uma palavra que contenha erros de grafia, o framework retorna
sugestões de palavras que poderão substituir aquela consultada, mantendo tais saídas em
ordem de similaridade. Ademais, caso seja consultada uma palavra que se encontre no
dicionário, o framework retornará a mesma e suas semelhantes.
4.1.7 OpenCV
A OpenCV (Open Source Computer Vision Library) é uma biblioteca de código
livre que implementa uma grande variedade de ferramentas para a interpretação de imagens.
Além de suportar funções primitivas, como exemplo: binarização, filtros, pirâmides e etc,
também possui algoritmos que podem ser utilizados para a calibração de câmeras, detecção
de faces, análise de movimentos e formas geométricas, reconstrução 3D e segmentação de
imagens(INTEL CORPORATION, 1999-2001).
Capítulo 4. Materiais e Métodos
33
Neste trabalho, por ser uma biblioteca de código livre, possibilitar a implementação
em Android e possuir uma extensa documentação, a OpenCV foi utilizada na implementação de funções que realizam, por exemplo: conversão de imagem colorida para a escala de
cinza, binarização e detecção de bordas, como no exemplo da Figura 7.
Figura 7: Exemplo de detecção de borda utilizando a biblioteca OpenCV.
4.1.8 Tesseract
O Tesseract é uma biblioteca de código aberto utilizada para o reconhecimento ótico
de caracteres. O seu desenvolvimento iniciou-se em 1985 pela Hewlett Packard e continuou
até 1996. De 1996 até 2006 pouco foi desenvolvida, até que o código foi disponibilizado
sob a licença de código aberto(BHASKAR; LAVASSAR; GREEN, 2010). Atualmente a
Google é responsável pelo projeto.
Com base na Figura 8, o reconhecimento de caracteres divide-se em cinco passos(SMITH, 2007):
1. A imagem em escala de cinza é transformada em uma imagem binarizada, com a
ajuda dos algoritmos de binarização adaptativa.
Capítulo 4. Materiais e Métodos
34
2. É realizada a análise de componentes conectados, utilizada para armazenar um esboço
da divisão dos componentes, assim, esses traçados são interconectados, formando
Blobs(Binary Large Object).
3. Os Blobs são organizados em linhas de texto que serão particionadas em palavras de
acordo com o espaço entre os caracteres.
4. Nesta etapa ocorre o reconhecimento em duas fases:
a) É realizada a primeira passagem pelo arquivo para o reconhecimento de todas
as palavras. Cada palavra que tiver o seu reconhecimento satisfatório é passada
para um classificador adaptativo como um arquivo de treinamento. Dessa forma,
o classificador adaptativo pode melhorar o seu reconhecimento conforme passa
pelo resto do arquivo.
b) O classificador adaptativo varre novamente todo o texto para melhorar as
palavras que não foram reconhecidas satisfatoriamente na primeira tentativa.
5. A fase final é responsável por solucionar espaços fuzzy(trata o conceito de verdade parcial: “sim” e “não” tornam-se “talvez” e “quase”(ABAR, 2004)) e verificar hipóteses
alternativas para localizar pequenos caracteres.
Neste trabalho foi utilizada a biblioteca Tesseract por ser considerada uma das
melhores bibliotecas para o reconhecimento ótico de caracteres e por possuir fácil integração
com aplicativos Android.
4.2 Métodos
O desenvolvimento desse trabalho ocorreu dentro do laborátorio de computação
móvel iMobilis(IMOBILIS, 2016), que se encontra na Universidade Federal de Ouro Preto,
no campus João Monlevade. Esse laboratório segue a metodologia de gerenciamento ágil
de projetos BOPE(PEREIRA; CARNEIRO; PEREIRA, 2013), cujo objetivo é implantar
um processo de desenvolvimento que possa guiar os estudantes de graduação e garantir a
qualidade dos produtos desenvolvidos no laboratório(ALMEIDA; PEREIRA, 2015).
O BOPE propõe regras que guiam os alunos durante o desenvolvimento dos seus
projetos, como exemplo: criação do backlog, criação do cronograma, definição de reuniões
técnicas, definição de reuniões com os membros de uma equipe, definição de reuniões
semanais com todos os membros do laboratório e etc. Ao concluir cada atividade proposta
no backlog do projeto, são gerados artefatos que poderão ser validados pelos coordenadores
do laboratório. A Figura 9 exemplifica, através de um diagrama de atividades, o processo
de desenvolvimento proposto pelo BOPE(ALMEIDA; PEREIRA, 2015).
Capítulo 4. Materiais e Métodos
Figura 8: Arquitetura do Tesseract(PATEL; PATEL; PATEL, 2012)
35
Capítulo 4. Materiais e Métodos
36
Figura 9: Processos de desenvolvimento de software proposto pelo BOPE(ALMEIDA;
PEREIRA, 2015)
37
5 Preparação do Ambiente e Planejamento
do Projeto
Neste capítulo são abordados os procedimentos que foram efetuados com o objetivo
de preparar o ambiente, tanto para a realização dos testes no computador quanto para o
desenvolvimento do aplicativo no Android Studio.
5.1 Configuração do Ambiente com o Tesseract
Todos os testes de reconhecimento ótico de caracteres utilizando o Tesseract para
a análise das técnicas que produzem um melhor resultado, foram realizadas a partir das
bibliotecas em C++ disponibilizadas pelo site oficial(TESSERACT-OCR, 2016).
Dado que o sistema operacional da máquina é o Mac OS El capitán, cujas configurações foram apresentadas na seção 4.1.2, os binários e as bibliotecas referentes ao
Tesseract foram instaladas apenas utilizando o gerenciador de pacotes “brew” do Sistema
Operacional. A Figura 10 mostra as informações sobre a ferramenta utilizada nos testes.
Figura 10: Versão do Tesseract utilizada na realização dos testes.
5.2 Configuração do Ambiente com o OpenCV
Os testes iniciais utilizando as técnicas de processamento digital de imagens foram
realizados em um MacBook Pro, conforme explicado na seção 4.1.2. O código fonte, junto
com as bibliotecas foram obtidos através do site(OPENCV, 2016a). Após o download, foi
necessário compilar a biblioteca conforme o tutorial (OPENCV, 2016b).
Após a compilação dos códigos binários foi possível importar as bibliotecas para o
desenvolvimento em C/C++, como mostrado na Figura 11.
Capítulo 5. Preparação do Ambiente e Planejamento do Projeto
38
Figura 11: Importando as bibliotecas do OpenCV.
5.3 Integração do OpenCV ao Android Studio
Para integrar a biblioteca OpenCV ao Android Studio foi necessário, primeiramente, fazer o download do SDK(System Development Kit) do OpenCV em seu site
oficial(OPENCV, 2016a).
Após o download do SDK do OpenCV, foi necessário importar as bibliotecas
contidas nessa pasta, para o projeto. Além da importação foram feitas configurações nos
arquivos do próprio Android Studio, como exemplo, o “build.gradle”, conforme a Figura
12.
Figura 12: Biblioteca do OpenCV integrada ao projeto do Android Studio.
5.4 Integração do Tesseract ao Android Studio
Para utilizar as funções disponíveis na biblioteca do Tesseract no projeto do Android
Studio foi necessário utilizar a biblioteca Tess-two, que é um fork do Tesseract para o
Android e está disponível em (TESS-TWO, 2016).
Esse fork trabalha com a versão do Tesseract v3.05.00 e para integrá-la ao projeto
foi necessária a utilização do NDK (seção 4.1.4) para a compilação da biblioteca. Após
a compilação ocorreu a importação dos arquivos gerados ao projeto e a configuração do
arquivo do Android Studio “build.gradle”, conforme a Figura 13.
Capítulo 5. Preparação do Ambiente e Planejamento do Projeto
39
Figura 13: Biblioteca do Tesseract, Tess-two, integrada ao projeto do Android Studio
5.5 Integração do Código em C++ ao Android Studio
Para utilizar um código desenvolvido em C++ em um aplicativo Android foi
necessário realizar o download do NDK(Native Code Development), explicado na seção
4.1.4, que está disponível no site do Android(NDK, 2016b). Após o download, integrou-se
as ferramentas de compilação javah e ndk-build ao Android Studio, conforme explicado no
tutorial (JUNIOR, 2016).
O código em C++ utilizado neste trabalho foi desenvolvido por Wolf (2009). O
mesmo implementa três técnicas de processamento digital de imagens: Sauvola, Niblack
e Wolf. Neste trabalho foi utilizada apenas a técnica proposta por Sauvola(SAUVOLA;
PIETIKAKINEN, 1999). Portanto, o código em C++ sofreu algumas alterações para
tornar possível a sua utilização direta através da classe que irá invocar o método.
A Figura 14 mostra estrutura dos diretórios do NDK no projeto, além da implementação em C++ do código citado acima.
5.6 Treinando o Tesseract
O Tesseract realiza o reconhecimento das fontes mais comuns de diversos idiomas,
e, por isso, quando deseja-se que ele reconheça novas fontes ou novos idiomas, é necessário
ensiná-lo. Tal processo é denominado treinamento(WHITE, 2012).
O treinamento ocorre através da representação dos caracteres por meio de uma
imagem e uma descrição do símbolo contido nessa. Por exemplo, qual letra do alfabeto é
representada por determinado segmento de imagem. Além disso, pode-se ensinar como
essa nova “linguagem” funciona através da combinação dos símbolos, formando portanto,
um dicionário(WHITE, 2012).
Capítulo 5. Preparação do Ambiente e Planejamento do Projeto
40
Figura 14: Utilização do NDK no Android Studio
Para realizar o treinamento do Tesseract foram seguidos os seguintes passos(HOW. . . ,
2016):
1. Binarização de todas as imagens que seriam utilizadas no processo, através do método
proposto por Sauvola(SAUVOLA; PIETIKAKINEN, 1999).
2. Utilização do software Qt-box-editor(QT-BOX-EDITOR, 2016) para criação de
um arquivo para cada imagem, onde são definidas as regiões do texto que contém
caracteres e quais estão contidos nessas regiões, conforme representado na Figura 15.
3. Utilização dos arquivos binários do Tesseract para gerar o arquivo de treinamento,
como mostrado na Figura 16.
Capítulo 5. Preparação do Ambiente e Planejamento do Projeto
41
Figura 15: Criação de um arquivo “.box” no programa qt-box-editor.
Figura 16: Comandos necessários para a criação do arquivo de treinamento “.traineddata”.
Parte III
Resultados
43
6 Resultados dos Testes
O testes, cujos resultados serão mostrados nas próximas seções basearam-se em
um conjunto de 80 cupons fiscais obtidos de diversos estabelecimentos comerciais. Desses
80 cupons fiscais, 50 foram utilizados para os testes de processamento digital de imagens e
para os treinamentos da ferramenta OCR. Os 30 restantes foram utilizados para a validação
do método proposto. Após a obtenção dos 80 cupons, cada cupom fiscal foi fotografado e
seus dados manualmente digitados. Tal procedimento foi necessário pois, considerando o
reconhecimento humano o caso ótimo, foi possível comparar quais caracteres a ferramenta
OCR reconheceu, com os reais caracteres contidos no cupom. Assim, foi possível determinar
qual a porcentagem de acerto da ferramenta OCR.
Neste trabalho, foram realizados testes envolvendo diversos filtros e técnicas de processamento digital de imagens, como exemplo, binarização, filtro mediano, filtro gaussiano,
erosão e dilatação, transformada perspectiva e etc. Entretanto, foi possível perceber que
alguns métodos pioravam a qualidade da imagem, mesmo resultando em uma porcentagem
de reconhecimento maior. Isso pode ocorrer devido a degradação da imagem, ocasionando
portanto perdas de informação. Todos os dados obtidos através da utilização das técnicas
citadas anteriormente são apresentados na tabela 1.
Conforme explicado na seção 5.6, o treinamento é um processo de ensinamento
da ferramenta OCR sobre qual a representação de determinados segmentos contidos nas
imagens. Neste trabalho ele foi necessário devido as diferentes fontes utilizadas para
a impressão dos cupons fiscais. Portanto, com base nos 50 cupons utilizados para os
testes iniciais, foram obtidos 55 treinamentos, desde um treinamento para cada cupom
fiscal, até um treinamento utilizando todos os cupons fiscais. Ademais, foram incluídos
os treinamentos “por” e “eng”, que são arquivos de treinamento baseados nas principais
fontes utilizadas para a escrita digital, que, combinadas formam palavras dos idiomas
português e inglês, além de números e caracteres especiais. Esses arquivos se encontram
disponibilizados na página oficial do Tesseract(TESSERACT-OCR, 2016).
6.1 Melhores Métodos de Binarização
Foram testados diversos métodos de binarização, com abordagens adaptativas locais,
adaptativas globais e limiares fixos, sendo esses, definidos pelo próprio desenvolvedor.
O método de binarização com o limiar fixo se mostrou a técnica menos eficiente
pois não consegue lidar com as diferenças de iluminação, como exemplo, sombras. A função
de binarização proporcionada pelo Tesseract, dentre as cinco melhores técnicas, se mostrou
Capítulo 6. Resultados dos Testes
44
a que produz os piores resultados.
De acordo com o gráfico da Figura 18 é possível perceber que os melhores resultados
foram produzidos pelas técnicas adaptativas, ambas, global e local. O que pode ser
facilmente entendido, devido ao seu propósito, que é se adequar à imagem que está sendo
binarizada.
Os dois melhores resultados, produzidos pelo algoritmo Sauvola e Wolf, representam
a técnica de binarização adaptativa local, explicada na seção 1.2.1.2. Esse resultado pode
ser facilmente explicável, pois, diferentemente do método de binarização adaptativa global,
ele se adapta às regiões de uma imagem, ou seja, cada região da mesma terá um limiar
específico.
Para o reconhecimento de cupons fiscais, o método de binarização Sauvola se
mostrou mais eficiente que o Wolf devido a sua menor sensibilidade em relação à qualidade
de impressão. Por isso, o algoritmo de binarização Wolf causa uma maior degradação
dos caracteres quando estes possuem defeitos de impressão, resultando em uma menor
diferença entre a cor do texto e o fundo da imagem, conforme pode ser percebido na Figura
17. No artigo (KHURSHID et al., 1979), os autores também perceberam esta dificuldade
relatando que em ocasiões onde a variação da intensidade é muito pequena, o algoritmo
Wolf pode fazer alguns caracteres desaparecerem.
Por ser um algoritmo amplamente difundido no meio científico e por apresentar o melhor resultado, o algoritmo escolhido no desenvolvimento deste trabalho foi o
Sauvola(SAUVOLA; PIETIKAKINEN, 1999), explicado na seção 1.2.1.2.2.
Figura 17: É possível perceber que o dígito 9 possui uma maior degradação no resultado
do algoritmo Wolf em relação ao Sauvola. Isso pode ser explicado através da
má qualidade da impressão, ocasionando em uma menor variação entre o dígito
e o fundo.
Capítulo 6. Resultados dos Testes
45
Figura 18: Gráfico comparativo dos melhores métodos de binarização de imagens. Os testes
foram realizados utilizando o conjunto inicial de 50 cupons com o objetivo de
determinar a melhor técnica de binarização, para que então, fosse implementada
no aplicativo. Para mais informações, consulte a tabela 1.
6.2 Melhor Método de Reconhecimento
A biblioteca do Tesseract disponibiliza uma função que permite segmentar a imagem
em linhas, palavras e símbolos, no caso de imagens que possuam textos. Entretanto, o
reconhecimento foi maior através do reconhecimento do cupom inteiro, como pode ser
visto no gráfico da Figura 19.
6.3 Melhores Treinamentos
Como citado no início do capítulo, foram realizados diversos treinamentos e testes
para determinar os treinamentos que resultavam em uma maior porcentagem de reconhecimento quando aplicados ao mesmo conjunto de cupons fiscais pelos quais foram treinados.
O gráfico da Figura 20 apresenta os 13 treinamentos mais significativos. Dentre esses
13 melhores, um é o treinamento “por” disponibilizado pela Google(TESSERACT-OCR,
2016) e os outros 12 foram criados seguindo o método descrito na seção 5.6. Dessa forma,
cada imagem do cupom fiscal contida no conjunto inicial de 50 cupons foi utilizada como
base para os treinamentos.
Analisando o gráfico da Figura 21 podemos perceber que alguns treinamentos
produzem melhores resultados no reconhecimento de números e outros no reconhecimento
46
Capítulo 6. Resultados dos Testes
Binarização fixa
Bilateral
bin100
bin110
bin120
bin130
bin140
bin150
Reconhecimento
56.70%
57.22%
53.01%
35.10%
17.54%
8.67%
7.22%
Binarização adaptativa
Sauvola
Wolf
Otsu
BinTesseract
AdaptativoGaussiano
Reconhecimento
60.07%
59.20%
58.54%
56.70%
57.88%
Outros métodos
bin120 e dilatação e erosão
bin120 e filtro mediano
bin120 e filtro gaussiano
Reconhecimento
41.70%
39.38%
38.14%
Tabela 1: Tabela apresentando o resultado do reconhecimento utilizando alguns algoritmos
de binarização.
de palavras. Entretanto, o pós-processamento, explicado em 1.4, corrige as palavras que
estão escritas de forma errada, não podendo fazer nenhuma correção aos segmentos que
contêm números. Levando isso em conta, de forma a realizar uma análise comparativa
do impacto causado pelo prós-processamento, foram escolhidos dois treinamentos: “por”:
treinamento com a maior porcentagem de reconhecimento de números, além da maior
porcentagem considerando números e caracteres; e o treinamento “t16”: que obteve a
segunda maior média de reconhecimento total.
6.4 Reconhecimento Ótico de Caracteres e Pós-Processamento Aplicados a Novos Cupons Fiscais
Para finalizar os testes e avaliar a porcentagem de reconhecimento resultante das
técnicas implementas neste trabalho, foram obtidos trinta cupons fiscais novos, ou seja,
que não pertenciam ao conjunto de cupons fiscais utilizados nos testes anteriores e no
processo de treinamento do Tesseract.
Conforme explicado na seção 6.3, os dois treinamentos que apresentaram os melhores
resultados, foram:
1. “por”: arquivo de treinamento disponível na página web da ferramenta(TESSERACT-
Capítulo 6. Resultados dos Testes
47
Figura 19: Gráfico comparativo dos melhores métodos de segmentação de imagens. Os
testes foram realizados utilizando o conjunto inicial de 50 cupons com o objetivo
de determinar o melhor método de segmentação de imagens, para que então
fosse implementado no aplicativo. Para mais informações, consulte a tabela 2.
OCR, 2016); e
2. “t16”: arquivo de treinamento baseado no décimo sexto cupom do conjunto contendo
cinquenta cupons.
Os dois treinamentos acima foram utilizados para reconhecer o conjunto de trinta
cupons novos.
Através das Figuras 22 e 23 é possível perceber que o pós-processamento, quando
aplicado ao resultado produzido pela ferramenta OCR(Reconhecimento Ótico de Caracteres), aumenta a média da porcentagem de similaridade entre as informações contidas no
cupom original e as informações reconhecidas pela ferramenta.
Capítulo 6. Resultados dos Testes
48
Figura 20: Gráfico comparativo dos treinamentos que apresentam os melhores resultados.
Os testes foram realizados utilizando o conjunto inicial de 50 cupons com o
objetivo de determinar qual treinamento produzia o melhor resultado, para que
então fosse utilizado no aplicativo. Para mais informações, consulte a tabela 2.
49
Capítulo 6. Resultados dos Testes
Treinamento
comdois
comtres
dezcupons
eng
por
t1
t10
t11
t12
t13
t14
t15
t16
t17
t18
t19
t2
t20
t21
t22
t23
t24
t25
t26
t27
t28
t29
t3
t30
t31
t32
t33
t34
t35
t36
t37
t38
t39
t4
t40
t41
t42
t43
t44
t45
t46
t47
t48
t49
t5
t50
t6
t7
t8
t9
tdois
treinamento
Bloco
59.33%
56.13%
59.65%
58.83%
60.07%
53.54%
57.04%
60.61%
58.25%
55.28%
54.12%
56.48%
59.10%
54.35%
54.82%
55.42%
55.58%
51.25%
55.50%
54.23%
56.54%
54.77%
53.08%
58.86%
58.20%
58.51%
56.41%
55.10%
55.20%
44.34%
55.78%
53.63%
55.89%
59.02%
48.93%
52.26%
51.60%
46.48%
56.93%
52.66%
55.56%
54.07%
55.46%
56.41%
54.35%
48.11%
59.16%
57.29%
52.84%
58.34%
56.11%
53.82%
55.47%
59.00%
54.20%
59.80%
53.68%
Linha
45.27%
43.15%
46.45%
42.44%
43.45%
40.12%
41.94%
45.64%
42.41%
41.10%
41.99%
42.53%
43.07%
41.89%
39.49%
40.95%
42.71%
38.32%
40.92%
41.92%
42.72%
41.92%
40.51%
43.98%
42.68%
41.64%
41.84%
40.34%
42.33%
31.70%
38.54%
41.29%
42.55%
44.87%
37.36%
41.53%
37.08%
32.77%
43.75%
40.68%
41.98%
41.92%
40.36%
43.36%
40.26%
36.36%
43.56%
43.40%
40.52%
43.15%
44.03%
41.75%
43.12%
42.69%
41.14%
44.83%
38.60%
Palavra
58.33%
53.41%
56.42%
53.89%
55.26%
50.58%
54.37%
58.27%
51.78%
51.55%
52.66%
53.05%
53.77%
53.41%
49.47%
49.79%
55.75%
47.43%
54.20%
51.09%
53.48%
52.48%
51.08%
55.16%
52.34%
51.10%
52.31%
48.01%
52.74%
36.89%
46.27%
51.33%
54.33%
55.62%
47.65%
51.10%
45.35%
39.34%
54.35%
52.59%
50.91%
52.24%
50.36%
56.52%
50.19%
44.82%
54.93%
54.19%
51.28%
54.41%
53.41%
51.39%
54.43%
52.52%
52.20%
54.37%
47.33%
Simbolo
42.72%
36.01%
39.57%
37.71%
37.85%
33.62%
40.52%
41.98%
38.43%
34.93%
35.53%
35.88%
39.29%
36.65%
33.57%
36.12%
41.56%
32.33%
39.97%
33.35%
35.40%
34.58%
33.15%
39.62%
38.75%
36.76%
37.19%
33.46%
35.38%
26.14%
34.02%
34.88%
39.19%
38.89%
31.83%
33.33%
30.09%
28.87%
36.13%
36.15%
33.94%
34.82%
36.44%
40.92%
36.18%
28.70%
40.99%
39.35%
35.04%
38.32%
36.53%
35.11%
37.21%
38.74%
38.98%
42.44%
36.76%
Tabela 2: Tabela apresentando o resultado do reconhecimento utilizando diversos treinamentos e métodos de segmentação.
Capítulo 6. Resultados dos Testes
50
Figura 21: Gráfico comparativo indicando a porcentagem de caracteres e números que
os melhores treinamentos reconhecem. Os testes foram realizados utilizando o
conjunto inicial de 50 cupons com o objetivo de determinar qual a porcentagem
de reconhecimento de caracteres e números, proporcionada pelos treinamentos.
Para mais informações, consulte a tabela 3.
Treinamento
comdois
por
t8
t10
t11
t16
t21
t26
t27
t29
t32
t35
t44
t47
tdois
tum
% de reconhecimento de caracteres
60.21%
59.50%
57.22%
56.84%
61.61%
62.73%
56.79%
59.03%
55.34%
57.08%
51.71%
59.78%
57.15%
57.64%
55.69%
56.22%
% de reconhecimento de números
63.05%
72.53%
67.73%
63.24%
63.54%
63.28%
54.86%
62.49%
64.22%
60.55%
60.04%
62.76%
58.59%
64.76%
66.74%
56.96%
Tabela 3: Tabela apresentando o resultado do reconhecimento de caracteres e números
utilizando alguns treinamentos.
Capítulo 6. Resultados dos Testes
51
Figura 22: Gráfico comparativo mostrando o resultado da aplicação da técnica de pósprocessamento no reconhecimento gerado pelo arquivo de treinamento “por”.
Os testes foram realizados utilizando o conjunto de 30 cupons com o objetivo
de validar as melhorias proporcionadas pelos métodos selecionados na fase de
testes. Para mais informações, consulte a tabela 4.
52
Capítulo 6. Resultados dos Testes
Número do cupom
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Média
Porcentagem de Reconhecimento Antes
78.00%
60.48%
41.76%
58.90%
56.84%
65.73%
68.32%
62.69%
67.07%
63.12%
59.22%
64.94%
58.09%
65.95%
60.57%
75.81%
69.58%
70.45%
67.89%
65.54%
67.78%
57.71%
67.44%
59.89%
64.43%
57.55%
63.02%
67.69%
49.30%
59.88%
61.28%
Porcentagem de Reconhecimento Depois
66.86%
68.35%
52.51%
61.28%
61.99%
72.88%
62.69%
68.20%
51.06%
67.57%
66.63%
72.94%
70.75%
71.01%
68.00%
65.65%
75.08%
76.32%
74.92%
72.82%
75.44%
71.29%
75.00%
62.16%
70.69%
61.93%
65.26%
72.98%
44.37%
65.63%
63.34%
Tabela 4: Tabela contendo a porcentagem de reconhecimento antes e depois do pósprocessamento utilizando o treinamento “por”.
Capítulo 6. Resultados dos Testes
53
Figura 23: Gráfico comparativo mostrando o resultado da aplicação da técnica de pósprocessamento no reconhecimento gerado pelo arquivo de treinamento “t16”.
Os testes foram realizados utilizando o conjunto de 30 cupons com o objetivo
de validar as melhorias proporcionadas pelos métodos selecionados na fase de
testes. Para mais informações, consulte a tabela 5.
54
Capítulo 6. Resultados dos Testes
Número do cupom
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Média
Porcentagem de Reconhecimento Antes
78.00%
59.95%
41.19%
58.90%
56.84%
65.73%
68.32%
62.69%
67.07%
55.71%
59.22%
59.30%
53.68%
65.95%
57.11%
74.43%
63.45%
63.29%
60.70%
65.30%
61.20%
52.31%
67.02%
59.89%
64.43%
57.55%
63.02%
67.20%
49.30%
59.88%
63.18%
Porcentagem de Reconhecimento Depois
78.00%
61.01%
42.19%
59.08%
57.26%
65.82%
68.45%
62.98%
66.80%
63.28%
59.46%
64.75%
58.09%
66.29%
60.67%
75.61%
69.58%
70.45%
67.95%
65.90%
67.94%
57.79%
67.87%
60.11%
64.54%
57.55%
63.23%
68.09%
49.30%
60.38%
67.07%
Tabela 5: Tabela contendo a porcentagem de reconhecimento antes e depois do pósprocessamento utilizando o treinamento “t16”.
55
7 O Aplicativo Android de Reconhecimento
de Cupons Fiscais
Neste capítulo serão apresentadas informações sobre os pré-requisitos, o desenvolvimento e o funcionamento do aplicativo proposto neste trabalho.
7.1 Técnicas utilizadas
Todas as técnicas utilizadas no desenvolvimento deste aplicativo foram baseadas
nas análises e nos testes com os cinquenta cupons iniciais realizados no computador, cujas
especificações estão descritas na seção 4.1.2. Tais resultados são discutidos no capítulo 6.
As informações e os gráficos contidos no capítulo 6 serviram como artefatos para
a tomada de decisão sobre as melhores abordagens e, consequentemente, as que iriam
compor a solução final. Dessa forma, foram escolhidas as seguintes técnicas:
1. Método de Binarização: o algoritmo escolhido para o desenvolvimento da aplicação
foi o algoritmo proposto por Sauvola(SAUVOLA; PIETIKAKINEN, 1999).
2. Método de Segmentação: com base nos resultados optou-se pela não utilização do
método de segmentação.
3. Arquivo de treinamento: “por”, devido a um melhor reconhecimento numérico e um
reconhecimento textual satisfatório.
4. Pós-processamento: dado que o objetivo deste trabalho é a implementação de um
aplicativo que não necessite de uma conexão à internet, foi utilizado o Framework
Spelling Checker do Android para a correção das palavras que contêm erros sintáticos.
7.2 Pré-requisitos para o Funcionamento do Aplicativo no Android
Para que o aplicativo possa funcionar corretamente, é necessária a instalação da
biblioteca de visão computacional OpenCV. A mesma pode ser instalada através do site
do Google Play(GOOGLE. . . , 2016), como na Figura 24, ou através do aplicativo Play
Store contido no Android, conforme ilustrado na Figura 25.
Capítulo 7. O Aplicativo Android de Reconhecimento de Cupons Fiscais
56
Figura 24: Instalando o OpenCV Manager através do site GooglePlay(GOOGLE. . . , 2016).
Figura 25: Instalando o OpenCV Manager através do aplicativo Play Store.
7.3 Câmera
O aplicativo “NotaFiscal.app”, cujo ícone é mostrado na Figura 26, possui sua
interface inicial similar ao aplicativo de uma câmera fotográfica.
Ao iniciar o aplicativo é possível visualizar as imagens captadas pela câmera do
dispositivo, conforme a Figura 27. A linha verde que aparece na Figura 27 tem como
objetivo auxiliar o usuário no alinhamento da câmera e do cupom fiscal. Na Figura 28
Capítulo 7. O Aplicativo Android de Reconhecimento de Cupons Fiscais
57
existem mais duas linhas que também servem como guia. Entretanto, diferente do modo
de operação descrito anteriormente, é realizada a detecção de borda, mais precisamente,
a extremidade superior e inferior do cupom fiscal, possibilitando, assim, uma melhor
visualização e alinhamento.
Para tirar uma foto do cupom fiscal é necessário apenas um toque na tela, que
resultará no salvamento da imagem e no reconhecimento dos caracteres. Após tais procedimentos uma mensagem de feedback “Reconhecimento realizado com sucesso” é mostrada
ao usuário.
Para ativar a função de detecção de borda é necessário tocar e manter o dedo na
tela durante alguns segundos. No momento em que a função for ativada uma mensagem
indicando o ativamento será mostrada ao usuário. Para desativar a função de detecção de
borda, basta tocar de volta na tela e segurar por alguns segundos. Ademais, para obter
o melhor aproveitamento dessa função é interessante que o cupom fiscal tenha uma cor
diferente do fundo, como ilustrado na Figura 28. Neste caso, o fundo preto se mostrou
bastante eficiente.
Figura 26: Ícone do aplicativo.
7.3.1 Salvamento dos Arquivos
O aplicativo salva os dados obtidos pelo reconhecedor ótico de caracteres – Tesseract,
e que passou pelo pós-processamento – para uso posterior. Tais dados são salvos em um
arquivo criado na pasta “recAppNotaFiscal” do smartphone, conforme a Figura 29.
As imagens dos cupons fiscais são armazenadas no diretório de fotografias do
smartphone, como ilustrado na Figura 30. Nesta abordagem optou-se pelo armazenamento
das imagens sob a forma binarizada, por ser um processo de uma via. Isto é, o resultado da
binarização aplicada a uma imagem sempre será o mesmo. Ademais, as imagens binarizadas
ocupam menos espaço se comparadas as imagens coloridas.
O arquivo de treinamento “por”, cuja eficiência é mostrada no capítulo 6, é
armazenado na pasta “tessdata” da memória do smartphone, conforme ilustrado na Figura
29.
Capítulo 7. O Aplicativo Android de Reconhecimento de Cupons Fiscais
Figura 27: Tela inicial do aplicativo.
58
Capítulo 7. O Aplicativo Android de Reconhecimento de Cupons Fiscais
Figura 28: Tela do aplicativo com o reconhecimento de bordas ativado.
Figura 29: Estrutura interna dos diretórios criados pelo aplicativo.
59
Capítulo 7. O Aplicativo Android de Reconhecimento de Cupons Fiscais
Figura 30: Álbum contendo as fotos utilizadas pelo aplicativo.
60
61
Conclusão
Nos últimos anos a tecnologia vem evoluindo para proporcionar uma melhor
qualidade de vida à população. Atividades que antigamente demandavam horas para serem
realizadas, sujeitas ao erro humano, hoje são realizadas em poucos segundos com o auxílio
da tecnologia.
O objetivo do desenvolvimento deste trabalho foi criar uma ferramenta que pudesse
substituir as árduas tarefas de criar planilhas, digitar todos os dados de notas fiscais e
realizar inúmeras contas para poder controlar os gastos da família. Assim, uma tarefa que
demoraria horas para ser completada pode ser substituída por apenas uma foto do cupom
fiscal retirada pelo usuário.
Com o desenvolvimento deste trabalho foi possível combinar diversas técnicas
de processamento digital de imagens e reconhecimento ótico de caracteres utilizadas
atualmente, além de mostrar o potencial do pós-processamento, que ainda é pouco utilizado
na área. Cada técnica utilizada no desenvolvimento final do aplicativo foi escolhida através
de tomadas de decisão baseadas em dados reais. Assim, durante a aplicação de cada
uma delas foi possível visualizar o aumento da similaridade entre o cupom original e o
reconhecido.
Em relação às técnicas utilizadas neste trabalho, foi observado que o algoritmo
proposto por Sauvola(SAUVOLA; PIETIKAKINEN, 1999) resulta em um melhor reconhecimento das informações contidas nos cupons fiscais. Ademais, o treinamento disponível
na página da Google (“por”), possui a melhor média de reconhecimento de caracteres, e
portanto, possuiu uma maior relevância no desenvolvimento deste trabalho. Foi possível
observar também que a não segmentação das imagens dos cupons fiscais resulta em um
melhor reconhecimento. Por fim, o pós-processamento através de um dicionário(Framework
Spelling Checker) produziu uma melhora significativa no resultado final do reconhecimento.
Em relação aos resultados dos testes, foi possível concluir que o algoritmo aqui
utilizado atingiu uma porcentagem média de reconhecimento igual a 63.34% considerando
todos os cupons, e uma porcentagem de reconhecimento máxima individual igual a 76.32%.
Assim, o objetivo inicial, que é reconhecer todas as informações contidas no cupom fiscal,
foi parcialmente atingindo, dessa forma será necessário a realização de trabalhos futuros
para obter todas as informações do cupom fiscal.
O sistema como um todo possui grande potencial de melhoria da qualidade de
vida da população. Isso ocorre pois, além de proporcionar uma alternativa muito menos
trabalhosa em relação ao antigo controle de gastos, ela possibilita a persistência dos dados,
que no modo tradicional é feita com diversas pastas ou planilhas. Ainda, espera-se que
Conclusão
62
com algumas melhorias e estudos realizados posteriormente, este aplicativo possa ter um
efeito significativo na economia e na qualidade de vidas das famílias.
63
Trabalhos Futuros
As primeiras fases do desenvolvimento deste aplicativo, que envolvem a obtenção
das imagens, o tratamento adequado e o reconhecimento ótico dos caracteres mostraram-se
bastante críticas. Cada fase é extremamente dependente da outra, devendo cada uma delas
receber um tratamento especial. Abaixo são abordados alguns possíveis trabalhos futuros:
1. Métodos de classificação das informações: são necessárias técnicas que possibilitem a
classificação dos dados em: nomes dos produtos, código dos produtos, número da
nota fiscal, valor total gasto, etc.
2. Técnicas que possibilitem o aprendizado contínuo do perfil do usuário: é importante
que o aplicativo aprenda o perfil do usuário, como exemplo: onde as compras são
feitas, quais produtos são comprados, etc.
3. Técnicas que possibilitem a correção automática de erros recorrentes, resultantes
do reconhecimento: é interessante que ao ter palavras corrigidas no reconhecimento
final, o aplicativo aprenda e possa posteriormente corrigir automaticamente.
4. Funções que permitem um melhor controle dos gastos: deverão ser utilizadas equações,
representações matemáticas e estatísticas que possibilitem um maior número de
informações aos usuários, para que seja atendido desde um usuário sem nenhum
conhecimento na área, até um usuário experiente.
5. Funções que possibilitem ao usuário um melhor entendimento dos dados: é interessante não somente mostrar os dados aos usuários, mas também, explicar o que eles
significam, para que até mesmo um usuário leigo possa entender.
6. Persistência de todas as informações na nuvem: possibilitará a consulta das informações independente da plataforma envolvida. Ademais, irá evitar a perda de dados
em casos que possam envolver o smartphone.
Portanto, é possível perceber que este trabalho tem um potencial muito grande.
Ainda, a medida que novas tecnologias forem criadas ele poderá se adequar e possibilitar
ainda mais uma melhoria na qualidade de vida dos seus usuários.
64
Dificuldades e Desafios Encontrados
Durante a realização dos testes e a implementação do aplicativo, vários desafios e
dificuldades foram encontrados. Entretanto, com o auxílio de alguns artigos e ferramentas
foi possível superá-los. Abaixo, serão apresentados os principais desafios e dificuldades
enfrentados durante o desenvolvimento deste trabalho:
1. Demora na obtenção dos cupons fiscais: foi necessário pedir a várias pessoas para
que guardassem os cupons fiscais, mesmo assim, esse processo de obtenção levou
duas semanas.
2. Dificuldade em obter a porcentagem de caracteres reconhecidos: foi necessária a
digitação de todas as informações contidas nos 80 cupons fiscais, além da pesquisa de
algoritmos que realizavam comparações entre sequências de caracteres e determinavam
a porcentagem de similaridade.
3. Treinar o Tesseract é um procedimento custoso: o treinamento com cada cupom leva
entre 40 minutos e 1 hora, portanto realizar todos os treinamentos com todos os 50
cupons demandou muita dedicação.
4. Falta de documentação para a integração da câmera do celular com a biblioteca
OpenCV e a utilização de códigos em C++: a ausência de documentação e tutoriais
na internet resultou em uma maior dedicação para resolver estes problemas. Um
tutorial(JUNIOR, 2016) foi criado para facilitar o processo para outros desenvolvedores.
5. Fontes de impressão não padronizadas: as fontes utilizadas na escrita do cupom
fiscal não são padronizadas, portanto o reconhecimento de todas as informações fica
bastante comprometido.
6. Cupons contendo diferentes fontes: foi percebido que alguns cupons fiscais apresentavam até 3 fontes de escrita diferentes. E isso torna o reconhecimento ainda mais
complexo, uma vez que são necessários 3 treinamentos, um para cada fonte.
7. Pouco espaçamento entre os caracteres e excesso de informação: os cupons contém muitas informações, por isso o espaçamento entre os caracteres é pequeno,
ocasionando em uma piora no reconhecimento.
65
Referências
ABAR, C. O CONCEITO "FUZZY". [S.l.], 2004. Disponível em: <http://www.pucsp.br/
~logica/Fuzzy.htm>. Acesso em: 14 mar. 2016. Citado na página 34.
ADDICAM, S.; MALIK, S.; TIAN, P. Building intelligent Systems - Utilizing Computer
Vision, Data Mining, and Machine Learning. 3. ed. [S.l.], 2012. Citado na página 21.
ADMINISTRADORES. Pesquisa: para brasileiros, smartphone
e tablet melhoram a qualidade de vida. 2013. Disponível
em: <http://www.administradores.com.br/noticias/tecnologia/
pesquisa-para-brasileiros-smartphone-e-tablet-melhoram-a-qualidade-de-vida/75469/>.
Acesso em: 09 mar. 2016. Citado na página 15.
ALGORITHM Implementation/Strings/Levenshtein distance. [S.l.], 2016. Disponível
em: <https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_
distance>. Acesso em: 02 mar. 2016. Citado na página 23.
ALMEIDA, B. C.; PEREIRA, I. M. Implantação e Adaptação de um Processo de
Desenvolvimento de Software em Equipes de Desenvolvimento de Aplicações Móveis. [S.l.],
2015. Citado 3 vezes nas páginas 9, 34 e 36.
APPLE. [S.l.], 2016. Disponível em: <http://www.apple.com/br/mac/compare>. Acesso
em: 01 mar. 2016. Citado 2 vezes nas páginas 9 e 30.
ASUS. Asus Zenfone 2. 2016. Disponível em: <https://www.asus.com/br/Phone/
ZenFone_2_ZE551ML/>. Acesso em: 29 fev. 2016. Citado 3 vezes nas páginas 9, 29 e 30.
BASSIL, Y.; ALWANI, M. OCR Post-Processing Error Ccorrection Algorithm Using
GOOGLE’S Online Spelling Suggestion. Registered under No. 957, 2011, Beirut, Lebanon:
Journal of Emerging Trends in Computing and Information Sciences, 2012. Disponível
em: <http://www.cisjournal.org/journalofcomputing/archive/vol3no1/vol3no1_7.pdf>.
Citado 3 vezes nas páginas 22, 24 e 27.
BHASKAR, S.; LAVASSAR, N.; GREEN, S. Implementing Optical Character Recognition
on the Android Operating System for Business Cards. [S.l.: s.n.], 2010. Citado 2 vezes nas
páginas 22 e 33.
BITBUCKET. [S.l.], 2016. Disponível em: <https://bitbucket.org>. Acesso em: 29 fev.
2016. Citado na página 31.
BRUNO, V.; MIRET, R. 46revela pesquisa do SPC Brasil. 2016.
Disponível em: <https://www.spcbrasil.org.br/imprensa/noticia/
971-46dosbrasileirosnaocontrolamseuorcamentorevelapesquisadospcbrasil>. Acesso em: 09
mar. 2016. Citado 2 vezes nas páginas 15 e 27.
CARVALHO, S. Android Studio: vantagens e desvantagens com relação ao
Eclipse. [S.l.], 2013. Disponível em: <http://imasters.com.br/mobile/android/
android-studio-vantagens-e-desvantagens-com-relacao-ao-eclipse/?trace=1519021197&
source=single>. Acesso em: 29 fev. 2016. Citado na página 30.
Referências
66
DIGITAL, O. Android domina 90% do mercado brasileiro de smartphones. 2015. Disponível em: <http://olhardigital.uol.com.br/pro/noticia/
android-domina-90-do-mercado-brasileiro-de-smartphones/48392>. Acesso em:
24 fev. 2016. Citado na página 19.
FILHO, O. M.; NETO, H. V. Processamento Digital de Imagens. ISBN 8574520098. Rio
de Janeiro, 1999. Citado 3 vezes nas páginas 9, 19 e 20.
GANDRA, A. SPC: falta de disciplina é maior dificuldade para controle de gastos.
2015. Disponível em: <http://agenciabrasil.ebc.com.br/economia/noticia/2015-01/
falta-de-disciplina-e-principal-dificuldade-dos-brasileiros-para-nao>. Acesso em: 29 fev.
2016. Citado na página 15.
GIT. [S.l.], 2016. Disponível em: <https://git-scm.com/>. Acesso em: 29 fev. 2016.
Citado na página 31.
GITHUB. [S.l.], 2016. Disponível em: <https://github.com/>. Acesso em: 29 fev. 2016.
Citado na página 31.
GONZALEZ, R. C.; WOODS, R. E. Processamento Digital de Imagens. 3. ed. [S.l.], 2010.
Citado 2 vezes nas páginas 19 e 20.
GOOGLE Play. [S.l.], 2016. Disponível em: <https://play.google.com/store/apps/details?
id=org.opencv.engine&hl=pt_BR>. Acesso em: 08 mar. 2016. Citado 3 vezes nas
páginas 10, 55 e 56.
GRAC, J. et al. Systematic Detection of Capability Leaks in Stock Android Smartphones.
[S.l.], 2012. Disponível em: <http://www.cs.fsu.edu/~zwang/files/NDSS12_Woodpecker.
pdf>. Acesso em: 19 fev. 2016. Citado na página 18.
HASNAT, M. A.; RAHMAN, M.; KHAN, C. M. An open source Tesseract based Optical
Character Recognizer for Bangla script. [S.l.], 2009. Citado 2 vezes nas páginas 24 e 27.
HENG, A. L’Addition: Splitting the Check, Made Easy. [S.l.], 2013. Disponível em:
<https://stacks.stanford.edu/file/druid:yt916dh6570/Heng_LAddition_Restaurant_
Check_Splitting.pdf>. Acesso em: 09 mar. 2016. Citado na página 24.
HOW to use the tools provided to train Tesseract 3.0x for a new language. [S.l.], 2016.
Disponível em: <https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesseract>.
Acesso em: 08 mar. 2016. Citado na página 40.
IMOBILIS. Laboratório iMobilis. [S.l.], 2016. Disponível em: <http://www.decom.ufop.br/
imobilis/>. Acesso em: 29 fev. 2016. Citado na página 34.
INTEL CORPORATION. Computer Vision Library - Reference Manual. U.S.A,
1999–2001. Citado na página 32.
JUNIOR, G. R. F. OpenCV No Android: Acesso A Câmera Usando C. [S.l.], 2016.
Disponível em: <http://www.decom.ufop.br/imobilis/6436/>. Acesso em: 01 mar. 2016.
Citado 2 vezes nas páginas 39 e 64.
KHURSHID, K. et al. Comparison of Niblack inspired Binarization methods for ancient
documents. Laboratoire CRIP5 – SIP, Université Paris Descartes 45, rue des Saints-Pères,
75006 Paris France: [s.n.], 1979. Citado na página 44.
Referências
67
KHURSHID, K. et al. Comparison of Niblack inspired Binarization methods for ancient
documents. [S.l.], 2009. Disponível em: <http://www.math-info.univ-paris5.fr/~vincent/
articles/DRR_nick_binarization_09.pdf>. Acesso em: 19 fev. 2016. Citado na página
21.
LECHETA, R. R. Google Android. 4. ed. [S.l.], 2015. Citado na página 18.
LEVENSHTEIN. [S.l.], 2016. Disponível em: <http://www.levenshtein.net/>. Acesso em:
02 mar. 2016. Citado na página 23.
NDK. [S.l.], 2016. Disponível em: <http://developer.android.com/intl/pt-br/tools/sdk/
ndk/index.html>. Acesso em: 01 mar. 2016. Citado na página 30.
NDK. [S.l.], 2016. Disponível em: <http://developer.android.com/intl/pt-br/ndk/
downloads/index.html>. Acesso em: 01 mar. 2016. Citado na página 39.
NFSCAN. 2015. Disponível em: <http://www.nfscan.cc/?lang=pt>. Acesso em: 29 fev.
2016. Citado 2 vezes nas páginas 25 e 27.
OPENCV. [S.l.], 2016. Disponível em: <http://opencv.org/>. Acesso em: 01 mar. 2016.
Citado 2 vezes nas páginas 37 e 38.
OPENCV. [S.l.], 2016. Disponível em: <http://docs.opencv.org/2.4/doc/tutorials/
introduction/linux_install/linux_install.html>. Acesso em: 01 mar. 2016. Citado na
página 37.
OTSU, N. A Tlreshold Selection Method from Gray-Level Histograms. [S.l.]: 2EEE
TRANSACTIONS ON SYSTREMS, MAN, AND CYBERNETICS, VOL. SMC-9, NO. 1,
JANUARY 1979, 1979. Citado na página 20.
PATEL, C.; PATEL, A.; PATEL, D. Optical Character Recognition by Open
Source OCR Tool Tesseract: A Case Study. [S.l.], 2012. Disponível em: <http:
//research.ijcaonline.org/volume55/number10/pxc3882784.pdf>. Acesso em: 23 fev. 2016.
Citado 2 vezes nas páginas 9 e 35.
PEREIRA, I. M.; CARNEIRO, T. G. de S.; PEREIRA, R. R. Developing Innovative
Software in Brazilian Public Universities: Tailoring Agile Processes to the Reality of
Research and Development Laboratories. [S.l.], 2013. Citado na página 34.
QT-BOX-EDITOR. [S.l.], 2016. Disponível em: <https://zdenop.github.io/qt-box-editor/
>. Acesso em: 08 mar. 2016. Citado na página 40.
SAUVOLA, J.; PIETIKAKINEN, M. Adaptive document image binarization. [S.l.], 1999.
Disponível em: <http://www.ee.oulu.fi/mvg/files/pdf/pdf_24.pdf>. Acesso em: 22 fev.
2016. Citado 5 vezes nas páginas 39, 40, 44, 55 e 61.
SMITH, R. An Overview of the Tesseract OCR Engine. [S.l.], 2007. Disponível
em: <http://static.googleusercontent.com/media/research.google.com/pt-BR//pubs/
archive/33418.pdf>. Acesso em: 23 fev. 2016. Citado na página 33.
SPELLING Checker Framework. [S.l.], 2016. Disponível em: <http://developer.android.
com/intl/pt-br/guide/topics/text/spell-checker-framework.html>. Acesso em: 29 fev.
2016. Citado na página 32.
Referências
68
STATISTA. Number of apps available in leading app stores as of July
2015. 2015. Disponível em: <http://www.statista.com/statistics/276623/
number-of-apps-available-in-leading-app-stores/>. Acesso em: 19 fev. 2016.
Citado na página 18.
TELEGRAPH, T. Smartphones outsell PCs. 2011. Disponível em: <http://www.
telegraph.co.uk/technology/mobile-phones/8316143/Smartphones-outsell-PCs.html>.
Acesso em: 19 fev. 2016. Citado na página 18.
TESS-TWO. [S.l.], 2016. Disponível em: <https://github.com/rmtheis/tess-two>. Acesso
em: 01 mar. 2016. Citado na página 38.
TESSERACT-OCR. [S.l.], 2016. Disponível em: <https://github.com/tesseract-ocr>.
Acesso em: 01 mar. 2016. Citado 4 vezes nas páginas 37, 43, 45 e 47.
WHITE, N. Training Tesseract for Ancient Greek OCR. Department of Classics and
Ancient History 38 North Bailey Durham, DH1 3EU, UK, Email: [email protected]:
[s.n.], 2012. Citado na página 39.
WOLF, C. C++ code for document image binarization. [S.l.], 2009. Disponível em:
<http://liris.cnrs.fr/christian.wolf/software/binarize/>. Acesso em: 01 mar. 2016. Citado
2 vezes nas páginas 31 e 39.

Documentos relacionados