centos安装opencv并在springboot中使用

使用conda安装opencv,并在docker运行的容器中使用,这里以运行则springboot应用的容器为例

步骤一:安装

在conda中安装

# 安装依赖
conda install numpy matplotlib# 安装opencv
conda install -c conda-forge opencv
# 或者制定版本
conda install -c conda-forge opencv=4.5.3

使用编译方式安装

前提:

OpenCV: OpenCV installation overview

安装好cmake3 、gcc11,java-1.8.0-openjdk-devel ,ant其余配置项

cmake3和gcc通过编译安装

gcc
wget https://ftp.gnu.org/gnu/gcc/gcc-11.1.0/gcc-11.1.0.tar.xz
tar -xf gcc-11.1.0.tar.xz
cd gcc-11.1.0# 配置和构建
./configure
make -j$(nproc)# 安装
sudo make install# 检查安装后版本
gcc --version

问题 如果在./configure时出现

/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory

 那么 执行 ./configure --disable-multilib

其余依赖 
# 安装必要的图像和视频库
sudo yum install libjpeg-turbo-devel libpng-devel libtiff-devel
sudo yum install libavc1394-devel libdc1394-devel libv4l-devel# 安装 Java(如果需要 Java 支持)
sudo yum install java-1.8.0-openjdk-devel#可选# 安装 GTK(用于构建 OpenCV 的 GUI 模块)
sudo yum install gtk2-devel# 安装 Eigen(线性代数库)
sudo yum install eigen3-devel# 安装 TBB(Intel 线程构建块)
sudo yum install tbb-devel# 安装 GStreamer(用于视频处理)
sudo yum install gstreamer-devel gstreamer-plugins-base-devel# 安装 ffmpeg(用于视频处理)
sudo yum install ffmpeg-devel# 安装 Python 3 和相关开发包
sudo yum install python3 python3-devel python3-pip
安装opencv:
# 1 官网下载对应版本
wget https://github.com/opencv/opencv/archive/refs/tags/4.8.1.tar.gz
# 2 解压
tar -zxvf 4.8.1.tar.gz
# 3 进入目录,创建build文件夹
mkdir build 
cd build
# 4 cmake
cmake -DBUILD_opencv_java=ON -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
# 5 make 
make
make install
# 6 更新库缓存
sudo ldconfig

注意:

cmake后一定要有日志打印,代表有java调用部分,否则无法通过java调用opencv

问题:

cmake 时 出现: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found

原因是gcc版本低,导致没有GLIBCXX_3.4.20,可以升级gcc版本,选择11版本

其余安装方式

直接使用docker制作好的镜像

由于后续需要提供给java调用,并且是在容器中进行,那么过于依赖物理机环境,后续换物理机使用时将会很麻烦,可以将需要的环境安装在容器中,并且制作一个基础镜像

比如可以这样操作

1. 下载一个已经安装好opencv的镜像

2.在启动镜像,在镜像中安装jre

3.将容器打包成一个新的镜像,这样就包含了opencv,并且也包含jre了

# 1.下载opencv镜像
#   在docker hub中选择一个
#   这里选择了opencvcourses/opencv-docke,包含opencv4.2
docker pull opencvcourses/opencv-docker:latest# 2.创建容器并进入
docker run -it opencvcourses/opencv-docker# 3.查看opencv版本
opencv_version
打印4.20# 4.更新
apt-get update# 5.安装 OpenJDK 8 JRE
apt-get install -y openjdk-8-jre# 6.验证
java -version

步骤二:验证

在python环境中,查看版本信息,安装完成应该打印对应版本

pythonimport cv2
print(cv2.__version__)

如果安装的opencv没有支持python模块,那么可以直接去lib中查找是否有opencv-xxx.jar和libopencv_javaxxx.so[xxx是版本号]

步骤三:在springboot中使用

安装步骤中我选择了在物理机上进行编译安装,后续将物理机上的opencv通过容器卷加载到容器中供java使用

具体步骤如下:

  1. 在docker compose文件位置或者任意其他位置创建一个文件夹 opencv_so,用于保存opencv的执行文件
  2. 将/usr/lib64目录下所有关于opencv的文件拷贝到新建文件夹中
    cp -r *opencv* /home/opencv_so/
  3. 将/usr/lib64/目录下所有libpng,libtiff,libIlmImf,libjbig,libImath,libHalf,libIex,libIexMath,libIlmThread文件拷贝到opencv_so中,命令参照2
  4. 构建镜像时,创建opencv的执行位置,并设置环境变量LD_LIBRARY_PATH
    # opencv 目录
    ENV OPENCV_DIR /usr/local/opencv
    RUN mkdir -p $OPENCV_DIR# 设置 Java 库路径以便找到 OpenCV 的本地库文件
    ENV LD_LIBRARY_PATH $OPENCV_DIR/lib64:$LD_LIBRARY_PATH
  5. 容器卷加载,在docker compose 文件中,制定容器卷加载位置
    # 将创建的opencv_so挂载到容器/usr/local/opencv/lib64下
    - /home/opencv_so:/usr/local/opencv/lib64

验证时使用的springboot程序

在springboot中使用opencv需要将物理机安装的opencv jar文件下载到编写程序的电脑上,通过maven加载到项目中

具体操作为

# opencv-java.jar为具体物理机安装的 opencv jar
mvn install:install-file -Dfile=opencv-java.jar -DgroupId=org.opencv -DartifactId=opencv-java -Dversion=3.4.1 -Dpackaging=jar# maven中引入<dependency><groupId>org.opencv</groupId><artifactId>opencv</artifactId><version>4.6.0</version>
</dependency>

测试内容

# 在需要使用opencv的类中
static {// 加载 OpenCV 本地库文件System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}# 具体使用,这里创建一个opencv中的Mat类,如果创建成功,说明能正常调用opencv
Mat imread = new Mat();
System.out.println("mat create ok");

 

问题:不要将物理机的lib目录直接挂载到容器中

原因:

基础镜像和物理机系统环境版本等可能不一致,直接挂载可能出现错误

建议将opencv相关的问价挂载即可

问题:java.lang.UnsatisfiedLinkError: /usr/local/opencv/lib64/libopencv_java460.so: libjpeg.so.62: cannot open shared object file: No such file or directory

原因:

挂载的目录中没有libjpeg.so.62

需要将物理机的libjpeg.so.62放到opencv_so中

问题:java.lang.NoClassDefFoundError: org/opencv/core/Mat

原因1:

我遇到的原因定位时 libopencv_java460.so没有正常加载,即java程序加载的so文件位置错误

需要制定环境变量,将其正确文件放入环境变量

原因2:

java程序打包jar后,没有opencv-xxx.jar

可以检查:

jar tf remarkback.jar | grep opencv

如果出现opencv相关的内容说明正常,如果没有要么在运行程序时加载外部jar,或者在打包时加入

maven配置如下:【增加repackage】

 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>

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

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

相关文章

AI创作系统ChatGPT网站源码,支持AI绘画,支持GPT语音对话+智能思维导图生成

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

开发企业展示小程序的关键步骤和技巧

随着移动互联网的快速发展&#xff0c;小程序已经成为企业展示形象、推广产品和服务的重要工具。拥有一个优秀的小程序可以帮助企业提高品牌知名度&#xff0c;吸引更多潜在客户&#xff0c;提升用户体验。以下是拥有一个展示小程序的步骤&#xff1a; 确定需求和目标 首先&am…

linux修改用户uid和gid并且修改文件所有权(所属用户及所属用户组)(chown命令、chgrp命令)(批量修改查找并修改文件、目录uid和gid)

文章目录 修改Linux用户UID和GID以及文件所有权1. 修改用户的UID和GID1.1 用户UID和GID的概念1.2 修改用户UID1.3 修改用户GID 2. 修改文件所有权2.1 文件所有权的概念2.2 修改文件所有者&#xff08;chown命令&#xff09;2.3 修改文件所属用户组&#xff08;chgrp命令&#x…

测试工具Jmeter:下载安装与环境配置

Jmeter是一款很出色的测试工具&#xff0c;这篇文章将介绍Jmeter的下载、安装和环境配置。 1. Jmeter下载 Jmeter官网&#xff1a;Apache JMeter - Download Apache JMeter 如图中所示&#xff0c;第一个下载项是运行在Linux中的&#xff0c;第二个是Windows运行的&#xff0…

Gitlab仓库推送到Gitee仓库的一种思路

文章目录 Gitlab仓库推送到Gitee仓库的一种思路1、创建Gitee的ssh公钥&#xff08;默认已有Gitlab的ssh公钥&#xff09;2、添加Gitlab远程仓库地址3、添加Gitee远程仓库地址4、拉取Gitlab远程仓库指定分支到本地仓库指定分支&#xff08;以test分支为例&#xff09;5、推送本地…

超详细整理,Java接口自动化测试实战-rest-assured

1、关于rest-assured rest-assured 是一个能够简化测试rest服务的Java DSL&#xff0c;像ruby或者python一样的动态语言去测试和验证http服务。 基于java并且兼容了groovy动态语言的特性&#xff0c;使我们像写脚本语言一样去测试http服务。 例如&#xff1a;你的http服务&a…

【玩转 TableAgent 数据智能分析】股票交易数据分析+预测

文章目录 一、什么是TableAgent二、TableAgent 的特点三、实践前言四、实践准备4.1 打开官网4.2 注册账号4.3 界面介绍4.4 数据准备 五、确认分析需求六、TableAgent体验七、分析结果解读八、总结&展望 一、什么是TableAgent TableAgent是一款面向企业用户的智能数据分析工…

我做了一个在手机灵动岛锁屏看实时网速/步数/下班倒计时/跑步距离/照片/待办/倒计时/手机使用次数/帧率...的软件

我做了一个在手机灵动岛&锁屏看实时网速/步数/下班倒计时/跑步距离/照片/待办/倒计时/手机使用次数/帧率…的软件 Island Widgets 的作用&#xff1a; 提醒您 &#xff1a; 准时下班每天运动陪伴家人保持体重放下手机每日待办当前网速手机使用强度实时热搜现在天气… 初…

Rsync+notify文件实时同步工具

rsync ( Remote sync&#xff0c;远程同步) 是一个开源的快速备份工具&#xff0c;可以在不同主机之间镜像同步整个目录树&#xff0c;支持增量备份&#xff0c;并保持链接和权限&#xff0c;且采用优化的同步算法&#xff0c;传输前执行压缩&#xff0c;因此非常适用于异地备…

新版Android Studio Logcat 筛选日志

下载了新版的Android Studio&#xff0c;android-studio-2022.3.1.21-mac_arm&#xff0c;记录一下新版本AS的logcat过滤日志条件 1. 按照包名过滤 1.1 过滤当前包名的日志 package:mine 1.2 过滤其他包名日志 package:com.example.firstemptyapplication 2. 按照日志等级过滤…

32位MCU极致性价比高速风筒方案特点--【其利天下技术】

近年来&#xff0c;伴随着人们消费升级及现代工业技术水平的提升&#xff0c;电吹风市场已经步入了绿色节能、高效多功能化的发展阶段。人们对电吹风的需求和要求都在不断增加。然而&#xff0c;传统电吹风采用交流电机&#xff0c;使用寿命有限&#xff0c;维护不方便&#xf…

内网安全—Windows系统内核溢出漏洞提权

系统内核溢出漏洞提权 往缓冲区中写入超出限定长度的内容&#xff0c;造成缓冲区溢出&#xff0c;从而破坏程序的堆栈进而运行自己精心准备的指定代码&#xff0c;达到攻击的目的。 分类&#xff1a; 堆溢出 栈溢出 查找补丁的方法 1、手工查找补丁情况 systeminfo Wmic qfe…