2015-08-27 11 views
12

La mia app Android ha una funzionalità OCR che utilizza la libreria tess-two. Ho questo problema nella lettura della stringa che contiene "fi". Dopo baseApi.getUTF8Text(), un metodo per ottenere il testo riconosciuto dal OCR, la stringa restituita in quel "fi" è "fi"< < < - - - Take a molto molta attenzione a quella stringa. Non è una stringa a 2 caratteri ma una stringa a carattere singolo. Puoi riprodurlo copiando e incollando. Ora, penso che potrebbe essere un problema di codifica UTF8 o ecc. Con cui non ho abbastanza conoscenza. Quando ho provato a fare string.replace ("fi", "fi"), Android Studio costruisce con gli erori un carattere non mappabile per la codifica utf-8. Ho provato a cercare in google ma lo riconosce come una normale "fi" non "fi".Android Tess-Two OCR carattere non memorabile 'fi'

C'è un modo per risolvere questo personaggio?

risposta

6

È possibile evitare il riconoscimento del legatura dalla lista nera prima di chiamare baseApi.setImage:

baseApi.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST, "fi"); 

Per evitare Android Studio dal gettare l'errore unmappable character sul codice Java, convertire il file di codifica UTF-8 da choosing " UTF-8 "dal selettore vicino all'angolo in basso a destra della finestra di Android Studio.

+1

Finora questo va bene :) Sapevo come funziona la lista nera ma non ho mai considerato di mettere quel personaggio lì perché pensavo che sarebbe un punto interrogativo una volta costruito. – Sheychan

2

Ecco cosa ho trovato, FWIW: il carattere 'fi' è una legatura (più a: Unicode Character 'LATIN SMALL LIGATURE FI' (U+FB01))

Ecco un programma veloce e sporco di trovare e sostituire 'fi' con tutti gli altri personaggi:

public class LigatureFI 
{ 

    static char ligature_fi = 0xFB01; 

    public static void main(String[] args) 
    { 
     String sligature_fi = Character.toString(ligature_fi); 
     String string = new String("fififififififififififififififi"); 
     System.out.println(string); 
     string = string.replaceAll(sligature_fi, "FI"); 
     System.out.println(string); 
    } 

} 

Se l'IDE si lamenta del fatto che "fi" non si trova nel set di caratteri cp1252, salvare come UTF8.

HTH.

+1

Il tuo metodo non funziona, il risultato è una stringa di punti interrogativi. – Zarwan

+0

Penso che questo accada perché 'fi' non è un personaggio conosciuto. Suppongo che la tua funzione di sostituzione non funzioni, quindi 'fi' è ancora lì e dal momento che IntelliJ non può emetterlo correttamente lo sta sostituendo con un punto interrogativo. – Zarwan

+0

Il metodo funziona sulla mia macchina, il risultato è "FIFIFIFIFIFIFIFIFIFIFIFI" – user5292387

Problemi correlati