Android Tess-Two OCR 不可映射字符 'fi'

Posted

技术标签:

【中文标题】Android Tess-Two OCR 不可映射字符 \'fi\'【英文标题】:Android Tess-Two OCR unmappable character 'fi'Android Tess-Two OCR 不可映射字符 'fi' 【发布时间】:2015-11-21 09:43:21 【问题描述】:

我的 android 应用具有使用 tess-two 库的 OCR 功能。我在阅读包含“fi”的字符串时遇到了这个问题。在baseApi.getUTF8Text()之后,一个获取OCR识别文本的方法,那个"fi"中返回的String是"fi" 它不是一个 2 字符的字符串,而是一个单字符的字符串细绳。您可以通过复制和粘贴来重现它。现在,我认为这可能是我没有足够知识的 UTF8 编码等问题。当我尝试执行 string.replace("fi","fi") 时,Android Studio 会生成错误 unmappable character for encoding utf-8。我尝试在 google 中搜索,但它识别为常规的“fi”而不是“fi”。

有什么办法可以修复这个角色吗?

【问题讨论】:

【参考方案1】:

您可以通过在调用baseApi.setImage 之前将其列入黑名单来避免识别 连字:

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

为防止 Android Studio 在您的 java 代码中引发 unmappable character 错误,请通过 Android Studio 窗口右下角附近的选择器中的choosing“UTF-8”将您的文件编码转换为 UTF-8。

【讨论】:

到目前为止,这很好:) 我知道黑名单是如何工作的,但我从未考虑过将那个角色放在那里,因为我认为它在构建时会是一个问号。【参考方案2】:

这是我发现的,FWIW:字符“fi”是一个连字(更多信息:Unicode Character 'LATIN SMALL LIGATURE FI' (U+FB01))

这是一个快速而肮脏的程序,用于查找“fi”并将其替换为任何其他字符:

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


如果您的 IDE 提示 'fi' 不在 cp1252 字符集中,请另存为 UTF8。

HTH。

【讨论】:

你的方法不行,结果是一串问号。 我认为这是他的事情,因为fi 不是一个已知的角色。我假设您的替换功能不起作用,所以 fi 仍然存在,并且由于 IntelliJ 无法正确输出它,它用问号替换它。 方法在我的机器上运行,结果是“FIFIFIFIFIFIFIFIFIFIFIFIFI” 这很奇怪。我用 '\uFB01' 尝试了它,这是在 Java 中引用它的正确方法,但它仍然不起作用。这很奇怪,因为如果我在 IntelliJ 中复制并粘贴它,粘贴将给出“fi”字符,而不是编码,所以我知道那部分是正确的。当我尝试fi == '\uFB01' 时,它也给了我true,但是当我尝试string.charAt(0) == '\uFB01' 时,它给了我错误,即使我复制了相同的字符“fi”来制作字符串。我不确定发生了什么。

以上是关于Android Tess-Two OCR 不可映射字符 'fi'的主要内容,如果未能解决你的问题,请参考以下文章

Tess-Two(Android 中的 Tesseract OCR)显示非常不准确的结果

Android OCR 仅使用流行的 tessercat fork tess-two 检测数字

使用 Tesseract 的 Android OCR 应用程序

Windows 中的 Tesseract OCR Android

android手机怎么调用OCR识别图像中的文字

android怎么调用tesseract实现OCR功能?