Domanda

Devo invocare tesseract OCR (è una libreria open source in C ++ che fa il riconoscimento ottico dei caratteri) da un Java Application Server. In questo momento è abbastanza facile eseguire il file eseguibile utilizzando Runtime.exec (). La logica di base sarebbe

  1. Salva l'immagine che è attualmente in memoria su file (a .tif)
  2. passa il nome del file immagine al programma da riga di comando tesseract.
  3. leggi nel file di testo di output da Java usando FileReader.

Qual è il miglioramento in termini di prestazioni che posso ottenere scrivendo un wrapper JNI per Tesseract? Sfortunatamente non esiste un wrapper JNI open source che funziona in Linux. Dovrei farlo da solo e mi chiedo se il beneficio valga il costo di sviluppo.

È stato utile?

Soluzione

È difficile dire se ne varrebbe la pena. Se si presuppone che, se eseguito in-process tramite JNI, il codice OCR può accedere direttamente ai dati dell'immagine senza doverli scrivere su un file, si eliminerebbero sicuramente eventuali vincoli di I / O del disco.

Consiglio di seguire l'approccio più semplice e di intraprendere l'opzione JNI solo se le prestazioni non sono accettabili. Almeno allora sarai in grado di fare alcuni benchmark e stimare i miglioramenti delle prestazioni che potresti essere in grado di realizzare.

Altri suggerimenti

Se segui il tuo wrapper, ti consiglio di dare un'occhiata a JNA . Ti consentirà di chiamare la maggior parte dei "nativi" librerie che scrivono solo codice Java e ti daranno più aiuto di quanto non faccia JNI per farlo in sicurezza. JNA è disponibile per la maggior parte delle piattaforme.

Sono d'accordo con tweakt. Non usare JNI se non ci sono ragioni di perfomance per farlo. La stabilità dell'applicazione potrebbe anche essere in pericolo se si utilizzano chiamate JNI se ci saranno alcune possibilità di perdite di memoria o addirittura arresti anomali nel proprio livello JNI o ??nello stesso OCR. Questo non accadrà mai se lo si utilizza tramite l'interfaccia della riga di comando (tutta la memoria verrà rilasciata all'uscita dal programma e tutte le terminazioni anomale del programma possono essere verificate nel codice chiamante).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top