SISTEMA DE AUTO-APRENDIZADO OCR

DS2T 29/08/2015 04:14:58
#450665
Apesar do conhecimento de que existem OCRs muito boas no mercado, além do fato de que é fácil encontrar algumas bibliotecas prontas, comecei a desenvolver a minha OCR. Eu gostei do resultado, apesar de que ainda pode ser melhorado, porque só consegui fazer funcionar para um tipo de fonte.

Agora estou pensando em começar a fazer um módulo de aprendizagem. Basicamente irei mostrar as variações de uma letra em várias imagens e dando seu respectivo caractere para o programa ir [Ô]aprendendo[Ô] a identificar a letra depois sozinho. Obviamente, assim, eu conseguiria fazer o sistema identificar não apenas caracteres, mas como também, objetos numa imagem e dar o seu significado.

Pra isso, eu pensei em a usar um método de cálculo numérico chamado Mínimos Quadrados. Ele é capaz de prever tendências lineares e é muito usado em projetos envolvendo inteligência artificial. De forma simplificada, ela responde isso pra mim: Qual é o desvio padrão de um ponto A para uma reta R do tipo a + bx. E através da porcentagem de linearidade com o que está no banco de dados (o que foi ensinado) irei tomar a minha decisão. Obviamente, que antes eu teria que fazer a transformada da linearização (transformar os caracteres em um conjunto de equações lineares). Enfim, começarei o código assim que terminar um projeto comercial (infelizmente preciso comer...).


Gostaria de saber se vocês conhecem uma abordagem melhor. Acham que a minha ideia tem sentido? Esse projeto realmente me deixou ansioso, to doido pra tirar ele do papel.
TUNUSAT 30/08/2015 09:15:16
#450698
DS2T,

Você que anexar um [Ô]AI[Ô] dentro do seu [Ô]OCR[Ô]?
Mas, desculpe, acho que eu entendi errado ... você quer dizer [Ô]OCR[Ô] ou [Ô]ICR[Ô]?
Bom, deixa eu me explicar para não perdurar dúvidas vãs.
Eu aprendi que [Ô]OCR[Ô] é somente para reconhecimento de caracteres escritos por máquinas. E [Ô]ICR[Ô] é o reconhecimento da escrita de uma pessoa.
Isto posto, segue a pergunta:
- Você quer identificar textos escritos por máquinas ou por pessoas? Ou talvez ambas...
Como é de [Ô]praxe[Ô], colocarei alguns links interessantes que pesquisarei na internet. Espero que todos os leitores apreciem.

==========================================================
Reconhecimento inteligente de caracteres
https://pt.wikipedia.org/wiki/Reconhecimento_inteligente_de_caracteres
Citação:

A maioria dos softwares ICR têm um sistema de “auto-aprendizagem“ referido como uma rede neural, que atualiza automaticamente o banco de dados de reconhecimento para novos padrões de escrita. Isso aumenta a utilidade de dispositivos de scanner para o propósito de processamento de documentos, de reconhecimento de caracteres impressos (uma função do OCR) à reconhecimento de escrita à mão. Como esse processo está envolvido em reconhecimento de escrira à mão, os níveis de precisão podem, em algumas circunstâncias, não serem tão bons, mas podem alcançar 97% de taxa de precisão em escritas à mão legíveis em formulários estruturados.


==========================================================
Unicode Optical Character Recognition
http://www.codeproject.com/Articles/15304/Unicode-Optical-Character-Recognition
==========================================================
Optical Character Recognition
http://www.codeproject.com/Articles/476142/Optical-Character-Recognition
==========================================================
A C# Project in Optical Character Recognition (OCR) Using Chain Code
http://www.codeproject.com/Articles/160868/A-C-Project-in-Optical-Character-Recognition-OCR-U
==========================================================
Creating Optical Character Recognition (OCR) applications using Neural Networks
http://www.codeproject.com/search.aspx?q=character+recognition+software&sbo=kw&x=0&y=0
==========================================================
Free or affordable OCR and ICR (handwriting recognition)
http://stackoverflow.com/questions/7165673/free-or-affordable-ocr-and-icr-handwriting-recognition-sdk
==========================================================

Abaixo atrevi-me a colocar um glossário, não por arrogância mas pelo desejo insaciável de ver outras pessoas aprenderem e saírem deste planeta melhores, mais moralizadas e mais intelectualizadas, de que quando entraram (felizmente só é possível levar embora deste planeta essas duas características citadas).

Glossário:
A.I. - Artificial Intelligence - (I.A.) Inteligência Artificial
O.C.R. - Optical Character Recognition - Reconhecimento Ótico de Caracteres
I.C.R. - Intelligent Character Recognition - Reconhecimento Inteligente de Caracteres (reconhecimento de escrita à mão livre)

[][ô]s,
Tunusat.
DS2T 30/08/2015 17:32:43
#450714
Caramba Tunusat. Eu não sabia que tinha essa diferenciação entre OCR e ICR. Obrigado pela informação!

Acho que meu projeto segue o caminho do ICR então.

Li todos esses artigos que você passou, muita coisa que não tinha passado pela minha cabeça, como por exemplo, identificar alinhamentos de textos, definir um percentual de acerto. Tem um desses exemplos que usou uma coisa que nunca iria imaginar em mil anos hahaha Conceitos de centróide e raio de giração. Sempre associei isso somente a Resistência dos Materiais... Ideias interessantes que com certeza serão bem aproveitadas.

Também percebi que vai ser cansativo o processo de aprendizado. Terei que tomar bastante cuidado com os aprendizados que armazenarei no banco de dados. Mas também não queria limitar o tipo de fonte. Mas isso também deixou claro pra mim que terei que ter estatísticas no meu banco para cada fonte.

E obrigado por se dispor a me ajudar!
TUNUSAT 03/09/2015 09:19:57
#450942
Resposta escolhida
DS2T,

Dá uma pesquisada por ai que tem muita coisa pronta. Mesmo que você não for usar, pode aproveitar os conceitos (as ideias) e colocar no seu projeto.
Tem muita, mas muita informação mesmo no site do [Ô]Code Project[Ô] (http://www.codeproject.com/).

Mas existem outros interessantes a serem explorados, como o:
- NUGET (https://www.nuget.org/)
- GITHUB (https://github.com/)
https://github.com/search?utf8=%E2%9C%93&q=ICR

Reserve um tempinho para aprender sobre [Ô]IA[Ô] também, pois quanto mais [Ô]inteligente[Ô] for seu programa, melhor pode assimilar uma escrita à mão particular de uma determinada pessoa. Tipo ... o sistema [Ô]sabe[Ô] quem escreveu aquela carta.
Imagine o sistema souber distinguir, através da escrita à mão livre, se uma pessoa está nervosa ou relaxada.
Bom... as possibilidades são múltiplas...

Queria te mostrar isso também, acho que você vai gostar de saber:
========================================
Graffiti (Palm OS)
https://en.wikipedia.org/wiki/Graffiti_(Palm_OS)
========================================
Graffiti 2
https://en.wikipedia.org/wiki/Graffiti_2
========================================

Por último, monte também algum texto explicativo e um código fonte interessante para disponibilizar aqui para o pessoal do VBMania.

[][ô]s,
Tunusat.
DS2T 03/09/2015 09:24:03
#450943
Valeu Tunusat.
Monto sim, pode deixar.

Abraços!

Vou encerrar o tópico.
Obrigado pela ajuda.
Tópico encerrado , respostas não são mais permitidas