自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 收藏
  • 关注

原创 线程创建方法

joinable()返回false不是因为“已经被 join”,而是因为“根本就没有线程可 join”。默认构造的就是一个“空容器”,不代表任何实际线程。所以你的t1返回false是完全正确且符合设计的!在 C++ 中,创建线程的核心方式是使用标准库中的 std::thread(自 C++11 起)。下面系统、清晰地介绍所有主流的线程创建方法,并附上示例和注意事项。就是 C++ 版的 “map” 操作 —— 把输入序列“映射”成输出序列。问题答案干什么?对序列做函数变换,生成新序列。

2026-03-23 15:12:24 357

原创 onnx结构认识

最后,使用 helper.make_graph 函数创建了图结构,并通过 helper.make_model 函数创建了完整的模型。接下来,定义了模型的初始化参数,使用 helper.make_tensor 函数创建了权重和偏置项的张量。整个过程是通过使用 onnx 库提供的 helper 函数和数据结构来构建模型的图结构、参数和元数据,从而创建一个完整的 ONNX 模型。然后,定义了输入和输出的信息,使用 helper.make_value_info 函数创建了输入和输出的张量类型信息。

2026-03-20 15:36:02 192

原创 智能指针 unique_ptr

unique_ptr销毁、重置、赋值时 → 自动调用删除器删除器是函数对象 → 里面必须写operator()unique_ptr内部就是执行→ 触发你的operator()

2026-03-20 14:57:48 352

原创 paddle 文本检测识别模型转为onnx

Paddle2ONNX 支持将模型格式转化到ONNX模型格式。通过 ONNX 可以完成将 Paddle 模型到多种推理引擎的部署,包括 TensorRT/OpenVINO/MNN/TNN/NCNN,以及其它对 ONNX 开源格式进行支持的推理引擎或硬件。

2026-03-19 16:40:17 340

原创 基于paddle模型 文本识别

阶段输入处理输出模型推理图像[3, H, W]Logits[80, 6625]ArgMaxLogits找每列最大值索引序列[80](0~6624)CTC 解码索引序列去 blank + 去重字符串(如"粤B88888"这套流程高效、鲁棒,是工业 OCR 系统的标准实践。

2026-03-18 15:53:35 357

原创 lpr车牌识别

LPRNet车牌识别后处理流程解析 摘要:本文详细分析了LPRNet车牌识别模型的后处理流程。模型输出为[68×18]的张量,包含68个字符类别(67个有效字符+1个空白符)在18个时间步上的预测结果。后处理分为两个关键步骤:首先通过ArgMax解码获取每个时间步最可能的字符索引,形成长度为18的序列;然后进行CTC贪婪解码,去除连续重复字符和空白符。示例显示原始输出序列[27,27,67...64,32,51,39]经处理后得到有效字符索引[27,64,32,51,39],最终映射为"粤B869

2026-03-18 10:25:59 311

原创 tensorrt基本流程

ONNX 文件]↓Builder → Network → Parser → 解析 ONNX↓BuilderConfig → 设置 FP16 / workspace↓buildSerializedNetwork() → 生成序列化 Engine↓保存为 .engine 文件(离线完成)[推理时]↓↓↓分配 GPU 输入/输出缓冲区↓↓executeV2() → 执行推理↓↓得到结果阶段核心对象作用构建IBuilderIParser。

2026-03-13 17:22:28 321

原创 使用cuda核函数加速 yolov5后处理

本文展示了一个基于CUDA和OpenCV的目标检测后处理代码实现。主要包含三个功能模块:1) CUDA运行时错误检查宏checkRuntime;2) 文件加载工具函数load_file,支持二进制文件读取;3) 目标检测结果后处理函数cpu_decode,实现了置信度阈值过滤、非极大值抑制(NMS)等关键步骤。其中NMS部分采用经典的IoU计算和排序策略,对检测框进行筛选。代码结构清晰,包含详细的注释说明,适用于YOLO等目标检测算法的输出解析。

2026-03-13 16:05:17 117

原创 函数指针和回调函数

写法含义a是student的别名CalcFunc是的别名(即函数指针类型)→a就是student→CalcFunc就是“能指向函数”的指针类型你以后看到复杂的typedef,就用“先想变量怎么写,再把变量名换成类型名”的方法,就能轻松破解!当然可以!你上传的这份 PDF 是一个非常经典的C++ 回调函数(Callback)与函数指针的入门示例,用“计算器”来模拟大厂 SDK 封装逻辑。下面我将它完整翻译、整理并结构化,便于理解核心思想。特性说明解耦大厂逻辑 与 用户逻辑分离扩展性。

2026-03-13 11:48:54 322

原创 cuda核函数进行仿射变换

【代码】cuda核函数进行仿射变换。

2026-03-12 17:25:23 21

原创 python语法学习

比如说类Animal,动物类这是一个抽象的概念,自然界有那么多动物,具体是那种动物呢?类中的实例方法需要访问该实例,因此在定义实例方法时必须将self作为第一个参数,以便在内部使用它。在Python中,要实例化一个类,需要使用类名加上一对括号,如Animal(),这将创建类的一个实例。实例化类时,会调用类的 初始化 函数__init__(),并返回一个新的实例。在上述示例中,我们定义了一个Animal类,并在其初始化函数中传入一个参数name,在实例方法eat中使用了传入的参数name。

2026-03-12 13:51:39 193

原创 tensorrt学习-cuda运行时api

这样简化了代码,使得使用 CUDA Runtime API 更加方便和易于操作。接着同样又利用异步复制将 GPU 上的数据复制到 CPU 上来,最后使用 cudaStreamSynchronize 同步流,确保前面的异步复制操作全部完成(也就是男朋友将东西全买回来了),然后打印获取的结果,那你可以发现真正的耗时其实是发生在这一步的。在异步复制的时候,发出指令立即返回,并不等待复制完成,因此你可以看到如果你在后面添加打印语句,可以发现数据并没有复制,主线程并不需要等待复制完成,可以继续执行后续操作。

2026-03-04 18:30:37 388

原创 视觉transformer 部分知识梳理

问题回答ViT 有没有 Q、K、V?有!完全保留Q、K、V 在图像中是什么意思?Q=“我想看啥”,K=“我能被谁看”,V=“我有啥内容”为什么需要 Q 和 K 算相关性?为了知道图像中哪个区域该关注哪个区域(比如眼睛关注鼻子,车轮关注车身)是不是只关注自己?不是!恰恰是要跨区域关注,这才是注意力的价值所以,不管是文字还是图像,Transformer 的核心思想不变通过 Q-K 匹配,动态决定从哪些地方(V)提取信息。让图像的不同部分学会“互相理解”。

2026-02-28 11:10:29 841

原创 tensorrt学习 - cuda驱动api

值得注意的是,cuda.h 是 NVIDIA CUDA Toolkit 中的一部分。cuInit 函数的参数 flags 目前必须为 0,在使用 CUDA 的其它函数之前,必须先调用 cuInit 函数进行初始化,否则其它 CUDA API 函数会返回 CUDA_ERROR_NOT_INITIALIZED 错误。cuda.h 提供了 CUDA 编程的接口和声明,而 libcuda.so 则是运行库,提供了 CUDA 运行时所需的底层功能和支持。主要是cuda初始化以及获取驱动版本以及设备名称。

2026-02-26 16:04:01 382

原创 paddleocr安装

安装完成后您可以使用 python3 进入 python 解释器,输入import paddle ,再输入 paddle.utils.run_check()如果出现PaddlePaddle is installed successfully!,说明您已成功安装。如何卸载Step 3:安装 PaddleOCR。

2026-02-12 15:28:18 248

原创 opencv入门

Point 类用来表示二维坐标系中的一个点。OpenCV 提供了两个版本:Point2i(或简称 Point)用于整数坐标,Point2f 用于浮点数坐标。示例// 创建一个整数类型的点 (x=10, y=20)// 创建一个浮点类型的点// 在图像上绘制这个点// 创建一个100x100的黑色图像// 在点pt处绘制一个绿色圆圈。

2025-11-18 15:50:34 35

原创 RKNN-Toolkit2入门

RKNN-Toolkit2 的主要作用是在 x86 主机(Host)上将 ONNX、TensorFlow、Caffe 等模型转换为 .rknn 格式,然后部署到 瑞芯微(Rockchip)NPU 芯片(如 RK3566、RK3568、RK3588、RV1106 等)上进行推理。📌 详细解释:RKNN-Toolkit2 到底是什么?

2025-10-31 15:04:32 837

原创 tensorRT高级-使用onnxruntime进行onnx模型推理过程

8. 图像预处理(Letterbox + 归一化)和tensorrt是一样的。9. HWC → CHW + BGR → RGB + 归一化。12. 解码输出(YOLO 后处理)13. NMS 非极大值抑制。

2025-10-30 11:27:23 150

原创 tensorRT-UNet分割模型编译到推理

计算缩放因子 scale = min(target_w / img_w, target_h / img_h)使用 cv::warpAffine 进行仿射变换,将图像缩放到目标尺寸(如 512x512)类别图(uint8)使用 cv::INTER_NEAREST 防止类别混合。空白区域用灰色(114)填充(常见于 YOLO/UNet 系列)概率图(float)使用 cv::INTER_LINEAR 插值。模型输出形状:[B, H, W, C](C 为类别数)前处理的目标是将原始图像转换为模型输入所需的格式。

2025-10-27 13:23:02 363

原创 c++中tuple的基本用法

访问 tuple 元素:std::get<索引>(tuple)获取 tuple 大小:std::tuple_size。解包 tuple:std::tie(经典方式)使用 std::tuple 类型声明。

2025-10-27 11:09:13 133

原创 OpenCV C++ 中,访问图像像素三种常用方法

🔹 方法 2:指针访问 cv::Mat::ptr<>()(推荐用于遍历整行或全图)🔹 方法 1:cv::Mat::at<>() 方法(推荐用于调试和小规模访问)🔹 方法 3:迭代器访问(安全且适合 STL 风格编程)✅ OpenCV C++ 访问像素的三种方法。

2025-10-27 10:49:39 275

原创 retinaface tensorrt 无封装版本

这叫做 Bounding Box Regression(边界框回归),目的是: 把一个“先验框”(anchor/prior)通过学习到的偏移量,调整成更接近真实框(ground truth)的预测框。init_prior_box 函数是 人脸检测模型(如 RetinaFace、SSD、YOLO 的 Anchor 版本等)中生成“先验框”(Prior Boxes / Anchors)的核心函数。真实偏移量 (dx_real) = (gt_cx - anchor_cx) / anchor_sx。

2025-10-24 15:59:06 902

原创 tensorRT高级-yolov5模型编译到推理(无封装)

【代码】tensorRT高级-yolov5模型编译到推理(无封装)

2025-10-23 17:11:35 34

原创 shared_ptr 与 Lambda 删除器

🔍 核心问题:为什么 engine->infer() 没有执行 lambda?这行代码等价于:MyEngine* raw = engine.get();👉 它只是通过 shared_ptr 获取原始指针,然后调用方法。✅ 2. engine->infer():只是正常使用对象。管家(shared_ptr)收下了遗嘱,但不会立刻执行。✅ 1. shared_ptr 的构造:只保存,不执行。这才是 lambda 第一次也是唯一一次被执行。👉 但 不会立即执行 lambda!✅ 3. 析构时:删除器终于执行

2025-10-23 10:08:03 132

原创 基类派生类

【代码】基类派生类。

2025-10-23 09:41:24 369

原创 c11简单线程池

【代码】c11简单线程池。

2025-10-23 09:40:05 362

原创 c11智能指针 promise future

【代码】c11智能指针 promise future。

2025-10-23 09:39:26 265

原创 c11工厂函数

【代码】c11工厂函数。

2025-10-23 09:38:26 262

原创 c11条件变量

【代码】c11条件变量。

2025-10-23 09:35:50 82

原创 tensorRT基础-模型推理时动态shape的具体实现要点

1.

2025-10-22 14:14:10 38

原创 最简单的tensorrt程序,实现模型编译和推理

假设输入是 [1.0, 1.0, 1.0](即 x0=x1=x2=1),偏置 b = [0, 0]🔍 第二步:addFullyConnected 需要什么样的权重?🔢 第三步:你的权重数组如何排列?所以输出是 [3.5, 0.8]🧮 第五步:矩阵乘法示例。

2025-10-22 11:18:23 40

原创 cuda运行时API-内存的学习,pinnedmemory

Device To Host 的过程,等价于。Host To Device 的过程,等价于。

2025-10-17 09:33:13 35

原创 仿射变换逆变换

2025-09-22 09:00:19 132

原创 YOLO 模型前向推理全流程(以 YOLOv8 为例)

形状:(1, 4 * reg_max, 80, 80)、(1, 4 * reg_max, 40, 40)、(1, 4 * reg_max, 20, 20)形状:(1, 80, 80, 80)、(1, 80, 40, 40)、(1, 80, 20, 20)(COCO 80 类)实际使用时通过卷积解码为 (l, t, r, b) 四个距离(归一化到特征图尺度)将缩放后的图像(640×480)居中放置在 640×640 的画布上。前 4 行:[l, t, r, b](归一化的距离)填充短边(letterbox)

2025-09-16 18:05:33 138

原创 非极大值抑制(Non-Maximum Suppression, NMS)

即:IM 把变换后的点 (x’, y’) 映射回原始点 (x, y)。如果 IoU > 阈值,说明是重复检测,将那个低分框标记为“删除”。否则,保留这个框(因为它目前是置信度最高的未被删的框)。假设输入的检测框已经按置信度从高到低排序。如果当前框已被标记删除,跳过。计算它们与当前框的 IoU。最终返回所有未被删除的框。

2025-09-16 17:14:54 60

原创 std::initializer_list<int> 和 std::vector<int>

使用 std::initializer_list 和 std::vector 两种方式来构造 InputDims 类,并说明它们的区别。两者最终都会把数据存到 dims_ 这个 vector 成员变量中,区别只在于如何把数据传进来。为什么 InputDims 要同时支持两种构造方式?

2025-09-16 10:50:29 123

原创 C++ 中的 noexcept override

这样写出的代码,才是健壮、高效、可维护的现代 C++ 代码!

2025-09-16 10:23:39 50

原创 YOLO 检测前向推理流程

✅ YOLO 模型前向推理全流程(以 YOLOv5 为例)第一阶段:图像加载与预处理。

2025-09-15 17:40:21 198

原创 使用海康威视 SDK 实现软触发拍照(C语言完整示例 + 中文注释)

本文介绍了基于海康威视MVS SDK的软触发拍照C语言实现方案。文章摘要如下: 功能概述: 实现软触发控制工业相机精准拍摄 支持设备枚举、选择、取流控制 采用"拍一张→处理→再拍一张"的工作模式 关键技术: 使用MV_CC_SetCommandValue发送软触发指令 通过回调函数处理图像数据 多线程设计分离触发和图像处理逻辑 代码特点: 完整可运行的示例代码 详细中文注释 中文化打印信息 Linux环境测试通过 适用场景: 流水线检测 运动同步拍摄 需要精确控制拍摄时机的应用 注意事项

2025-09-05 19:41:34 740

原创 海康威视工业相机SDK开发实战:使用C/C++实现软件触发图像采集(含详细中文注释代码)

本文将带你从零开始,使用 海康MVS SDK(Machine Vision Software Development Kit),通过 C/C++语言 实现对海康工业相机的控制,重点演示如何配置 软件触发模式 并完成图像采集。而“软件触发”是触发模式中的一种,指通过 调用SDK函数发送命令 来触发相机采集一帧图像,无需外部硬件信号,非常适合调试和控制场景。本文通过一个完整示例,展示了如何使用海康MVS SDK 实现 软件触发图像采集,代码结构清晰,注释详尽,适合初学者快速上手。五、完整代码实现(含中文注释)

2025-09-05 17:59:56 1326

simple_yolo(2).cu

simple_yolo(2).cu

2025-12-24

【老年人异常行为监测】基于YOLOv5的目标检测模型数据采集与动作模拟指南:养老院老人摔倒争吵等危险动作实时监测系统设计

内容概要:本文档《老年人异常行为监测系统数据采集与动作模拟指南》旨在指导养老院工作人员或模拟人员采集高质量的老年人异常行为视频数据,为基于YOLOv5的目标检测模型训练提供坚实基础,以实现对养老院内老人摔倒、争吵等危险动作的实时监测与预警。文档详细描述了模拟人员的基本要求、动作模拟的具体指南(如摔倒、趴桌子、捂腹部等12种动作)、模拟动作的多样性要求(速度、角度、环境、遮挡变化),以及摄像头摆放策略和视频抽帧与标注流程。此外,还提供了针对摔倒动作模拟安全、动作识别准确率不足和模型推理速度慢等问题的解决方案,并展望了未来改进方向。 适合人群:养老院管理人员、护理人员、动作模拟人员及相关技术人员。 使用场景及目标:①用于养老院内老人异常行为(如摔倒、争吵等)的实时监测与预警;②为目标检测模型(如YOLOv5)的训练提供高质量的数据集;③提高养老院的安全管理水平。 其他说明:文档不仅提供了详细的动作模拟指南和摄像头摆放策略,还强调了数据标注的重要性,并针对可能遇到的问题提供了具体解决方案。未来可考虑增加更多异常行为类别,以进一步提高系统的准确性和实用性。

2025-08-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除