Linux环境下编译并使用java_opencv
java_opencv windows环境下很好部署使用,官网直接有一键安装版,所以这里就不提了,主要说说这个linux环境下,哎,一堆坑,踩了好几天.
前言
java_opencv windows环境下很好部署使用,官网直接有一键安装版,所以这里就不提了,主要说说这个linux环境下,哎,一堆坑,踩了好几天.
1.环境准备
1.1 cmake
- 安装编译环境
yum -y install gcc gcc-c++ openssl openssl-devel tar
- 下载源码
版本自己可以去官网选择,我这里是觉得没必要整那么高的版本
wget https://github.com/Kitware/CMake/releases/download/v3.16.2/cmake-3.16.2.tar.gz```
tar -zxf cmake-3.16.2.tar.gz
- 编译安装
./bootstrap --prefix=/usr --datadir=share/cmake --docdir=doc/cmake && make -j8
make install
这一步巨慢,不加 -j8巨巨慢,自己的机器有几核就-j几核心,量力而为;
- 安装检查
cmake --version
1.2 ant
调jni的SDK的jar包是通过ant编译,所以,需要装这个东西
yum -y install ant
装完以后,你会发现他会给你装个jdk1.8,建议卸载掉
1.3 JAVA_HOME
这玩意儿一定要配,不然不会生成所需的jar包,而且必须是手动配置,即手写入profile文件里的,
所以建议,下载压缩包,手动配置的方式安装jdk
安装之前先卸载掉已经安装的jdk版本,如果已经有了自己手动配置的java_home,这一步可以跳过;
rpm -qa | grep jdk
我这里只装jdk11,执行命令卸载掉
rpm -e --nodeps java-11-openjdk-headless-11.0.15.0.9
rpm -e --nodeps java-11-openjdk-devel-11.0.15.0.9
rpm -e --nodeps java-11-openjdk-11.0.15.0.9
剩下的就是标准的linux jdk安装步骤了,可以去网上找一篇对着安装.
2.opencv安装
-
下载基本包与拓展包
wget -O opencv-4.5.5.tar.gz https://github.com/opencv/opencv/archive/refs/tags/4.5.5.tar.gz
wget -O opencv_contrib-4.5.5.tar.gz https://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.5.tar.gz
-
解压
tar -zxvf opencv-4.5.5.tar.gz
tar -zxvf opencv_contrib-4.5.5.tar.gz
-
构建
cd ./opencv-4.5.5
mkdir build && cd build
#开始构建
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_EXTRA_MODULES_PATH=/home/admin/opencv_contrib-4.5.5/modules -D ENABLE_CXX11=ON -D WITH_1394=OFF -D BUILD_opencv_xfeatures2d=OFF -D BUILD_SHARED_LIBS=OFF -D BUILD_TESTS=OFF ..
cmake的参数说明:
-D CMAKE_BUILD_TYPE=RELEASE
编译发布版本
-D CMAKE_INSTALL_PREFIX=/usr/local
编译后的安装主目录
-D OPENCV_GENERATE_PKGCONFIG=ON
这个是为了C++引用的,可以忽略
-D OPENCV_EXTRA_MODULES_PATH=/home/admin/opencv_contrib-4.5.5/modules
这个就是附加模块路径,这个地址需要自定义
-D ENABLE_CXX11=ON
C++版本支持
-D WITH_1394=OFF
这个好像要加些依赖,关掉。不关也没关系
-D BUILD_opencv_xfeatures2d=OFF
这里要重点说一下,在附件模块opencv_contrib-4.5.5/modules里面有很多目录,如果有些你不想要就关掉。比如xfeatures2d这个就导致我编译不过,我又不用,直接关掉。
-D BUILD_SHARED_LIBS=OFF
这个重点说,就是让依赖库变成一个SO而不是很多SO。这个SO就是java的jni要用的。
-D BUILD_TESTS=OFF
关掉测试,提高编译效率,减少时间。编译太长时间了。。。。。
… 后面两个点不要忘记了
注意要关注日志(我没截图,拿了网上的图)
这里是你关掉的模块
这里是你排除的模块
这俩一定要注意,必须要有的,如果没有,就是ant没有安装成功,或者java_home不对,如果没有就不会生成所需的依赖包
- 编译
make -j8 #这一步巨慢,不加多核编译的话,可能需要几十分钟
make install
- 完成
在/usr/local/share/java/opencv4目录下会有我们所需的jar包与so库文件,如果没有,那就删了build文件,重新构建编译吧
3.项目使用
- 为了同时兼容windows与linux,需要引入依赖
<dependency>
<groupId>org.openpnp</groupId>
<artifactId>opencv</artifactId>
<version>4.5.5-1</version>
</dependency>
- 初始化依赖
@PostConstruct
public void init() {
try {
//获取当前系统
String osName = System.getProperties().getProperty("os.name");
if ("Linux".equalsIgnoreCase(osName)) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
} else {
nu.pattern.OpenCV.loadShared();
System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME);
}
} catch (Exception e) {
e.printStackTrace();
}
}
也可以在静态代码块里初始化
启动下吧,不报错就是加载成功了!
如果程序说找不到包的话,可以把/usr/local/share/java/opencv4目录下的文件复制到/usr/lib/下
最后附上DockerFile文件,因为我是docker部署的
FROM centos
WORKDIR /home/admin
#下载jdk11
RUN wget https://download.oracle.com/otn/java/jdk/11.0.17+10/8bd089539add49a9b99e2f27eb0c4329/jdk-11.0.17_linux-x64_bin.tar.gz?AuthParam=1667384513_084b3d888e18c6459482084546b57037
#重命名jdk名称
RUN rename jdk-11.0.17_linux-x64_bin.tar.gz?AuthParam=1667384513_084b3d888e18c6459482084546b57037 jdk-11.0.17_linux-x64_bin.tar.gz jdk-11.0.17_linux-x64_bin.tar.gz?AuthParam=1667384513_084b3d888e18c6459482084546b57037
#安装必要的
RUN yum -y install gcc gcc-c++ openssl openssl-devel tar
RUN wget https://github.com/Kitware/CMake/releases/download/v3.16.2/cmake-3.16.2.tar.gz
RUN tar -zxf cmake-3.16.2.tar.gz
WORKDIR cmake-3.16.2
RUN ./bootstrap --prefix=/usr --datadir=share/cmake --docdir=doc/cmake && make -j8
RUN make install
WORKDIR /home/admin
##安装ant
RUN yum -y install ant
#
##卸载当前系统的jdk
RUN rpm -e --nodeps java-1.8.0-openjdk-devel-1.8.0.352.b08
RUN rpm -e --nodeps java-11-openjdk-11.0.15.0.9
RUN rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.352.b08
RUN rpm -e --nodeps java-1.8.0-openjdk-1.8.0.352.b08
RUN rpm -e --nodeps java-11-openjdk-headless-11.0.15.0.9
RUN rpm -e --nodeps java-11-openjdk-devel-11.0.15.0.9
##解压
RUN tar -zxvf jdk-11.0.17_linux-x64_bin.tar.gz
##配置java_home
ENV JAVA_HOME /home/admin/jdk-11.0.17
RUN echo -e "export JAVA_HOME=/home/admin/jdk-11.0.17\n" >> /etc/profile
RUN echo "export PATH=$PATH:$JAVA_HOME/bin" >> /etc/profile
RUN echo -e "\n" >> /etc/profile
RUN echo "export CLASSPATH=$JAVA_HOME/lib" >> /etc/profile
RUN echo "source /etc/profile" >> ~/.bashrc
#source
RUN source /etc/profile
#设置javahome,以防万一
RUN export JAVA_HOME=/home/admin/jdk-11.0.17
#下载openvc包
RUN wget -O opencv-4.5.5.tar.gz https://github.com/opencv/opencv/archive/refs/tags/4.5.5.tar.gz
RUN wget -O opencv_contrib-4.5.5.tar.gz https://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.5.tar.gz
#解压
RUN tar -zxvf opencv-4.5.5.tar.gz
RUN tar -zxvf opencv_contrib-4.5.5.tar.gz
#切到opencv下
WORKDIR ./opencv-4.5.5
#创建build
RUN mkdir build
WORKDIR build
#开始构建
RUN cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_EXTRA_MODULES_PATH=/home/admin/opencv_contrib-4.5.5/modules -D ENABLE_CXX11=ON -D WITH_1394=OFF -D BUILD_opencv_xfeatures2d=OFF -D BUILD_SHARED_LIBS=OFF -D BUILD_TESTS=OFF ..
#开始编译
RUN make -j8
RUN make install
#删除无用的包
WORKDIR /home/admin
RUN rm -rf cmake-3.16.2.tar.gz
RUN rm -rf jdk-11.0.17_linux-x64_bin.tar.gz
RUN rm -rf opencv-4.5.5.tar.gz
RUN rm -rf opencv_contrib-4.5.5.tar.gz
ENV JAVA_HOME /home/admin/jdk-11.0.17
WORKDIR /home/admin
RUN cp /usr/local/share/java/opencv4/* /usr/lib/
RUN echo "source /etc/profile" >> /etc/bashrc
WORKDIR /home/admin
参考文档
官方安装教程
官方java_opencv环境配置
java在linux下编译使用opencv
CentOS 7 源码安装 CMake 3.16.2 最新稳定版
更多推荐
所有评论(0)