我该如何在Android中使用Tesseract?

20

我在网上搜索了几个小时。有很多答案说我们需要为Windows使用NDK等技术来使用"Tesseract"。

但我没有找到任何关于安装NDK后应该做什么的逐步/正确解释。如何获取.so文件? 我已经完成了NDK和Cygwin的安装。为了检查是否安装正确,我输入了make -v,并且它输出了预期的结果。

有使用"Tesseract"的人能告诉我他们是如何做到的吗? (我已经下载了"Mezzofanti",但我没有找到任何"Tesseract"文件。)

4个回答

22

在 Android 上使用 Tesseract 需要使用 tess-two 项目。 tess-two 包含编译 Tesseract 和 Leptonica 库以在 Android 平台上使用的工具。 它提供了一个 Java API,用于访问本地编译的 Tesseract 和 Leptonica API。

将 tess-two 添加到您的项目中:

将以下代码添加到 build.gradle 中:

dependencies {
    compile 'com.rmtheis:tess-two:5.4.1'
}

使用Tesseract:

import com.googlecode.tesseract.android.TessBaseAPI;

private String extractText(Bitmap bitmap) throws Exception{
    TessBaseAPI tessBaseApi = new TessBaseAPI();
    tessBaseApi.init(DATA_PATH, "eng");
    tessBaseApi.setImage(bitmap);
    String extractedText = tessBaseApi.getUTF8Text();
    tessBaseApi.end();
    return extractedText;
}

你可以查看我在GitHub上的一个简单的使用Tesseract进行Android开发示例,它只包含200行Java代码。


1
不错!你应该将目标 API 设置为 22,因为你的应用程序没有向用户请求运行时权限 - rmtheis
尝试消除一些疑虑。我认为OCR需要大量的CPU资源,你不觉得在用户手持设备上执行OCR会导致他们的设备变慢吗?我想在服务器级别执行OCR,然后将信息返回给用户会更好。你觉得呢? - Lokesh Pandey
2
@Lokesh 尝试使用Google Vision OCR而不是Tesseract。它虽然不是免费的,但价格便宜。它可以为多种语言和任何角度提供出色的结果。 - Yuliia Ashomok
2
@Lokesh 尽管OCR在本地设备上是CPU和内存密集型任务,但使用服务器解决方案也有其缺点。您必须将图片数据上传到服务器(根据分辨率和预处理,图片大小从几十千字节到几兆字节不等,上传需要时间)。而且,您必须确保您的解决方案相对安全(例如,如果您正在尝试扫描人员身份证,则应在解决方案的安全性上花费大量预算,因为泄露照片会非常敏感)。最终,在设备上进行OCR可能更安全+更快。 - Ped7g
2
@Lokesh 实际上很大程度上取决于图片数据的来源。如果您正在对来自互联网的某些数据进行OCR,则将请求放在您的服务器服务上,使用所需的URL,让服务器下载图像,运行OCR并将文本结果发送到应用程序可能会更快。如果图像的来源是设备相机,则上传原始数据到服务器可能会有问题(时间太长+数据量太大),但是通过一些重型预处理,您可以上传仅50-200kB的图片数据,这对于一些具有良好数据服务的国家可能是可以接受的。 - Ped7g
显示剩余8条评论

15

我已经在我的问题中进行了更改... 我需要它适用于WINDOWS XP操作系统。 - PrincessLeiha
我阅读了“READ ME”,但在执行“git clone git://android.git.kernel.org/platform/external/jpeg.git libjpeg”这一步时出现错误:“Cloning into libjpeg... android.git.kernel.org[0: 149.20.4.77]: errno=No route to host fatal: unable to connect a socket (No route to host)”。 - PrincessLeiha
发现问题:这是备用镜像"https://github.com/android/platform_external_jpeg"。 - PrincessLeiha
好的,我按照给出的步骤进行了操作... 我在Cygwin中使用"ndk-build"命令构建文件... 但它没有创建第二个.SO文件。 - PrincessLeiha
@Pallavi 抱歉,我无法提供帮助,因为我已经在Ubuntu 11.04中配置了tesseract。它可以正常工作。 - Uttam
显示剩余2条评论


-1

3
你发布的视频链接只是指向这个帖子本身的链接。 - Knight Forked

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接