赞
踩
使用conda安装opencv,并在docker运行的容器中使用,这里以运行则springboot应用的容器为例
- # 安装依赖
- 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通过编译安装
- 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
- # 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环境中,查看版本信息,安装完成应该打印对应版本
- python
-
- import cv2
- print(cv2.__version__)
如果安装的opencv没有支持python模块,那么可以直接去lib中查找是否有opencv-xxx.jar和libopencv_javaxxx.so[xxx是版本号]
安装步骤中我选择了在物理机上进行编译安装,后续将物理机上的opencv通过容器卷加载到容器中供java使用
cp -r *opencv* /home/opencv_so/
-
-
- # opencv 目录
- ENV OPENCV_DIR /usr/local/opencv
- RUN mkdir -p $OPENCV_DIR
-
- # 设置 Java 库路径以便找到 OpenCV 的本地库文件
- ENV LD_LIBRARY_PATH $OPENCV_DIR/lib64:$LD_LIBRARY_PATH
-
-
- # 将创建的opencv_so挂载到容器/usr/local/opencv/lib64下
- - /home/opencv_so:/usr/local/opencv/lib64
在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");
原因:
基础镜像和物理机系统环境版本等可能不一致,直接挂载可能出现错误
建议将opencv相关的问价挂载即可
原因:
挂载的目录中没有libjpeg.so.62
需要将物理机的libjpeg.so.62放到opencv_so中
我遇到的原因定位时 libopencv_java460.so没有正常加载,即java程序加载的so文件位置错误
需要制定环境变量,将其正确文件放入环境变量
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>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。