Opencv Java исключение
Я использую Windows 7 и получаю это исключение при попытке запустить проект Java, который использует библиотеки 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)
Что я сделал не так? Отсутствует ли какой-либо импорт?
Я хочу создать простой проект Java в Eclipse (не Android), который использует openCV.
- Итак, я извлек javacv из файла OpenCV-2.4.2.exe в C:\
- Затем выполнил команду "cmake -G "MinGW Makefiles -DBUILD_opencv_java=ON C:\opencv"и после этого"mingw32-make". Все было построено без ошибок и предупреждений
- После того, как я добавил opencv dll в мои переменные среды
6 ответов
Это исключение возникает потому, что система пытается найти собственные библиотеки, которые нужны OpenCV для этой конкретной платформы, и не находит их.
Exception in thread "main"
java.lang.UnsatisfiedLinkError: no opencv_java in java.
Чтобы решить эту ошибку:
- Если вы используете версию opencv
то ответом @user3033420 является решение. Если вы используете версию > = opencv 2.4.6, тогда в jar есть постоянная переменная в базовом классе с именем NATIVE_LIBRARY_NAME, которую вы передаете
loadLibrary()
Функция в классе FaceDetector для включения функций opencv в ваш проект, у вас, вероятно, уже есть это:System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Используя указанную выше константу, нет необходимости запоминать имена файлов strang dll.
Добавить opencv 2.4.9.jar
к пути сборки из настроек проекта как:
Window -> Preferences -> Java Build Path –> Add Library -> User Libraries ->
User Library -> & click New
Вы увидите диалог, как показано ниже. Добавьте opencv-2.4.9 в качестве имени библиотеки и нажмите Ok.
затем Add External Jar
и найдите ваш OpenCV банку и нажмите ОК. Затем разверните opencv-2.4.9.jar и щелкните " Расположение собственной библиотеки" (нет), как показано ниже:
Необходимый шаг: введите местоположение папки, содержащей собственную библиотеку, используемую "opencv-2.4.9", и нажмите кнопку "ОК", как показано ниже:
Теперь в банке есть все нативные библиотеки, необходимые для работы. Перестройте Java-программу, и все должно скомпилироваться и запустить как задумано.
Попытка загрузить библиотеку, выполнив это:
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, но, тем не менее, вы установили его, просто найдите файл и измените путь.
Если вы получили эту ошибку:
Exception in thread "main"
java.lang.UnsatisfiedLinkError: no opencv_java in java.library.path
Это, вероятно, означает, что вы снимаете с бедра, программируете с помощью броуновского движения, пытаетесь заставить openCV работать. Как попытка выяснить, как самолет работает в полете, яростно нажимая на все кнопки. У тебя будет плохое время.
Что означает ошибка:
Eclipse сообщает вам, что jar-файл не может найти библиотеки, необходимые для его работы. Поэтому, естественно, это не сработает, пока вы не сделаете их доступными. Вы должны найти учебник "Как собрать openCV из исходного кода" на вашей конкретной платформе: (Windows, Mac, Linux и т. Д.), (32-битная, 64-битная и т. Д.).
По сути, вы скрыли настройки "Native library location" или неправильно установили их, поэтому jar не может найти библиотеки поддержки, написанные на C
,
Как это исправить, тысяча футов:
- Загрузите исходный код для openCV для вашей операционной системы.
- Следуйте инструкциям по сборке openCV из исходного кода.
- Скопируйте jar в каталог lib в вашем проекте Java.
- Сконфигурируйте jar для поиска его собственных библиотек, установив "расположение собственной библиотеки" в
build/lib
каталог по пути, где вы создали openCV из источника. - Чистая сборка проекта Java, и UnsatisfiedLinkError должен уйти.
В этом блоге подробно описываются шаги, описанные выше: https://udallascs.wordpress.com/2014/03/30/adding-opencv-and-configuring-to-work-with-eclipse-and-java/
Почему это просто баночка?
Потому что большая часть openCV написана в C
язык программирования. И используемый вами jar-файл - это просто окно в мир C. Так что это машина Рубе Голдберга. Вы увидите подобные вещи повсюду в реальном мире труда, так что обратите внимание, вы получаете образование здесь.
Я нахожу решение. Фактическая DLL находится на openCV\opencv\build\java\x64\
папка. В моем случае его имя opencv_java247.dll, поэтому я изменил строку кода Java
System.loadLibrary("opencv_java244")
в
System.loadLibrary("opencv_java247")
Я также установил родную библиотеку как E:/Sagar_tools/tools/openCV/opencv/build/java/x64
(полный путь к DLL) в пути сборки.
В этом случае вы должны указать путь к jvm, в котором файл opencv dll установлен: -Djava.library.path="C:\opencv\build\java\x64" и добавить код как: System.loadLibrary(Core.NATIVE_LIBRARY_NAME); Как, я пытаюсь это в моем NetBeans Ide, и моя проблема решена.
Функция loadlibrary
пытается найти имя библиотеки DLL в переменной PATH - проверьте имя библиотеки DLL. Вы также можете попробовать System.loadLibrary(Core.NATIVE_LIBRARY_NAME);