Opencv是当前比较热门的图像处理开源算法库,但是随着深度学习在图像存储里领域的大放异彩,基于python的图像处理和深度学习算法大有超越opencv的趋势。opencv在最近的版本更新中,重点都放在了人工智能算法方面,本文介绍linux环境下配置支持GPU/cuda的ffmpeg和opencv开发环境,并将其中遇到的问题记录下来,方便查询。
1. 基础环境
操作系统:目前在Ubuntu20.04,24.04,Kylin OS V10上都进行国配置。nvidia版本555, cuda版本12.5,ffmpeg版本7.01,opencv版本4.10.0(含opencv_contrib).
2. nvidia相关安装和配置
从nvidia官网下载cuda12.5安装包,其中自带555版本的显卡驱动。直接运行安装包,可以自动安装显卡驱动和cuda。这里要注意,有的系统(如kylin os)直接安装显卡驱动会失败,需要先卸载以前的旧版本驱动。对于没有旧nvidia驱动的系统安装依然失败,那就需要手动将系统自带驱动禁用,按照最传统的方法安装该驱动和粗大。同时选择不安装驱动的就需要注意该版本粗大兼容的显卡驱动版本号,例如该版本兼容525以上版本的驱动,如果旧的驱动大于525就可以不安装驱动,只安装cuda。
cuda安装完成后需要按照提示,在系统环境变量PATH和LD_LIBRARY_PATH中添加cuda的可执行程序目录和库目录。同时建议添加CUDA_PATH环境变量。
3. ffmpeg编译和安装
按照官方Using_FFmpeg_with_NVIDIA_GPU_Hardware_Acceleration.pdf文件配置ffmpeg。如果不看文档的就直接搜一个nv-codec-headers的文件,并进行make install。经过测试ffmpeg7.10编译有问题,最新的nvidia video codec SDK中新定义的变量并没有在ffmpeg7.10中进行更新,直接编译会有找不到定义的变量。也有可能是我自己下载的错误的nvcodec SDK(其实不需要),如果像我一样下载并将库和头文件拷贝到系统目录下,会造成后面opencv莫名奇妙的问题。然后按照上面提到的官方文件进行configure配置,检查配置结果中是否含有h264_cuvid、hevc_cuvid解码器,和h264_nvenc、hevc_nvenc编码器,h264_nvdec、hevc_nvdec硬件解码,以及ffplay。其实我个人主要用到的是h264_cuvid进行解码和ffplay进行播放测试视频。为了能够编译ffplay需要系统安装或编译SDL2库。同时,SDL2库编译的时候需要安装一个alsa音频处理模块,否则编译SDL2和ffmpeg都不会有问题,但是运行的时候会报错误。
4. opencv编译和安装
将opencv_contrib文件中的内容拷贝到opencv库中,也可以通过cmake配置的方式编译opencv_contrib,但是我喜欢直接拷贝合并。注意,对于不想编译opencv_contrib,又需要使用GPU/cuda的需要编译opencv_cudev库及其他几个cuda算法模块。点击configure。由于国内环境,编译第三方库的时候会下载一些算法模型文件,经常需要耗费大量时间又难以下载,所以这里建议直接屏蔽WITH_IPP\WITH_ADE\BUILD_opencv_face\BUILD_opencv_wechat_qrcode\BUILD_opencv_xfeature2d。有的编译webp的时候会出现编译器错误,这里也可以将其屏蔽掉。需要打开WITH_CUDA,再次进行configure。检查cuda模块是否找到。这里有个大问题,就是CUDA_nvcuvid_LIBRARY和CUDA_nvidia-encode_LIBRARY两个库是找不到的。如果这个时候你上网搜索,会让你下载Video_Codec_SDK,并拷贝头文件和库到系统目录或cuda目录下,这样虽然能够编译通过,但是后面英语会出问题,因为这个SDK是对于那些没有安装nvidia驱动的环境提供的,所以因为我们已经安装了驱动,驱动自带有这两个库文件, 位于/usr/lib/x86_64-linux-gun目录下。但是没有头文件。我的做法是将SDK的头文件拷贝到cuda/include目录下,并在cuda/lib64下面建立这两个编解码库的软连接(个人感觉这不是一个合适的解决办法,但是暂时没有找到其他方式)。再次执行configure,make,make install。
5. -217:Gpu API call Unkown error code错误排解
如上所述,如果直接使用SDK中的库,会出现无法识别的错误。删除SDK的编解码库,将驱动自带的库拷贝到cuda下或,建立软连接可以正常编译和运行。
标签:217,code,ffmpeg,opencv,编译,API,cuda,驱动,安装 From: https://www.cnblogs.com/uuvv/p/18289062