Pergunta

Eu preciso invocar Tesseract OCR (seu uma biblioteca de código aberto em C ++ que faz Optical Character Recognition) a partir de um Application Server Java. Agora a sua fácil o suficiente para rodar o executável usando Runtime.exec (). A lógica básica seria

  1. Salvar imagem que está retido na memória para o arquivo (a .tif)
  2. passar o nome do arquivo de imagem para o programa de linha de comando tesseract.
  3. ler no arquivo de texto de saída de Java usando FileReader.

Como muita melhoria em termos de desempenho estou provável conseguir escrevendo um invólucro JNI para Tesseract? Infelizmente não há uma JNI código aberto envoltório que funciona em Linux. Eu teria que fazer isso sozinho e estou querendo saber sobre se o benefício vale a pena o custo de desenvolvimento.

Foi útil?

Solução

É difícil dizer se seria pena. Se você assumir que, se feito em processo via JNI, o código OCR pode acessar diretamente os dados de imagem sem ter que escrevê-lo em um arquivo, em seguida, ele certamente eliminar qualquer disco restrições de I / O de lá.

Eu recomendo ir com a abordagem mais simples e única empresa a opção JNI se o desempenho não é aceitável. Pelo menos, então você vai ser capaz de fazer alguma análise comparativa e estimar os ganhos de desempenho que você pode ser capaz de perceber.

Outras dicas

Se você perseguir o seu próprio invólucro, eu recomendo que você verifique JNA . Ele permitirá que você para chamar a maioria das bibliotecas "nativos" que escrevem somente o código Java, e lhe dará mais ajuda do que faz JNI matéria de fazê-lo com segurança. ANJ está disponível para a maioria das plataformas.

Eu estou de acordo com tweakt. Não use JNI se não houver razões perfomance de fazer isso. Sua estabilidade do aplicativo é também pode estar em perigo se você usar JNI chamadas se haverá algumas possibilidades de vazamentos de memória ou até mesmo falhas em sua camada JNI ou na própria OCR. Isso nunca vai acontecer se você usá-lo através de uma interface de linha de comando (Toda a memória será lançado na saída do programa e todas as terminações anormal do programa pode ser verificado no código de chamada).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top