2015-08-27 12 views
12

Moja aplikacja na Androida ma funkcję OCR przy użyciu biblioteki tess-two. Mam ten problem podczas czytania String, który zawiera "fi". Po baseApi.getUTF8Text(), to metoda, aby uzyskać rozpoznany tekst przez OCR, zwrócony ciąg w tym "fi" jest "fi"< < < - - - Take bardzo zwróć uwagę na ten ciąg. Nie jest to ciąg znaków składający się z dwóch znaków, lecz ciąg znaków z jednym znakiem. Możesz to powielić, kopiując i wklejając. Teraz myślę, że może to być problem kodowania UTF8 lub etc, z którymi nie mam wystarczającej wiedzy. Kiedy próbowałem wykonać string.replace ("fi", "fi"), Android Studio kompiluje się z erorsami nieodmiennym znakiem do kodowania utf-8. Próbowałem wyszukiwać w google, ale rozpoznaje to jako zwykłe "fi", a nie "fi".Android Tess-Two OCR niemożliwy do przypisania znak "fi"

Czy mogę naprawić tę postać?

Odpowiedz

6

Można uniknąć uznając ligatury przez czarną listę przed wywołaniem baseApi.setImage:

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

Aby zapobiec Android Studio z wyrzuceniem błędu unmappable character na kodzie Java, konwersji kodowania pliku na UTF-8 przez choosing " UTF-8 "z selektora w prawym dolnym rogu okna Android Studio.

+1

Jak na razie jest dobrze :) Wiedziałem, jak działa czarna lista, ale nigdy nie zastanawiałem się nad umieszczeniem tej postaci, ponieważ myślałem, że to będzie znak zapytania, kiedy ją zbuduję. – Sheychan

2

Oto co znalazłem, FWIW: znak „fi” jest podwiązanie (więcej na: Unicode Character 'LATIN SMALL LIGATURE FI' (U+FB01))

Oto szybki i brudny Program do wyszukiwania i zamiany „fi” z jakimikolwiek innymi postaciami:

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); 
    } 

} 

Jeśli twój IDE skarży się, że "fi" nie znajduje się w zestawie znaków cp1252, zapisz jako UTF8.

HTH.

+1

Twoja metoda nie działa, wynikiem jest ciąg znaków zapytania. – Zarwan

+0

Myślę, że to się dzieje, ponieważ 'fi' nie jest znaną postacią. Zakładam, że twoja funkcja replace nie działa, więc 'fi' nadal istnieje i ponieważ IntelliJ nie może wyprowadzić go poprawnie, zastępuje go znakiem zapytania. – Zarwan

+0

Metoda działa na moim komputerze, wynikiem jest "FIFIFIFIFIFIFIFIFIFIFIFIFIFIFI" – user5292387