В настоящее время я работаю над проектом Play 2.1, в котором запросы к веб-службе будут обрабатывать загрузку предоставленных пользователем изображений, изменение их размера и повторную обрезку, а также фильтрацию известных плохих фотографий (например, мы не хотят, чтобы пользователи загружали логотипы компании). Мы пытаемся использовать OpenCV для обработки внутренней работы, но я не могу заставить IntelliJ добавить банку OpenCV таким образом, чтобы это работало с проектом java.
Мне удалось без проблем собрать OpenCV из исходного кода. У меня осталась следующая папка: / home / charles / opencv / release
Внутри этой папки у меня есть три интересных файла:
- bin / opencv-246.jar
- lib / cv2.so
- lib / libopencv_java246.so
Если я попытаюсь добавить файл jar в IntelliJ в качестве новой библиотеки Java, он, по-видимому, найдет все классы / методы, и я могу написать код, используя автозаполнение. Я также могу щелкнуть соответствующие классы или методы, и это приведет меня к нужным файлам.
Однако когда я пытаюсь запустить проект Play, я получаю такую ошибку:
[info] Loading project definition from /home/charles/Github/ImageProject
[info] Set current project to ImageProject (in build file:/home/charles/Github/ImageProject/)
--- (Running the application from SBT, auto-reloading is enabled) ---
[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
Server started, use Alt+D to stop
[info] Compiling 1 Java source to /home/charles/Github/ImageProject/target/scala-2.10/classes...
[error] /home/charles/Github/ImageProject/app/controllers/Application.java:7: error: package org.opencv.core does not exist
[error] import org.opencv.core.Core;
[error] ^
Я также попытался добавить копию файла jar непосредственно в проект (поэтому поместил opencv-246.jar в ImageProject / lib), а затем вместо этого добавил библиотеку java из этого места. Но это оставляет меня с другой ошибкой:
java.lang.UnsatisfiedLinkError: no opencv_java246 in java.library.path
Я подозреваю, что часть проблемы может быть связана с собственными библиотеками, которые использует оболочка Java OpenCV (файл 2 или 3 выше). В Eclipse, когда вы добавляете файл jar, вы можете явно указать расположение собственной библиотеки, что позволяет OpenCV нормально работать. Я читал предложения по использованию этого для решения проблемы:
-Djava.library.path=/home/charles/opencv/release/lib
Но это, похоже, не работает (хотя, возможно, я устанавливаю его не в том месте? Я пробовал установить его как параметр JVM в конфигурации запуска для проекта и в настройках IDE, но, похоже, ни то, ни другое использовали или уважали).
Примечание. Чтобы еще раз уточнить, это проект Play2, а не Android. Кажется, есть некоторая помощь для Android, которая в данном случае не актуальна.
Кажется, это должно быть довольно прямолинейно, но я потратил несколько дней, пытаясь найти ответ на данный момент, и до сих пор ничего не имею. Любые идеи?
Дополнительные сведения: Я также пробовал следовать "Запускам образцов SBT" документации OpenCV здесь: http://docs.opencv.org/doc/tutorials/introduction/desktop_java/java_dev_intro.html
И я тоже получаю аналогичную ошибку:
charles@charles-VirtualBox:~/JavaSample$ sbt run
[info] Loading project definition from /home/charles/JavaSample/project
[info] Set current project to JavaSample (in build file:/home/charles/JavaSample/)
[info] Compiling 1 Java source to /home/charles/JavaSample/target/scala-2.10/classes...
[info] Running HelloOpenCV
Hello, OpenCV
[error] (run-main) java.lang.UnsatisfiedLinkError: no opencv_java246 in java.library.path
java.lang.UnsatisfiedLinkError: no opencv_java246 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1856)
at java.lang.Runtime.loadLibrary0(Runtime.java:845)
at java.lang.System.loadLibrary(System.java:1084)
at HelloOpenCV.main(HelloOpenCV.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
[trace] Stack trace suppressed: run last compile:run for the full output.
java.lang.RuntimeException: Nonzero exit code: 1
at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) Nonzero exit code: 1
[error] Total time: 2 s, completed Jul 17, 2013 5:11:39 PM