(二)SpireCV 助力在ArduPilot上快速实现二维码检测等视觉功能!内附超详细教程,干货满满
以下文章来源于CSDN开发者社区
作者:干了这碗汤
原文链接:
https://blog.csdn.net/weixin_43321489/article/details/134703965?spm=1001.2014.3001.5502
由于本文篇幅过长,故分为了两部分,此篇为第二部分。第一部分见链接:
SpireCV 助力在ArduPilot上快速实现二维码检测等视觉功能!内附超详细教程,干货满满
6. wsl2-Ubuntu20.04安装cuda、cuDNN、tensorRT
参考资料:
https://blog.csdn.net/JineD/article/details/131201121
https://blog.csdn.net/qq_43515934/article/details/123897435
https://zhuanlan.zhihu.com/p/615053337
https://blog.csdn.net/weixin_45628358/article/details/130408132
CUDA Toolkit Documentation
https://docs.nvidia.com/cuda/
CUDA on WSL User Guide
https://docs.nvidia.com/cuda/wsl-user-guide/
NVIDIA cuDNN Documentation
https://docs.nvidia.com/deeplearning/cudnn/developer-guide/index.html
NVIDIA Deep Learning TensorRT Documentation
https://docs.nvidia.com/deeplearning/tensorrt/
NVIDIA TensorRT Documentation
https://docs.nvidia.com/tensorrt/index.html
阿木实验室SpireCV安装脚本
https://blog.csdn.net/weixin_43321489/article/details/135990807
6.1 一些概念
参考文献
https://docs.nvidia.com/cuda/wsl-user-guide/index.html
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#
WSL2支持访问GPU以实现程序从GPU加速计算中受益。
WSL2支持的NVIDIA软件包括这些:
1.NVIDIA Windows Driver x86(即windows显卡驱动)
2.CUDA Toolkit and CUDA Developer Tools(即cuda SDK)
3.其他:NVIDIA Compute Software Support on WSL 2
只要Windows中安装好了NVIDIA显卡驱动,在wsl2中可以直接使用该驱动,最新的NVIDIA Windows GPU驱动程序将完全支持WSL2,所以不要为wsl2安装任何的NVIDIA显卡驱动,以造成覆盖问题!
要编译CUDA应用程序,还需要在wsl2-ubuntu中安装CUDA Toolkit、Cudnn(可选)。
CUDA:CUDA是NVIDIA®发明的一种并行计算平台和编程模型。通过利用图形处理单元(GPU)的强大功能,它能够显著提高计算性能。
cuDNN:是由NVIDIA开发的一个深度学习GPU加速库,用来加速深度学习框架(例如TensorFlow、PyTorch)在NVIDIA GPU上的运算。
TensorRT:TensorRT是NVIDIA家的一款高性能深度学习推理SDK。此SDK包含深度学习推理优化器和运行环境,可为深度学习推理应用提供低延迟和高吞吐量。在推理过程中,基于TensorRT的应用程序比仅仅使用CPU作为平台的应用程序要快40倍。
Cuda版本切换:如果机器上安装了多个版本的cuda,则会在/usr/local/中存在多个cuda-xx的文件夹,如下:
其中/usr/local/cuda文件夹是个软链接,链接到目前的cuda版本目录,所以如果要切换版本的话,只需要将原来cuda软链删除,重新建立指向另一个cuda-xx目录即可。
安装cuda的系统要求、硬件条件、编程语言要求、内核要求等、系统版本要求、编译器版本要求请查阅:Pre-installation Actions (CUDA Installation Guide for Linux (nvidia.com))
GPG、GPG public key:GPG(GNU Privacy Guard)是一个用于加密、签名和验证文件的开源加密工具。它可以帮助用户保护他们的数据免受未经授权的访问和篡改。您可以使用GPG来加密和签名电子邮件、文件和文本消息,以确保它们的安全性和完整性。
6.2 安装 CUDA Toolkit
0)安装前的准备工作
确认PC的GPU使用可以使用CUDA:lspci | grep -i nvidia(wsl中不显示?)
确认Ubuntu版本是否兼容CUDA
确认是否安装了gcc:gcc —version
确认系统安装了正确的Kernel Headers和开发包:uname -r
1)卸载WSL2中的显卡驱动
一旦在Windows 上安装了NVIDIA GPU驱动程序,CUDA就可以在WSL2中以libcuda.so的形式使用。因此,不要在WSL 2中安装任何NVIDIA显卡驱动,否则会造成驱动覆盖问题!假如安装了,要卸载掉并重启wsl2:
1| sudo apt-get remove --purge nvidia*
2| sudo reboot
2)卸载旧的 CUDA
卸载掉可能存在的旧 CUDA -Toolkit,以进行正确版本 CUDA 的安装:
1| sudo apt-get --purge remove "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" \
2| "*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*"
3| sudo apt-get autoremove
3)删除旧的 GPG key
GPG 秘钥用于从CUDA仓库中下载文件的身份认证!7fa2af80是旧的key,目前CUDA repository最新的key是3bf863cc,推荐使用cuda-keyring来安装最新的key:
1| sudo apt-key del 7fa2af80
4)选择合适自己PC显卡的 CUDA 版本
最合适当前显卡的cuda版本查看方法: nvidia-smi
也可以在windows中的NVIDIA控制面板中查看!
但是这个cuda版本不一定兼容应用程序编译环境,可能与应用程序调用的其他软件包互不兼容,所以要根据具体情况来选择cuda版本,选择依据有以下几个方面:
a. 要兼容当前安装的显卡驱动,查看当前安装的显卡驱动版本:nvidia-smi[]
b. 当前安装的显卡驱动支持哪些版本的cuda?
查看方法:
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#id3
注意:CUDA驱动程序是向后兼容的,例如:CUDA 11.6.x 要求显卡驱动版本 >= 450.80.02,假如你的显卡驱动版本是 536.67的话,那么你的显卡驱动同样可以兼容 CUDA 11.6.x.
c. 要选择与其他软件包互相兼容的cuda版本。例如:你的程序使用了TensorRT包,那么在选择CUDA 版本时要考虑与TensorRT的相互兼容,或在选择TensorRT版本时要考虑与CUDA 版本的相互兼容!
5)在 WSL-Ubuntu 中安装 CUDA-Toolkit5)在 WSL-Ubuntu 中安装 CUDA-Toolkit
安装Linux默认的CUDA-Toolkit时总是附带安装一个显卡驱动,因此不能使用这种方式给WSL2-Ubuntu安装CUDA-Toolkit。为了避免显卡驱动覆盖问题,应该使用下面的方式为WSL2-Ubuntu安装CUDA-Toolkit:
a. 从CUDA Toolkit Archive中选择一个合适的cuda版本,以cuda11.6为例:
b. 安装类型选择 wsl-ubuntu :
c. 在bash中执行安装命令(任选一种安装方式,推荐使用Network方式):
1| # Network 方式安装:
2| wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
3| sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
4| sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/7fa2af80.pub|
5| sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/ /"
6| sudo apt-get update
sudo apt-get -y install cuda
7| # Local方式安装:
8| wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
9| sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
10| wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda-repo-wsl-ubuntu-11-6-local_11.6.0-1_amd64.deb
11| sudo dpkg -i cuda-repo-wsl-ubuntu-11-6-local_11.6.0-1_amd64.deb
12| sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-6-local/7fa2af80.pub
13| sudo apt-get update
14| sudo apt-get -y install cuda
6)查看是否安装成功
最好先重启一下wsl。
1| dpkg -l cuda
2| #或
3| nvcc --version
7)安装完成可以删除掉.deb文件以释放存储空间
1| sudo rm cuda-repo-wsl-ubuntu-11-6-local_11.6.0-1_amd64.deb
CUDA默认安装路径为 /usr/local/cuda/
6.3 安装 cuDNN
0)准备工作
安装显卡驱动:在wsl2中不需要这步;
安装CUDA Toolkit:在上一节中已安装;
安装Zlib
1| sudo apt-get install zlib1g
1)下载和已安装的cuda相兼容的cuDNN安装文件:cuDNN Archive.
https://developer.nvidia.com/rdp/cudnn-archive
2)选择一个符合您环境的安装方法:
tar文件安装适用于所有Linux平台;Deb文件安装适用于Debian 11、Ubuntu 18.04、Ubuntu 20.04和22.04;RPM文件安装适用于RHEL7、RHEL8和RHEL9;包管理工具(如apt)安装方式,适合联网条件下安装。
3)以apt-get安装方式为例,为wsl2-Ubuntu安装 cuDNN v8.4.1:
sudo apt-get install libcudnn8=8.4.1.-1+cuda11.6
sudo apt-get install libcudnn8-dev=8.4.1.-1+cuda11.6
sudo apt-get install libcudnn8-samples=8.4.1.*-1+cuda11.6
4)验证安装是否成功
如果出现版本号则安装成功
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
参考文献
官网:
cuDNN installation Guide on Linux
https://docs.nvidia.com/deeplearning/cudnn/latest/installation/overview.html
博客:
https://blog.csdn.net/qq_43515934/article/details/123897435
6.4 安装TensorRT
1)下载
查看与已安装的CUDA Toolkit、cuDNN版本相互兼容的TensorRT版本,并下载安装文件,以deb安装方式为例。
2)安装tensorrt,以TensorRT 8.4 EA、cuda11.6.0、cuDNN8.4.1为例
1| sudo dpkg -i nv-tensorrt-repo-ubuntu2004-cuda11.6-trt8.4.0.6-ea-20220212_1-1_amd64.deb
3)添加第三方仓库秘钥
1| sudo apt-key add /var/nv-tensorrt-repo-ubuntu2004-cuda11.6-trt8.4.0.6-ea-20220212/*.pub
2| #或:
3| sudo cp /var/nv-tensorrt-repo-ubuntu2004-cuda11.6-trt8.4.0.6-ea-20220212/*.gpg /usr/share/keyrings/
4)更新软件源,要保证运行后无错误提示
1|sudo apt-get update
5)安装tensorrt的依赖
TensorRT 提供三种安装模式:完整安装、lean runtime 安装、dispatch runtime安装,根据具体需要来进行安装!了解更多请参考:TensorRT Documentation。以完整安装为例:
1| sudo apt-get install tensorrt -y`
`2| python3 -m pip install numpy`
`3| sudo apt-get install python3-libnvinfer-dev`
6)验证是否安装成功
`1| dpkg-query -W tensorrt`
显示如 tensorrt 8.6.1.x-1+cuda12.0 则表明安装成功!
7)安装完毕后可以删除安装文件 *.deb 以释放空间。
参考文献
NVIDIA Deep Learning TensorRT Documentation
(https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html)
阿木实验室SpireCV安装脚本:
(https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html)
6.5 卸载
卸载CUDA
1| # To remove CUDA Toolkit:
2| sudo apt-get --purge remove "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" \
3| "*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*" "*nvvm*"
4| # To remove NVIDIA Drivers:
5| sudo apt-get --purge remove "*nvidia*" "libxnvctrl*"
6| # To clean up the uninstall:
7| sudo apt-get autoremove
卸载cuDNN
1| sudo apt-get --purge remove "*cuDNN*"
2| sudo apt-get autoremove
卸载TensorRT
(https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html#uninstalling)
6.6 Troubleshooting
1)the public key is not available: NO_PUBKEY F60F4B3D7FA2AF80 Hit:4
(https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64 InRelease)
原因:key不正确!!
解决办法:找到该源,为它重新配置一个正确的key(无效的源就删掉!)
2)
W: GPG error: https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64 InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A4B469963BF863CC**
**E: The repository 'https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64 InRelease' is not signed.
原因:缺少公钥
解决办法:
https://blog.csdn.net/A15130402745/article/details/131643433
https://keyserver.ubuntu.com/
3)Version ‘8.4.1-1+cuda11.6’ for ‘libcudnn8’ was not found
解决办法:
sudo apt-get install libcudnn8=8.4.1.*-1+cuda11.6
4)安装libcudnn8-samples出现:
Version ‘8.4.1.*-1+cuda11.6’ for ‘libcudnn8-samples’ was not found
解决办法:
sudo apt-get install libcudnn8-samples
5)
Processing triggers for libc-bin (2.31-0ubuntu9.14) ... /sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link
在安装完cuda或tensorRT后出现该问题。
解决办法:重新建立软连接(https://blog.csdn.net/2301_79140115/article/details/135119785),它们正确的关系应该是:libcuda.so -> libcuda.so.1 -> libcuda.so.1.1。
步骤:
在windows Powershell中:
1| cd C:\Windows\System32\lxss\lib`
2| rm libcuda.so`
3| rm libcuda.so.1`
在wsl中:
1| cd /usr/lib/wsl/lib/`
2| ln -s libcuda.so.1.1 libcuda.so.1`
3| ln -s libcuda.so.1.1 libcuda.so`
6)export: bad variable name
待解决…
7. Nvidia 官网使用指南
1)开发者网页:https://developer.nvidia.cn/
cuda-toolkit (https://developer.nvidia.cn/cuda-toolkit)\
CUDA Toolkit Documentation
(https://docs.nvidia.com/cuda/)
CUDA on WSL User Guide
(https://docs.nvidia.com/cuda/wsl-user-guide/)
NVIDIA cuDNN (https://developer.nvidia.cn/cudnn)
NVIDIA cuDNN Documentation
(https://docs.nvidia.com/deeplearning/cudnn/developer-guide/index.html)
NVIDIA TensorRT (https://developer.nvidia.com/tensorrt)
NVIDIA Deep Learning TensorRT Documentation
(https://docs.nvidia.com/deeplearning/tensorrt/)
NVIDIA TensorRT Documentation
(https://docs.nvidia.com/tensorrt/index.html)
2)文档中心:https://docs.nvidia.cn/
如何找到NVIDIA TensorRT、NVIDIA CUDA、NVIDIA Jetson的文档所在 ?
手动:https://docs.nvidia.com ~> Products 或 All Documents ~> NVIDIA TensorRT.
通过搜索框搜索。
3)下载中心:
https://developer.nvidia.cn/downloads
英文版网页:
https://developer.nvidia.com/downloads
CUDA Toolkit Archive (https://developer.nvidia.com/cuda-toolkit-archive)
cuDNN Archive (https://developer.nvidia.com/rdp/cudnn-archive)
TensorRT Archives (https://docs.nvidia.com/deeplearning/tensorrt/archives/index.html)
NVIDIA TensorRT Download (https://developer.nvidia.com/tensorrt-download)
8. Gstreamer
官方文档:
GStreamer: a flexible, fast and multiplatform multimedia framework
https://gstreamer.freedesktop.org/documentation/index.html?gi-language=c
8.1 在Ubuntu上安装gstreamer
1| apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
8.2 一些概念
什么是视频流Stream
Playing media straight from the Internet without storing it locally is known as Streaming
GStreamer是一个用于处理多媒体流的框架。
媒体从- GStreamer是一个用于处理多媒体流的框架。媒体从“source”元素(媒体数据来源)传播到“sink”元素(媒体数据使用者),通过一系列执行各种任务的中间元素element。所有相互连接的元素的集合被称为“管道”pipeline。除了source元素和sink元素,其他元素统称为filter元素。
playbin是一个特殊的element
playbin它既是source元素,又是sink元素,是一个完整的管道。在内部,它会自动创建并连接了播放媒体所需的所有元素,因此您手动配置element。
bin是一个容器元素。
你可以将多个元素添加到bin中。由于bin本身就是一个元素,所以可以像处理其他元素一样处理bin,Bin允许您将一组已链接好的elements组合为一个logical element,这样你可以不再处理单个元素,只处理一个元素,即bin。我们将看到,当你要构建复杂的管道时,这是非常强大的,因为它可以将管道分解成更小的块。
8.3 解析
gst-launch-1.0是调试工具,一般在shell中使用;构建程序时候一般使用gst_parse_launch()函数;
一个特殊的element:playbin
playbin它既是source元素,又是sink元素,是一个完整的管道。在内部,它会自动创建并连接了播放媒体所需的所有元素,因此您手动配置element。playbin支持所有可以的媒体数据来源,包括本地文件file、http、https、rtsp流等等。例如:
自动配置一个完整的pipeline就使用playbin元素,那么如何手动配置一个完整的pipeline呢?通过实例化每个元素并将它们全部链接在一起,手动构建一个管道。通过这个过程可以了解以下知识点:
1)什么是GStreamer element以及如何创建它。
2)如何将element相互连接(link)。
3)如何自定义element的行为。
如何监视管道的错误情况并从GStreamer消息中提取信息。
pipeline的基本结构
example:
创建一个元素,如:
source = gst_element_factory_make (“videotestsrc”, “source”);
sink = gst_element_factory_make (“autovideosink”, “sink”);
第一个参数是 element 的类型, 一些常用的element类型:
basic-tutorial-14-handy-elements
(https://gstreamer.freedesktop.org/documentation/tutorials/basic/handy-elements.html)
所有可用的element:plugins
(https://gstreamer.freedesktop.org/documentation/plugins_doc.html#plugins)
第二个参数是element实例的名称;
pipeline是一个特殊的bin,所有适用于bin的用法都适用于pipeline
向pipeline添加element
逐个添加:gst_bin_add()
添加多个:gst_bin_add_many()
将pipeline中的所有element一次连接起来:gst_element_link()
element本质上是一个GObject(C++对象?),具有属性property;
对于可写属性,可以自定义这些property的值;
对于可读属性可以读取:
g_object_set() 如:g_object_set (source, “pattern”, 0, NULL);
g_object_get()
查看某元素的所有属性名称和值,可以使用调试工具:gst-inspect-1.0
或者在element的所属文档介绍中查看,如videotestsrc元素的文档doc_videotestsrc就可以查看它所有的属性。
(https://gstreamer.freedesktop.org/documentation/videotestsrc/index.html#videotestsrc-page)
bus、pad、capabilities、Buffers、Events
参考:Building an Application
(https://gstreamer.freedesktop.org/documentation/application-development/basics/index.html#building-an-application)
元素支持哪些媒体格式?元素的Pad Capabilities有什么作用?
Pad Capabilities简称pad caps;
简而言之:pad caps 是决定了哪些格式的媒体数据可以流经某element
pads 是根据Pad templates创建的,Pad templates有助于创建几个类似的pad,由相 同Pad templates创建的两个pad才可以链接 起来,不然后链接失败。
Capabilities examples:
如何将应用程序的数据注入管道?如何将数据从管道中提取回应用程序?
注入:appsrc
提取:appsink
GStreamer工具
GStreamer提供了一套工具,方便且绝对必要。
1)创建、调试管道:
gst-launch-1.0
(https://gstreamer.freedesktop.org/documentation/tools/gst-launch.html#gstlaunch10)
2)查看元素、pad、caps:
gst-inspect1.0
(https://gstreamer.freedesktop.org/documentation/tools/gst-inspect.html#gstinspect10)
3)查看某个文件、rtsp视频流、http文件包含哪些媒体类型,需要哪些元素,了解哪些容器和编解码器被用于制作媒体,以及需要在管道中放入哪些元素才能播放媒体:
gst-discoverer-1.0
(https://gstreamer.freedesktop.org/documentation/tutorials/basic/media-information-gathering.html#goal)
discoverer tool
(https://gstreamer.freedesktop.org/documentation/tutorials/basic/gstreamer-tools.html#gstdiscoverer10)
常用的element
handy-elements
(https://gstreamer.freedesktop.org/documentation/tutorials/basic/handy-elements.html#basic-tutorial-14-handy-elements)
待续…
原文链接:https://blog.csdn.net/weixin_43321489/article/details/134703965