Leitura de imagens usando OCR e C#

Quem nunca precisou fazer a leitura de uma imagem via código? Quem já ouviu falar de OCR? Basicamente o Reconhecimento Ótico de Caracteres (OCR – Optical Character Recognition) funciona através de um rede neural que aprende a reconhecer os padrões das letras e números, e quanto melhor for treinada, melhor será sua precisão. Através de OCR é possível retirar a string de texto de dentro de uma imagem, geralmente de um documento digitalizado. Obviamente ele não faz milagres e existem algumas limitações.

Neste post iremos tratar de como utilizar a API de OCR do Microsoft Office em seus projetos C# para reconhecimento ótico de caracteres.

Veremos:

Microsoft Office Document Imaging

Existem diversas bibliotecas de OCR no mercado, em sua maioria pagas. Entretanto poucos sabem que o próprio Microsoft Office possui uma excelente API de OCR que pode ser usada através de uma referência a um componente COM+ do Microsoft Office 2003 ou 2007, chamado Microsoft Office Document Imaging. Na verdade o MODI é um aplicativo de scanner nativo do Office, mas o que nos interessa aqui é a sua API.

Esta API não é instalada por padrão quando se instala o MS Office, você terá que colocar o CD de instalação em seu computador e marcar a opção Microsoft Office Document Imaging dentro de Ferramentas do Office. Não se esqueça de marcar a opção de OCR, ou não funcionará.

Instalando o MODI

Após instalar a API de OCR, crie seu projeto no Visual Studio e adicione uma referência ao COM+ Microsoft Office Document Imaging. Note que esta é uma referência a um componente existente no Windows e para que funcione em seu ambiente de produção, você terá de ter o mesmo componente instalado lá (i.e. o MS Office).

Adicionando a referência

Agora vamos ao código.

Codificando uma aplicação de OCR

O código abaixo exemplifica como criar uma aplicação simples que lê uma imagem, cria um documento usando o a API do MODI (Microsoft Office Document Imaging) e depois faz o reconhecimento de caracteres em cima dele, retornando uma string com o texto.

Obviamente alguns erros podem acontecer e tentarei cobrir os mais comuns na próxima seção.

Erros Comuns

“Object hasn’t been initialized and can’t be used yet”

Ao contrário do que pode parecer, este erro não é problema com o documento. Na verdade este erro acontece quando o MODI não está instalado na máquina que está tentando executar o código. Verifique novamente se instalou o MODI com sucesso, sua instalação de Office deve ficar igual à imagem que coloquei no início deste post.

“OCR Running Error”

Este é um erro de reconhecimento ótico de caracteres, ou seja, a API de OCR não conseguiu entender o texto da imagem. Um dos principais problemas com OCR é que ele não consegue ler imagens muito pequenas. E estou falando da largura e altura da imagem e não do texto em si. Se suas imagens são pequenas, insira-as dentro de imagens maiores, preferencialmente com fundo branco para facilitar o reconhecimento. Tamanhos de 600x600px já resolvem o problema.

Outro motivo que pode gerar este erro é o uso de fundos muito poluídos (muitas cores ou textos sobrepostos como em CAPTCHAS) ou textos com má resolução (muito esticados ou embaçados, por exemplo). Nestes casos é provável que você tenha de tratar suas imagens antes de submetê-las à API.

Dúvidas ou sugestões, compartilhem nos comentários.

Curso de Android Básico

Splash Screen do Taskz

É, faz tempo que não escrevo por aqui. Ando extremamente ocupado atualmente cuidando de vários projetos em paralelo, mas devido a um grande acontecimento recente, tive de tirar um tempo para atualizar o blog. Neste final de semana terminou o curso que estava ministrando na Ulbra Canoas-RS sobre Android. O curso de 12h foi extremamente básico mas tenho certeza que os 24 alunos puderam aprender muito e estão aptos a desenvolver aplicações simples para a plataforma que mais cresce no mercado.

A ideia deste post é agrupar o material do curso para que os alunos possam fazer download. Da mesma forma, qualquer pessoa que estiver interessada no material pode baixá-lo sem problemas e sem ter de me pagar royalties ou coisas do gênero.

Foto da Turma

Conteúdo do Curso

Para quem quiser fazer download dos slides do curso, pegue os slides no meu SlideShare. O conteúdo abordado foi esse:

  • Mercado Mobile
  • A Linguagem Java
  • A Plataforma Android
  • App Programming
  • App Design
  • Acesso à Dados
  • Deploy

Além disso, durante o curso desenvolvemos uma aplicação extremamente simples de registro de tarefas que eu chamei de Taskz. O código-fonte da referida aplicação pode ser baixado se cadastrando no formulário no final desse post.

Esta aplicação mostra o uso de variados recursos da plataforma como Activities, widgets, splash screen, dialogs, SQLite, manifesto, menus, etc, dando uma excelente introdução. Use estes fontes como material de estudo, acredito que algumas classes servirão inclusive para seus projetos pessoais, como DialogHelper (uma classe utilitária para lidar com diálogos de forma extremamente fácil) e DbAdapter (para lidar com bancos de dados).

Slide do Curso

Agradecimentos e Outras Edições

Antes de terminar gostaria de agradecer a participação dos alunos que bateram recorde em um curso ministrado por mim (até então a maior turma era a da 1ª edição do Curso Básico de ASP.NET da FAQI Gravataí, com 21 alunos). Também gostaria de agradecer à confiança e apoio dos professores Anderson Yanzer e Maurício Escobar, da Ulbra Canoas, que possibilitaram que o curso fosse ministrado e fizeram a divulgação entre os alunos.

No dia 07/07/12 estarei ministrando a 2ª edição do curso, desta vez na Ulbra Gravataí-RS, quem quiser participar contate a coordenação do curso de Ciência da Computação da universidade pelo e-mail [email protected] Se você estuda em alguma instituição do RS que não possui curso de extensão em cima de plataformas móveis e gostaria que este curso fosse ministrado por lá, peça para seu coordenador entrar em contato comigo pelo formulário de contato do blog e quem sabe eu não visito sua instituição para dar uma palestra ou curso sobre o assunto?

Aguardo seu contato!

* OBS: curtiu o post? Então dá uma olhada no meu livro de Android clicando no banner abaixo pra aprender a criar outros tantos apps incríveis!

Criando apps para empresas com Android

HTML 5 + CSS3, C# + Java e Windows Phone 7 em um post!

microsoftSim, este post tratará sobre estes três assuntos: HTML5 + CSS3 (+Javascript), interoperabilidade entre sistemas Java e .NET (não necessariamente C#) e Windows Phone 7, mas não, não serão ao mesmo tempo, hehehe. Neste final de ano o pessoal da Microsoft Brasil resolveu suar a camisa e nos entregar uma série de treinamentos gratuitos para capacitar os desenvolvedores de suas plataformas melhor. O post é breve, afinal ninguém quer ficar lendo nerdices em plena véspera de Natal, exceto eu é claro…

HTML5 &  Javascript Center

A Microsoft criou um hotsite chamado HTML5 & Javascript Center, onde dão muitas informações sobre como utilizar HTML5, CSS3 e Javascript juntos para criar páginas web ainda melhores. O site já contém muito material, incluindo tutoriais simples como uso da tag Áudio e Vídeo até coisas mais complexas como manipulação da tag Canvas (o canivete suíço do HTML5). Além disso, boa parte desse material está em Português, e mesmo o material em inglês é fácil de entender (afinal HTML é HTML em qualquer idioma…). O site também contém links de referências e está muito bem organizado por categoprias. Vale a pena conferir no http://msdn.microsoft.com/pt-br/hh442325.

Interoperabilidade entre Java e .NET

Desde que venho acompanhando a comunidade em torno da Microsoft Brasil em 2008, pude notar que uma postura que se instaurou na cia. é a de interoperabilidade de plataformas. Ultimamente a Microsoft tem lançado cada vez mais soluções interoperáveis, como seu Hyper-V e SCVMM para Linux, WebMatrix para PHP, TFS para Eclipse, Azure para PHP, Java, etc; material dedicado a HTML5 + CSS3 (existe algo mais interoperável que uma página HTML?), disponibilização de fontes para o pessoal do projeto Mono e Moonlight e por aí vai. Isto foi uma atitude muito inteligente do novo CEO Steve Ballmer, que tem atraído mais união entre os desenvolvedores de diferentes plataformas.

Dentro desta mesma linha, recentemente a Microsoft Brasil colocou no ar uma nova página dentro de seu famoso Centro de Treinamento (que eu já citei em outro post): Interoperabilidade entre Java e .NET. Todo mundo que está no mercado a alguns anos e já trabalhou em algumas empresas diferentes sabe que hoje Java e .NET são os bam-bam-bams do mercado mundial de software. As maiores cias. de software do mundo desenvolvem em tais tecnologias e os maiores salários do mercado são ofertados para analistas e desenvolvedores das mesmas. Parece que esse panorama não irá mudar nem mesmo com a crescente das aplicações móveis, uma vez que você pode continuar usando Java e .NET para programar para Android e iOS.

Mas voltando ao assunto da página, acesse http://msdn.microsoft.com/pt-br/hh314025, lá você encontra tutoriais em português sobre o funcionamento das arquiteturas (que são muuuito parecidas), sobre como fazer serviços Java conversarem com .NET e o inverso, como utilizar WCF e Glassfish e inclusive como colocar JEE na nuvem do Azure!

Windows Phone 7

E a minha notícia favorita de final de ano: uma página novinha em folha no Centro de Treinamento somente sobre Windows Phone 7 e 100% em português! Lembram-se de meu post anterior sobre Windows Phone 7, onde falei sobre os vídeos existentes no Channel 9, com o Bob Tabor? Pois é, agora temos a nossa versão tupiniquim e com ótimo conteúdo. Acesse http://msdn.microsoft.com/pt-br/hh230679 e veja uma gama completa de conteúdos como instalação do ambiente, Silverlight, XNA, deploy, debug, app lifeycle, gestos, orientação, themes, globalization, SQL Server Compact (toma SQLite!), GPS e por aí vai.

Resta saber se a parceria Microsoft + Nokia vai emplacar o WP7 na terra do Blanka, uma vez que nossa carga tributária é altíssima e fica difícil concorrer com o Android, que possui aparelhos em torno de R$500. Mas já é bom ir se adiantando, não é mesmo?