- 博客(35)
- 收藏
- 关注
原创 缺陷检测AI关键点在哪
用AI做缺陷检测,真正决定成败的不是算法或部署,而是数据处理。我们曾用知名公开数据集训练,AUC仅0.52(等于瞎猜);换为“真实噪声+物理仿真缺陷回波”后,AUC飙升至0.976,110KB小模型实现93.5%准确率,还产出可信POD曲线。关键在于:数据里有真信号、标签100%精确,才能让模型学对。算法可商品化,部署是通道,唯数据处理是生死线——先验证信号是否存在,再谈建模与落地。
2026-10-24 14:08:57
148
原创 焊缝检测-超声波A扫波形-AI检测
这件事最容易被搞混,先花一节讲明白。焊缝检测有两种完全不同的手段:关键区别在这:一条焊缝可以表面看起来漂漂亮亮,里面全是夹渣。反过来,表面有点缺陷,内部照样结实。所以这两个是互补关系,不是替代关系。你拿一个训好的焊缝视觉模型去说"我能做无损检测",懂行的人一句"内部夹渣你怎么办"就能把你问住。我们之前的焊缝项目做的是 VT(视觉检测 + YOLO 检测框),这篇是把另一半补上。做之前先找数据。超声领域最出名的公开数据集是 ML-NDT(Strathclyde 大学 + Trueflaw 公司做的,论文 ar
2026-10-23 15:06:22
116
原创 Day11_多路视频流加权公平调度与令牌桶QoS
本篇是「RK3568 边缘 AI 部署」系列的第十一篇。前情:Day10 我证明了 RK3568 的 NPU 是资源,多路总吞吐卡在 ~11 FPS,且简单轮询是"无差别公平"——超额订阅时所有路被平均压到 ~2.7 FPS。,这是"无 QoS"的代价。这一篇用带宽、给背景流按分配剩余带宽,并用实测数据回答——预留真的能保住关键流的帧率吗?
2026-09-22 22:57:05
81
原创 ONNX 与 RKNN 详解:从模型格式到 RK3568 部署实战
这篇用「菜谱 + 流水线」的比喻,帮你彻底搞懂模型格式、计算图、权重表,以及 RKNN 三层架构和版本对齐的坑。它的作用是给每个卷积核的输出结果做一个整体偏移。它的作用是做“从特征到类别的线性映射”,本质上是一张投票表:每个特征对每个类别投多少“支持票”。这里的 W1、B1、W2、B2 并不直接写进节点表,而是被放在 Initializers 表中,节点表只是“引用”它们的名字。┌──────────────────┐ .rknn 文件 ┌──────────────────┐。
2026-09-16 15:15:42
140
原创 Day11文章_多路视频流加权公平调度与令牌桶QoS
本篇是「RK3568 边缘 AI 部署」系列的第十一篇。前情:Day10 我证明了 RK3568 的 NPU 是资源,多路总吞吐卡在 ~11 FPS,且简单轮询是"无差别公平"——超额订阅时所有路被平均压到 ~2.7 FPS。,这是"无 QoS"的代价。这一篇用带宽、给背景流按分配剩余带宽,并用实测数据回答——预留真的能保住关键流的帧率吗?
2026-09-15 23:38:09
91
原创 Day10-多路视频流调度与跳帧工程化
本篇是「RK3568 边缘 AI 部署」系列的第十篇。前情:Day9 我发现 RK3568 的 NPU 是资源,多实例并发总吞吐卡在 ~10.5 FPS(DDR 带宽瓶颈)。那真实场景里多摄像头怎么办?
2026-09-15 17:29:35
135
原创 Day9_用sysfs实测NPU饱和度与DVFS调频
明天后计划做 RKNN 多路视频流的工程化(既然并发吞吐上限是 10.5 FPS 等效,多路场景就要认真做跳帧/降分辨率权衡了)。本系列所有代码与数据都在 GitHub 仓库,欢迎取用。
2026-09-09 11:47:36
287
原创 Day8_多batch实测与摄像头实时流
系列:RK3568 边缘 AI 部署实战上一篇:Day7《板端从 2.8 FPS 到 14.8 FPS:NPU + 后处理 C 化实战 + 交叉编译一坑三连》关键词:多 batch 推理、NPU 利用率、onnx batch 维重写、value_info、UVC 摄像头、MJPG、RGA、实时流环境:ATK-DLRK3568(RK3568 / NPU 1TOPS / RKNN Runtime 1.5.0)
2026-09-07 17:40:25
261
原创 # Day7|板端从 2.8 FPS 到 14.9 FPS:NPU + 后处理 C 化实战 + 交叉编译一坑三连
满屏狂飙。这说明官方 demo 的。
2026-09-04 22:52:16
188
原创 # Day6|NPU 只用了 23%:一次端到端性能分解,把后处理提速 149 倍
系列:RK3568 边缘 AI 部署实战上一篇:Day5《第一个 .rknn 在 NPU 上跑通了:78.77ms / 12.7 FPS》关键词:RK3568、RKNN、YOLOv5s、INT8、性能分解、NMS、后处理、C 化。
2026-09-03 15:47:30
324
原创 # Day5:第一个 `.rknn` 在 NPU 上跑通了 —— 版本对齐 + 78.77ms 实测全解读
PC 虚拟机] [RK3568 板子]yolov5s.onnx ──toolkit2──> yolov5s.rknn ──scp──> RKNNLite ──> NPU 推理(28.9MB) 转换+量化 (7.3MB) (Python) (78.77ms)Day4 完成 ✅ Day5:今天要打通的就是右边这半截把昨天转出的模型喂给板子的 NPU,看它能不能出正确的框。听起来简单,实际卡了一个上午 —— 卡在哪?卡在两边不是同一个年代的东西。
2026-09-02 13:58:49
367
原创 # RK3568 边缘 AI 从零上手(三):PC 端装转换工具,搞懂“三层分工“与 15 条命令
<think>我们根据内容生成一个≤150字的摘要。需要概括主要点:PC虚拟机的定位(不是桥梁而是离线交叉编译工位)、三层分工、15条命令清单、遇到的坑。摘要要简洁。</think>本文纠正“PC虚拟机是桥梁”的误解,明确其作为离线交叉编译工位的角色;梳理云端、PC、板端三层分工,并说明转换必须在PC进行的三个理由。实践部分给出从安装rknn-toolkit2到转换yolov5s的15条命令清单,并提醒注意工具包实际位置及用uname -m判别机器身份等避坑要点。
2026-08-31 23:20:44
151
原创 传统代码到运行和AI链路部署的区别
传统流程:以人工编码为核心的单向线性流水线,从需求分析一路走到编译、测试、部署,走完即止。AI 链路:以「自然语言描述意图 + 模型生成代码 + 人工审查」为核心的闭环迭代,编译与测试的结果会反馈回模型继续修正。两者共享同一条机器执行链路(预处理 → 编译 → 汇编 → 链接),区别主要体现在「代码如何产生」与「错误如何被处理」上。librknnrt.so = libc.so + JVM + GPU 用户态库(libmali.so)三合一,是"板子推理"这一步的运行时引擎;.rknn。
2026-08-27 09:47:59
355
原创 Day2-RK3568 边缘 AI 从零上手(二):一条命令跑通 NPU 推理,读懂背后的调用链与量化
C 通道:出厂预编译的 mobilenet demo,一键跑通,读懂 Top5 和量化参数Python 通道:装 rknnlite(cp38-aarch64 wheel),LeNet 识别手写数字 5原理:NPU 调用链(应用 → librknnrt.so → 驱动 → NPU)、INT8 量化(定点数)、训练→转换→部署全流程下一步:用 rknn-toolkit2 在 PC 上把 YOLOv5 从 PyTorch/ONNX 转成自己的.rknn,量化并对比精度——真正走一遍"转换"这一步。
2026-08-26 19:02:28
212
原创 RK3568 里面有什么?
Android 也是基于 Linux 内核,但上面是 Google/安卓框架:Binder、SurfaceFlinger、ART 虚拟机/运行时、安卓 Framework、APK 应用生态、触摸/移动界面等。它直接管理 CPU/内存/驱动/文件/网络/进程。→ 图形/图像加速,负责界面、OpenGL/Vulkan/部分OpenCL、视频/UI渲染等。人机屏/消费触屏/盒子有时用 Android。外设控制器:USB、PCIe、SATA、网口、I2C/SPI/UART/PWM/CAN/ADC、显示接口等。
2026-08-26 15:22:47
223
原创 【嵌入式AI学习 Day1】RK3568开发板上手实录:串口连接、启动日志解读、SSH网络打通(新手避坑)
【嵌入式AI学习 Day1】RK3568开发板上手实录:串口连接、启动日志解读、SSH网络打通(新手避坑)写在前面本人 11 年嵌入式软件工程师(C/C++、Linux 内核、驱动),但边缘 AI 部署是全新的方向。为了转岗嵌入式 AI,入手了正点原子 ATK-DLRK3568 开发板(RK3568,4 核 A55 + 0.8T 算力 NPU),目标是跑通「YOLO→ONNX→RKNN→NPU」全链路。今天 Day1,把板子启动、串口、网络全部打通,记录过程与踩坑。
2026-08-24 22:50:49
353
原创 编译器一定会生成默认构造函数和默认析构函数吗-不一定
以下四种情况同时满足时,编译器认为不用生成默认构造函数。1,没有虚函数2,非静态成员没有{} 或者=的初始化 比如 int x{3};编译器就会给生成默认构造函数3,直接继承的基类没有默认构造函数4、成员函数没有默认构造函数反过来说就是四点满足一个就可以有默认构造函数****如果class没有定义destructor,那么只有在class内含的成员object或者class继承的base class 有destructor的情况下,编译器才会自动合成一个出来。《深度探索C++对象模型》5
2022-06-23 20:33:40
1238
原创 堆排序heapsort
#include <iostream>void swap(int tree[],int n,int t){ int temp; temp=tree[n]; tree[n]=tree[t]; tree[t]=temp;}void build_heap(int tree[],int n){ //创建堆 for(int i=n/2-1;i>=0;i--)// n/2-1是最底部最右边的一家的父节点 最后一个家的父节点 {
2022-05-31 17:40:18
214
原创 shared_ptr智能指针源码分析
先写应用代码#include <iostream>#include <memory>int main(){ std::shared_ptr<int> sptr(new int(42)); // sptr1 = std::make_shared<int>(32); std::shared_ptr<int> sp2 = sptr; std::weak_ptr<int >wptr; wptr = sptr; std::co
2022-05-25 18:53:03
1435
原创 VScode连不上ubuntu的ssh
1 查看ssh服务是否启动Ubuntu打开"终端窗口",输入"sudo ps -e |grep ssh"–>回车–>有sshd,说明ssh服务已经启动,如果没有启动,输入"sudo service ssh start"–>回车–>ssh服务就会启动。2 查看Ubuntu IP地址。输入:sudo ifconfigvscode上 配置文件 ip 用户名对应没错3 再看看 ubuntu 的/etc/ssh/ssh_configsudo gedit /etc/s
2022-05-24 11:21:41
988
原创 QT信号槽实现-观察者模式架构
三 、接下来把这些函数连接起来思路:定义两个类: sender(被观察者)和recver(观察者) 均继承于QObjectrecver(观察者),定义对某个处理函数比如按钮触发后处理函数。槽函数sender(被观察者),定义一个数据结构,保持观察者对哪个事件id感兴趣,使用map建立对应关系。并调用(运行时)槽函数。connect函数在QObject中可由 sender(被观察者)或recver(观察者) 调用定义一个QObject类,有以下内容:qt_metacal
2022-04-28 12:56:39
2930
原创 QT信号槽实现原理-观察者设计模式架构-QT源码
我们使用QT的UI控件时,常用到触发控件的操作。比如点击一个按钮,就进行一个什么操作。ui文件可以右击控件–转到槽来生成一个槽函数,很方便。选择槽函数后,头文件里会多一个槽函数private slots:void on_pushButton_clicked();这是QT的 QObject函数的信号与槽功能,使得控件的点击为一个信号,点击后触发槽函数进行操作。我们自己也可以在QObject类里写上Q_OBJECT,signals和slots来实现信号槽。QObject::connect(u,S
2022-04-24 12:57:59
5771
1
原创 GDB多线程调试
https://sourceware.org/gdb/onlinedocs/gdb/Threads.html命令automatic notification of new threads‘thread thread-id’, a command to switch among threads‘info threads’,a command to inquire about existing threads‘thread apply [thread-id-list | all] args
2022-04-22 10:37:09
523
原创 Linux多线程调试 windows多线程调试
gdb调试基本命令gdbattach 进程idinfo thread(gdb) info thread Id Target Id Frame * 1 Thread 0x7f28dbf76f40 (LWP 2563) "ServerService" 0x00007f28da0ba680 in __GI___nanosleep ( requested_time=requested_time@entry=0x7fff2da728d0, remaining=r
2022-04-12 10:11:28
2976
原创 ubuntu 修改网卡名
ubuntu 修改网卡名**sudo nano /etc/default/grub**找到GRUB_CMDLINE_LINUX=""改为GRUB_CMDLINE_LINUX="n**et.ifnames=0 biosdevname=0**"**然后sudo grub-mkconfig -o /boot/grub/grub.cfg**重启后,网卡名称 变成了eth0和wlan0重启后没有enth0 无法ping问题ifconfig 没有eth0 但 ifconfig -a 有。解决方法:
2022-04-05 11:40:50
2977
原创 ubuntu 网络配置 修改网卡名 查看网卡名常见命令 及问题
ubuntu 网络配置 修改网卡名 查看网卡名常见命令 及问题需求 :代码里读到mac地址 (先读到网卡名称 然后读这个网卡的地址 )读到网卡名称sudo cat /proc/net/dev | awk ‘{i++; if(i>2){print KaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲}' | sed 's/^[\…//g’列出所有的网卡名代码: string strMac,eth; c
2022-04-05 11:04:43
1483
原创 Linux守护进程service Daemon 【C语言构建简单的守护进程】
Linux Daemon Writing HOWTO1什么是守护进程?守护进程是后台运行,自动运行,少交互或不交互。守护进程(或服务)是一个后台进程,设计为自动运行,几乎不需要用户干预。ApacheWeb服务器http守护程序(httpd)就是这样一个守护程序示例。它在后台监听特定端口,并根据请求类型提供页面或处理脚本。在Linux中创建守护进程会按照给定的顺序使用一组特定的规则。了解它们是如何工作的将有助于您了解守护进程在userland Linux中是如何运行的,但也可以通过对内核的调用来运行
2022-03-25 11:53:21
9725
原创 ## windows API 服务 Linux systemd 服务守护进程 QT 服务跨平台
windows API 服务 Linux systemd 服务守护进程 QT 服务跨平台近日迁移MFC 程序到linux涉及跨平台windows 的服务可以 (1)开始->附件->运行->输入:services.msc 打开i服务代码里服务实现就是把自己要运行的代码 放到线程里比如在main()里调用主要工作就是两件事:① 初始化一个SERVICE_TABLE_ENTRY 分派表结构体。SERVICE_TABLE_ENTRY DispatchTable[
2022-03-23 23:27:56
561
原创 QT界面 全屏显示 自适应显示 多屏显示
需求:界面不小 也不用最大 就自适应 最需要的尺寸 QScreen *screen = QGuiApplication::primaryScreen (); QRect screenRect = screen->availableVirtualGeometry();//自适应 MainWindow_CMP->resize(screenRect.width(), screenRect.height());需求:界面比较大需要...
2020-07-21 11:42:01
8388
2
Day8|多 batch 推理实测:RK3568 的 NPU 真被喂满了吗?(附摄像头实时流彩蛋)
2026-09-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅