2012-10-11 28 views
10

estoy usando Windows 7 y conseguir esta excepción al intentar ejecutar un proyecto Java que utiliza bibliotecas OpenCV:OPENCV Java

Exception in thread "main" 
java.lang.UnsatisfiedLinkError: no opencv_java in java.library.path 
at java.lang.ClassLoader.loadLibrary(Unknown Source) 
at java.lang.Runtime.loadLibrary0(Unknown Source) 
at java.lang.System.loadLibrary(Unknown Source) 
at org.opencv.highgui.Highgui.<clinit>(Highgui.java:416) 
at teste.main(teste.java:21) 

¿Qué he hecho mal? ¿Falta alguna importación?

Quiero crear un proyecto Java simple en Eclipse (no Android), que usa openCV.

  • javacv Así que he extraído del archivo de OpenCV-2.4.2.exe a C: \
  • Entonces ejecutado "cmake -G "MinGW Makefile" -DBUILD_opencv_java = ON C: \ OpenCV" comando y después de eso, "mingw32-make". Todo era acumulación sin errores o advertencias
  • Después de que he añadido DLL OpenCV a mis variables de entorno
+0

¿Puede agregar algún código donde integre las bibliotecas de OpenCV en Java? Parece que Classloader no puede encontrar la biblioteca. – Fildor

+0

En las configuraciones de ejecución, he agregado el argumento '-Djava.library.path = C: \ opencvFinal'. También en Java Build Path he agregado External Class Folder, que es 'C: \ opencvFinal \ bin', donde se guardan todos los archivos dll de opencv. Y cuando estoy llamando a 'System.loadLibrary (" opencv_java ");' me da una excepción. – andriy

+1

Espera, ¿tienes dlls, solo? Lo que necesitas es un frasco que envuelva esos dlls. O necesita envolverlos usted mismo usando [jni] (http://en.wikipedia.org/wiki/Java_Native_Interface#How_the_JNI_works). – Fildor

Respuesta

3

encuentro solución. Dll real se encuentra en la carpeta openCV\opencv\build\java\x64\. En mi caso, su nombre es opencv_java247.dll, así que he cambiado línea de código java

System.loadLibrary("opencv_java244") 

a

System.loadLibrary("opencv_java247") 

Yo también puse ubicación de la biblioteca nativa como E:/Sagar_tools/tools/openCV/opencv/build/java/x64 (ruta completa al archivo DLL) en la ruta de construcción.

6

Esta excepción se plantea porque el sistema está tratando de encontrar bibliotecas nativas que OpenCV necesita para esta plataforma específica, y no las encuentra.

Exception in thread "main" 
java.lang.UnsatisfiedLinkError: no opencv_java in java. 

Para resolver este error:

  1. Si está utilizando la versión OpenCV OpenCV < 2.4.6 entonces la respuesta dada por @ user3033420 es la solución.
  2. Si está utilizando la versión > = 2.4.6 OpenCV, a continuación, el frasco tiene una variable constante en la clase Core llamado NATIVE_LIBRARY_NAME que le dan a la función loadLibrary() en clase FaceDetector para incluir funciones de OpenCV en su proyecto, es probable que ya tiene esto:

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 
    

Utilizando el susodicho constante, no hay necesidad de recordar el nombre de los archivos dll Strang.

Añadir la opencv 2.4.9.jar a la trayectoria de la estructura de preferencias del proyecto como:

Window -> Preferences -> Java Build Path –> Add Library -> User Libraries -> 
User Library -> & click New 

Usted verá un cuadro de diálogo de la siguiente manera. Agregue opencv-2.4.9 como Nombre de biblioteca & haga clic en Aceptar.

Create New User Library

Entonces Add External Jar & localizar su frasco de OpenCV & Haga clic en OK. A continuación, expanda OpenCV-2.4.9.jar & clic en nativo Lugar de la Biblioteca (Ninguno) como se muestra a continuación:

Add Native Library Location of OpenCV

paso necesario: introduzca la ubicación de la carpeta que contiene la biblioteca nativa utilizado por " OpenCV-2.4.9" & continuación, haga clic en OK como se muestra a continuación:

Native Library Folder Configuration

Así que ahora el frasco tiene ahora todas las bibliotecas nativas de TI necesita hacer el trabajo. Reconstruya el programa java y todo debería compilarse y ejecutarse según lo diseñado.

+0

Intenté hacer lo mismo, pero aún recibo este error. ¿Hay algún otro trabajo? – Manpreet

+0

@Manpreet ¿Qué versión de OpenCV está usando? ¿Has probado este procedimiento para las plataformas 'x86' y' x64'? ¿Qué hiciste hasta ahora? – OO7

+0

Estoy usando OpenCV 2.4.9. Estoy en x86. Agregué la ruta del dll en la variable PATH, agregué su ruta en la opción de la biblioteca nativa del archivo .jar de OpenCV 2.4.9 en el proyecto. Estoy usando System.loadLibrary ("openCV_java249") para cargar la biblioteca en el código. – Manpreet

4

Si obtiene este error:

Exception in thread "main" 
java.lang.UnsatisfiedLinkError: no opencv_java in java.library.path 

Probablemente significa que está disparando desde la cadera, la programación por el movimiento browniano, tratando de conseguir OPENCV para trabajar. Como intentar averiguar cómo funciona un avión en vuelo apretando todos los botones con furia. Lo pasarás mal.

¿Qué significa el error:

Eclipse le está diciendo que el archivo jar no puede encontrar bibliotecas que necesita para hacer su trabajo. Entonces, naturalmente, no va a funcionar hasta que los pongas a disposición. Tienes que encontrar un tutorial sobre "cómo construir openCV desde la fuente" en tu plataforma particular: (Windows, Mac, Linux, etc.), (32 bits, 64 bits, etc.).

Básicamente, pasó por alto la configuración de 'Ubicación de la biblioteca nativa', o no los configuró correctamente, por lo que el jar no puede encontrar sus bibliotecas de soporte escritas en C.

Cómo lo arregle, mil pies vista:

  1. descargar el código fuente para OpenCV para su sistema operativo.
  2. Sigue las instrucciones para construir openCV desde la fuente.
  3. Copie el jar en un directorio lib en su proyecto Java.
  4. Configure el jar para buscar sus bibliotecas nativas estableciendo la "ubicación de biblioteca nativa" en el directorio build/lib debajo de la ruta donde creó openCV desde el código fuente.
  5. Limpiar compila el proyecto java, y el UnsatisfiedLinkError debería desaparecer.

este blog habla de los pasos anteriores en detalle paso a paso: https://udallascs.wordpress.com/2014/03/30/adding-opencv-and-configuring-to-work-with-eclipse-and-java/

¿Por qué no puede este ser sólo un frasco simple?

Porque la mayor parte de openCV está escrito en el lenguaje de programación C.Y el archivo jar que está utilizando es solo una ventana hacia ese mundo C. Entonces es una máquina Goldberg de rube. Verá este tipo de cosas por todas partes en el mundo real del trabajo, así que preste atención, usted está recibiendo una educación aquí.

+0

La compilación [OpenCV] (http://opencv.org/) obligatoria para producir bibliotecas dependientes del sistema apropiadas para [Eclipse] (https://eclipse.org/) es contraria a la idea de la portabilidad de Java. Por cierto: * La compilación de OpenCV * trae otro problema si tu versión de GCC es al menos '5':' /usr/include/host_config.h:105:2: error: #error - ¡versión de GNU no soportada! gcc 4.10 y superior no son compatibles! '. La descripción detallada de la configuración de Eclipse está disponible [aquí] (http://docs.opencv.org/3.0-beta/doc/tutorials/introduction/java_eclipse/java_eclipse.html#java-eclipse). –

5

intentar cargar la biblioteca al hacer esto:

System.loadLibrary("opencv_java244") 

O al hacer esto:

System.loadLibrary("opencv_java244") 

No trabajó - todavía tiene el mismo error.

Finalmente lo que funcionó fue proporcionar la ruta completa al archivo y dylib usando:

System.load(new File("/usr/local/Cellar/opencv/2.4.10.1/share/OpenCV/java/libopencv_java2410.dylib").getAbsolutePath());' 

estoy usando Homebrew, pero sin embargo lo instaló simplemente encontrar el archivo y la ruta de uddate.

0

La función loadlibrary intenta encontrar el nombre de la DLL en su variable PATH - verifique el nombre de la DLL. También puede intentar System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

0

En ese caso, usted debe dar la ruta de la JVM para que el archivo DLL OpenCV intalled como: Djava.library.path = "C: \ OpenCV \ build \ Java \ x64" y agregue el código como: System.loadLibrary (Core.NATIVE_LIBRARY_NAME); Como, trato de esto en mi netbeans ide y mi problema está resuelto.