2013-06-30 36 views
12

Gần đây tôi đang thử OpenCV cho dự án tốt nghiệp của tôi. Tôi đã có một số thành công trong môi trường Windows. Và bởi vì với gói Windows của OpenCV, nó đi kèm với các thư viện được xây dựng sẵn, vì vậy tôi không phải lo lắng về việc làm thế nào để xây dựng chúng. Nhưng kể từ khi dự án là giả sử để chạy trên một cụm với CentOS như hệ điều hành máy chủ cho mỗi nút, tôi phải biết làm thế nào để biên dịch chính xác, và chạy các thư viện này dưới môi trường Linux.Làm thế nào để xây dựng OpenCV với Java trong Linux bằng cách sử dụng dòng lệnh? (Gonna sử dụng nó trong MapReduce)

Tôi đã thiết lập máy ảo với VirtualBox và cài đặt Ubuntu 13.04 trên đó. Nhưng cho đến nay tôi vẫn không thể tìm cách điều chỉnh cài đặt của CMakeList để làm cho Java trở thành mục tiêu xây dựng. (A jar, và một thư viện bản xứ để tôi có thể nhập khẩu và sử dụng chúng trong chương trình MapReduce) Sau đây là hướng dẫn chính thức của Java desktop cho OpenCV

http://docs.opencv.org/doc/tutorials/introduction/desktop_java/java_dev_intro.html

Phần về biên dịch là khá ngắn. Vì vậy, tôi vẫn không thể hoàn toàn hiểu được nó. Có phải vì tôi đã bỏ lỡ một số phụ thuộc đối với Java không? Tôi đã cài đặt JVM (Jre-7u7). Hoặc là vì tôi không cấu hình chính xác CMakeList.txt?

Dưới đây là những điều tôi đã làm cho đến nay, ngoại trừ rằng nó hoàn toàn sạch Ubuntu

  1. cài đặt vim
  2. g cài đặt ++
  3. cài đặt cmake
  4. cài đặt cmake-nguyền rủa-gui
  5. cài đặt java7 JVM
  6. tải xuống gói OpenCV cho Linux

Môi trường đích là Cụm với CentOS làm hệ điều hành chủ cho mỗi nút và dự án là một chương trình MapReduce.

Xin cảm ơn trước.

+0

Bạn nhận được thông báo lỗi nào? Bạn đã xem hướng dẫn ở đây chưa? http://docs.opencv.org/trunk/doc/tutorials/introduction/linux_install/linux_install.html (quy trình xây dựng lớn như thế nào, không đăng toàn bộ đầu ra - chỉ vài dòng cuối cùng trước lỗi). – GregHNZ

Trả lời

33

Có lẽ những gì bạn đang thiếu là ant, một công cụ xây dựng theo định hướng java.

Khi bạn đi:

cmake -D BUILD_SHARED_LIBS=OFF ../opencv-2.4.5/ 

(ví dụ: nơi bạn đang cấu hình làm cho máy tính của bạn), kiểm tra các phần đó nói java. Nó nên nói điều gì đó như thế này (có thể với những con đường khác nhau/phiên bản):

-- Java: 
--  ant:       /usr/bin/ant (ver 1.8.2) 
--  JNI:       /usr/lib/jvm/java-6-openjdk/include /usr/lib/jvm/java-6-openjdk/include /usr/lib/jvm/java-6-openjdk/include 
--  Java tests:     YES 

Khi tôi lần đầu tiên chạy cmake, tôi đã này:

-- Java: 
--  ant:       NO 
--  JNI:       NO 
--  Java tests:     YES 

nào cho thấy nó không thể tìm thấy ant, vv nó không tạo tệp .jar. tôi chỉ đơn giản sử dụng phiên bản đó là trong kho:

sudo apt-get install ant 

Tôi chạy cmake một lần nữa, với các tùy chọn ở trên, trong đó có đường dẫn đến kiến ​​(và tôi đã nhận JNI miễn phí!).

Lưu ý: Bạn có thể muốn đọc đầu ra của cmake khá cẩn thận vì nó cho bạn biết những gì nó sẽ xây dựng trên máy của bạn và bạn có thể có một số thư viện bị thiếu.

Nếu bạn thấy JNI vẫn bị thiếu.

cmake là (chủ yếu? Đầu tiên? Thuận tiện? Có thể được hiểu là?) Đang tìm kiếm jni.h, cụ thể là $JAVA_HOME/include/jni.h Vì vậy, bạn cần đặt $ JAVA_HOME vào thư mục chính của jdk.

Tôi đã sử dụng which javac và sau đó ls -l để theo dõi một loạt các liên kết tượng trưng, ​​để xác định vị trí cài đặt java 1,7 của tôi. Bạn cũng có thể sử dụng locate jni.h và làm việc lên cây, hoặc chỉ cần nhìn xung quanh /usr/lib/jvm hoặc tương tự.

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 

Bạn có thể muốn kiểm tra xem bạn đã có mà đúng với một vài

ls $JAVA_HOME/bin/javac 
/usr/lib/jvm/java-7-openjdk-amd64/bin/javac 

ls $JAVA_HOME/include/jni.h 
/usr/lib/jvm/java-7-openjdk-amd64/include/jni.h 

Điều thú vị là khi tôi chạy lệnh cmake lần nữa, nó nhặt một thư mục JNI khác nhau:

--  JNI:       /usr/lib/jvm/java-7-openjdk-amd64/include /usr/lib/jvm/java-7-openjdk-amd64/include /usr/lib/jvm/java-7-openjdk-amd64/include 

Khi bạn đã có điều đó, hãy chạy lệnh make. Nếu bạn xem ám ảnh, bạn sẽ thấy một loạt các tập tin .java trundle qua. Dù bằng cách nào bạn sẽ kết thúc với một tệp .jar trong thư mục ./bin. (trong trường hợp của tôi, nó được gọi là opencv-245.jar vì đó là phiên bản mã tôi đã tải xuống).

+0

Cảm ơn rất nhiều !! Tôi đã cài đặt Ant, và nó được phát hiện đúng bởi Cmake, nhưng bằng cách nào đó JNI vẫn chưa được tìm thấy. Nếu tôi muốn đặt đường dẫn theo cách thủ công, tôi nên trỏ nó vào thư mục nào? Thư mục của JVM? – user2535650

+0

Đã thêm một số ghi chú vào câu trả lời của tôi về nơi cmake đang tìm kiếm JNI - chúc may mắn. – GregHNZ

+0

Cảm ơn rất nhiều !! Tôi đã có nó hoạt động trên máy ảo của tôi, cảm ơn cho gan! – user2535650

1

Đối với người hướng dẫn ở đây từ google:

Nếu JRE của bạn bị treo sau khi bạn chạy các hướng dẫn java thì có lẽ hầu hết bạn có Bindings python cài đặt cũng như (cv2.so). Bạn sẽ phải làm lại OpenCV không có những ràng buộc

cmake -DBUILD_SHARED_LIBS=OFF -D BUILD_NEW_PYTHON_SUPPORT=NO

Đó giải quyết vấn đề đối với tôi.

0

Tôi đã cố gắng xây dựng OpenCV 3 trên Ubuntu 14 và gặp phải các sự cố tương tự với Oracle java 8 JDK.

Đây là các bước tôi đã tạo trước để xây dựng và chạy chương trình java bằng cách sử dụng các liên kết java OpenCV.

  1. FindJNI. Vì mô-đun "FindJNI" của cmake 3 không hỗ trợ phát hiện Oracle Java 8, chúng tôi phải thêm các thư mục Java 8 theo cách thủ công. Do đó, hãy tìm tệp FindJNI.cmake trong thư mục cmake của bạn, ví dụ: /home/foo/bar/cmake-3.2.2-Linux-x86_64/share/cmake-3.2/Modules/FindJNI.cmake

    Biến số JAVA_APPEND_LIBRARY_DIRECTORIES và thêm đường dẫn đến thư mục kiến ​​trúc lib java của bạn, ví dụ: /home/foo/bar/jdk1.8.0_45/lib/amd64

    Goto biến số JAVA_AWT_INCLUDE_DIRECTORIES và thêm đường dẫn vào thư mục java của bạn, ví dụ: /home/foo/bar/jdk1.8.0_45/include

  2. Xây dựng. Cờ lib được chia sẻ kích hoạt việc xây dựng các ràng buộc java, nếu FindJNI đã sửa đổi của bạn tìm thấy JDK Oracle 8 của bạn.

    cd /home/foo/bar/opencv-3.0.0/ 
    mkdir build 
    cd build 
    # install dependencies if needed, see [1] 
    cmake -DBUILD_SHARED_LIBS=OFF .. 
    make -j 
    
  3. Viết Testcode. Trong thư mục build của bạn, bạn sẽ thấy một tệp jar như ./bin/opencv-300.jar. Tệp này có thể được thêm vào các phụ thuộc xây dựng java của bạn, ví dụ: trong IDE yêu thích của bạn.

  4. Chạy mã kiểm tra. Bạn phải thêm opencv đường lib để tùy chọn VM của bạn:

    -Djava.library.path =/home/foo/bar/opencv-3.0.0/build/lib

[1] Lưu ý: Tùy theo nhu cầu cá nhân của bạn hoặc hương vị bạn có thể cài đặt các phụ thuộc khác trước khi xây dựng, ví dụ so sánh http://rodrigoberriel.com/2014/10/installing-opencv-3-0-0-on-ubuntu-14-04/

+0

Lưu ý: Đối với OpenCV 3.2 trên Ubuntu 16.04 với cmake 3.5.1, bước đầu tiên không cần thiết nữa. Các bước tương ứng khác vẫn hợp lệ. – Marco

0

Kể từ phiên bản 3.1.0 của OpenCV, có một dự án POM Maven dưới OpenCV_Root_Directory/platforms/maven. Với Maven được cài đặt trên máy Linux của bạn (sử dụng trình quản lý gói hoặc được cài đặt theo cách thủ công), dự án này sẽ đảm bảo bạn đã cài đặt các phụ thuộc chính xác, xây dựng các thư viện gốc và Java. Xem README trong thư mục trên.

Các vấn đề liên quan