Linux 35.6 + JetPack v5.1.4之RTP实时视频Python框架

news2024/12/26 18:47:45

Linux 35.6 + JetPack v5.1.4之RTP实时视频Python框架

  • 1. 源由
  • 2. 思路
  • 3. 方法论
    • 3.1 扩展思考 - 慎谋而后定
    • 3.2 扩展思考 - 拒绝拖延或犹豫
    • 3.3 扩展思考 - 哲学思考
    • 3.4 逻辑实操 - 方法论
  • 4 准备
  • 5. 分析
    • 5.1 gst-launch-1.0
      • 5.1.1 xvimagesink
      • 5.1.2 nv3dsink
      • 5.1.3 nv3dsink + sync=0
      • 5.1.4 xvimagesink + sync=0
    • 5.2 python framework
      • 5.2.1 xvimagesink
      • 5.2.2 nv3dsink
      • 5.2.3 xvimagesink + sync=0
      • 5.2.4 nv3dsink + sync=0
  • 6. 总结 & 优化
  • 7. 补充 - RTP/RTSP推/拉流

1. 源由

鉴于目前 DeepStream 的代码没有基于RTP实时视频流分析的 Python Demo 代码,但是是有RTSP的示例。

  • DeepStream 示例代码
ApplicationDescription
deepstream-test14-class object detection pipeline - now also demonstrates support for new nvstreammux
deepstream-test24-class object detection, tracking, and attribute classification pipeline
deepstream-test3Multi-stream pipeline performing 4-class object detection - now also supports Triton inference server, no-display mode, file-loop, and silent mode
deepstream-test4msgbroker for sending analytics results to the cloud
deepstream-imagedata-multistreamMulti-stream pipeline with access to image buffers
deepstream-ssd-parserSSD model inference via Triton server with output parsing in Python
deepstream-test1-usbcamdeepstream-test1 pipeline with USB camera input
deepstream-test1-rtsp-outdeepstream-test1 pipeline with RTSP output
deepstream-opticalflowOptical flow and visualization pipeline with flow vectors returned in NumPy array
deepstream-segmentationSegmentation and visualization pipeline with segmentation mask returned in NumPy array
deepstream-nvdsanalyticsMultistream pipeline with analytics plugin
runtime_source_add_deleteAdd/delete source streams at runtime
deepstream-imagedata-multistream-redactionMulti-stream pipeline with face detection and redaction
deepstream-rtsp-in-rtsp-outMulti-stream pipeline with RTSP input/output - now takes new command line argument “–rtsp-ts” for configuring the RTSP source to attach the timestamp rather than the streammux
deepstream-preprocess-testMulti-stream pipeline using nvdspreprocess plugin with custom ROIs
deepstream-demux-multi-in-multi-outMulti-stream pipeline using nvstreamdemux plugin to generate separate buffer outputs
deepstream-imagedata-multistream-cupyAccess imagedata buffer from GPU in a multistream source as CuPy array - x86 only
deepstream-segmaskAccess and interpret segmentation mask information from NvOSD_MaskParams
deepstream-custom-binding-testDemonstrate usage of NvDsUserMeta for attaching custom data structure - see also the Custom User Meta Guide

2. 思路

为此,计划先写一个基于RTP视频流的框架,然后从RTSP示例中移植 DeepStream代码。

通常需要思考以下基本问题:

  • Why (为什么)
  • When (何时)
  • What (什么)
  • Who (谁)
  • Where (哪里)
  • How (如何)

上述基本问题,拍脑袋一想:

  1. 从逻辑上应该是通的,因为RTSP其实就是RTP上的控制信息,理论上GST就是支持RTP;// Why (为什么)
  2. 实际上官方为什么这么基础的示例没有,目前论坛上也有人问,但是似乎也没有找到;// Where (哪里)
  3. 别人为什么没有做,大概是哪些人会要做这个;// What (什么) Who (谁)
  4. 是不是太简单了?不值得做?hello world也很简单,但是也有很多示例就是这种 // How (如何)

从底层逻辑思维去想这个问题,可能大家就不能想象一个问题:性能

注:当初并没有想到这个问题点,但是随着一步一步的深入分析和理解,感觉主要是由于RTP带来后续一系列的问题,尤其是性能方面。

3. 方法论

“谋而后动,不是不动”的俗语提醒我们:

  1. 做事要有计划,不要盲目行动。
  2. 计划的目的是为了更好地行动,而不是让行动停滞。
  3. 行动中要灵活调整,避免纸上谈兵。

这句话体现了一种高效的处事智慧:思考为行动铺路,行动为思考赋能,最终实现知行合一。

3.1 扩展思考 - 慎谋而后定

核心意思:行动前要进行充分的思考和计划,但“谋”并非拖延,而是为了行动提供更好的方向。

示例:
一个企业在推出新产品前,进行市场调研和风险分析,是“谋”;调研完成后,果断投入资源推广,是“后动”。

3.2 扩展思考 - 拒绝拖延或犹豫

核心意思:谋划的目的是为了更好的行动,而不是找借口拖延行动。

示例:
在学习和工作中,设定目标后过于纠结细节而迟迟不开始,实际上是一种拖延心态。

3.3 扩展思考 - 哲学思考

核心意思:谋划是智慧的体现,行动是实践的体现,二者统一于“知行合一”。

真正的成功,不仅需要思想上的高度,还需要行动上的落实。“谋而后动”强调思考的重要性,但同时否定“以思代行”。

3.4 逻辑实操 - 方法论

逻辑思路很简单,会想会说的人很多,但是要能够真正落地,需要实操的方法论来保证。

评价工程师技术能力,并不是过去的经验、成就。因为能力不是过去式,而是潜在的将来式。

如何从方法论角度确保能力的体现,最重要的几个大步骤:

  • 会想
  • 会说
  • 会写
  • 会做
  • 总结
  • 优化 //这个就是继续回归到“会想”,循环螺旋式上升高度

4 准备

注:关于环境安装,就不多说了,想了解的,请参阅:Linux 35.6 + JetPack v5.1.4@DeepStream安装

准备工作主要是测试数据+验证代码+测试方法+测试环境,没有这些东西,上来就喊是没有人理你的。因此,主要准备以下内容:

  1. video-viewer 命令及参数
  2. gst-launch-1.0 命令及参数
  3. python RTP 框架测试代码
  4. 依据上述命令和测试代码进行测试,整理测试结果

然后,专业的事情找专业的人:

  • Request python deepstream demo based on RTP video feed

搜索找不到,不代表没有,看看能否通过技术支持找到一些有用信息。

  • Is it correct that DeepStream Python bindings cannot be used to analyze RTP video streams?

如果没有,是否技术上存在难点?或者暂时无法搞清楚的一些背景原因。

  • Gst-launch-1.0 only get 15FPS on jetson orin?

测试下来效果并不理想,为什么?通过数据、示例代码,与技术人员互动,寻找解决方案,远比坐井观天来的实在。

  • DeepStream 1.1.8 demo app deepstream-test1 failed

后续集成或者PortingDeepStream代码。

环境配置如下:

Software part of jetson-stats 4.2.12 - (c) 2024, Raffaello Bonghi
Model: NVIDIA Orin Nano Developer Kit - Jetpack 5.1.4 [L4T 35.6.0]
NV Power Mode[0]: 15W
Serial Number: [XXX Show with: jetson_release -s XXX]
Hardware:
 - P-Number: p3767-0005
 - Module: NVIDIA Jetson Orin Nano (Developer kit)
Platform:
 - Distribution: Ubuntu 20.04 focal
 - Release: 5.10.216-tegra
jtop:
 - Version: 4.2.12
 - Service: Active
Libraries:
 - CUDA: 11.4.315
 - cuDNN: 8.6.0.166
 - TensorRT: 8.5.2.2
 - VPI: 2.4.8
 - OpenCV: 4.9.0 - with CUDA: YES
DeepStream C/C++ SDK version: 6.3

Python Environment:
Python 3.8.10
    GStreamer:                   YES (1.16.3)
  NVIDIA CUDA:                   YES (ver 11.4, CUFFT CUBLAS FAST_MATH)
        OpenCV version: 4.9.0  CUDA True
          YOLO version: 8.3.33
         Torch version: 2.1.0a0+41361538.nv23.06
   Torchvision version: 0.16.1+fdea156
DeepStream SDK version: 1.1.8

5. 分析

  • 个人长期工作在0~1的过程,换句话说就是从不知道到知道的过程。
  • 在实际工作中,一开始的思路会相对来说发散(但是基于假设场景的有限发散),这句话很拗口,仔细体会。
  • 通常随着逐步深入和细化,问题将会呈现收敛。
  • 随之形成局部或者部分结论,此时,Root cause逐步呈现。

鉴于video-viewer工具在1080P@60Hz的RTP源上稳定获得60FPS的视频流,从逻辑角度以下两条线都应该呈现该性能。

5.1 gst-launch-1.0

关于这个gst-launch-1.0命令和参数,网上搜,自己慢慢的积累,多了就知道大概了,然后要孜孜不倦的问问题,呵呵!

  • xvimagesink 软的
  • nv3dsink 有硬件加速
  • sync=0 即时处理 // NVIDIA论坛上,专家反馈。不是“砖家”,大家懂得!!!

5.1.1 xvimagesink

gst-launch-1.0 -v udpsrc port=5600 ! application/x-rtp,encoding-name=H265,payload=96 ! rtph265depay ! h265parse ! nvv4l2decoder ! nvvidconv ! fpsdisplaysink text-overlay=0 video-sink=xvimagesink

/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 9, dropped: 6, fps: 7.35, drop rate: 5.51
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 11, dropped: 10, fps: 3.86, drop rate: 7.73
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 19, dropped: 11, fps: 15.00, drop rate: 1.87
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 23, dropped: 15, fps: 7.61, drop rate: 7.61
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 30, dropped: 17, fps: 11.30, drop rate: 3.23
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 34, dropped: 20, fps: 6.83, drop rate: 5.13

5.1.2 nv3dsink

gst-launch-1.0 -v udpsrc port=5600 ! application/x-rtp,encoding-name=H265,payload=96 ! rtph265depay ! h265parse ! nvv4l2decoder ! fpsdisplaysink text-overlay=0 video-sink=nv3dsink

/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 13, dropped: 6, fps: 18.44, drop rate: 1.84
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 17, dropped: 9, fps: 7.88, drop rate: 5.91
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 25, dropped: 10, fps: 15.16, drop rate: 1.90
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 29, dropped: 14, fps: 7.83, drop rate: 7.83
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 35, dropped: 17, fps: 11.38, drop rate: 5.69
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 42, dropped: 20, fps: 12.73, drop rate: 5.45

5.1.3 nv3dsink + sync=0

gst-launch-1.0 -v udpsrc port=5600 ! application/x-rtp,encoding-name=H265,payload=96 ! rtph265depay ! h265parse ! nvv4l2decoder ! fpsdisplaysink text-overlay=0 video-sink=nv3dsink sync=0

/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 30, dropped: 0, current: 59.51, average: 59.51
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 61, dropped: 0, current: 60.00, average: 59.76
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 91, dropped: 0, current: 59.70, average: 59.74

5.1.4 xvimagesink + sync=0

gst-launch-1.0 -v udpsrc port=5600 ! application/x-rtp,encoding-name=H265,payload=96 ! rtph265depay ! h265parse ! nvv4l2decoder ! nvvidconv ! fpsdisplaysink text-overlay=0 video-sink=xvimagesink sync=0

/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 70, dropped: 0, current: 67.39, average: 69.26
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 100, dropped: 0, current: 59.61, average: 66.05
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 129, dropped: 0, current: 57.52, average: 63.92

5.2 python framework

Python其实是通过中间GST-Python --> PyBindings --> Data流程获取的数据,从pipline的角度,其实和gst-launch-1.0没什么差别。关于这个GST-Python和相关底层库和Python组件安装,详见:Linux 35.6 + JetPack v5.1.4@DeepStream安装

在这里插入图片描述

5.2.1 xvimagesink

源代码:python xvimagesink

性能: ~15FPS

5.2.2 nv3dsink

源代码:python nv3dsink

性能: ~20FPS

5.2.3 xvimagesink + sync=0

daniel@daniel-nvidia:~/Work/jetson-fpv$ python3 ./utils/deepstream_xvimagesink.py 5600
Selected Pipeline: udpsrc port=5600 ! application/x-rtp,encoding-name=H265,payload=96 ! rtph265depay ! h265parse ! nvv4l2decoder ! nvvidconv ! xvimagesink sync=0
Pipeline elements:
- capsfilter0
- xvimagesink0
- nvvconv0
- nvv4l2decoder0
- h265parse0
- rtph265depay0
- udpsrc0
Opening in BLOCKING MODE
Running...
NvMMLiteOpen : Block : BlockType = 279
NvMMLiteBlockCreate : Block : BlockType = 279
FPS: 36.96
FPS: 58.96
FPS: 59.95
FPS: 59.93
FPS: 59.93
FPS: 60.98
FPS: 58.94
FPS: 59.93
FPS: 60.94
^CExiting...
deepstream done!

5.2.4 nv3dsink + sync=0

daniel@daniel-nvidia:~/Work/jetson-fpv$ python3 ./utils/deepstream.py 5600
Selected Pipeline: udpsrc port=5600 buffer-size=8388608 ! application/x-rtp,encoding-name=H265,payload=96 ! rtph265depay ! h265parse ! nvv4l2decoder ! nv3dsink name=sink sync=0
Opening in BLOCKING MODE
Running...
NvMMLiteOpen : Block : BlockType = 279
NvMMLiteBlockCreate : Block : BlockType = 279
FPS: 17.03
FPS: 59.95
FPS: 59.94
FPS: 59.93
FPS: 59.93
FPS: 59.96
FPS: 59.98
^CExiting...
deepstream done!

6. 总结 & 优化

通过一个简单的RTP实时视频Python框架遇到的问题,以及通过方法论来解决问题,大致的思路和步骤,做一个简单的整理。

其实工程问题远比科学问题简单,因为工程问题通常是有结论的。而科学问题,有时候会走到死胡同的。只要学会方法论,通过底层逻辑就能快速的解决工程技术问题。


优化的代码版本,稳定获取FPS 60Hz的数据,这个与我们在video-viewer上看到的一致。

基于这个版本,我们去做DeepStream算法才是有意义的,否则源头上就FPS存在问题。

源代码:python nv3dsink + sync=0

7. 补充 - RTP/RTSP推/拉流

因为,很多DEMO都是RTSP的,所以这里给下几个常用命令:

注:笔者有一个1080P@60FPS的设备可以稳定输出各种编码和分辨率以及帧率的视频;没有这种视频源的朋友,可能需要一些模拟源,就可能用到下面的命令。

  • RTSP推/拉流
gst-launch-1.0 -v videotestsrc ! x264enc ! rtph264pay ! udpsink host=<IP_ADDRESS> port=5000
gst-launch-1.0 -v rtspsrc location=rtsp://<RTSP_SERVER_IP>:<PORT>/stream ! decodebin ! autovideosink
  • RTP推/拉流
gst-launch-1.0 -v videotestsrc ! x264enc ! rtph264pay ! udpsink host=<IP_ADDRESS> port=5000
gst-launch-1.0 -v udpsrc port=5000 ! application/x-rtp,media=video,encoding-name=H264,payload=96 ! rtph264depay ! decodebin ! autovideosink
  • 循环播放指定文件

在Jetson Orin板子上,可以用以下工具,非常简单的循环播放一个视频来做测试:

$ video-viewer file:///$(pwd)/<your video file> rtp://127.0.0.1:5000 --input-loop=-1 --headless  --ouput-codec=h265
$ video-viewer rtp://@:5000

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2254069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GIt (一) Git的安装,项目搭建,远程仓库,分支

文章目录 一、 版本控制1.1 集中式版本控制1.2 分布式版本控制 二、 Git的安装及配置2.1 安装2.2 Git的配置2.2 查看配置 三、 Git基本理论3.1 工作区域3.2 文件状态 四、Git项目的搭建与操作4.1 初始化Git仓库4.2 常见的操作4.2.1 文件添加到暂存区4.2.2 文件提交更新4.2.3 查…

iview upload clearFiles清除回显视图

iview upload 上传完文件之后清除内容&#xff0c;打开会回显视图&#xff0c;清除不掉 关闭弹框时主动清除回显内容即可this.$refs.uploads.clearFiles() <FormItem label"上传附件:" :label-width"formNameWidth"><Upload action"/fms/ap…

JAVA |日常开发中Servlet详解

JAVA &#xff5c;日常开发中Servlet详解 前言一、Servlet 概述1.1 定义1.2 历史背景 二、Servlet 的生命周期2.1 加载和实例化2.2 初始化&#xff08;init 方法&#xff09;2.3 服务&#xff08;service 方法&#xff09;2.4 销毁&#xff08;destroy 方法&#xff09; 三、Se…

【C++】入门【六】

本节目标 一、继承的概念及定义 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形继承及菱形虚拟继承 八、继承的总结和反思 九、笔试面试题 一、继承的概念及定义 1.继承的概念 继承是面向对象…

Docker--Docker Image(镜像)

什么是Docker Image&#xff1f; Docker镜像&#xff08;Docker Image&#xff09;是Docker容器技术的核心组件之一&#xff0c;它包含了运行应用程序所需的所有依赖、库、代码、运行时环境以及配置文件等。 简单来说&#xff0c;Docker镜像是一个轻量级、可执行的软件包&…

架构05-架构安全性

零、文章目录 架构05-架构安全性 1、软件架构安全的重要性 **系统安全&#xff1a;**不仅包括防御黑客攻击&#xff0c;还包括安全备份与恢复、安全审计、防治病毒等。**关注重点&#xff1a;**认证、授权、凭证、保密、传输安全、验证。 2、认证&#xff08;Authenticatio…

elasticsearch-如何给文档新增/更新的字段

文章目录 前言elasticsearch-如何给文档新增/更新的字段1. 如何给某些文档新增/更新的字段2. 给所有文档添加/更新一个新的字段3. 测试 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且…

Ansible自动化一键部署单节点集群架构

自动化部署利器&#xff1a;Ansible 一键部署脚本 在现代IT基础设施管理中&#xff0c;Ansible以其简洁、强大的自动化能力脱颖而出。以下是精心打造的Ansible自动化一键部署脚本&#xff0c;旨在简化部署流程&#xff0c;提升效率&#xff0c;确保一致性和可靠性。 通过这个…

常见Linux命令(详解)

文章目录 常见Linux命令文件目录类命令pwd 打印当前目录的绝对路径ls 列出目录内容cd 切换路径mkdir 建立目录rmdir 删除目录touch 创建空文件cp 复制文件或目录rm 移除文件或者目录mv 移动文件与目录或重命名cat 查看文件内容more 文件分屏查看器less 分屏显示文件内容head 显…

数据库复习记录

边复习边整理。 数据库 数据库管理系统&#xff08;DBMS&#xff09;&#xff1a;用来管理数据库的系统。 关系型数据库&#xff1a;二维表格&#xff08;即关系&#xff09;来存储数据&#xff0c;一个表对应一个关系&#xff0c;用SQL来查询数据。如MySQL、PostgreSQL、SQ…

Navicat连接SQL Server及SpringBoot连接SQL Server(jtds)

Navicat连接SQL Server 安装自带的SQL Server客户端 去到Navicat安装目录&#xff0c;找到安装程序&#xff0c;安装即可。 安装对应版本的Microsoft ODBC Driver for SQL Server 打开Navicat输入对应的SQL Server相关信息 然后点测试连接&#xff0c;提示连接成功。 Spr…

数字图像处理(15):图像灰度反转和彩色反转

&#xff08;1&#xff09;图像反转&#xff1a;是指对图像的颜色信息进行相反的处理&#xff0c;从而得到一个新的图像。在计算机视觉和图像处理领域&#xff0c;图像反转是一种常见的操作&#xff0c;它可以帮助我们实现不同的图像特效和视觉效果。 &#xff08;2&#xff09…

Linux——基础命令(3)

1.Linux——基础命令&#xff08;1&#xff09;-CSDN博客 2.Linux——基础命令&#xff08;2&#xff09; 文件内容操作-CSDN博客 一、打包压缩 打包压缩 是日常工作中备份文件的一种方式 在不同操作系统中&#xff0c;常用的打包压缩方式是不同的选项 含义 Windows 常用 rar…

【力扣热题100】—— Day4.回文链表

正视自己的懦弱和无能&#xff0c;克服自己的嫉妒与不甘 —— 24.12.3 234. 回文链表 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为 回文链表 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a…

python源码实例游戏开发小程序办公自动化网络爬虫项目开发源码(250+个项目、26.6GB)

文章目录 源代码下载地址项目介绍预览 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 python源码实例游戏开发小程序办公自动化网络爬虫项目开发源码(250个项目、26.6GB) 预览 项目备注 1、该资源内项目代码都经过测试运行成功&#xff0c;功能ok的情…

AI与BI的火花:大语言模型如何重塑商业智能的未来

大家好&#xff0c;我是独孤风。 在当今这个数据驱动的时代&#xff0c;企业对于信息的需求如同对于氧气的需求一般至关重要。商业智能&#xff08;BI&#xff09;作为企业获取、分析和呈现数据的关键工具&#xff0c;正在经历一场深刻的变革&#xff0c;而这一变革的催化剂正是…

Pyside6 --Qt设计师--简单了解各个控件的作用之:Layouts,Spaces

目录 一、Layouts1.1 Vertical Layout说明1.1.1 Qt设计师图1.1.2 py代码 1.2 Horizontal Layout说明1.2.1 Qt设计师图1.2.2 py代码 1.3 Grid Layout说明1.3.1 Qt设计师图1.3.2 py代码 1.4 Form Layout说明1.4.1 Qt设计师图1.4.2 py代码 二、Spaces&#xff08;空格&#xff09;…

Multimodal Few-Shot Learning with Frozen Language Models译文

摘要 当经过足够规模的训练时&#xff0c;自动回归语言模型在只需要几个例子的提示下就能表现出学习新语言任务的显著能力。在这里&#xff0c;我们提出了一种简单而有效的方法&#xff0c;将这种少量学习能力转移到多模态环境&#xff08;视觉和语言&#xff09;。使用对齐的图…

电脑显示没信号显示屏不亮怎么办?电脑没信号解决方法

电脑没信号显示屏不亮这种故障的原因可能有多种&#xff0c;例如显示器的供电、连接、设置等问题&#xff0c;或者电脑的显卡、内存、硬盘、主板等硬件问题。所以我们想要解决这个问题&#xff0c;也是需要多方面排除找到具体原因然后进行修复。下面将为大家介绍一些常见的电脑…

docker中可视化rviz

docker中可视化rviz 背景1. 确定适合的 NVIDIA 驱动版本2. 检查 NVIDIA Container Toolkit 安装2.1 安装 NVIDIA Container Toolkit配置 NVIDIA Runtime重启 Docker验证 NVIDIA Docker 支持验证 OpenGL 和图形支持测试 GUI 应用验证 OpenGLlio_sam_rviz-9] process has died确认…