linux下部署OpenCV环境(Java/SpringBoot/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>

添加打包配置,将这个本地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>

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

<!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-devtools</artifactId>-->
<!--            <scope>runtime</scope>-->
<!--            <optional>true</optional>-->
<!--        </dependency>-->

接下来就可以愉快地在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);}
}

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

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

可以注意到上面并没有安装最重要的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

检查安装:

cmake --version

安装OpenCV

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

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

rz
unzip opencv-4.5.5.zip

创建build目录:

cd opencv-4.5.5
mkdir build
cd build

配置构建:

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

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

接下来开始构建:

make -j4

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

完成以后安装:

make install

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

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

所以千万不要以为/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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/520327.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

星辰天合参与编制 国内首个可兼顾 AI 大模型训练的高性能计算存储标准正式发布

近日&#xff0c;在中国电子工业标准化技术协会高标委的支持和指导下&#xff0c;XSKY星辰天合作为核心成员参与编制的《高性能计算分布式存储系统技术要求》团体标准&#xff0c;在中国电子工业标准化技术协会网站正式发布。 该团体标准强调了分布式存储系统对包括传统高性能计…

教育中的人工智能:ChatGPT只是开始

近日&#xff0c;智能聊天工具ChatGPT在全球掀起热潮。谷歌、微软、苹果等科技巨头纷纷宣布跟进布局&#xff0c;有消息称中国互联网企业将于3月在推出类似ChatGPT的人工智能聊天机器人。 对于许多学生来说&#xff0c;数字助手已经成为一种非正式的家庭作业助手。自1966年第一…

2016年认证杯SPSSPRO杯数学建模C题(第一阶段)如何有效的抑制校园霸凌事件的发生解题全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 C题 如何有效的抑制校园霸凌事件的发生 原题再现&#xff1a; 近年来&#xff0c;我国发生的多起校园霸凌事件在媒体的报道下引发了许多国人的关注。霸凌事件对学生身体和精神上的影响是极为严重而长远的&#xff0c;因此对于这些情况我们应该…

express接受请求参数

传参问题 1. get方式接受请求参数 get方式请求的参数会拼接在地址栏的后面&#xff0c;参数的格式是?namevalue&namevalue...express针对前端get方式发送的数据可以通过req.query来获取后端代码 // cart.js router.get(/getList, (req,res)>{const param {username…

微前端之使用无界创建一个微前端项目

wujie 使用手册 使用简介 主应用配置 安装 wujie依赖main.js配置 是否开启预加载 生命周期函数 – lifecycle.js配置 子应用配置 跨域设置运行模式 生命周期改造 在主应用中&#xff0c;使用wujie&#xff0c;将子应用引入到主应用中去 wujie 使用手册 wujie 是一个基于 Web…

Python实现简单的读文字发音

使用pyttsx3包&#xff0c;先安装。 核心代码&#xff1a;engine pyttsx3.init() # 初始化 uname "周吴郑王" engine.say("奥利给给给" str(uname) "的" str(uname) "&#xff0c;感谢&#xff01;&#xff01;&#xff01;") e…

Day22:安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用

目录 开发环境 数据导入-mysql架构&库表列 数据库操作-mysqli函数&增删改查 数据接收输出-html混编&超全局变量 第三方插件引用-js传参&函数对象调用 完整源码 思维导图 PHP知识点&#xff1a; 功能&#xff1a;新闻列表&#xff0c;会员中心&#xff0…

基于Spring Boot的图书个性化推荐系统 ,计算机毕业设计(带源码+论文)

源码获取地址&#xff1a; 码呢-一个专注于技术分享的博客平台一个专注于技术分享的博客平台,大家以共同学习,乐于分享,拥抱开源的价值观进行学习交流http://www.xmbiao.cn/resource-details/1765769136268455938

C#,动态规划的集合划分问题(DP Partition problem)算法与源代码

1 动态规划问题中的划分问题 动态规划问题中的划分问题是确定一个给定的集是否可以划分为两个子集&#xff0c;使得两个子集中的元素之和相同。 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是运筹学的一个分支&#xff0c;是求解决策过程最优化的过程…

macbook pro 2018 安装 arch linux 双系统

文章目录 友情提醒关于我的 mac在 mac 上需要提前做的事情复制 wifi 驱动 在 linux 上的操作还原 wifi 驱动连接 wifi 网络磁盘分区制作文件系统挂载分区 使用 archinstall 来安装 arch linux遗留问题 友情提醒 安装 archl linux 的时候&#xff0c;mac 的键盘是没法用的&#…

【开源】JAVA+Vue.js实现创意工坊双创管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员端2.2 Web 端2.3 移动端 三、系统展示四、核心代码4.1 查询项目4.2 移动端新增团队4.3 查询讲座4.4 讲座收藏4.5 小程序登录 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的创意工坊双创管理…

解读电影级视频生成模型 MovieFactory

Diffusion Models视频生成-博客汇总 前言&#xff1a;MovieFactory是第一个全自动电影生成模型&#xff0c;可以根据用户输入的文本信息自动扩写剧本&#xff0c;并生成电影级视频。其中针对预训练的图像生成模型与视频模型之间的gap提出了微调方法非常值得借鉴。这篇博客详细解…