如何使用命令行在Linux下使用Java构buildOpenCV(要在MapReduce中使用它)

最近我正在为我的gradle作品尝试OpenCV。 我在Windows环境下取得了一些成功。 而且,由于OpenCV的Windows包含了预构build的库,所以我不必担心如何构build它们。 但是因为这个项目是假设在CentOS上作为每个节点的主机操作系统运行,所以我必须知道如何在Linux环境下正确编译和运行这些库。

我已经用VirtualBox设置了一个虚拟机,并安装了Ubuntu 13.04。 但到目前为止,我仍然无法find一种方法来调整CMakeList的设置,使Java成为构build目标。 (一个jar子和一个本地库,所以我可以在MapReduce程序中导入和使用它们)以下是OpenCV的桌面Java官方教程

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

关于编译的部分非常简短。 所以我还是不太明白。 是因为我错过了Java的一些依赖吗? 我已经安装了JVM(Jre-7u7)。 或者是因为我没有正确configurationCMakeList.txt?

这是我迄今为止所做的事情,除了这是一个完整的干净的Ubuntu

  1. 安装vim
  2. 安装了g ++
  3. 安装cmake
  4. 安装了cmake-curses-gui
  5. 安装了java7的JVM
  6. 下载适用于Linux的OpenCV软件包

目标环境是CentOS作为每个节点的主机操作系统,该项目是一个MapReduce程序。

提前致谢。

可能你错过的是ant ,这是一个面向Java的构建工具。

当你去:

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

(即你在哪里配置你的机器),检查部分说java 。 它应该这样说(可能有不同的路径/版本):

 -- 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 

当我第一次跑cmake,我有这样的:

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

这表明它找不到ant ,所以它没有创建一个.jar文件。 我只是使用存储库中的版本:

 sudo apt-get install ant 

我再次运行cmake,有了上面的选项,这就是通往ant的路径(我有免费的JNI!)。

注意:您可能要仔细阅读cmake的输出,因为它告诉您将在您的机器上构建的内容,并且可能会有一些缺失的库。

如果你发现JNI仍然失踪。

cmake是(主要是?第一?方便?可以解释为?)寻找jni.h,应该特别是$JAVA_HOME/include/jni.h所以你需要设置$ JAVA_HOME到你的jdk的主文件夹。

我使用了which javac ,然后使用ls -l来跟踪一系列符号链接,以确定我的java 1.7安装位置。 您也可以使用locate jni.h并修改树,或者简单地浏览/usr/lib/jvm或类似的东西。

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

你可能想要检查一下你是否有这个权利

 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 

有趣的是,当我再次运行cmake命令时,它拿起了一个不同的JNI文件夹:

 -- 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 

一旦你有了,运行make命令。 如果你沉迷于观看,你会看到一堆.java文件过去。 无论哪种方式,你将最终在./bin文件夹中的.jar文件。 (在我的情况下,它被称为opencv-245.jar因为这是我下载的代码的版本)。

对于有人从谷歌导向这里:

如果在运行java教程后JRE崩溃,那么很可能还会安装Python Bindings(cv2.so)。 您将不得不重新制作OpenCV而不使用这些绑定

cmake -DBUILD_SHARED_LIBS=OFF -D BUILD_NEW_PYTHON_SUPPORT=NO

这解决了我的问题。

我试图在Ubuntu 14上构建OpenCV 3,并遇到类似Oracle Java 8 JDK的问题。

这些是我为了使用java OpenCV绑定构建和运行java程序而执行的步骤。

  1. FindJNI。 由于cmake 3的“FindJNI”模块不支持检测Oracle Java 8,我们必须手动添加我们的Java 8目录。 因此,找到cmake目录下的/home/foo/bar/cmake-3.2.2-Linux-x86_64/share/cmake-3.2/modulees/FindJNI.cmake文件,例如/home/foo/bar/cmake-3.2.2-Linux-x86_64/share/cmake-3.2/modulees/FindJNI.cmake

    转到JAVA_APPEND_LIBRARY_DIRECTORIES变量并将路径添加到您的java lib体系结构目录中,例如/home/foo/bar/jdk1.8.0_45/lib/amd64

    转到JAVA_AWT_INCLUDE_DIRECTORIES变量并将路径添加到您的java包含目录,例如/home/foo/bar/jdk1.8.0_45/include

  2. 建立。 如果修改后的FindJNI发现了您的Oracle 8 JDK,那么共享库标志将会触发java绑定的构建。

     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. 写测试代码。 在你的build目录下,你应该看到一个像./bin/opencv-300.jar这样的jar文件。 这个文件可以添加到你的Java构建依赖,例如在你最喜欢的IDE。

  4. 运行测试代码。 您必须将opencv lib路径添加到VM选项中:

    -Djava.library.path = /家庭/富/酒吧/ OpenCV的-3.0.0 /编译/ lib目录

[1]注意:根据您的个人需求或口味,您可以在构建之前安装各种其他依赖项,例如比较http://rodrigoberriel.com/2014/10/installing-opencv-3-0-0-on-ubuntu-14 -04 /

从OpenCV 3.1.0版本开始,在OpenCV_Root_Directory/platforms/maven下有一个Maven POM项目。 在你的Linux机器上安装Maven(使用包管理器或手动安装),这个项目将确保你有正确的依赖安装,建立本地和Java库。 请参阅上述目录中的自述文件。