2011-10-10 100 views
1

我正在考虑为Android创建一个OCR。我还没有开始,虽然我在google &中搜索了很多没有找到任何合理的答案来解决这个问题。最近我开始了解Android OpenCV项目。现在我正在寻找一些关于入门的提示。你能否建议正确的方法?在Android上使用OpenCV的OCR

回答

2

1)如何进行OCR for Android?

我在互联网上找到了两种方法。

a)使用Tesseract - Tesseract由google维护,托管在git上。下载和构建的说明可以在互联网上找到(搜索谷歌与“rmtheis tesseract”,按照第一个链接)。以下是易于参考的快速步骤。

git clone git://github.com/rmtheis/tess-two tess 
    cd tess 
    cd tess-two 
    ndk-build 

我没有使用内置ANT,但在Eclipse中创建了自己的APK项目,并导入示例代码来测试库。

我在系统上安装了ubuntu。我没有遇到上述指示有任何问题。我发现安装git客户端更容易,然后按照上述步骤操作。一旦构建了tesseract库,您将需要在android应用程序中加载这个库,然后在您的应用程序中使用这些API。网上有很多样品,我发现它很容易使用。

b)使用openCV - 您可以使用open cv和creat OCR功能。 OpenCV指令很少冗长。但是,如果这些指令得到正确遵守,您可以构建Open CV库并在Android应用程序中使用静态库。

您将需要CMAKE来构建openCV库。 CMAKE有3个其他依赖项。但是,如果完全遵循指令,则构建openCV并不困难。

http://code.opencv.org/projects/opencv/wiki/Building_OpenCV4Android_from_trunk

我发现很容易的Tesseract OCR基于OpenCV的同时,有利于识别手写使用的字体。

2)从哪里开始?

openCV和tesseract都有样本目录。这些样品是自起动器套件。 有关openCV手写OCR的更多示例,请在谷歌上使用关键词“使用openCV进行OCR”进行搜索。谷歌搜索的前两场比赛是很好的参考点。

希望以上解释有帮助。

编辑:

如果您有甲骨文的JDK 7的系统上安装,因为是我的情况下,你可能会遇到的问题。为了解决这些问题,我必须编辑/usr/share/cmake-2.8/Modules/FindJNI.cmake文件。在这个文件中,我注释了引用openjdk的行以及默认和添加了oracle jdk 7的引用,如下所示。

JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES 
    ${_JAVA_HOME}/jre/lib/{libarch} 
    ${_JAVA_HOME}/jre/lib 
    ${_JAVA_HOME}/lib 
    ${_JAVA_HOME} 
    /usr/lib 
    /usr/local/lib 
    /usr/lib/jvm/java/lib 
    /usr/lib/java/jre/lib/{libarch} 
    /usr/lib/jvm/jre/lib/{libarch} 
    /usr/local/lib/java/jre/lib/{libarch} 
    /usr/local/share/java/jre/lib/{libarch} 
    /usr/lib/j2sdk1.4-sun/jre/lib/{libarch} 
    /usr/lib/j2sdk1.5-sun/jre/lib/{libarch} 
    /opt/sun-jdk-1.5.0.04/jre/lib/{libarch} 
    /usr/lib/jvm/java-6-sun/jre/lib/{libarch} 
    /usr/lib/jvm/java-1.5.0-sun/jre/lib/{libarch} 
    /usr/lib/jvm/java-6-sun-1.6.0.00/jre/lib/{libarch}  # can this one be removed according to #8821 ? Alex 
    #/usr/lib/jvm/java-6-openjdk/jre/lib/{libarch}  # Commented by Atul 
    #/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/{libarch}  # fedora 
    # Debian specific paths for default JVM 
    #/usr/lib/jvm/default-java/jre/lib/{libarch}  # Commented by Atul 
    #/usr/lib/jvm/default-java/jre/lib   # Commented by Atul 
    #/usr/lib/jvm/default-java/lib    # Commented by Atul 
    # OpenBSD specific paths for default JVM 
    /usr/local/jdk-1.7.0/jre/lib/{libarch} 
    /usr/local/jre-1.7.0/lib/{libarch} 
    /usr/local/jdk-1.6.0/jre/lib/{libarch} 
    /usr/local/jre-1.6.0/lib/{libarch} 
    /usr/lib/jvm/java-7-oracle/jre/lib/{libarch} # This is added Atul 
) 

并在脚本查找包含库的部分...

set(JAVA_AWT_INCLUDE_DIRECTORIES 
    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/include" 
    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/include" 
    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/include" 
    ${_JAVA_HOME}/include 
    /usr/include 
    /usr/local/include 
    /usr/lib/java/include 
    /usr/local/lib/java/include 
    /usr/lib/jvm/java/include 
    /usr/lib/jvm/java-6-sun/include 
    /usr/lib/jvm/java-1.5.0-sun/include 
    /usr/lib/jvm/java-6-sun-1.6.0.00/include  # can this one be removed according to #8821 ? Alex 
    #/usr/lib/jvm/java-6-openjdk/include 
    /usr/local/share/java/include 
    /usr/lib/j2sdk1.4-sun/include 
    /usr/lib/j2sdk1.5-sun/include 
    /opt/sun-jdk-1.5.0.04/include 
    # Debian specific path for default JVM 
    #/usr/lib/jvm/default-java/include 
    # OpenBSD specific path for default JVM 
    /usr/local/jdk-1.7.0/include 
    /usr/local/jdk-1.6.0/include 
    /usr/lib/jvm/java-7-oracle/include 
) 

然后我跟着精确的说明建立OpenCV的为Android ...