15

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

我已经使用 VirtualBox 设置了一个 VM,并在其上安装了 Ubuntu 13.04。但到目前为止,我仍然找不到调整 CMakeList 设置以使 Java 成为构建目标的方法。(一个 jar 和一个本地库,因此我可以在 MapReduce 程序中导入和使用它们)以下是 OpenCV 的桌面 Java 官方教程

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

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

这是我到目前为止所做的事情,除了它是一个完全干净的 Ubuntu

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

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

提前致谢。

4

4 回答 4

44

您可能缺少的是ant,这是一个面向 Java 的构建工具。

当你去:

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

(即,您正在为您的机器配置 make 的位置),检查显示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是我下载的代码版本)。

于 2013-06-30T04:06:31.637 回答
1

对于从 google 指向这里的人:

如果您在运行 java 教程后 JRE 崩溃,那么很可能您也安装了 python 绑定 (cv2.so)。您将不得不在没有这些绑定的情况下重新制作 OpenCV

cmake -DBUILD_SHARED_LIBS=OFF -D BUILD_NEW_PYTHON_SUPPORT=NO

这为我解决了问题。

于 2013-07-12T01:05:55.833 回答
0

从 OpenCV 3.1.0 版本开始,在OpenCV_Root_Directory/platforms/maven. 在您的 Linux 机器上安装 Maven(使用包管理器或手动安装)后,该项目将确保您安装了正确的依赖项,构建本机和 Java 库。请参阅上述目录中的 README。

于 2017-03-04T21:13:56.920 回答
0

我尝试在 Ubuntu 14 上构建 OpenCV 3,但在使用 Oracle java 8 JDK 时遇到了类似的问题。

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

  1. 查找JNI。由于 cmake 3 的“FindJNI”模块不支持检测 Oracle Java 8,我们必须手动添加我们的 Java 8 目录。因此,FindJNI.cmake在您的 cmake 目录中找到该文件,例如/home/foo/bar/cmake-3.2.2-Linux-x86_64/share/cmake-3.2/Modules/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目录中,您应该会看到一个 jar 文件,如./bin/opencv-300.jar. 该文件可以添加到您的 java 构建依赖项中,例如在您最喜欢的 IDE 中。

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

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

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

于 2015-09-23T19:51:34.320 回答