2012-09-23 2 views
1

J'ai téléchargé Tesseract OCR pour Android de here et j'essaye de le construire comme projet de bibliothèque pour ma propre application en utilisant le NDK. J'ai reçu des commentaires utiles sur la façon de le faire here. Tout d'abord, je le fais sur la ligne de commande ([path] est un raccourci pour le chemin du projet tess-deux):UnsatisfiedLinkError - Tesseract pour Android

> cd [path]\tess-two 

> C:\android-ndk-r8b-windows\android-ndk-r8b\ndk-build -j8 

"Compile thumb : lept <= adaptmap.c 

[...] 

"Compile++ thumb : lept <= writefile.cpp 

Prebuilt  : libgnustl_static.a <= <NDK>/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/ 

"Compile++ thumb : tess <= applybox.cpp 

[...] 

"Compile++ thumb : tess <= tessbaseapi.cpp 

"Compile thumb : lept <= adaptmap.c 

[...] 

"Compile++ thumb : lept <= pixa.cpp 

Prebuilt  : libgnustl_static.a <= <NDK>/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/ 

"Compile++ thumb : lept <= jni.cpp 

[...] 

"Compile++ thumb : tess <= tessbaseapi.cpp 

"Compile x86 : lept <= affine.c 

[...] 

"Compile++ x86 : lept <= readfile.cpp 

Prebuilt  : libgnustl_static.a <= <NDK>/sources/cxx-stl/gnu-libstdc++/4.6/libs/x86/ 

"Compile++ x86 : tess <= baseapi.cpp 

[...] 

"Compile++ x86 : tess <= wordclass.cpp 

SharedLibrary : liblept.so 

SharedLibrary : liblept.so 

"Compile++ x86 : tess <= tessbaseapi.cpp 

SharedLibrary : liblept.so 

"Compile++ x86 : tess <= wordrec.cpp 

SharedLibrary : libtess.so 

Install  : liblept.so => libs/x86/liblept.so 

Install  : liblept.so => libs/armeabi/liblept.so 

SharedLibrary : libtess.so 

Install  : liblept.so => libs/armeabi-v7a/liblept.so 

SharedLibrary : libtess.so 

Install  : libtess.so => libs/armeabi/libtess.so 

Install  : libtess.so => libs/armeabi-v7a/libtess.so 

Install  : libtess.so => libs/x86/libtess.so 


> C:\Users\User\android-sdk\tools\android.bat update project --path . 

Failed to convert path to a short DOS path: C:\Windows\system32\java.exe 
'javaw_exe' is not recognized as an internal or external command, 
operable program or batch file. 
Updated local.properties 

Updated file [path]\tess-two\proguard-project.txt 

It seems that there are sub-projects. If you want to update them 

please use the --subprojects parameter. 

> set JAVA_HOME=C:\Java\JDK 
> Buildfile: [path]\tess-two\build.xml 

-set-mode-check: 

-set-release-mode: 

-release-obfuscation-check: 
    [echo] proguard.config is ${proguard.config} 

-check-env: 
[checkenv] Android SDK Tools Revision 20.0.3 
[checkenv] Installed at C:\Users\User\android-sdks 

-setup: 
    [echo] Project Name: tess-two 
    [gettype] Project Type: Android Library 

-build-setup: 
    [echo] Resolving Build Target for tess-two... 
[gettarget] Project Target: Google APIs 
[gettarget] Vendor:   Google Inc. 
[gettarget] Platform Version: 4.1 
[gettarget] API level:  16 
    [echo] ---------- 
    [echo] Creating output directories if needed... 
    [echo] ---------- 
    [echo] Resolving Dependencies for tess-two... 
[dependency] Library dependencies: 
[dependency] No Libraries 
[dependency] 
[dependency] ------------------ 
[dependency] API<=15: Adding annotations.jar to the classpath. 
    [echo] ---------- 
    [echo] Building Libraries with 'release'... 
    [subant] No sub-builds to iterate on 

-pre-build: 

-code-gen: 
[mergemanifest] Found Deleted Target File 
[mergemanifest] Merging AndroidManifest files into one. 
[mergemanifest] Manifest merger disabled. Using project manifest only. 
    [echo] Handling aidl files... 
    [aidl] No AIDL files to compile. 
    [echo] ---------- 
    [echo] Handling RenderScript files... 
[renderscript] No RenderScript files to compile. 
    [echo] ---------- 
    [echo] Handling Resources... 
    [aapt] Found new input file 
    [aapt] Generating resource IDs... 
    [echo] ---------- 
    [echo] Handling BuildConfig class... 
[buildconfig] No need to generate new BuildConfig. 

-pre-compile: 

-compile: 
    [echo] Creating library output jar file... 

-post-compile: 

-obfuscate: 

-dex: 
    [echo] Library project: do not convert bytecode... 

-crunch: 
    [crunch] Crunching PNG Files in source dir: [path]\tess-two\res 
    [crunch] To destination dir: [path]\tess-two\bin\res 
    [crunch] Crunched 0 PNG files to update cache 

-package-resources: 
    [echo] Library project: do not package resources... 

-package: 
    [echo] Library project: do not package apk... 

-post-package: 

-release-prompt-for-password: 

-release-nosign: 
    [echo] 
[propertyfile] Updating property file: [path]\tess-two\bin\build.prop 
[propertyfile] Updating property file: [path]\tess-two\bin\build.prop 
[propertyfile] Updating property file: [path]\tess-two\bin\build.prop 
[propertyfile] Updating property file: [path]\tess-two\bin\build.prop 

-release-sign: 

-post-build: 

release: 

BUILD SUCCESSFUL 
Total time: 1 second 

Alors, je fais ceci: Fichier -> Importer -> Android -> Code existant dans l'espace de travail -> Parcourir -> Sélectionner le répertoire actuel de l'espace de travail -> Assurez-vous que tess-two est sélectionné dans la liste qui apparaît -> Terminer. Puis je fais un clic droit sur ma propre application, allez dans Propriétés -> onglet Android -> Ajouter ... (sous la section Bibliothèque) -> sélectionnez tess-two -> Cliquez sur OK -> Cochez "Est la bibliothèque" - > OK.

Cependant, après tout cela, je encore obtenir l'erreur follwing lors de l'exécution de mon application:

09-23 13:02:42.532: E/AndroidRuntime(675): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load lept: findLibrary returned null 
09-23 13:02:42.532: E/AndroidRuntime(675): at java.lang.Runtime.loadLibrary(Runtime.java:365) 
09-23 13:02:42.532: E/AndroidRuntime(675): at java.lang.System.loadLibrary(System.java:535) 
09-23 13:02:42.532: E/AndroidRuntime(675): at com.googlecode.tesseract.android.TessBaseAPI.<clinit>(TessBaseAPI.java:47) 

Les project.properties pour mon application est:

target=android-16 
android.library.reference.1=..\\OpenCV\\sdk\\java 
android.library.reference.2=../Tesseract/tess-two 
android.library=true 

Qu'est-ce qui se passe ?

+0

Si quelqu'un peut me donner des commentaires sur les autres informations que je devrais inclure pour aider les autres à répondre à la question, je l'apprécierais vraiment. –

+0

Incluez aussi project.properties. – rmtheis

+1

Ne cochez pas "is Library" pour votre propre projet. Tess-two devrait être le projet de la bibliothèque. – rmtheis

Répondre

1

Je l'ai eu, le problème était que je n'étais pas en train d'initialiser correctement l'API dans mon code. La syntaxe correcte est:

tesseract.init("/mnt/sdcard/", "eng"); 

en supposant que vous avez un dossier "tessdata" sous mnt/sdcard. Maintenant, il charge parfaitement! Merci beaucoup pour toute votre aide, thèse!

+0

salut plz m'aider où je dois écrire cette ligne peut vous plz mentionner dans quelle classe –

0

pour moi au lieu de 2 loadlibrary je fait 4 comme

System.loadLibrary("jpgt"); System.loadLibrary("pngt"); System.loadLibrary("lept"); System.loadLibrary("tess"); et cela a fonctionné.