opencv470 ffmpeg java springboot centos 调用集成
前言
最近在做opencv相关的东西 用java调用opencv库+ffmpeg去做视频的一些处理 记录一下:
windows 集成因为可以直接下载一些库 就比较简单了 以下会粗略的介绍一下。
重点还是放到 linux下集成 因为很多东西都需要自己编译 很麻烦 很繁琐!!!
对于第一次做这个的我简直是陌生要死 欲哭无泪~~~
提示:以下是本篇文章正文内容,下面案例可供参考
一、介绍一下Windows下针对以上的集成方法
1. 首先去opencv官网下载
下载后
解压到本地 然后在 上面目录下 找到dll动态链接库文件 copy到你本地的 jdk bin下面
2. 去ffmpeg官网下载windows的安装包
解压到本地
然后再环境变量中配置 ffmpeg
到此基本结束。
3. java maven集成
去maven仓库 中找 关于opencv的依赖包
这里面我就遇到了一个问题就是在java使用的时候 会报错
Could not initialize class org.bytedeco.ffmpeg.global.avutil
这个问题我卡了很久 最后发现其实就是ffmpeg包没有正确加载
错误的pom
<!-- https://mvnrepository.com/artifact/org.bytedeco/javacpp -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacpp</artifactId>
<version>1.5.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bytedeco/opencv -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>opencv</artifactId>
<version>4.7.0-1.5.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bytedeco/ffmpeg-platform -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg</artifactId>
<version>6.0-1.5.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bytedeco/javacv -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.9</version>
</dependency>
正确的POM
<!-- https://mvnrepository.com/artifact/org.bytedeco/javacpp -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacpp</artifactId>
<version>1.5.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bytedeco/opencv -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>opencv</artifactId>
<version>4.7.0-1.5.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bytedeco/ffmpeg-platform -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg-platform</artifactId>
<version>6.0-1.5.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.bytedeco/javacv -->
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.9</version>
</dependency>
其实就是ffmpeg包的问题 改成ffmpeg-platform就可以了
可能-platform 确定一下平台的意思吧 不太知道
然后基本上就可以进行本地开发了!!!
二、linux上部署环境
1.编译环境检查
1.1 检查gcc版本
因为你版本过低 编译opencv是过不去的 我用的是 470 可能需要高版本的环境
在这里 我用的版本是gcc-11.2.0
如果需要升级 请看我这一篇
centos升级gcc-11.2.0
1.2 第二步 检查cmake版本
因为编译环境需要高版本cmake 所以 应该升级为3.5以上版本 不然编译的时候会报错
cmake --version 查看原来的cmake版本
如果版本低就需要升级 如果很高就不用
升级方法
1.删除旧的cmake
yum remove cmake
期间会询问你是否确认删除,输入y
2.安装编译源码所需要的工具包,gcc, g++,perl。
yum install gcc gcc-c++ ncurses-devel perl
3.下载cmake源码包
地址:https://cmake.org/files/v3.5/
或者用命令下载
wget https://cmake.org/files/v3.5/cmake-3.5.1.tar.gz
你要是想下载更高的 可以选择更高的
4.把文件拷贝到/usr/local目录下
cp cmake-3.5.1.tar.gz /usr/local/
5.解压到当前目录
tar zxvf cmake-3.5.1.tar.gz
6.改名为cmake 这步很关键
mv cmake-3.5.1 cmake
7.依次执行如下命令,进行编译,安装
cd cmake
./configure
make
make install
8.打开系统文件中增加变量
vi /etc/profile
PATH=/usr/local/cmake/bin:$PATH
export PATH
9.保存文件后,执行source /etc/profile 以刷新生效
再执行 echo $PATH
可以看到bin路径已经生效
10查看cmake版本
cmake --version
2. 安装必要组件
按需安装 不需要可以不安装
2.1 安装ant
sudo apt-get install ant
2.2 安装libmp3lame
因为用到了涉及音频相关的操作 所以需要安装一下这个 不需要可以忽略
tar -zxf lame-3.100.tar.gz
cd lame-3.100
./configure
make
make install
2.3 安装yasm
tar -zxf yasm-1.3.0.tar.gz
cd yasm-1.3.0
sed -i 's#) ytasm.*#)#' Makefile.in
./configure
make
make install
2.4 安装libx64
git clone https://code.videolan.org/videolan/x264.git
cd x264
编译
./configure --prefix=/usr/x264/ --includedir=/usr/local/include --libdir=/usr/local/lib --enable-shared
make
make install
配置环境变量
vim ~/.bashrc
在最后PATH添加环境变量:
export PATH="/usr/local/nasm/bin:$PATH"
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export PATH="/usr/x264/bin:$PATH"
保存退出
source ~/.bashrc 设置生效
验证
x264 --version
2.5 源码安装nasm
下载和解压:
wget https://www.nasm.us/pub/nasm/releasebuilds/2.14/nasm-2.14.tar.gz
tar -zxvf nasm-2.14.tar.gz
cd nasm-2.14
nasm安装:
./configure
make
sudo make install
添加到环境变量:
export PATH=/usr/local/bin:$PATH
安装成功校验:
nasm -v
NASM version 2.14 compiled on Jul 9 2024
3. 安装ffmpeg
3.1 源码安装 ffmpeg
下载和解压:
wget https://ffmpeg.org//releases/ffmpeg-6.1.1.tar.gz
tar -zxvf ffmpeg-6.1.1.tar.gz
cd ffmpeg-6.1.1
编译和安装:
./configure --enable-gpl --enable-libx264 --enable-shared --enable-libmp3lame --extra-ldflags=-L/usr/local/lib --extra-cflags=-I/usr/local/include
make
sudo make install
配置环境变量:
vi /etc/profile
export PATH=$PATH:/usr/local/ffmpeg/bin
:wq 保存退出
刷新资源,使其生效
source /etc/profile
到此 ffmpeg的安装结束 包含了 libx64 音频解码 libmp3lame的编译和安装 不需要可不安装
4. 安装opencv 编译java所需要的so库
下载opencv470 linux版本
地址:https://opencv.org/releases/ 官网地址
下载后新建一个文件夹 然后解压到/opt/opencv-4.7.0下
进入/opt/opencv-4.7.0
新建build文件夹
然后执行
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv -D BUILD_SHARED_LIBS=ON -D WITH_FFMPEG=ON -D BUILD_opencv_java=ON ..
注意 -D WITH_FFMPEG=ON
需要加上 如果不加的话 在调用
VideoCapture capture = new VideoCapture(inputVideoPath);
会一直报错找不到这个文件无法打开 很头疼
-D BUILD_opencv_java=ON
的意思是编译出来java可以用的环境 但是在此之前一定要保证你的jdk环境已经配置生效 这个就不多说了
确保
java -version
是这个样子的
然后 执行
make -j8
sudo make install
最后生成的so库文件在
/usr/local/opencv/share/java/opencv4里面
到现在就成功的生成了so库文件!!!
总结
以上方法经历了好几天的摸索与尝试 按需取吧 也参考了很多的帖子。
融合了一下。如果解决了你的问题 记得点赞收藏~~~