OCR e Auto-Click

14 respostas
C

Olá,

Sou iniciante em Java e a pouco tempo tive uma ideia que acho ser possível de implementar nessa linguagem. Eu pensei em criar um programa que avaliasse uma imagem e clicasse automaticamente em um local predefinido pelo usuário de acordo com a imagem que aparecesse. Algum tempo atrás ouvi falar de OCR e me interessei pelo assunto. Entretanto, acho que um OCR é “potente” demais para atender minhas necessidades. Digo isso porque o OCR avalia qualquer imagem e captura o texto presente nela. O meu programa não precisa ser tão genérico assim, eu quero que ele compare duas imagens e verifica se são iguais. A princípio pensei que o algoritmo pudesse escanear toda a matriz de pixels (não sei se isso é totalmente compreensível, mas penso que todas as imagens compostas por pixels dispostos em filas e colunas) e comparar com outra matriz predeterminada. Pois bem, essa é minha dúvida. Todas essas ideias estão ainda no pensamento e nem sei se tudo que falei é possível e é por isso que peço a ajuda de vocês. Muito obrigado.

14 Respostas

M

ja existe uma api de ocr em java, se não me engano o nome seria java ocr mesmo… e para clicar em algum lugar você pode usar a classe Robot.

A

para comparar as imagens (pixel por pixel, ou máscara, etc.) vc pode usar o JAI (Java Advanced Image)

C

Obrigado à galera que já respondeu, não tive tempo de testar ainda. Entretanto dei uma rápida pesquisada e acho que pode me ajudar muito. Não conhecia nenhuma desses recursos e por isso já contribuiu muito para meu conhecimento. Peço que quem tenha mais alguma sugestão que não exite em responder. Valeu

B

O que são duas imagens iguais para você? São duas imagens iguais pixel a pixel (e nesse caso você só precisaria comparar os arquivos .png ou .jpeg) ou são duas imagens iguais para seres humanos (por exemplo, uma que é igual a outra, exceto por diferenças de cores, quantização, alinhamento e posição?)

C

Boa pergunta. Quero saber se duas imagens são iguais, pixel por pixel. Eu quero que várias imagens sejam cadastradas no programa (nessa parte ainda estou em dúvida se quem fará isso é o usuário ou as imagens serão definidas no código) e estas sejam comparadas com um print de alguma parte da tela. Deixa eu mostrar um exemplo: um usuário abre uma página e vê uma logomarca desconhecida para ele. Ele abre o programa, seleciona a área em que está a logomarca e confirma para que seja feita a comparação com as já carregadas no programa. Se haver uma imagem igual, o programa exibe uma série de informações sobre esta empresa.
A ideia pode parecer sem sentido, mas é que eu nunca vi um programa que faça isso e me pareceu interessante.
Obs. A parte de selecionar a logomarca é pra funcionar como a “ferramenta de captura” que existe no windows 7.

Valeu

T

Talvez isso te ajude também: http://www.lac.inpe.br/JIPCookbook/6050-howto-compareimages.jsp
Mas como o pessoal já falou, depende do que você considera ser igual.
Criar um algoritmo que diga se duas imagens são “humanamente iguais” é de grande complexidade.

E

Então a comparação não é pixel a pixel, e sim algo que é igual ou parecido para seres humanos (pense um pouquinho. Imagine se fosse pixel a pixel. Só de o cara errar a posição de selecionar a área de um ou dois pixels para cima ou para baixo, a imagem seria diferente pixel a pixel, certo?).

Esse problema não é trivial.

C

Muito obrigado galera. Agradeço desde já a todos que estão aqui compartilhando seus conhecimentos comigo. Nenhuma resposta foi/será “inútil”, todas me ajudaram(ão) de alguma forma. Estou descobrindo funções novas, recursos que pensei não existir e estou tendo uma outra visão sobre o meu problema. Se tudo isso não me ajudar agora, ajudará em trabalhos futuros.

Mas deixa eu voltar ao tópico. Mudei um pouco aqui os meus planos. Pretendo deixar meu programa um pouco mais restrito -por enquanto- no que diz respeito a comparação de imagens. Pelo que pude entender com as respostas, a comparação de imagens levaria em consideração a qualidade da imagem, posição e tamanho.

Resolvi eliminar esses poréns, agora as imagens serão comparadas com elas mesmas. hã??? Vou explicar. Quando eu estava aprendendo lógica de programação, sempre fazia comparações com o mundo real, em que o programa eram pessoas. Então suponha que você esteja colecionando cartões e seu amigo lhe ofereça um cartão para troca. Você deve comparar o cartão de seu amigo com todos os que você tem em sua coleção. Caso você já tenha o cartão, você nega a troca.

Então é isso, as imagens comparadas serão perfeitamente idênticas, pois tem a mesma fonte.

Valeu galera, estou com problemas com a internet, o que tem reduzido consideravelmente os meus avanços. Quem tiver uma ideia, uma sugestão… já sabe. kkkkk

J

entanglement:

Deixa eu mostrar um exemplo: um usuário abre uma página e vê uma logomarca desconhecida para ele. Ele abre o programa, seleciona a área em que está a logomarca…

Então a comparação não é pixel a pixel, e sim algo que é igual ou parecido para seres humanos (pense um pouquinho. Imagine se fosse pixel a pixel. Só de o cara errar a posição de selecionar a área de um ou dois pixels para cima ou para baixo, a imagem seria diferente pixel a pixel, certo?).

Esse problema não é trivial.

O entanglement tem razão. Esse problema só pode ser resolvido por algoritmos de aproximação, que é o caso da rede neural e do nosso amigo “perceptron”. Se você comparar imagens pixel a pixel só vai encontrar imagens que sejam exatamente, ou seja uma cópia de uma outra. Para você conseguir comparar padrões(imagens semelhantes) precisa fazer uma análise estatística em cima delas. Existe um modelo de rede neural chama som(self organizing map). Ela é usada para soluções de ocr e de agrupamento.

Aconselho ler um artigo sobre redes neurais primeiro.

No code project existe dezenas de artigos sobre ocr incluindo código fonte. Esse tema de projeto não é difícil de se desenvolver.
esse é um deles.

C

Nossa senhora, não li o artigo todo, mas esse negócio de SOM é uma viagem meu amigo. Esse tópico está me rendendo muito mais do que o esperado. kkkkkk

Mas como disse antes, isso é um pouco demais para as minhas necessidades, não acham?

J

Claudiocfls:
Nossa senhora, não li o artigo todo, mas esse negócio de SOM é uma viagem meu amigo. Esse tópico está me rendendo muito mais do que o esperado. kkkkkk

Mas como disse antes, isso é um pouco demais para as minhas necessidades, não acham?

Não acho não, e não é complexo do jeito que você está pensando. É o básico para se criar sistemas inteligentes. Você pode estudar toda a matéria de IA começando por redes neurais associativas, que são nada mais nada menos que matrizes. Tenho certeza que isso vai agregar bastante para você. Depois se você animar pode pegar a grade toda da ciência da computação para estudar(até hoje eu vivo reestudando) :smiley: .

A

juliocbq:
Claudiocfls:
Nossa senhora, não li o artigo todo, mas esse negócio de SOM é uma viagem meu amigo. Esse tópico está me rendendo muito mais do que o esperado. kkkkkk

Mas como disse antes, isso é um pouco demais para as minhas necessidades, não acham?

Não acho não, e não é complexo do jeito que você está pensando. É o básico para se criar sistemas inteligentes. Você pode estudar toda a matéria de IA começando por redes neurais associativas, que são nada mais nada menos que matrizes. Tenho certeza que isso vai agregar bastante para você. Depois se você animar pode pegar a grade toda da ciência da computação para estudar(até hoje eu vivo reestudando) :smiley: .

tem uma implementação de Redes Neurais, free e bem interessante, é o NeuroPH

aqui a documentação: http://neuroph.sourceforge.net/image_recognition.html

J

aechiara:
juliocbq:
Claudiocfls:
Nossa senhora, não li o artigo todo, mas esse negócio de SOM é uma viagem meu amigo. Esse tópico está me rendendo muito mais do que o esperado. kkkkkk

Mas como disse antes, isso é um pouco demais para as minhas necessidades, não acham?

Não acho não, e não é complexo do jeito que você está pensando. É o básico para se criar sistemas inteligentes. Você pode estudar toda a matéria de IA começando por redes neurais associativas, que são nada mais nada menos que matrizes. Tenho certeza que isso vai agregar bastante para você. Depois se você animar pode pegar a grade toda da ciência da computação para estudar(até hoje eu vivo reestudando) :smiley: .

tem uma implementação de Redes Neurais, free e bem interessante, é o NeuroPH

aqui a documentação: http://neuroph.sourceforge.net/image_recognition.html

existem várias. Essa neuroph tem uma ferramentas interessantes. Isso é bom para estudar.

C

É bom ver que as pessoas realmente se interessam em ajudar os necessitados. kkkk Isso só me dá mais confiança para continuar a discutir minhas dúvidas aqui no fórum. Valeu pessoal, muito obrigado mesmo.

Eu ainda não desisti de estudar esse negócio de redes neurais. Apenas deixei de lado por enquanto pois estou sem tempo para me focar no assunto. Acho que cada coisa tem seu tempo e IA ficará para um pouco mais tarde.

Muito obrigado ao aechiara e juliocbq por trazer o assunto e pode ter certeza que o simples fato de saber o que é redes neurais já contribui muito para mim.

Mas o meu problema aqui é outro. Eu quero tirar prints da tela e ver se são iguais, só isso. Eu não sei como posso fazer a comparação dessas imagens.

Criado 6 de março de 2012
Ultima resposta 15 de mar. de 2012
Respostas 14
Participantes 7