Ajuda com calculo matemático para reconhecimento de caracteres

1 resposta
B

Olá, eu estou com um problema de execução.

Estou fazendo um aplicativo em que o usuario desenha uma letra na tela e o computador identifica qual letra a pessoa esta desenhando, igual esses aplicativos de auxilio ortografico que veem nos celulares.

Porem estou com problemas para saber como calcular o que a pessoa desenha e identificar. Vou postar o código e me ajudem.

public float carregaPorcentagem(BufferedImage arquivoA, String arquivoB) {
        float porcentagem = 0;
        int acertosTeste = 0;
        int errosTeste = 0;
        
         int somaPixel = 0;
         
        int somadorBrancoTeste=0;
        int somadorPretoTeste=0;
        
       
        int somadorBrancoBase = 0;
        int somadorPretoBase = 0;
        
        try {

            BufferedImage bufi = arquivoA;// ImageIO.read( getClass().getResource( "/a.png" ) );
            BufferedImage bufi2 = MC_Imagem.getInstance().loadImage(arquivoB);

            Color corBase = null;
            Color corTeste = null;
            Color branca = new Color(255, 255, 255);
            Color preta = new Color(0, 0, 0);

            for (int i = 0; i < bufi.getHeight(); i++) {

                for (int j = 0; j < bufi.getWidth(); j++) {
                    somaPixel++;
                    corBase = new Color(bufi.getRGB(i, j));
                    corTeste = new Color(bufi2.getRGB(i, j));

                    if (corBase.getRGB() == branca.getRGB()) {
                        somadorBrancoBase++;
                    } else {
                        somadorPretoBase++;
                    }
                    if (corTeste.getRGB() == preta.getRGB()) {
                        somadorBrancoTeste++;
                    } else {
                        somadorPretoTeste++;
                    }

                    if (bufi.getRGB(i, j) == bufi2.getRGB(i, j)) {
                        acertosTeste++;
                    } else {
                        errosTeste++;
                    }
                    //System.out.print( c + " " );
                }
                //System.out.println();
            }

            porcentagem = somaPixel  ;
            System.out.println("Letra: " + arquivoB);
            System.out.println("Soma: " + somaPixel);
            System.out.println("Somador branco Origem: " + somadorBrancoBase);
            System.out.println("Somador preto Origem: " + somadorPretoBase);
            System.out.println("Somador branco Teste: " + somadorBrancoTeste);
            System.out.println("Somador preto Teste: " + somadorPretoTeste);
            System.out.println("Acertos Pretos: " + acertosTeste);
            System.out.println("Erros: " + errosTeste);

        } catch (IOException exc) {

            exc.printStackTrace();

        }
        return porcentagem;
    }

É nessa parte aqui que estou precisando de ajuda:

porcentagem = somaPixel;

Eu tenho um banco de Letras um png, preta e branca, com 26 letras. E é feito um loop para verificar qual a porcentagem tem o desenho com cada letra, ou seja, o quanto o desenho se parece com a letra. Eu sei que é por aqui que devo mexer, mas estou fraco na matematica e fiz uns testes, vi que algumas letras atrapalhavam, como a letra W, que ocupa quase toda a imagem, a letra A com a letra R, são parecidas, entre outras.

Alguém pode me dar uma idéia de como poderia por exemplo calcular a porcentagem e como distinguir porcentagens muito próximas, por exemplo entre a letra A e R e o W que atrapalha mais que tem função? eu estou meio travado nos calculos. Está faltando alguma coisa, fiz tudo errado?

Obrigado.

1 Resposta

TerraSkilll

O que você está tentando desenvolver é um algoritmo de OCR. Não é algo exatamente trivial, então não sei se, com base no que você já fez, o pessoal vai conseguir te ajudar.

Dê uma olhada no projeto Java OCR, pode ser uma base para o que você quer.

Abraço.

Criado 24 de janeiro de 2015
Ultima resposta 26 de jan. de 2015
Respostas 1
Participantes 2