当前位置:   article > 正文

Linux/Windows下部署OpenCV环境(Java/SpringBoot/IDEA)_springboot opencv idea

springboot opencv idea

环境

本文基于Linux(CentOS 7)、SpringBoot部署运行OpenCV 4.5.5,并顺带记录Windows/IDEA下如何调试SpringBoot调用OpenCV项目。

Windows下调试

首先我们编写代码,并在Windows/IDEA下调试通过。
下载Windows版安装包,并安装。地址https://opencv.org/releases/,本例是4.5.5:
在这里插入图片描述
注意OpenCV较新的版本需要比较高的JDK版本,如果你的环境受限于JDK8,那么不要下载最新版,而是选择4.5.5版本。

将安装目录下的build\java\x64\opencv_java455.dll64位dll拷贝到C:\Windows\System32。下。
build\java\opencv-455.jar拷贝到SpringBoot项目根目录下的lib
在这里插入图片描述
配置项目pom.xml,添加OpenCV本地依赖:

<dependency>
    <groupId>org.opencv</groupId>
    <artifactId>opencv</artifactId>
    <version>4.5.5</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/opencv-455.jar</systemPath>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

添加打包配置,将这个本地jar包打包到最终输出:

<build>
    <plugins>
        <!-- 省略其他配置 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!-- 打包时是否包含scope为system的依赖 -->
                <includeSystemScope>true</includeSystemScope>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

去除spring-boot-devtools,否则IDEA上调试运行会找不到这个dll:

<!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-devtools</artifactId>-->
<!--            <scope>runtime</scope>-->
<!--            <optional>true</optional>-->
<!--        </dependency>-->
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

接下来就可以愉快地在Windows编写测试代码了~
建议将OpenCV调用封装成一个门面类,在类的静态代码块中初始化native引用:

public class MyOpenCV {
	// 引入native库
    static {
        System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME);
    }
    // 测试方法
    public void test() {
    	Mat mat = new Mat();
    	System.out.println("" + mat);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

不要在SpringBoot程序入口引用,否则在调试阶段可能会报错。
然后在Controller中写个测试接口,调用MyOpenCV.test(),就可以通过接口验证集成是否成功了。

有的人调试会遇到java.lang.UnsatisfiedLinkError,需要分辨下报错是so找不到,还是native方法找不到。

  • so找不到是因为so不在java.library.path,所以稳妥做法是把so拷贝到C:\Windows\System32下。
  • native方法找不到,很可能是IDEA调试下,spring-boot-devtools热加载作妖。

发布Linux

调试完成后,就要开始部署服务端了。

安装依赖

安装如下依赖:

 yum install gcc gcc-c++ gtk+-devel gimp-devel gimp-devel-tools gimp-help-browser zlib-devel libtiff-devel libjpeg-devel libpng-devel gstreamer-devel libavc1394-devel libraw1394-devel libdc1394-devel jasper-devel jasper-utils swig python libtool nasm ant
  • 1

可以注意到上面并没有安装最重要的CMake,这是因为通过yum安装的CMake最高是2.x版本,不符合OpenCV所需的要求,需要手动安装。

安装CMake

https://cmake.org/download/下载最新版本。

上传服务器,并解压安装:

rz
tar xzvf cmake-3.29.0-rc3.tar.gz
cd ./cmake-3.29.0-rc3
./configure
make
make install
ln -s /usr/local/bin/cmake /usr/bin
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

检查安装:

cmake --version
  • 1

安装OpenCV

https://opencv.org/releases/下载源码,本例下载4.5.5。

在这里插入图片描述
将zip包上传服务器,并解压到合适的目录下:

rz
unzip opencv-4.5.5.zip
  • 1
  • 2

创建build目录:

cd opencv-4.5.5
mkdir build
cd build
  • 1
  • 2
  • 3

配置构建:

cmake -D CMAKE_BUILD_TYPE=RELEASE  -D OPENCV_GENERATE_PKGCONFIG=ON -D ENABLE_CXX11=ON -D WITH_1394=OFF -D BUILD_opencv_xfeatures2d=OFF -D BUILD_SHARED_LIBS=OFF -D BUILD_TESTS=OFF ..
  • 1

注意CMake的打印结果:
在这里插入图片描述
ant必须要有,Java Wrappers必须是YES,并且日志没有出现报错才可以进行下一步,如果是warning可以忽略。

接下来开始构建:

make -j4
  • 1

-j4指定了4线程,可以根据实际机器配置更改,否则很慢。

完成以后安装:

make install
  • 1

执行后会在/usr/local/lib64(如果你的机器是64位)下看到生成文件。
而我们需要的Java so文件在/usr/local/share/java/opencv4/下,拷贝过去:

cp /usr/local/share/java/opencv4/libopencv_java455.so /usr/local/lib64
  • 1

所以千万不要以为/usr/local/lib64下安装了很多OpenCV的so就是成功了,要检查/usr/local/share/java/opencv4/目录有没有生成,如果生成成功,把libopencv_java455.so拷贝到/usr/local/lib64一块去,方便管理。

配置

需要配置java.library.path,使得Java程序找到so,在SpringBoot的启动脚本中加上-Djava.library.path配置:

java -jar -Djava.library.path=/usr/local/lib64 [你的jar包名].jar
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/623236
推荐阅读
相关标签
  

闽ICP备14008679号