6

Şu anda bir Google Play 2.1 projesi üzerinde çalışıyorum; buradaki web hizmeti istekleri, kullanıcı tarafından sağlanan görüntüleri indirmeyi, yeniden boyutlandırmayı ve bunları yeniden kırpmak ve bilinen kötü fotoğrafları filtrelemek (örneğin, kullanıcıların şirket logolarını yüklemesini istemiyoruz). OpenCV'yi back-end çalışmayı yürütmek için kullanmaya çalışıyoruz, fakat ben IntelliJ'i, java projesiyle çalışan bir şekilde OpenCV jar'unu ekleyemiyorum.IntelliJ, Play projesinin bağımlılığı olarak jar eklerken OpenCV için yerel kitaplıklar bulamıyor

Herhangi bir sorun olmadan OpenCV kaynağından yapıyorum. charles/opencv/I ilgi üç dosya var, bu klasörün içinde

serbest /home /: Bu, aşağıdaki klasörde bıraktı

  1. bin/opencv-246.jar
  2. lib/
  3. cv2.so
  4. lib/

Ben yeni bir Java kütüphanesi olarak intellij için kavanoz dosyası eklemek çalışırsanız libopencv_java246.so, bu görünüşte bütün sınıflar/yöntemlerini bulur ve ben aut kullanarak kodu yazabilirsiniz O-tamamlandı. Ayrıca ilgili sınıfları veya yöntemleri tıklayabilirim ve beni doğru dosyalara getiriyor. Ben Çal projeyi çalıştırmayı denediğinizde

Ancak, bu hatayı alıyorum:

[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]      ^

Ben de direkt olarak projeye kavanoz dosyasının bir kopyasını ekleyerek denedim (böylece opencv-246 koyarak. ImageProject/lib içine jar) ve daha sonra java kütüphanesini bu konumdan ekleyin. Ama bu sadece farklı hata ile beni bırakır:

java.lang.UnsatisfiedLinkError: no opencv_java246 in java.library.path 

Sorunun bir parçası yerli kütüphaneleri ile ilişkili olabileceğini itiraf etti Java OpenCV sarıcı kullanımları (yukarıdaki dosya 2 veya 3). Eclipse'de, bir jar dosyası eklediğinizde, OpenCV'nin iyi çalışmasını sağlayan yerel kitaplık konumunu açıkça ayarlayabilirsiniz. ? Belki yanlış yerde ayarlıyorum gerçi bir JVM olarak ayarlama denedim (

-Djava.library.path=/home/charles/opencv/release/lib 

Ama bu işe görünmüyor: Ben sorunu çözmek için bu kullanmanın önerilerini okudum proje için çalıştırma yapılandırmasında ve IDE ayarlarında parametre belirtilmez, ancak ikisi de kullanılmaz veya saygı görmez).

Not: Sadece bir kez daha netleştirmek için, bu bir Android projesi değil, bir Play2 projesidir. Orada Android'e özgü bazı yardımlar var, bu konuyla alakalı değil.

Bu oldukça yalın bir şey olmalıydı, ama bu noktada bir cevap bulmaya çalışırken birkaç gün harcadım ve hala hiçbir şeyim yok. Herhangi bir fikir?

Ek ayrıntılar: Ben de burada OpenCV dokümanlarının "Running SBT örnekleri", aşağıdaki çalıştı: http://docs.opencv.org/doc/tutorials/introduction/desktop_java/java_dev_intro.html

Ve ayrıca benzer bir hata alıyorum: İstediğiniz

[email protected]:~/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 
+0

kutusundan çıkmak için varsayalım Bu [hata] /home/charles/Github/ImageProject/app/controllers/Application.java:7: hata: paket org.opencv.core yok bir java olarak beni vurur cp sorunu, daha sonra bir ana lib sorunu. SBT'nizin doğru şekilde yapılandırılmamış olduğunu düşünüyorum. – morpheus05

+0

Bu durumda SBT'nin nasıl yapılandırılması gerektiğine dair bir örnek var mı? –

+0

http://stackoverflow.com/questions/24856501/how-do-you-link-a-native-library-to-a-jar-in-intellij/37038583#37038583 adresindeki yanıtıma bakın, genellikle yerel kütüphane Çalışma zamanı bağımlılığı ve böylece VM'nin derleme zamanında IntelliJ değil, çalışma zamanında nasıl belirlediğini belirtmelisiniz. –

cevap

1

OpenCV veya herhangi bir yerel kütüphaneleri Playframework üzerinde kullanmak için "play run" komutuyla "play start" komutu ile uygulamanızı çalıştırmanız GEREKİR.

"Yürüt" komutu, uygulamanızı geliştirme modunda başlatır ve "oynatma başlat" komutu üretim modunda başlar. Aralarındaki her bir farkı bilmiyorum ama bir bariz şey,

Yalnızca "oynatma başlangıcı" kullandığımızda, sizin için yeni bir JVM uygulaması başlatılır ve System.load tarafından belirtilen yerel kitaplıkları yükler ("//mutlak// yol/senin/bu yüzden/veya/jnilib/inOSX/değil/dylib/filename.jnilib ");

Yerel dizin nasıl yüklenir.

Boş paket adı olan Global.java'yı oluşturun.

public class Global extends GlobalSettings { 

    @Override 
    public void beforeStart(Application app) { 
     // TODO Auto-generated method stub 
     super.beforeStart(app); 

     String libopencv_java = "/Users/yoonjechoi/git/myFirstApp/target/native_libraries/64bits/libopencv_java246.jnilib"; 
     System.load(libopencv_java); 
    } 
} 

sonra Play uygulamanın kontrolörleri de OpenCV sınıflarını kullanabilirsiniz (this link bakın).

System.loadLibrary ("opencv_java246") çalışmıyor. Nedenini bilmiyorum. Nedenini kazmak için zamanım yok. -_-;

Lütfen nedenini biliyorsanız ipuçlarını verin. Pencereler için

+0

Bir hayat kurtarıcısın! Günlerce bu problemle uğraşıyorum. Bu kesinlikle işe yarıyor. System.loadLibrary neden çalışmadığı gibi, java.library.path içinde olmayan OpenCV yerel kütüphanesi ile bir ilgisi olduğuna inanıyorum (bu yüzden dosyaya ulaşmak için mutlak yolu bilmiyor). Sanırım işe yaratabilmek için yapılabilecek küçük bir çimdik var mı? –

0

64 bit

-Djava.library.path =/tam yol/OpenCV/build/java/x64

ben lib kullanılmış olurdu
0

/libopencv_java246.so

set Kitaplığı oluşturmak için .so dosyasını eşlemek her zaman önemlidir.