2012-10-11 16 views
10

मैं विंडोज 7 का उपयोग कर रहा है और हो रही है यह अपवाद है जब एक जावा परियोजना opencv पुस्तकालयों का उपयोग करता है भागने की कोशिश कर:OpenCV जावा अपवाद

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) 

क्या मैं गलत क्या किया? क्या कुछ आयात गुम है?

मैं एक्लिप्स (एंड्रॉइड नहीं) में एक साधारण जावा प्रोजेक्ट बनाना चाहता हूं, जो ओपनसीवी का उपयोग करता है।

  • तो मैं निकाला है OpenCV-2.4.2.exe फ़ाइल से सेल्सियस तक javacv: \
  • फिर मार डाला "cmake जी" MinGW Makefiles "-DBUILD_opencv_java = सी पर: \ opencv" कमांड और उसके बाद, "mingw32-make"। सब कुछ त्रुटि या चेतावनी
  • के बाद मैं अपने पर्यावरण चर
+0

क्या आप कुछ कोड जोड़ सकते हैं जहां आप जावा में ओपनसीवी libs को एकीकृत करते हैं? ऐसा लगता है कि क्लासलोडर लाइब्रेरी नहीं ढूंढ सकता है। – Fildor

+0

रन कॉन्फ़िगरेशन में, मैंने '-Djava.library.path = C: \ opencvFinal' तर्क जोड़ा है। जावा बिल्ड पथ में भी मैंने बाहरी क्लास फ़ोल्डर जोड़ा है जो 'सी: \ opencvFinal \ bin' है, जहां सभी opencv dlls सहेजे जाते हैं। और जब मैं 'System.loadLibrary ("opencv_java") को कॉल कर रहा हूं;' यह मुझे अपवाद देता है। – andriy

+1

रुको, क्या आपके पास डीएलएस है, केवल? आपको जो जरूरी है वह एक जार है जो उन डीएलएस को लपेटता है। या आपको [jni] (http://en.wikipedia.org/wiki/Java_Native_Interface#How_the_JNI_works) का उपयोग करके स्वयं को लपेटने की आवश्यकता है। – Fildor

उत्तर

3

मैं समाधान खोजने के लिए opencv dll के जोड़ दिया है बिना निर्माण किया गया था। वास्तविक डीएल openCV\opencv\build\java\x64\ फ़ोल्डर पर स्थित है। मेरे मामले में इसके नाम opencv_java247.dll है, इसलिए मैं बदल गया है जावा कोड लाइन

System.loadLibrary("opencv_java244") 

System.loadLibrary("opencv_java247") 

को मैं भी E:/Sagar_tools/tools/openCV/opencv/build/java/x64 रूप देशी पुस्तकालय स्थान सेट (dll का पूर्ण पथ) निर्माण पथ में।

6

यह अपवाद उठाया गया है क्योंकि सिस्टम मूल पुस्तकालयों को खोजने का प्रयास कर रहा है जो OpenCV को इस विशिष्ट प्लेटफ़ॉर्म के लिए आवश्यक है, और उन्हें नहीं मिला है।

  1. आप opencv संस्करण < opencv 2.4.6 उपयोग कर रहे हैं तो इस सवाल का जवाब @ user3033420 द्वारा दिए गए समाधान है:

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

    इस त्रुटि हल करने के लिए।

  2. आप संस्करण का उपयोग कर रहे हैं, तो > = opencv 2.4.6, तो जार है कोर वर्गNATIVE_LIBRARY_NAME कि आप FaceDetector कक्षा में loadLibrary() समारोह को देने में opencv की विशेषताओं में शामिल करने के लिए नामित में एक निरंतर चर ऊपर लगातार नामित का उपयोग

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 
    

, स्ट्रेंग dll फ़ाइलों के नाम याद करने की कोई जरूरत नहीं है: अपनी परियोजना, तो आप शायद पहले से ही इस की है।

रूप में इस परियोजना वरीयताओं से निर्माण करने के लिए पथ opencv 2.4.9.jar जोड़ें:

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

आप नीचे दिए गए के रूप में एक संवाद देखेंगे। ओपनसीवी-2.4.9 जोड़ें लाइब्रेरी नाम & ठीक क्लिक करें।

Create New User Library

फिर Add External Jar & अपने opencv जार & क्लिक ठीक पता लगाने। तब opencv-2.4.9.jar जैसा कि नीचे दिखाया पर मूल निवासी लाइब्रेरी स्थान (कोई नहीं) & क्लिक विस्तार:

Add Native Library Location of OpenCV

आवश्यक कदम: द्वारा प्रयोग किया जाता देशी पुस्तकालय वाले फ़ोल्डर का स्थान दर्ज " opencv-2.4.9 "& फिर ठीक क्लिक करें जिन्हें आप नीचे देख:

Native Library Folder Configuration

तो अब जार अब सभी देशी पुस्तकालयों यह है काम करने की जरूरत है। जावा प्रोग्राम को पुनर्निर्माण करें और सबकुछ संकलित और चलाने के रूप में चलाया जाना चाहिए।

+0

मैंने एक ही काम करने की कोशिश की लेकिन फिर भी मुझे यह त्रुटि मिल रही है। क्या कोई और काम आसपास है? – Manpreet

+0

@ मॅनप्रीत ओपनसीवी का कौन सा संस्करण उपयोग कर रहा है? क्या आपने 'x86' और' x64' प्लेटफ़ॉर्म के लिए इस प्रक्रिया को आजमाया है? अब तक आपने क्या किया – OO7

+0

मैं ओपनसीवी 2.4.9 का उपयोग कर रहा हूं। मैं x86 पर हूँ। मैं पैथ चर में डीएलएल का पथ जोड़ता हूं, मैंने परियोजना में ओपनसीवी 2.4.9 .jar फ़ाइल के मूल पुस्तकालय विकल्प के तहत अपना रास्ता जोड़ा। मैं कोड में लाइब्रेरी लोड करने के लिए System.loadLibrary ("openCV_java249") का उपयोग कर रहा हूं। – Manpreet

4

आप इस त्रुटि मिलती है:

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

यह शायद मतलब है कि आप कूल्हे, ब्राउनियन गति से प्रोग्रामिंग से शूटिंग कर रहे हैं, openCV काम करने के लिए प्राप्त करने की कोशिश। सभी बटनों को जोर से दबाकर एक हवाई जहाज उड़ान में कैसे काम करता है यह जानने की कोशिश करना। आप एक बुरा समय होने जा रहे हैं।

त्रुटि क्या मतलब है:

ग्रहण आप कह रहा है कि जार फ़ाइल पुस्तकालयों यह अपना काम करने की जरूरत है नहीं मिल रहा। तो स्वाभाविक रूप से यह तब तक काम नहीं करेगा जब तक आप उन्हें उपलब्ध नहीं कराते। आपको अपने विशेष प्लेटफॉर्म पर "स्रोत से ओपनसीवी कैसे बनाएं" पर एक ट्यूटोरियल मिलना होगा: (विंडोज़, मैक, लिनक्स, आदि), (32 बिट, 64 बिट, आदि)।

असल में, आपने 'मूल पुस्तकालय स्थान' सेटिंग्स पर चमक ली है, या उन्हें सही ढंग से सेट नहीं किया है, और इसलिए जार C में लिखे गए समर्थन पुस्तकालयों को नहीं ढूंढ सकता है।

इसे कैसे ठीक करूं, हजार फुट दृश्य:

  1. openCV के लिए स्रोत कोड आपके ऑपरेटिंग सिस्टम के लिए डाउनलोड करें।
  2. स्रोत से openCV बनाने के लिए दिशानिर्देशों का पालन करें।
  3. अपने जावा प्रोजेक्ट में जार को एक lib निर्देशिका में कॉपी करें।
  4. "मूल पुस्तकालय स्थान" को उस स्थान के नीचे build/lib निर्देशिका में सेट करके अपने मूल पुस्तकालयों को देखने के लिए जार को कॉन्फ़िगर करें जहां आपने स्रोत से ओपनसीवी बनाया था।
  5. जावा परियोजना को साफ करें, और असंतुष्ट लिंक्स त्रुटि को दूर जाना चाहिए।

कदम के बारे में इस ब्लॉग वार्ता कदम-दर-कदम विस्तार से ऊपर: https://udallascs.wordpress.com/2014/03/30/adding-opencv-and-configuring-to-work-with-eclipse-and-java/

क्यों नहीं यह सिर्फ एक सरल जार हो सकता है?

क्योंकि अधिकांश ओपनसीवी C प्रोग्रामिंग भाषा में लिखा गया है।और जिस जार फ़ाइल का आप उपयोग कर रहे हैं वह उस सी दुनिया में सिर्फ एक खिड़की है। तो यह एक रॉब गोल्डबर्ग मशीन है। आप वास्तविक काम की दुनिया में इस जगह की सभी चीजें देखेंगे, इसलिए ध्यान दें, आपको यहां शिक्षा मिल रही है।

+0

[ओपनसीवी] (http://opencv.org/) बनाना [eclipse] (https://eclipse.org/) के लिए उचित सिस्टम निर्भर पुस्तकालयों का उत्पादन करने के लिए अनिवार्य संकलन जावा की पोर्टेबिलिटी के विचार के विपरीत है। बीटीडब्लू: * ओपनसीवी * संकलन एक और समस्या लाता है यदि आपका जीसीसी संस्करण कम से कम '5' है:' /usr/include/host_config.h:105: त्रुटि: #error - असमर्थित जीएनयू संस्करण! जीसीसी 4.10 और ऊपर समर्थित नहीं हैं! '। विस्तृत ग्रहण विन्यास विवरण उपलब्ध है [यहां] (http://docs.opencv.org/3.0-beta/doc/tutorials/introduction/java_eclipse/java_eclipse.html#java-eclipse)। –

5

ऐसा करके पुस्तकालय लोड करने के लिए कोशिश कर रहा है:

System.loadLibrary("opencv_java244") 

या ऐसा करने से:

System.loadLibrary("opencv_java244") 

काम नहीं किया था - अब भी वही त्रुटि मिला है।

अंत में क्या काम किया dylib फ़ाइल का पूर्ण पथ प्रदान करने और का उपयोग कर रहा था:

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

मैं homebrew उपयोग कर रहा हूँ, लेकिन फिर भी आप स्थापित यह सिर्फ फ़ाइल खोजने के लिए और मार्ग uddate।

0

फ़ंक्शन loadlibrary आपके PATH चर में DLL का नाम ढूंढने का प्रयास करता है - DLL नाम की जांच करें। -Djava.library.path =: तुम भी कोशिश कर सकते हैं System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

0

उस मामले में, आप जहां opencv dll फ़ाइल के रूप में intalled है करने के लिए JVM के लिए पथ देना चाहिए "C: \ opencv \ निर्माण \ जावा \ x64" और कोड को सिस्टम.लोड लाइब्रेरी (Core.NATIVE_LIBRARY_NAME) के रूप में जोड़ें; जैसा कि, मैं इसे अपने नेटबीन्स विचार में आज़माता हूं और मेरी समस्या हल हो जाती है।