2012-10-11 16 views
10

sto utilizzando Windows 7 e ottenere questa eccezione quando si tenta di eseguire un progetto Java che utilizza le librerie 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) 

Che cosa ho fatto di sbagliato? Manca qualche importazione?

Voglio creare un semplice progetto Java in Eclipse (non Android), che utilizza openCV.

  • javacv Così ho estratto dal file OpenCV-2.4.2.exe a C: \
  • quindi eseguito "cmake -G "MinGW Makefiles" -DBUILD_opencv_java = ON C: \ OpenCV" comando e dopo di ciò, "mingw32-make". Tutto era costruire senza errori o avvisi
  • Dopo che ho aggiunto dll OpenCV di ai miei Variabili d'ambiente
+0

È possibile aggiungere del codice dove si integrano le librerie opencv in java? Sembra che Classloader non riesca a trovare la libreria. – Fildor

+0

In Run Configurations, ho aggiunto l'argomento '-Djava.library.path = C: \ opencvFinal'. Anche in Java Build Path ho aggiunto la cartella di classe esterna che è 'C: \ opencvFinal \ bin', dove vengono salvate tutte le DLL opencv. E quando chiamo 'System.loadLibrary (" opencv_java ");' mi dà un'eccezione. – andriy

+1

Aspetta, hai solo le dll? Quello di cui hai bisogno è un barattolo che avvolge quelle DLL. O devi avvolgerli tu stesso usando [jni] (http://en.wikipedia.org/wiki/Java_Native_Interface#How_the_JNI_works). – Fildor

risposta

3

trovo soluzione. La dll effettiva si trova nella cartella openCV\opencv\build\java\x64\. Nel mio caso il suo nome è opencv_java247.dll, quindi ho cambiato java linea di codice

System.loadLibrary("opencv_java244") 

a

System.loadLibrary("opencv_java247") 

Ho anche impostare nativo posizione della libreria come E:/Sagar_tools/tools/openCV/opencv/build/java/x64 (percorso completo dll) nel percorso di costruzione.

6

Questa eccezione viene sollevata perché il sistema sta cercando di trovare librerie native che OpenCV ha bisogno per questa piattaforma specifica e non le trova.

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

Per risolvere questo errore:

  1. Se si utilizza la versione OpenCV < OpenCV 2.4.6 allora la risposta data dal @ user3033420 è la soluzione.
  2. Se si utilizza la versione > = 2.4.6 OpenCV, poi il vaso ha una variabile costante della classe Nucleo nome NATIVE_LIBRARY_NAME che si dà alla funzione loadLibrary() in classe FaceDetector per includere funzionalità di OpenCV in il progetto, probabilmente avete già questo:

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 
    

Utilizzando il sopra citato costante, non c'è bisogno di ricordare il nome del file dll Strang.

Aggiungere il opencv 2.4.9.jar al percorso di generazione da preferenze di progetto come:

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

Si vedrà una finestra di dialogo come di seguito. Aggiungere opencv-2.4.9 come nome libreria & fare clic su OK.

Create New User Library

Poi Add External Jar & individuare il vaso OpenCV & Fare clic su OK. Quindi espandere OpenCV-2.4.9.jar & click sul Native libreria Ubicazione (Nessuno) come illustrato di seguito:

Add Native Library Location of OpenCV

passo necessario: immettere il percorso della cartella contenente libreria nativa usato da " OpenCV-2.4.9" & quindi fare clic su OK come illustrato di seguito:

Native Library Folder Configuration

Così ora il vaso ha ora tutte le librerie native IT ha bisogno di fare il lavoro Ricrea il programma java e tutto dovrebbe essere compilato ed eseguito come progettato.

+0

Ho provato a fare la stessa cosa, ma continuo a ricevere questo errore. C'è qualche altro lavoro in giro? – Manpreet

+0

@Manpreet Quale versione di OpenCV sta usando? Hai provato questa procedura per le piattaforme 'x86' e' x64'? Cosa hai fatto fino ad ora? – OO7

+0

Sto usando OpenCV 2.4.9. Sono su x86. Aggiungo il percorso della DLL nella variabile PATH, ho aggiunto il suo percorso sotto l'opzione della libreria nativa del file OpenCV 2.4.9 .jar nel progetto. Sto usando System.loadLibrary ("openCV_java249") per caricare la libreria nel codice. – Manpreet

4

Se si ottiene questo errore:

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

probabilmente significa che sono riprese dal fianco, la programmazione da moto browniano, cercando di ottenere OpenCV per funzionare. Come cercare di capire come funziona un aereo in volo premendo tutti i pulsanti furiosamente. Avrai un brutto momento.

Cosa significa l'errore:

Eclipse vi sta dicendo che il file jar non riesce a trovare le librerie di cui ha bisogno per fare il suo lavoro. Quindi, naturalmente, non funzionerà finché non li renderai disponibili. Devi trovare un tutorial su "come costruire openCV dal sorgente" sulla tua piattaforma particolare: (windows, mac, linux, ecc.), (32 bit, 64 bit, ecc.).

Fondamentalmente, si ignoravano le impostazioni della "Posizione libreria nativa" o non le si impostano correttamente, e quindi il barattolo non può trovare le sue librerie di supporto scritte in C.

Come non risolvere il problema, mille vista piede:

  1. scaricare il codice sorgente per OpenCV per il sistema operativo.
  2. Seguire le istruzioni per creare openCV dalla sorgente.
  3. Copia il jar in una directory lib nel tuo progetto Java.
  4. Configurare il barattolo per cercare le sue librerie native impostando la "posizione della libreria nativa" nella directory build/lib sotto il percorso in cui è stato creato openCV dall'origine.
  5. Pulire compilare il progetto java e UnsatisfiedLinkError dovrebbe andare via.

Questo blog parla dei punti di cui sopra in dettaglio step-by-step: https://udallascs.wordpress.com/2014/03/30/adding-opencv-and-configuring-to-work-with-eclipse-and-java/

Perché non può questo essere solo un semplice barattolo?

Poiché la maggior parte di openCV è scritta nel linguaggio di programmazione C.E il file jar che stai usando è solo una finestra sul mondo C. Quindi è una macchina rube Goldberg. Vedrai questo genere di cose dappertutto nel mondo del lavoro reale, quindi fai attenzione, stai ricevendo un'istruzione qui.

+0

Compilare obbligatoriamente la compilazione [OpenCV] (http://opencv.org/) al fine di produrre librerie dipendenti dal sistema appropriate per [Eclipse] (https://eclipse.org/) è contraria all'idea della portabilità di Java. BTW: * La compilazione di OpenCV * porta un altro problema se la tua versione GCC è almeno '5':' /usr/include/host_config.h:105:2: errore: #error - versione GNU non supportata! gcc 4.10 e versioni successive non sono supportati! '. La descrizione dettagliata della configurazione di Eclipse è disponibile [qui] (http://docs.opencv.org/3.0-beta/doc/tutorials/introduction/java_eclipse/java_eclipse.html#java-eclipse). –

5

Cercando di caricare la libreria in questo modo:

System.loadLibrary("opencv_java244") 

O in questo modo:

System.loadLibrary("opencv_java244") 

non ha funzionato - ancora ottenuto lo stesso errore.

Infine che cosa ha funzionato stava fornendo il percorso completo del file dylib e utilizzando:

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

sto usando HomeBrew, ma comunque è stato installato solo trovare il file e uddate il percorso.

0

La funzione loadlibrary tenta di trovare il nome della DLL nella variabile PATH - controllare il nome della DLL. Si può anche provare System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

0

In tal caso, si dovrebbe dare il percorso per JVM per cui il file dll è OpenCV intalled come: -Djava.library.path = "C: \ OpenCV \ costruire \ java \ x64" e aggiungi il codice come: System.loadLibrary (Core.NATIVE_LIBRARY_NAME); Come, provo questo nel mio ide netbeans e il mio problema è risolto.