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.