自编译支持CUDA硬解的OPENCV和FFMPEG

这篇具有很好参考价值的文章主要介绍了自编译支持CUDA硬解的OPENCV和FFMPEG。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 整体思路

查阅opencv的官方文档,可看到有个cudacodec扩展,用他可方便的进行编解码。唯一麻烦的是需要自行编译opencv。
同时,为了考虑后续方便,顺手编译了FFMPEG,并将其与OPENCV绑定。
在之前的博文“鲲鹏主机+昇腾Atlas 300I Pro+龙蜥8.6 全国产化主机使用NPU推理YoloV5环境安装全过程”中已经干过一次了,类似的来搞一把。

2 准备环境

2.1 安装CMake

同之前的博文,CMake官网下载后安装

./cmake-3.29.0-rc4-linux-aarch64.sh --skip-license --prefix=/usr

2.2 安装nv-codec-headers(可选)

如果不需要FFMPEG,可以无视这步。
注意他对CUDA版本和驱动版本的依赖。所以需要根据本机版本选择合适的分支。
官网传送门

以笔者本机为例,可见驱动版本为510.39.01,CUDA版本为11.6:

$ nvidia-smi 
Mon Apr 15 01:30:12 2024       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.39.01    Driver Version: 510.39.01    CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            On   | 00000000:01:00.0 Off |                    0 |
| N/A   54C    P0    28W /  70W |    303MiB / 15360MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A   1492699      C   /usr/local/bin/ollama             301MiB |
+-----------------------------------------------------------------------------+

那么选择11.1版本是合适的。同时Video Codec SDK的版本为11.1.5。

自编译支持CUDA硬解的OPENCV和FFMPEG,AI,opencv,ffmpeg,人工智能
安装比较简单,常规的make && make install 即可。

2.3 安装Nvidia Codec SDK

官网传送门在此

注意他对CUDA版本和驱动版本的依赖,以及nv-codec-headers 对他版本的依赖。因此不能无脑下最新的,需要由此寻找合适的历史版本。
下载完的压缩包中的Read_Me.pdf中有详细的版本要求介绍,也可以根据nv-codec-headers里要求的版本型号进行处理。(应当是一致的)

自编译支持CUDA硬解的OPENCV和FFMPEG,AI,opencv,ffmpeg,人工智能
解压后,将Interface目录下的头文件,拷贝到你的CUDA安装目录即可,默认路径为/usr/local/cuda/include。千万不要去理那些动态库,那个是配套他的测试DEMO编译用的,可以不用管。

2.4 签出opencv和opencv-contrib

统一使用最近的4.9.0的tag

export GIT_SSL_NO_VERIFY=true
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 4.9.0
cd ..
git clone https://github.com/opencv/opencv_contrib.git
git checkout 4.9.0
cd ..

3 编译安装

3.1 FFMPEG

可以直接用Video Codec SDK里面配套的FFMPEG 4.4,避免不必要的麻烦

cd Video_Codec_SDK_11.1.5/Samples/External/FFmpeg/src
unzip ffmpeg-4.4.zip
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}
./configure --enable-shared --enable-pic --enable-cuda --enable-cuvid --enable-nvenc --enable-nvdec --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda/include/ --extra-ldflags=-L/usr/local/cuda/lib64/
make && make install

测试转码,如果没啥报错且文件可用,就表示OK了。

ffmpeg -c:v h264_cuvid -i old.mp4 -c:v h264_nvenc new.mp4

3.2 编译OPENCV

在编译之前,需要先查阅Nvidia官网获得你的cuda_arch_bin版本。以笔者本机为例。Tesla T4的数值为7.5
自编译支持CUDA硬解的OPENCV和FFMPEG,AI,opencv,ffmpeg,人工智能

cd opencv
mkdir build
cd build
cmake -D WITH_FFMPEG=ON \
-D FFMPEG_INCLUDE_DIRS=/usr/local/include \
-D FFMPEG_LIBRARIES="/usr/local/lib/libavcodec.so;/usr/local/lib/libavformat.so;/usr/local/lib/libavutil.so;/usr/local/lib/libswscale.so;/usr/local/lib/libswresample.so" \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D WITH_CUDA=ON -D WITH_CUDACODEC=ON \
-D CUDA_ARCH_BIN=7.5 \
-D BUILD_opencv_python3=yes -D BUILD_opencv_python2=no \
-D PYTHON3_EXECUTABLE=/root/miniconda3/bin/python3.11 \
-D PYTHON3_INCLUDE_DIR=/root/miniconda3/include/python3.11/ \
-D PYTHON3_LIBRARY=/root/miniconda3/lib/libpython3.11.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/root/miniconda3/lib/python3.11/site-packages/numpy/core/include/ -D PYTHON3_PACKAGES_PATH=/root/miniconda3/lib/python3.11/site-packages \
-D PYTHON3_DEFAULT_EXECUTABLE=/root/miniconda3/bin/python3.11 \
..
make 
make install

如果需要图形化交互,还需要准备一些系统库文章来源地址https://www.toymoban.com/news/detail-858700.html

yum install gtk2-devel 

4 代码示例

import cv2

if __name__ == '__main__':
	rtsp_url = 'rtsp://admin:123456@192.168.1.100/'
	decoder = cv2.cudacodec.createVideoReader(rtsp_url)
	#不设置的化默认是BGRA,为了方便后续处理,指定为BGR
	decoder.set(cv2.cudacodec.COLOR_FORMAT_BGR)
	count = 0
	while True:
		ret,gpu_frame = decoder.nextFrame()
		if ret :
			frame = gpu_frame.download()
			if count == 0 :
				cv2.imwrite('test_img.bmp', frame)
			frame_queue.append(np.array(frame[:, :, ::-1]))
			count += 1

到了这里,关于自编译支持CUDA硬解的OPENCV和FFMPEG的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Win10 OpenCV编译安装CUDA版本

    Win10 + Microsoft Visual Studio Community 2017 + CUDA11.3 + CUDNN8.2 + RTX GeForce 3090 + OpenCV4.5.3 前往官网下载Visual Studio Installer即可,做如下勾选,安装即可 完成后,查看环境变量,将MSVC编译器地址加入环境变量 前往官网下载CUDA和对应的CUDNN,切记一定要对应CUDNN和CUDA版本,根据提示一步一

    2024年02月06日
    浏览(51)
  • OpenCV_CUDA_VS编译安装

    我这里是下载的OpenCV4.5.4,但是不知道到在vs里面build时一直报错,后面换了4.7.0的版本测试,安装成功。 Release OpenCV 4.5.4 · opencv/opencv · GitHub 这个里面有官方预编译好的OpenCV库,可以直接食用。 扩展包: https://github.com/opencv/opencv_contrib/releases/tag/4.5.4 这里cmake版本要求应该不是

    2024年02月09日
    浏览(47)
  • opencv4.7.0编译opencv-contrib-4.7.0以及CUDA

    最近工作中需要用到使用CUDA加速后的opencv进行传统算法的开发,在编程之前,需要先解决环境编译和lib库问题,本文就是记录自己编译opencv-4.7.0的全过程。 可参考我之前的博客WIN10安装配置TensorRT详解中的前几节,可以清楚的知道如何在Windows10系统上安装适合自己的CUDA以及验

    2024年02月15日
    浏览(52)
  • Jetson Xavier NX编译OpenCV(with cuda)

    Jetson Xavier NX默认安装的OpenCV 4.5.4(不带cuda),因项目要求OpenCV使用cuda作加速,因此,须重新编译OpenCV。这里为了方便直接在目标机上面编译,避免复杂的环境及依赖。 下载地址: OpenCV · GitHub 我这里下载opencv-4.5.4,opencv_contrib-4.5.4,下载后并解压。 查看是否卸载: libs: versi

    2024年02月11日
    浏览(42)
  • 【opencv】【GPU】windows10下opencv4.8.0-cuda C++版本源码编译教程

    提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 OpenCV是一个开源的计算机视觉库,包含了核心模块和扩展模块,提供了基础的图像处理和计算机视觉算法,以及一些机器学习工具。而OpenCV Contrib是OpenCV社区贡献的一组扩展模块之一,包含了一些较为

    2024年02月08日
    浏览(79)
  • Jetson OpenCV 安装,支持cuda加速,已解决多个常见问题

    1 :本文主要介绍 Jetson Xavier NX (以下简称 NX ) 平台下 OpenCV 的卸载及编译安装带 CUDA 加速的OpenCV 2 :并提出解决依赖项无法安装的问题 为什么要卸载默认的 OpenCV ? 输入命令 按数字6查看INFO页面,可以看到 所以默认的 OpenCV 版本是不带 CUDA 加速的,无法充分利用 NX 的 GPU 性能

    2024年01月19日
    浏览(55)
  • 【已解决】opencv 交叉编译 ffmpeg选项始终为NO

    在交叉编译时候,发现在 pc 端能用 opencv 打开的视频,但是在 rv1126 上打不开。在网上查了很久,原因可能是 交叉编译过程 ffmpeg 造成的。之前 ffmpeg 是直接用 apt 安装的,opencv 编译也是直接用 Cmake 命令行进行的。 网上特别推荐用命令行进行编译,但是本次交叉编译,我发现

    2024年02月03日
    浏览(42)
  • Jetson NX Xavier 编译opencv4.4(cuda版)

    大部分人在解决问题的时候,百度输入的不够准确,展示出来的页面多数是跟自己用的系统版本不一致,导致安装失败。这点对于新手来说特别要注意,正如,你刚好看到我的文章,我希望你能在搜索时用 硬件 + 系统 + 要解决的问题 格式,说不定能提高你的检索效率

    2024年02月13日
    浏览(57)
  • QT----opencv4.8.0编译cuda版本,QTcreater使用

    cuda12.1 opencv4.8.0 vs2019 cmake3.29 打开cmake,选择opencv480路径,build路径随意 点击configure后,选择这些选项,opencv_word,cuda全选,with_qt,NONFREE,4.8.0第三方模块的路径 点击config后,添加qt的安装路径,打开两个fast,将arch显卡算力设置为自己显卡的算力,打开with_OPENGL 取消勾选这三个

    2024年04月09日
    浏览(60)
  • 在windows环境下安装支持CUDA的opencv-python

    GPU(图形处理器,Graphics Processing Unit) 是一种专门设计 用于图形渲染和并行计算的硬件设备 。传统上,GPU 主要用于图形渲染,即将 3D 数据转换为 2D 图像,以显示在计算机屏幕上。然而,由于 GPU 在并行计算方面的强大能力,逐渐引起了开发者的关注,并开始将 GPU 应用于通

    2024年02月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包