win10下yolox tensorrt模型部署

news2024/11/18 21:52:41
  • TensorRT系列之 Win10下yolov8 tensorrt模型加速部署

  • TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署

  • TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署

  • TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署

  • TensorRT系列之 Linux下 yolov5 tensorrt模型加速部署

  • TensorRT系列之 Linux下 yolox tensorrt模型加速部署

  • TensorRT系列之 Linux下 u2net tensorrt模型加速部署

  • 更多(点我进去)…

    文章目录

    • 一、YOLOX简介
    • 二、Win10 TensorRT环境配置
      • 2.1 安装VS2019
      • 2.2 安装库
        • 2.2.1 安装Nvidia显卡驱动
        • 2.2.2 安装 cuda11.2
        • 2.2.3 安装 cudnn8.2.1
        • 2.2.4 下载 tensorrt8.4.2.4
        • 2.2.5 OpenCV4.5.5安装
      • 2.3 创建属性表
        • 2.3.1 创建OpenCV属性表
        • 2.3.2 创建TensorRT属性表
        • 2.3.3 创建CUDA属性表
        • 2.3.4 新建工程与设置
          • 2.3.4.1 新建vs工程
          • 2.3.4.2 vs2019工程设置
    • 三、从yolox源码中导出onnx文件
    • 四、利用tensorrt编译onnx模型
    • 五、编译执行yolox-tensorrt工程
    • 六、结束语

yolox tensorrt 部署效果

一、YOLOX简介

  • YOLOX是一种基于深度学习的目标检测算法,它的主要优点是速度快、精度高。相比其他目标检测算法,YOLOX在保持高精度的同时,能够实现更快的检测速度,这使得它在实际应用中具有很大的优势。
  • YOLOX的创新点主要体现在两个方面:SimOTA和PANet。SimOTA是一种基于Transformer的目标检测算法,它通过引入自注意力机制来提高模型的表达能力,从而提高了检测精度。PANet是一种金字塔注意力网络,它能够在不同的尺度上对目标进行检测,从而提高了模型的鲁棒性。
  • 在业内,YOLOX已经得到了广泛的认可和应用。例如,在Kaggle的车辆检测挑战赛中,YOLOX获得了第一名的好成绩。此外,YOLOX还在COCO数据集上取得了很好的性能表现。这些成果表明,YOLOX是一种非常优秀的目标检测算法,具有很高的实用价值和广泛的应用前景。
  • 从性能方面来看,YOLOX在速度和精度上都表现出色。在速度方面,YOLOX比其他一些主流的目标检测算法要快很多,这使得它在实时场景下的应用具有很大的优势。在精度方面,YOLOX与其他一些高精度的目标检测算法相当甚至更好。这些优点使得YOLOX成为了一种非常受欢迎的目标检测算法。
  • 总之,YOLOX是一种非常优秀的目标检测算法,它具有速度快、精度高、创新性强等优点。在业内已经得到了广泛的认可和应用,并且在性能方面表现出色。未来,随着深度学习技术的不断发展和完善,相信YOLOX将会在更多的领域发挥出更大的作用。

本文提供深度学习CV领域模型加速部署案例,仓库实现的cuda c支持多batch图像预处理、推理、decode、NMS。大部分模型转换流程为:torch->onnx->tensorrt。

有源码!有源码!有源码! 不要慌,哈哈哈。

在这里插入图片描述

二、Win10 TensorRT环境配置

三步解决win环境配置

  • 1、安装vs2019、Nvidia驱动、cuda,cudnn、opencv、tensorrt;
  • 2、创建属性表;
  • 3、工程设置,运行;
  • :一定是先安装vs2019,再安装cuda,顺序不能颠倒,因为cuda会自动给vs2019安装插件。
    问题:windows环境下,为什么使用vs2019属性表,而不用cmake?
    回答:因为属性表可以做到:一次创建,到处使用。

2.1 安装VS2019

需要Microsoft账号,如果您有别的途径下载安装也可以。

  • 进入:https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/
  • 选择:[2019] -> [下载]
  • 在新页面选择: Visual Studio Community 2019 (version 16.11)
  • 下载完成之后安装过程选择如下图:
    请添加图片描述
  • 重启系统

2.2 安装库

注:Nvidia相关网站需要注册账号。

2.2.1 安装Nvidia显卡驱动

  • 进入: https://www.nvidia.cn/Download/index.aspx?lang=cn#
  • 依据实际情况选择,如下图是我的选择(for RTX3070):
    请添加图片描述
  • 选择:[搜索]->[下载] ->[双击默认安装] -> [重启系统] -> [进入cmd],输入如下指令:
nvidia-smi

看到如下信息表明驱动正常:
请添加图片描述

2.2.2 安装 cuda11.2

  • 进入: https://developer.nvidia.com/cuda-toolkit-archive
  • 选择:CUDA Toolkit 11.2.0 (December 2020)
  • 选择:[Windows] -> [x86_64] -> [10] -> [exe(local)] -> [Download(2.9GB)]
  • 双击安装,重启在cmd窗口输入如下指令:
nvcc -V

CMD窗口打印如下信息表示cuda11.2安装正常

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Mon_Nov_30_19:15:10_Pacific_Standard_Time_2020
Cuda compilation tools, release 11.2, V11.2.67
Build cuda_11.2.r11.2/compiler.29373293_0

note:cuda11.2 不需要手动设置环境变量,如下图,环境变量都是自动设置的。
请添加图片描述

2.2.3 安装 cudnn8.2.1

  • 进入网站:https://developer.nvidia.com/rdp/cudnn-archive
  • 选择: Download cuDNN v8.2.1 (June 7th, 2021), for CUDA 11.x
  • 选择: cuDNN Library for Windows (x86)
  • 你将会下载这个压缩包: “cudnn-11.3-windows-x64-v8.2.1.32_2.zip”
  • 解压之后,cudnn的头文件、库文件都要拷贝到cuda安装目录。
  • 如下图,进入cudnn解压所在文件夹中include,拷贝所有头文件,粘贴到CUDA/v11.2/include中
  • lib、bin中的文件也拷贝到对应cuda目录中
  • 重启系统
    请添加图片描述

2.2.4 下载 tensorrt8.4.2.4

  • 进入网站: https://developer.nvidia.cn/nvidia-tensorrt-8x-download
  • 把这个打勾: I Agree To the Terms of the NVIDIA TensorRT License Agreement
  • 选择: TensorRT 8.4 GA Update 1
  • 选择: TensorRT 8.4 GA Update 1 for Windows 10 and CUDA 11.0, 11.1, 11.2, 11.3, 11.4, 11.5, 11.6 and 11.7 ZIP Package
  • 你将会下载这个压缩包: “TensorRT-8.4.2.4.Windows10.x86_64.cuda-11.6.cudnn8.4.zip”
  • 解压到F:\ThirdParty,并重命名为:TensorRT-8.4.2.4
  • 并将路径"F:\ThirdParty\TensorRT-8.4.2.4\lib"添加到环境变量,如下图:
  • 重启系统
    请添加图片描述

2.2.5 OpenCV4.5.5安装

  • 进入:https://opencv.org/releases/
  • 选择:[OpenCV – 4.5.5] -> [Windows]
  • 下载完成之后,是一个exe的自解压格式,解压到:D:\ThirdParty
  • 并将路径:“D:\ThirdParty\opencv4.5.5\build\bin” 和 "D:\ThirdParty\opencv4.5.5\build\x64\vc15\bin"添加到环境变量,如下图:
  • 重启系统
    note:我的opencv在D盘,tensorrt在E盘,根据实际情况修改就行了。
    请添加图片描述

2.3 创建属性表

一般地,Visual Studio 2019,一个库对应两个属性表文件,分别对应:vs2019的debug模式和release模式,例如:本文中OpenCV创建了这两种。而TensorRT和CUDA只需要创建一种属性表(适用以上两种模式)。

2.3.1 创建OpenCV属性表

创建opencv库debug属性表:

  • step1:基于VS2019随便新建一个C++项目,如下图,项目设置为Debug、X64模式
    请添加图片描述
  • step2:如下图,选择:[属性窗口] -> [右击Debug|x64] -> [添加新项目属性表]
    请添加图片描述
  • step3:文件命名为:OpenCV4.5.5_DebugX64.props -> [添加]
  • 编辑属性表:[如下图:双击属性表]
    请添加图片描述
  • step4:如下图,选择:[通用属性] -> [VC++目录] -> [包含目录] -> [编辑]
    请添加图片描述
  • step5:如下图,将两个OpenCV两个头文件目录拷贝进去 -> [确认]
    请添加图片描述
  • step6:选择:[通用属性] -> [VC++目录] -> [库目录] -> [编辑] -> 将路径:"D:\ThirdParty\opencv4.5.5\build\x64\vc15\lib"拷贝进去 -> [确认]
  • step7:选择:[通用属性] -> [链接器] -> [输入] -> [附加依赖项] -> 将文件名"opencv_world455d.lib"拷贝进去->[确认]
    小结

    到这里,opencv库debug属性表制作完成,release属性表和上述流程一样,唯一区别在于,如下图,项目切换到Release x64模式,新建OpenCV4.5.5_ReleaseX64属性表,然后在step7中,将文件名修改为:“opencv_world455.lib
    请添加图片描述
    请记住,制作属性表就3个步骤:
  • 拷贝include路径
  • 拷贝lib路径,外加设置dll到系统环境变量
  • 拷贝lib文件名称

2.3.2 创建TensorRT属性表

右击Debug|x64 or 右击Release|x64新建属性表,重命名为:TensorRT8.4.2.4_X64,

# include路径
F:\ThirdParty\TensorRT-8.4.2.4\include
F:\ThirdParty\TensorRT-8.4.2.4\samples\common
# F:\ThirdParty\TensorRT-8.4.2.4\samples\common\windows # 这个路径文件不需要包含
# lib路径
F:\ThirdParty\TensorRT-8.4.2.4\lib
# lib文件名称(for release& debug)
nvinfer.lib
nvinfer_plugin.lib
nvonnxparser.lib
nvparsers.lib

依照上一节3个步骤:

  • step1:选择:[通用属性] -> [VC++目录] -> [包含目录] -> [编辑] -> 把上述3个include路径拷贝进去
  • step2:选择:[通用属性] -> [VC++目录] -> [库目录] -> [编辑] -> 把上述lib路径拷贝进去
  • step3:选择:[通用属性] -> [链接器] -> [输入] -> [附加依赖项] -> [编辑] -> 将上述lib文件名称拷贝进去->[确认]
    最后,修改tensorrt属性表:[通用属性] -> [C/C++] -> [预处理器] -> [预处理器定义] -> 添加指令:_CRT_SECURE_NO_WARNINGS -> [确认]

2.3.3 创建CUDA属性表

CUDA属性表直接白嫖官方,在路径:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\extras\visual_studio_integration\MSBuildExtensions\CUDA 11.2.props

最后,我们应该有了如下属性表文件:
请添加图片描述
其中,cuda 和tensorrt的属性表同时兼容release x64 和debug x64,你再新建TensorRT-Alpha中yolov8 yolov7 yolov6 等项目后,只需要把上述提前做好的属性表引入到工程就行了,当然项目还需要进行简单设置(设置NVCC,避免tensorrt的坑),在后文提到。属性表做到了一次新建,到处使用。

2.3.4 新建工程与设置

这一节演示如何新建vs工程,如何设置工程,是通用方法。适用于仓库所有模型源码。

2.3.4.1 新建vs工程

如下图,打开vs2019,点击:文件 -> 新建-> 项目。
请添加图片描述
选择:空项目 -> 下一步。
在这里插入图片描述
选择创建。
在这里插入图片描述
如下图,现在将工程设置为:Release X64。
在这里插入图片描述

2.3.4.2 vs2019工程设置

如下图,选择:属性管理器 -> Release | x64 -> 添加现有属性表,把上一节生成的三个RleaseX64属性表添加进来。
在这里插入图片描述
添加进来后样子如下图:
在这里插入图片描述
TensorRT项目包含c++和cuda c代码,通俗讲,c++代码文件格式为:

  • .h头文件
  • .cpp文件
  • 由c++编译器编译
    而cuda代码头文件格式为:
  • .h头文件
  • .cu文件
  • 由NVCC编译器编译
    例如:我们添加如下图5个文件,在工程中。
    在这里插入图片描述
    添加CUDA依赖:右击项目 -> 生成依赖项 -> 生成自定义
    在这里插入图片描述
    将如下图CUDA11.2打钩 -> 确认
    在这里插入图片描述
    右击项目 -> 属性,将会打开如下界面,将字符集设置为未设置,点击确认。
    在这里插入图片描述
    最后,在项目中,同时选中所有.cu文件和对应的.h文件,注意是所有。我这里就是a.h 和 a.cu文件了。然后右击 -> 点属性。
    【注】:在tensorrt-alpha开源项目中,例如yolov8,会添加多个.cu .cpp .h格式文件,其中.cu和对应的.h文件都是这样设置,目的就是让NVCC编译器来编译cuda代码。
    在这里插入图片描述
    得到如下界面,我们把项类型设置为CUDA C/C++,点击确认。
    在这里插入图片描述
    然后编译一下:
    在这里插入图片描述
    编译成功如下图:
    在这里插入图片描述

三、从yolox源码中导出onnx文件

可以直接从网盘下载onnx文件[weiyun]:weiyun or google driver ,你也可以自己下载仓库,然后按照下面指令手动导出onnx文件,下载yolox源码:

# 下载yolox源码
git clone https://github.com/Megvii-BaseDetection/YOLOX
git checkout  0.3.0

安装 yolox环境

pip install -r requirements.txt

命令行进入yolox源码根目录,用以下指令导出onnx模型文件,以下是batch_size=1的方式,多batch模型导出,可以去看仓库。

## batch_size=1
# 640 for image
python tools/export_onnx.py --output-name=yolox_s.onnx  --exp_file=exps/default/yolox_s.py --ckpt=yolox_s.pth --decode_in_inference --batch-size=1
python tools/export_onnx.py --output-name=yolox_m.onnx  --exp_file=exps/default/yolox_m.py --ckpt=yolox_m.pth --decode_in_inference --batch-size=1
python tools/export_onnx.py --output-name=yolox_x.onnx  --exp_file=exps/default/yolox_x.py --ckpt=yolox_x.pth --decode_in_inference --batch-size=1
python tools/export_onnx.py --output-name=yolox_s.onnx  --exp_file=exps/default/yolox_s.py --ckpt=yolox_s.pth --decode_in_inference --batch-size=1
# 416 for image
python tools/export_onnx.py --output-name=yolox_nano.onnx --exp_file=exps/default/yolox_nano.py --ckpt=yolox_nano.pth --decode_in_inference --batch-size=1
python tools/export_onnx.py --output-name=yolox_tiny.onnx --exp_file=exps/default/yolox_tiny.py --ckpt=yolox_tiny.pth --decode_in_inference --batch-size=1

四、利用tensorrt编译onnx模型

将上一个章节中导出onnx模型放到任意路径。进入到tensorrt根目录下bin文件里,里面有个tensorrt官方提供的模型编译工具,即:trtexec.exe 如下图:
在这里插入图片描述
然后使用,以下指令编译onnx模型,需要注意:参数 --onnx 和 --saveEngine 可以设置为自定义路径,例如:

 --onnx=d:/Data/xxx.onnx  --saveEngine=d:/Data/xxx.trt 
# 640
./trtexec.exe   --onnx=yolox_s.onnx   --saveEngine=yolox_s.trt  --buildOnly
./trtexec.exe   --onnx=yolox_m.onnx   --saveEngine=yolox_m.trt  --buildOnly
./trtexec.exe   --onnx=yolox_x.onnx   --saveEngine=yolox_x.trt  --buildOnly
# 416
./trtexec.exe   --onnx=yolox_nano.onnx   --saveEngine=yolox_nano.trt  --buildOnly
./trtexec.exe   --onnx=yolox_tiny.onnx   --saveEngine=yolox_tiny.trt  --buildOnly

五、编译执行yolox-tensorrt工程

下载源码并编译

git clone https://github.com/FeiYull/tensorrt-alpha

仿造 2.3.4 新建工程与设置 中新建、设置vs2019工程;其中,yolox需要将如下图多个文件添加到工程中:

  • 红色框内文件来自TensorRT-Alpha/utils/
  • 蓝色框内文件来自TensorRT-Alpha/yolox/
  • 绿色框内文件来自TensorrRT安装路径下:TensorRT-8.4.2.4.Windows10.x86_64.cuda-11.6.cudnn8.4\TensorRT-8.4.2.4\samples\common\logger.cpp

在这里插入图片描述
如下图,yolox项目编译成功,从下面编译信息可以看到,exe文件所在路径为:

  • D:\VS2019_Project\TensorRT-Alpha\x64\Release\yolox.exe
1>------ 已启动生成: 项目: yolox, 配置: Release x64 ------
1>app_yolox.cpp
1>D:\ThirdParty\TensorRT-8.4.2.4\include\NvInfer.h(5349,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>D:\ThirdParty\opencv\build\include\opencv2\objdetect\aruco_board.hpp(1,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
1>D:\TensorRT-Alpha\yolox\app_yolox.cpp(43,106): warning C4267: “参数”: 从“size_t”转换到“const int”,可能丢失数据
1>正在生成代码
1>1 of 1021 functions (<0.1%) were compiled, the rest were copied from previous compilation.
1>  0 functions were new in current compilation
1>  1 functions had inline decision re-evaluated but remain unchanged
1>已完成代码的生成
1>yolox.vcxproj -> D:\VS2019_Project\TensorRT-Alpha\x64\Release\yolox.exe
1>已完成生成项目“yolox.vcxproj”的操作。
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0==========

以下是命令行执行指令,需要说明的是执行推理任务,支持图片、视频、摄像头

# infer image
./app_yolox.exe  --model=../../data/yolox/yolox_s.trt     --size=640 --batch_size=1  --img=../../data/6406401.jpg  --show --savePath=../
# infer video
./app_yolox.exe  --model=../../data/yolox/yolox_s.trt     --size=640 --batch_size=8  --video=../../data/people.mp4  --show 
# infer camera
./app_yolox.exe  --model=../../data/yolox/yolox_s.trt     --size=640 --batch_size=8  --cam_id=0  --show
# 416
./app_yolox.exe  --model=../../data/yolox/yolox_nano.trt  --size=416 --batch_size=1  --img=../../data/6406401.jpg  --show --savePath

这里给个示范,例如我要在命令行使用yolox推理一张图:

.\yolox.exe --model=D:\ThirdParty\TensorRT-8.4.2.4\bin\yolox_s.trt     --size=640 --batch_size=1  --img=d:/Data/1.jpg  --show --savePath=../

效果如下图:
在这里插入图片描述
下面是yolox推理视频效果,可以自己玩一玩:

.\yolox.exe --model=D:\ThirdParty\TensorRT-8.4.2.4\bin\yolox_s.trt     --size=640 --batch_size=1  --video=E:\VideoAlpha\source_video\football.mp4  --show  --savePath=D:\Data\save\

yolox tensorrt 部署效果

六、结束语

都看到这里了,觉得可以请点赞收藏,有条件的去仓库点个star,仓库:https://github.com/FeiYull/tensorrt-alpha
在这里插入图片描述

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

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

相关文章

51系列—基于51单片机的数字频率计(代码+文档资料)

本文主要说明基于51单片机的数字频率计设计&#xff0c;完整资料见文末链接 数字频率计概述 数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号&#xff0c;方波信…

安达发|AI在APS生产计划排程系统中的应用与优势

随着科技的不断发展&#xff0c;人工智能&#xff08;AI&#xff09;已经在许多领域取得了显著的成果。在生产管理计划系统中&#xff0c;AI技术的应用也日益受到关注。本文将探讨如何将AI人工智能用在生产管理计划系统上&#xff0c;以提高生产效率、降低成本并优化资源配置。…

Qt之使用bitblt抓取bitmap(位图)并转QImage

一.效果 点击按钮抓取窗口自身并显示到QLable中 二.实现 pro文件 QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11SOURCES += \main.cpp \mainwindow.cppHEADERS += \mainwindow.hFORMS += \mainwindow.uiLIBS += -lgdi32 -luser32 -l…

前端数据可视化之【Echarts下载使用】

目录 &#x1f31f;下载&#x1f31f;浏览器引入&#x1f31f;模块化引入 &#x1f31f;使用&#x1f31f;基本使用步骤 &#x1f31f;绘制一个简单的图表&#x1f31f;写在最后 &#x1f31f;下载 &#x1f31f;浏览器引入 官网下载界面&#xff1a;官方网站 或 Echarts中文…

旺店通企业版与金蝶云星辰数据集成方案分享

今天我们将深入介绍旺店通企业版与金蝶云星辰业财一体化数据集成方案&#xff0c;以丰富的业务场景示例展示该平台如何以无缝的方式连接不同系统&#xff0c;实现数据同步、提高效率&#xff0c;同时突显轻易云的出色能力。 概述 旺店通企业版与金蝶云星辰业财一体化数据集成方…

【一周安全资讯1021】工业和信息化部等六部门印发《算力基础设施高质量发展行动计划》;思科未修补的零日漏洞正被积极利用

要闻速览 1、工业和信息化部等六部门印发《算力基础设施高质量发展行动计划》 2、香港芭蕾舞团电脑遭勒索软件入侵读取个人及内部资料 3、日本最大通信运营商九百万条数据被盗&#xff0c;泄露时间长达十年 4、疑似迪卡侬 8000 名员工个人信息暴露暗网上 5、Kwik Trip遭遇“神…

【算法题】统计无向图中无法互相到达点对数

题目&#xff1a; 给你一个整数 n &#xff0c;表示一张 无向图 中有 n 个节点&#xff0c;编号为 0 到 n - 1 。同时给你一个二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示节点 ai 和 bi 之间有一条 无向 边。 请你返回 无法互相到达 的不同 点对数目 。 示…

美格智能出席无锡智能网联汽车生态大会,共话数字座舱新势力

10月20日&#xff0c;2023世界物联网博览会期间&#xff0c;以“智 行天下 启未来”为主题的2023无锡智能网联汽车生态大会暨域控制器及智能座舱论坛在无锡举行。大会邀请行业权威专家&#xff0c;多家知名企业重磅嘉宾出席&#xff0c;融汇智能网联汽车思想智慧、创新技术、产…

系统架构设计之微内核架构(Microkernel Architecture)

微内核架构&#xff08;Microkernel Architecture&#xff09; 一. 什么是微内核架构二. 微内核架构风格-拓扑结构三. 微内核的核心系统设计的三个关键点3.1 插件管理3.2 插件连接3.3 插件通信 四. 微内核架构的优缺点 一. 什么是微内核架构 微内核架构是一种面向功能进行拆分的…

Spring framework day 02:Spring 整合 Mybatis

前言 在现代软件开发中&#xff0c;数据持久化是一个重要的环节。为了高效、可维护地管理和操作数据库&#xff0c;许多开发者采用了Spring框架和Mybatis持久化框架的组合。Spring提供了依赖注入和面向切面编程等特性&#xff0c;而Mybatis则是一个优秀的对象关系映射&#xf…

JS类的继承和实现原理详解

一&#xff1a;前言 各位小伙伴在日常开发中&#xff0c;相信一定遇到过Class这种写法。这代表在JS中创建了一个类&#xff0c;并且可以通过这个类去 new 出一个新的对象。其实在JS中&#xff0c;这个类和java中的类是没有区别的&#xff0c;同样具有属性&#xff0c;方法&…

1209. 带分数

题目&#xff1a; 1209. 带分数 - AcWing题库 思路&#xff1a; 1.targetab/c&#xff0c;由题意a,b,c会包含1~9 且每个数出现且只能出现一次。我们可以抽象化为9个坑位分成3份分别给a,b,c。 2.先采用递归搜索树写出9个坑位的全排列&#xff0c;再分成3个区&#xff0c;分…

多分享,多输出,才有被看见的可能 (抽奖倒计时2天!文末有福利!)

* 戳上方蓝字“前端队长”关注我&#xff0c;每日更新 大家好啊&#xff0c;我是Daotin。 今天讨论一个话题&#xff0c;为什么要多分享&#xff0c;多输出&#xff1f; 因为&#xff0c;只有输出多了&#xff0c;被别人看到的机会才大。 不要相信什么&#xff0c;酒香不怕巷子…

Camtasia2023免费升级最新版本下载

在这个视频的大舞台上&#xff0c;每一帧都是你炫耀的机会&#xff0c;每一秒都是让观众瞪大眼睛的瞬间。现在&#xff0c;让我们一起飞跃时空&#xff0c;用更少的时间创作更多的惊喜吧&#xff01; 就算你是个小白&#xff0c;毫无经验&#xff0c;别担心&#xff0c;Camtas…

【树莓派触摸屏等学习笔记】

前言 树莓派触摸屏 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、触摸屏硬件驱动 出现黑屏的时候&#xff0c;恢复一下txt config.txt 全屏显示 showFull Exec &#xff1a;自启动 surf 算法 特征点识别 算法的复杂度挺高的 特性树莓派强大…

从Linux的tty_struct指针获取驱动上下文

背景 问题 前段时间开发一个tty驱动&#xff0c;用途是实现仪器对GPIB消息的接收、处理和上报。对于上报场景&#xff0c;下位机应用将上报内容写入一个驱动创建的tty设备&#xff0c;tty子系统将应用的输入转发给tty驱动&#xff0c;tty驱动将其转换成对SPI从设备&#xff0…

操作系统 - 《银行家算法》

&#xff08;一&#xff09;安全序列 你是一位成功的商人&#xff0c;手里掌握着 100 个w的资金 … 有三个企业想找你贷款&#xff0c;分别是 企业 B 、企业 A 、企业 T &#xff0c;为描述方便&#xff0c;简称 BAT 。 B 表示&#xff1a;“咱们的项目很有前景&#xff0c;…

中枢听觉处理障碍的行为干预方法

作者&#xff1a;听觉健康 在数十年前&#xff0c;中枢听觉处理障碍(CAPD)的研究已经引起了多学科的关注。1937年&#xff0c;Samuel Orton提出某些儿童的学习障碍与不能有效利用听觉有关。Myklebust是提出“中枢性听力障碍”引起儿童语言学习障碍的先驱者之一。二十世纪五十年…

【lesson13】进程控制初识

文章目录 进程创建 进程创建 请你描述一下&#xff0c;fork创建子进程操作系统都做了什么&#xff1f; fork创建子进程&#xff0c;系统里多了一个进程&#xff0c;进程 内核数据结构 进程代码数据&#xff0c;内核数据结构由OS维护&#xff0c;进程代码数据一般由磁盘维护。…

C++类和对象(1)

C类和对象&#xff08;1&#xff09; C新关键字及语法引用引用的底层原理引用使用的注意事项 auto范围for C结构体新特性C类的特性C类与结构体区别构造函数定义调用 析构函数调用 C新关键字及语法 引用 引用是C加入的新类型&#xff0c;引用是变量的别名&#xff0c;在整体上…