Linux/Debian/Ubuntu-OpenCV(4.5.4/4.6.0)+CUDA(11.3)配置编译全流程

news/2024/10/30 15:30:30/

文章目录

  • 前言
  • 相关资源下载
    • OpenCV
    • CUDA下载
    • CUDNN下载
  • 编译
  • 错误异常


前言

本文用来记录在linux环境下docker中编译OpenCV with cuda的过程,同时编译了4.5.4和4.6.0两个版本均可编译通过。

本地是linux环境也可参考本文完成编译。

系统:debian 11
CPU:i7
内存:16G
显卡:Nvidia Quadro M2000

相关资源下载

OpenCV

github直接下载连接:
OpenCV 4.5.4 source code
OpenCV 4.6.0 source code

如需下载其他版本可自行通过下述链接下载:
github release page

CUDA下载

对应CUDA版本最低显卡驱动要求1,最新527显卡驱动有点问题,我下载的是470版本linux驱动,顺利安装运行。

显卡驱动安装可参考下述文章:debian11安装Nvidia驱动及Docker运行

CUDA 11.3.1下载2

https://developer.nvidia.com/cuda-11-3-1-download-archive

wget https://developer.download.nvidia.com/compute/cuda/11.3.1/local_installers/cuda_11.3.1_465.19.01_linux.run
sudo sh cuda_11.3.1_465.19.01_linux.run

历史版本下载汇总页面
在这里插入图片描述

CUDNN下载

CUDNN下载需要注册Nvidia账户。
Download cuDNN v8.8.0 (February 7th, 2023), for CUDA 11.x

解压指令:
tar -xvf cudnn-linux-x86_64-8.8.0.121_cuda11-archive.tar.xz

如需其它版本,自行下载对应库:
历史版本下载

解压后复制到CUDA对应目录

sudo apt-get install gcc-9 g++-9sudo ln -s /usr/local/cuda-11.3 cuda
sudo rsync -av /bing_ws/opencv_with_cuda/cudnn/cuda/lib64/* /usr/local/cuda-11.3/lib64/
sudo rsync -av /bing_ws/opencv_with_cuda/cudnn/cuda/include/* /usr/local/cuda-11.3/include/

NVIDIA显卡计算能力一览表
https://developer.nvidia.com/cuda-gpus

在这里插入图片描述

编译

compaile opencv 4.5.4

cmake -S ../opencv -B . \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CONFIGURATION_TYPES=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local/opencv \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DOPENCV_EXTRA_MODULES_PATH=/bing_ws/opencv_with_cuda/opencv_contrib-4.5.4/modules \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TEST=OFF \
-DBUILD_opencv_world=ON \
-DOPENCV_ENABLE_NONFREE=ON \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=ON \
-DWITH_EIGEN=ON \
-DWITH_OPENGL=OFF \
-DCMAKE_LIBRARY_PATH=/usr/local/cuda-11.3/lib64/stubs \
-DWITH_CUDA=ON \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-11.3 \
-DOPENCV_DNN_CUDA=ON \
-DWITH_CUBLAS=ON \
-DWITH_CUDNN=ON \
-DCUDA_FAST_MATH=ON \
-DENABLE_FAST_MATH=ON \
-DCUDA_ARCH_BIN=5.2;6.1;7.5;8.6 \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DWITH_VTK=ON \
-DWITH_GTK=ON \
-DBUILD_JAVA=OFF# 暂时不用,只需上述配置参数
-DCUDA_GENERATION=Auto \
-DCUDA_nppicom_LIBRARY=stdc++ \
-DWITH_GSTREAMER=ON \
-DVIDEOIO_PLUGIN_LIST=gstreamer \

compaile opencv 4.6.0

cmake -S ../opencv-4.6.0 -B . \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CONFIGURATION_TYPES=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local/opencv \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DOPENCV_EXTRA_MODULES_PATH=/bing_ws/opencv_with_cuda/opencv_460/opencv_contrib-4.6.0/modules \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TEST=OFF \
-DBUILD_opencv_world=ON \
-DOPENCV_ENABLE_NONFREE=ON \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=ON \
-DWITH_EIGEN=ON \
-DWITH_OPENGL=OFF \
-DCMAKE_LIBRARY_PATH=/usr/local/cuda-11.3/lib64/stubs \
-DWITH_CUDA=ON \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-11.3 \
-DOPENCV_DNN_CUDA=ON \
-DWITH_CUBLAS=ON \
-DWITH_CUDNN=ON \
-DCUDA_FAST_MATH=ON \
-DENABLE_FAST_MATH=ON \
-DCUDA_ARCH_BIN=5.2;6.1;7.5;8.6 \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DWITH_VTK=ON \
-DWITH_GTK=ON \
-DBUILD_JAVA=OFF# 暂时不用,只需上述配置参数
-DCUDA_GENERATION=Auto \
-DCUDA_nppicom_LIBRARY=stdc++ \
-DWITH_GSTREAMER=ON \
-DVIDEOIO_PLUGIN_LIST=gstreamer \

install necessary lib

sudo apt install libgtk2.0-dev libgtk-3-dev
export PATH=${PATH}:/usr/local/cuda/bin
export C_INCLUDE_PATH=${C_INCLUDE_PATH}:/usr/local/cuda/include
export CPLUS_INCLUDE_PATH=${CPLUS_INCLUDE_PATH}:/usr/local/cuda/include
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda/lib64
export LIBRARY_PATH=${LIBRARY_PATH}:/usr/local/cuda/lib64vim /etc/ld.so.conf
# add lib
/usr/local/cuda/lib64./predict --image ./images --model ./models/yolov5m-seg.onnx

错误异常

运行程序报错(-217:Gpu API call) cuDNN did not return a suitable algorithm for convolution.
原始错误如下所示:

[ WARN:0@0.317] global /bing_ws/opencv_with_cuda/opencv_460/opencv-4.6.0/modules/dnn/src/op_cuda.cpp (34) initCUDABackend The selected CUDA device does not support FP16 target; switching to FP32 target.
terminate called after throwing an instance of 'cv::Exception'what():  OpenCV(4.6.0) /bing_ws/opencv_with_cuda/opencv_460/opencv-4.6.0/modules/dnn/src/layers/../cuda4dnn/primitives/../csl/cudnn/convolution.hpp:303: error: (-217:Gpu API call) cuDNN did not return a suitable algorithm for convolution. in function 'ConvolutionAlgorithm'

  1. NVIDIA CUDA Toolkit Release Notes ↩︎

  2. CUDA Toolkit 11.3 Update 1 Downloads ↩︎


http://www.ppmy.cn/news/32561.html

相关文章

【码字必看】一篇文章带你轻松上手MarkDown

文章目录🍬前言😮什么是MarkDown🧐为什么要学习MarkDown🔑使用MarkDown的工具📚MarkDown基础语法🥝标题🥥字体(斜体、粗体、粗斜体)🍇各种线(分割…

【动态规划】不同路径,编辑距离题解及代码实现

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…

SpringBoot整合RabbitMQ,包含:初始化定义队列,消息发送,消息接收 --柚子真好吃

一、搭建RabbitMq服务并创建账号 服务采用Docker临时搭建,版本采用3.8,命令如下 拉取镜像 docker pull rabbitmq:3.8.34-management创建容器 由于我使用的是 Docker Desktop 可通过可视化界面创建容器,将端口对应好即可,如下图&…

Opencv项目实战:22 物体颜色识别并框选

目录 0、项目介绍 1、效果展示 2、项目搭建 3、项目代码展示与部分讲解 Color_trackbar.py bgr_detector.py test.py 4、项目资源 5、项目总结 0、项目介绍 本次项目要完成的是对物体颜色的识别并框选,有如下功能: (1)…

JavaWeb学习-JSP

JSP作用 JSP全称为Java Server Pages即Java服务器页面,主要作用是代替Servlet程序回传HTML页面的数据,因为Servlet程序回传HTML页面数据非常繁琐,开发成本和维护成本较高。 package com.pero.jsp.jsp_javaweb;import jakarta.servlet.*; im…

C++模拟实现红黑树

目录 介绍----什么是红黑树 甲鱼的臀部----规定 分析思考 绘图解析代码实现 节点部分 插入部分分步解析 ●父亲在祖父的左,叔叔在祖父的右: ●父亲在祖父的右,叔叔在祖父的左: 测试部分 整体代码 介绍----什么是红黑树 红…

IDEA安装JRebel实现热部署,自动reload和recompile

利用JRebel插件实现代码及时编译功能,帮助我们在开发过程中节省项目重启时间,提高开发效率。JRebel插件实现及时编译,帮助我们在开发过程中节省项目重启时间,提高开发效率。一、安装插件安装流程:1.下载安装JRebel插件…

好记性不如烂笔头(2)

概述:用来记录一些小技巧。 1.查看MyBatis执行的sql 类:org.apache.ibatis.mapping.MappedStatement方法:getBoundSql(Object parameterObject)在IDEA的Evaluate Expression查看sql:boundSql.getSql() 2.maven仓库地址为https&…