<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RK3588 on Zesean 的博客</title><link>https://zeseanblog.top/tags/rk3588/</link><description>Recent content in RK3588 on Zesean 的博客</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Sun, 06 Sep 2026 17:23:33 +0800</lastBuildDate><atom:link href="https://zeseanblog.top/tags/rk3588/index.xml" rel="self" type="application/rss+xml"/><item><title>聆行 VoxDrive — 分布式车载智能座舱（RK3588 + Jetson Orin 双板）</title><link>https://zeseanblog.top/projects/voxdrive/</link><pubDate>Fri, 04 Sep 2026 23:50:00 +0800</pubDate><guid>https://zeseanblog.top/projects/voxdrive/</guid><description>&lt;h2 id="项目概述"&gt;&lt;a href="#%e9%a1%b9%e7%9b%ae%e6%a6%82%e8%bf%b0" class="header-anchor"&gt;&lt;/a&gt;项目概述&#13;&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;聆行 VoxDrive&lt;/strong&gt; 是一套跑在真实硬件上的双 SoC 分布式车载智能座舱：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;RK3588（LubanCat-4）= 媒体 + 端侧语音节点&lt;/strong&gt;：摄像头采集 → MPP 硬件编码 → MP4 循环存储 / RTMP 推流，NPU 跑行人/车辆检测做&lt;strong&gt;事件锁录&lt;/strong&gt;；流式 ASR（fp16 三模型 NPU 分载）与 TTS 合成（SummerTTS）也都落在这块板；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Jetson Orin Nano = 中心 AI 节点&lt;/strong&gt;：LLM / RAG / 意图路由 / 画面问答 / Qt 数字座舱，全离线、不上云；&lt;/li&gt;&#10;&lt;li&gt;两板以太网互联：&lt;strong&gt;视频走 RTMP，控制与事件走 ZeroMQ&lt;/strong&gt;。语音可以控制录像、查状态、抓拍，还能直接问&amp;quot;画面里有什么&amp;quot;（VLM 看行车画面作答）；&lt;/li&gt;&#10;&lt;li&gt;麦克风与音箱是接在 RK 上的同一 USB 设备：说话本板识别、跨板查询、应答本板播报，播报期自动静音防&amp;quot;自己听到自己&amp;quot;（回灌）。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;设计原则：&lt;strong&gt;数据密集走专用加速器（RK 的 VPU/RGA/NPU），模型密集走中心算力（Jetson 的 GPU）&lt;/strong&gt;；实时敏感、算力可承担的小模型（ASR/TTS）下沉边缘，大模型（LLM/VLM）留中心。&lt;/p&gt;&#10;&lt;h2 id="双板实物"&gt;&lt;a href="#%e5%8f%8c%e6%9d%bf%e5%ae%9e%e7%89%a9" class="header-anchor"&gt;&lt;/a&gt;双板实物&#13;&#10;&lt;/h2&gt;&lt;p&gt;左上 Jetson Orin Nano（带散热扇），右侧 RK3588 LubanCat-4，两板经路由器以太网互联；左下 7 寸 DSI 触摸屏接 RK，正在运行座舱 UI 的桌面会话；麦克风/音箱 USB 组合设备接 RK 侧：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="双板实物：左上 Jetson Orin Nano、右侧 RK3588 LubanCat-4、左下 7 寸 DSI 触摸屏（座舱 UI 运行中），两板经路由器以太网互联，麦克风/音箱 USB 组合设备接 RK" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeseanblog.top/projects/voxdrive/images/hardware-setup.jpg" srcset="https://zeseanblog.top/projects/voxdrive/images/hardware-setup_hu_9510a3377c499d66.jpg 800w, https://zeseanblog.top/projects/voxdrive/images/hardware-setup.jpg 1600w" width="1600"&gt;&lt;/p&gt;&#10;&lt;h2 id="系统架构"&gt;&lt;a href="#%e7%b3%bb%e7%bb%9f%e6%9e%b6%e6%9e%84" class="header-anchor"&gt;&lt;/a&gt;系统架构&#13;&#10;&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR&#10; subgraph RK ["RK3588 · 媒体节点 + 语音推理节点"]&#10; CAM["IMX415&lt;br/&gt;MIPI CSI"] --&gt; ISP["rkisp&lt;br/&gt;NV12 1080p"]&#10; ISP --&gt; ENC["MPP H.264 硬编&lt;br/&gt;VBR · 零 CPU 软编"]&#10; ENC --&gt; MP4["MP4 分段循环存储&lt;br/&gt;水位覆盖 · 事件锁录"]&#10; ENC --&gt; RTMP["RTMP 推流&lt;br/&gt;断流自动重连"]&#10; NPU["RKNPU&lt;br/&gt;YOLOv5s INT8"] --&gt;|"行人/车辆检测"| MP4&#10; SVC["recorder_service&lt;br/&gt;REP :6700 / PUB :6701"]&#10; MP4 --- SVC&#10; RTMP --- SVC&#10; MIC["USB 组合设备&lt;br/&gt;麦克风+音箱"] --- VS&#10; VS["voice_service&lt;br/&gt;NPU×3 流式解码"] --&gt;|"识别文本"| ROUTER&#10; TN["tts_node&lt;br/&gt;SummerTTS 多核&lt;br/&gt;本板播报"] -.-&gt;|"合成请求"| TTS&#10; end&#10; subgraph JS ["Jetson Orin · 中心算力节点"]&#10; MM["mediamtx&lt;br/&gt;RTMP/RTSP/HLS"] --&gt; UI["Qt 数字座舱&lt;br/&gt;预览 · 状态 · 告警"]&#10; VLMQ["画面问答"] -.-&gt;|"vlm 直通"| VLM["vlm_service&lt;br/&gt;Qwen2-VL-2B"]&#10; VLM -.-&gt;|"抓帧 :6700"| SVC&#10; ROUTER["意图路由"] --&gt; LLM["LLM&lt;br/&gt;Qwen2.5-1.5B"]&#10; ROUTER --&gt; RAG["RAG&lt;br/&gt;真实车主手册"]&#10; ROUTER --&gt; TB["Tool Bus"]&#10; TB --&gt; TTS["TTS 网关&lt;br/&gt;REQ :6720"]&#10; LLM --&gt; TB&#10; end&#10; RTMP --&gt;|"视频流"| MM&#10; TB &lt;--&gt;|"REQ :6700&lt;br/&gt;状态/抓拍/开关 (RTT 2ms)"| SVC&#10; SVC --&gt;|"PUB :6701&lt;br/&gt;水位/断流/检测事件"| UI&lt;/pre&gt;&lt;p&gt;两个平面刻意分开：视频大流量不进控制面，控制面单条消息只有几百字节——跨板工具往返实测 &lt;strong&gt;0.73-2ms&lt;/strong&gt;。语音链同理：&lt;strong&gt;音频采集、识别、合成、播报都在 RK 本板&lt;/strong&gt;，跨板只传识别文本与应答文本两条轻量通道。&lt;/p&gt;&#10;&lt;h2 id="真机实拍rk3588-7-寸触摸屏真屏拍摄"&gt;&lt;a href="#%e7%9c%9f%e6%9c%ba%e5%ae%9e%e6%8b%8drk3588-7-%e5%af%b8%e8%a7%a6%e6%91%b8%e5%b1%8f%e7%9c%9f%e5%b1%8f%e6%8b%8d%e6%91%84" class="header-anchor"&gt;&lt;/a&gt;真机实拍（RK3588 7 寸触摸屏，真屏拍摄）&#13;&#10;&lt;/h2&gt;&lt;p&gt;行车记录页：左侧 mediamtx 拉流的&lt;strong&gt;实时预览&lt;/strong&gt;（断流自动重连），右侧状态卡轮询 RK（帧率/段数/磁盘水位环）+ 实时事件日志，底部按钮经 tool_bus 直控真设备；语音气泡「你：打开行车记录」是刚说完一句语音导航后 UI 的回显：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="RK 触摸屏·行车记录页：实时预览 LIVE + 存储水位环 + 事件日志 + 语音气泡" class="gallery-image" data-flex-basis="407px" data-flex-grow="169" height="908" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeseanblog.top/projects/voxdrive/images/dashboard-touch-dashcam.png" srcset="https://zeseanblog.top/projects/voxdrive/images/dashboard-touch-dashcam_hu_bb7794176d726824.png 800w, https://zeseanblog.top/projects/voxdrive/images/dashboard-touch-dashcam.png 1540w" width="1540"&gt;&lt;/p&gt;&#10;&lt;p&gt;主页磁贴：录像状态横条（30.0fps / 138 段 / 5.8GB 可用）与四张磁贴的数据全部来自跨板实时链路，无一张静态图：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="RK 触摸屏·主页磁贴" class="gallery-image" data-flex-basis="407px" data-flex-grow="169" height="908" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeseanblog.top/projects/voxdrive/images/dashboard-touch-home.png" srcset="https://zeseanblog.top/projects/voxdrive/images/dashboard-touch-home_hu_c8c3f0673f171e6f.png 800w, https://zeseanblog.top/projects/voxdrive/images/dashboard-touch-home.png 1540w" width="1540"&gt;&lt;/p&gt;&#10;&lt;p&gt;行车记录仪原始画质参考（IMX415 直出 1080p 快照，RK 端 NV12→JPEG、跨板抓拍约 0.15s）：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="IMX415 原始 1080p 快照" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="1080" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeseanblog.top/projects/voxdrive/images/snapshot-1080.jpg" srcset="https://zeseanblog.top/projects/voxdrive/images/snapshot-1080_hu_22f00068aaaacc49.jpg 800w, https://zeseanblog.top/projects/voxdrive/images/snapshot-1080_hu_c7de95e0f383a800.jpg 1600w, https://zeseanblog.top/projects/voxdrive/images/snapshot-1080.jpg 1920w" width="1920"&gt;&lt;/p&gt;&#10;&lt;p&gt;车控页 + 语音上屏（Jetson 侧实例同款界面）：问&amp;quot;现在录着吗&amp;quot;走真实链路（识别 → 路由 → 跨板查询 → LLM 组织 → TTS），底栏字幕是用户原话、气泡是基于真实工具应答生成的播报：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="车控页与语音播报" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="900" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeseanblog.top/projects/voxdrive/images/dashboard-voice.png" srcset="https://zeseanblog.top/projects/voxdrive/images/dashboard-voice_hu_145be24756cde134.png 800w, https://zeseanblog.top/projects/voxdrive/images/dashboard-voice.png 1600w" width="1600"&gt;&lt;/p&gt;&#10;&lt;h2 id="行车记录视频链路rk3588"&gt;&lt;a href="#%e8%a1%8c%e8%bd%a6%e8%ae%b0%e5%bd%95%e8%a7%86%e9%a2%91%e9%93%be%e8%b7%afrk3588" class="header-anchor"&gt;&lt;/a&gt;行车记录视频链路（RK3588）&#13;&#10;&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR&#10; A["IMX415&lt;br/&gt;RAW Bayer"] --&gt;|MIPI CSI-2| B["rkcif → rkisp&lt;br/&gt;3A/格式"]&#10; B --&gt;|NV12| C["V4L2 用户态&lt;br/&gt;mmap 4 缓冲 + DMA-BUF"]&#10; C --&gt; D["MPP H.264&lt;br/&gt;NV12 直入 · VBR"]&#10; D --&gt; E["Mp4SegmentSink&lt;br/&gt;I 帧边界滚动分段"]&#10; D --&gt; F["RtmpSink&lt;br/&gt;flv + extradata"]&#10; C -.每 30 帧.-&gt; G["最新帧槽"]&#10; G --&gt; H["RGA → RKNN&lt;br/&gt;YOLOv5s INT8 · NPU"]&#10; H --&gt;|"命中行人/车辆"| E&lt;/pre&gt;&lt;p&gt;几个值得说的实现细节：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;NV12 同制式直入 MPP&lt;/strong&gt;：ISP 出的 NV12 不做格式转换直接编码（全链路 CPU ~2.8%），RGA 只用于检测前处理的缩放；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;MP4 分段的坑&lt;/strong&gt;：movenc 不代转 Annex-B，需逐 NAL 转 AVCC 并手工组装 avcC；NAL 边界 off-by-one 的症状是&amp;quot;时长正常但解码全错&amp;quot;——验收判据用&lt;strong&gt;逐段全量解码&lt;/strong&gt;而非 duration；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;事件锁录&lt;/strong&gt;：检测线程经&amp;quot;最新帧槽&amp;quot;旁路挂接（忙时覆盖、不反压主管线），命中即给当前段加 &lt;code&gt;LOCK_&lt;/code&gt; 前缀，循环覆盖天然豁免，另有配额防锁段吃满磁盘；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;rkisp 残留态&lt;/strong&gt;：boot 残留下 S_FMT 原样传回会得到行距矛盾的布局（SEGV/无帧），修复=清零强制重算 + 读回几何校验。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="端侧语音闭环推理与音频-io-都在-rkllm-留-jetson"&gt;&lt;a href="#%e7%ab%af%e4%be%a7%e8%af%ad%e9%9f%b3%e9%97%ad%e7%8e%af%e6%8e%a8%e7%90%86%e4%b8%8e%e9%9f%b3%e9%a2%91-io-%e9%83%bd%e5%9c%a8-rkllm-%e7%95%99-jetson" class="header-anchor"&gt;&lt;/a&gt;端侧语音闭环（推理与音频 I/O 都在 RK，LLM 留 Jetson）&#13;&#10;&lt;/h2&gt;&lt;p&gt;语音链的形态一句话：&lt;strong&gt;音频不出板，跨板只传文本&lt;/strong&gt;。麦克风/音箱（同一 USB 设备）接 RK——&lt;code&gt;voice_service&lt;/code&gt; 进程内采集 16k PCM → kaldi-native-fbank 特征（与 sherpa C++ 前端逐位一致）→ zipformer 三模型 fp16 NPU 三核分载流式解码 → 识别文本 REQ 回 Jetson 意图路由 → 应答文本回到 RK 的 &lt;code&gt;tts_node&lt;/code&gt;（SummerTTS 多核合成）→ 本板播报。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;防回灌&lt;/strong&gt;：麦克风和音箱是同一块硬件，播报期做事件驱动静音，解除须等 play_end 后麦克风连续 1s 真实静音（+超时兜底）；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;ASR 选 fp16 而非 int8&lt;/strong&gt;：INT8 全套量化精度分析实测不满足流式精度（状态累积崩溃），fp16 零量化损失且 RTF 0.3 以内；TTS 评估 matcha RKNN 路线后放弃（声码器输出 STFT 谱需宿主 ISTFT，NPU 图不适用），改用 SummerTTS 引擎源码上板编译——真麦声学自环实测识别逐字正确、无循环。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Jetson 侧保留三个关键架构决策：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;真设备域确定性直通&lt;/strong&gt;。1.5B 小模型在 7 个工具间选择实测不可靠（&amp;ldquo;关闭预览&amp;quot;被选成关车窗、&amp;ldquo;还剩多少存储&amp;quot;选成编数），改为关键词命中即直达跨板工具、LLM 只把真实结果组织成播报——控制类链路降到 &lt;strong&gt;0.43s&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;语义双路路由&lt;/strong&gt;。规则通路兜底 + 语义通路（离线意图中心余弦，阈值留出探针校准）：关键词全 miss 的改述问句直接走 RAG 快路径，&lt;strong&gt;9.4s → 1.2s&lt;/strong&gt;；语义通路故障自动退化为规则单路。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;推理位置按实时性分层&lt;/strong&gt;。ASR/TTS 下沉边缘 NPU/CPU，LLM/RAG 留中心——判据是&amp;quot;实时敏感 × 算力可承担&amp;rdquo;，不是无脑把模型搬到一块板。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;RAG 语料是&lt;strong&gt;真实车主手册&lt;/strong&gt;（官网 PDF → 三级过滤 → 577 块向量库，板上构建），召回阈值 0.48 由&amp;quot;手册内改述句 vs 手册外噪声&amp;quot;的相似度实测分界定出。&lt;/p&gt;&#10;&lt;h2 id="座舱-ui-双端部署rk-触摸屏"&gt;&lt;a href="#%e5%ba%a7%e8%88%b1-ui-%e5%8f%8c%e7%ab%af%e9%83%a8%e7%bd%b2rk-%e8%a7%a6%e6%91%b8%e5%b1%8f" class="header-anchor"&gt;&lt;/a&gt;座舱 UI 双端部署（RK 触摸屏）&#13;&#10;&lt;/h2&gt;&lt;p&gt;同一套 dashboard 代码不改一行，配置切换跑在两种形态：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Jetson 桌面&lt;/strong&gt;与 &lt;strong&gt;RK 7 寸 DSI 触摸屏&lt;/strong&gt;（1024×600，Goodix 触摸）各跑一个实例，&lt;strong&gt;双端同时在线&lt;/strong&gt;、订阅同一套 ZMQ 数据源——UI 是纯客户端，换屏只是多一个实例，服务端拓扑零变化；&lt;/li&gt;&#10;&lt;li&gt;小屏自适应：可用几何过小时自动最大化 + &lt;strong&gt;X 级缩放 1.5625×&lt;/strong&gt; 到 1600×938 逻辑设计尺寸（Qt 自带 &lt;code&gt;QT_SCALE_FACTOR&lt;/code&gt; 在本板组合上首帧后冻结，实测弃用）；&lt;/li&gt;&#10;&lt;li&gt;真机闭环已验证：说&amp;quot;打开行车记录&amp;rdquo;→ RK 触摸屏切页并自动拉起 RTSP 预览，画面色彩正确、跨屏数据实时。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="实测数据"&gt;&lt;a href="#%e5%ae%9e%e6%b5%8b%e6%95%b0%e6%8d%ae" class="header-anchor"&gt;&lt;/a&gt;实测数据&#13;&#10;&lt;/h2&gt;&lt;p&gt;所有数字可复述测量方法，无估算值：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;指标&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;实测值&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;采集（IMX415 → NV12 1080p）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;30.0fps&lt;/strong&gt;，max 帧间距 33ms（驱动时间戳，120 帧）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;MPP H.264 硬编&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;延迟 &lt;strong&gt;avg 4.8 / max 8.5ms&lt;/strong&gt;，全链路 CPU &lt;strong&gt;~2.8%&lt;/strong&gt;（单核）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;跨板拉流（RK→Jetson mediamtx）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1080p30 全量解码零错误（30.2s），静态场景 VBR 下探 0.71Mbps&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;跨板控制面（ZMQ REQ）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RTT &lt;strong&gt;2ms&lt;/strong&gt;（路由器组网）；直连组网复测 &lt;strong&gt;avg 0.73ms&lt;/strong&gt;（0.64-0.83，n=20）；抓拍 143ms（含 JPEG 编码 + 183KB base64 跨板）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RKNN 事件锁录检测&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;推理 &lt;strong&gt;25.3ms ewma&lt;/strong&gt;（NPU core0），检测线程挂接下录像 30fps 无损；连续 1.5h+ 录像 ewma 26.2ms / 5154 次&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;语音闭环全程（文本入口→播报结束）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;3.55-5.47s&lt;/strong&gt;（LLM 组织 0.86-1.07s 为大头，跨板工具仅 2-10ms）；修复回灌级联后干净口径：router 应答 1.49-4.14s，→播报结束 7.0-17.9s（=答复文本+合成+实时音频时长，随答复长度自洽）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ASR 推理（RK NPU fp16 三模型分核）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;RTF 0.26-0.30&lt;/strong&gt;（10.1s 中英混复测 0.296），线上流式转写与 Jetson ORT fp32 贪心&lt;strong&gt;逐字一致&lt;/strong&gt;；前端特征与 sherpa C++ 逐位一致（对拍 maxabs=0）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TTS 合成（RK SummerTTS 多核 CPU）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;RTF 0.22-0.27&lt;/strong&gt;（7 字句 0.63s、28 字句 1.47s），合成 PCM 回传播放时长精确吻合&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;VLM 画面问答（Qwen2-VL-2B，按需换出 llm）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;应答与画面实测一致；周期=快照 0.35s+推理 4.7s+恢复 14.9s（冷启动 ~25-30s）；GPU 铁律=共存 OOM/须 evict 页缓存/ctx 2048+图降采样 960×540&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;真麦声学闭环（USB 组合设备）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;播命令→空气→麦克风→NPU 识别&lt;strong&gt;逐字正确&lt;/strong&gt;→真数据应答→本板播报+防回灌静音→无循环&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;LLM&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Qwen2.5-1.5B Q4_K_M，&lt;strong&gt;22.8 token/s&lt;/strong&gt;（首测）；第三轮复测 20.5-21.0 token/s（llama.cpp 纯生成口径 ×3，全栈在线）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;长稳&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;16min 双板联跑 fps 稳定 30.00、29417 帧零异常；故障注入 5s 精确超时自愈；第三轮复测时已连续录像 &lt;strong&gt;1.5h+（154k 帧）&lt;/strong&gt; 30.001fps、RTMP 零写错误&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;回归验证&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-09-06 第二轮全量验证全绿：RK 5/5 + Jetson selftest 8/8 + 回归 4/4×2 + E2E 抽查（RTSP 90 帧零错误/色度中性、HLS、跨板语音查询含真实值 rtt 1.6-2.2s、跨板抓拍 123ms）；同日傍晚第三轮性能复测（跨板 RTT/LLM/RAG 208-280ms/ASR/TTS/E2E 全栈在线全项重测）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="五个实战排障叙事"&gt;&lt;a href="#%e4%ba%94%e4%b8%aa%e5%ae%9e%e6%88%98%e6%8e%92%e9%9a%9c%e5%8f%99%e4%ba%8b" class="header-anchor"&gt;&lt;/a&gt;五个实战排障叙事&#13;&#10;&lt;/h2&gt;&lt;p&gt;比数字更有意思的是踩坑（每条都有一手证据链）：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;RKNN「流式状态发散」— 症状像量化精度，根因是内存布局&lt;/strong&gt;。zipformer 转 RKNN 后流式解码首块全对、之后结构性错乱（值集不变、位置全乱），INT8/fp16 同症状——直觉会怪量化或图编译。真因是 &lt;strong&gt;RKNN 对 4D 图输入的布局约定&lt;/strong&gt;：缓存张量必须按 &lt;code&gt;transpose(0,2,3,1)&lt;/code&gt; 预转置喂入。定位：探针模型 chunk 级逐张量对账 → 周期标记指纹排除数值精度 → 4D 直通 tiny 图暴力解出唯一转置；修复后转写与 fp32 &lt;strong&gt;逐字一致&lt;/strong&gt;。教训：多输入非图像模型上 NPU，先做直通等价自测。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;ZMQ linger 默认无限&lt;/strong&gt;：对端进程死亡时，客户端析构带着未投递消息&lt;strong&gt;永久阻塞&lt;/strong&gt;，工具总线整体楔死。没有 gdb 条件，靠 &lt;code&gt;/proc/&amp;lt;pid&amp;gt;/wchan&lt;/code&gt; + 残留 context 线程定位；修复 linger=0 + EINTR 重试后，故障注入 5s 精确超时、恢复即自愈。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;1.5B 选错工具&lt;/strong&gt;：LLM 自由选工具实测不可靠（关预览→关车窗），改成&amp;quot;关键词直通执行 + LLM 仅组织结果&amp;quot;——把确定性还给代码，把语言能力留给模型。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;rkisp 残留态&lt;/strong&gt;：S_FMT 原样传回残留行距，驱动照收但布局自相矛盾，症状是段错误 + 无帧。教训：&lt;strong&gt;不信任驱动的&amp;quot;照单全收&amp;quot;，写入前清零重算、读回后几何校验&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;防回灌静音窗口被&amp;quot;事件语义差&amp;quot;击穿&lt;/strong&gt;：E2E 对账发现播报结束时间异常，排查见&lt;strong&gt;扬声器播的回答被自家麦克风识别、级联出新查询&lt;/strong&gt;。根因是跨板事件语义差：Jetson 的 &lt;code&gt;play_end&lt;/code&gt; 是&amp;quot;合成+写入完成&amp;quot;（12s 音频 2.9s 就发出），而播报在 RK 实时进行——静音在&amp;quot;写完&amp;quot;后 0.6s 就解除，长答复播到一半麦克风听到自己的声音。修复=静音期顺带能量观测，解除改为 &lt;strong&gt;play_end 后麦克风连续 1s 真实静音&lt;/strong&gt;；同场景对比级联 3 次 → 0 次。教训：跨板系统的&amp;quot;同名词事件&amp;quot;未必同语义，端到端对账日志是最好的透视镜。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="与站内其他项目的关系"&gt;&lt;a href="#%e4%b8%8e%e7%ab%99%e5%86%85%e5%85%b6%e4%bb%96%e9%a1%b9%e7%9b%ae%e7%9a%84%e5%85%b3%e7%b3%bb" class="header-anchor"&gt;&lt;/a&gt;与站内其他项目的关系&#13;&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://zeseanblog.top/projects/vehicle-voice-agent/" &gt;车载 AI 语音助手（Jetson）&lt;/a&gt;：本项目的 Jetson 侧前身，七服务架构与音频链路由它收编重构而来；&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://zeseanblog.top/projects/xray-motion-control/" &gt;X 射线焊缝检测下位机&lt;/a&gt;：另一条嵌入式线（STM32 + FreeRTOS）。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>可穿戴导盲辅助系统（智辅盲行）</title><link>https://zeseanblog.top/projects/wearable/</link><pubDate>Tue, 01 Sep 2026 13:00:00 +0800</pubDate><guid>https://zeseanblog.top/projects/wearable/</guid><description>&lt;h2 id="项目概述"&gt;&lt;a href="#%e9%a1%b9%e7%9b%ae%e6%a6%82%e8%bf%b0" class="header-anchor"&gt;&lt;/a&gt;项目概述&#13;&#10;&lt;/h2&gt;&lt;p&gt;「智辅盲行」是一套面向视力障碍者的&lt;strong&gt;可穿戴式出行辅助装置&lt;/strong&gt;，为本团队参加第二十一届中国研究生电子设计竞赛「通感算智融合与数智化应用」专项赛的参赛作品。&lt;/p&gt;&#10;&lt;p&gt;传统导盲工具（盲杖、导盲犬）难以感知红绿灯、远处来车等语义信息。本系统以 &lt;strong&gt;RK3588 边缘计算平台&lt;/strong&gt;为核心，融合摄像头、毫米波雷达、IMU 与 GPS 多源传感器，在端侧完成目标检测与场景理解，并通过&lt;strong&gt;分级语音/触觉提醒&lt;/strong&gt;帮助使用者规避风险，实现全天候（夜间、雨雾、逆光均可工作）的独立出行辅助。&lt;/p&gt;&#10;&lt;h2 id="系统组成"&gt;&lt;a href="#%e7%b3%bb%e7%bb%9f%e7%bb%84%e6%88%90" class="header-anchor"&gt;&lt;/a&gt;系统组成&#13;&#10;&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR&#10; subgraph SENSE["感知端"]&#10; CAM["IMX415 摄像头"]&#10; RADAR["毫米波雷达"]&#10; IMU["ICM20948 IMU"]&#10; GPS["NEO6M GPS"]&#10; ESP["ESP32-S3 采集节点"]&#10; end&#10; subgraph COMPUTE["计算端：RK3588 边缘网关"]&#10; RKNN["RKNN NPU 推理&lt;br/&gt;YOLOv8n 目标检测"]&#10; FUSION["多源融合&lt;br/&gt;时空对齐"]&#10; GUIDE["导盲决策引擎&lt;br/&gt;风险分级"]&#10; end&#10; subgraph FEEDBACK["反馈端"]&#10; SPK["功放喇叭 · 紧急播报"]&#10; BC["骨传导耳机 · 常规提示"]&#10; VIB["震动马达 · 触觉告警"]&#10; end&#10; CAM --&gt;|MIPI| RKNN&#10; RADAR --&gt;|UART| ESP&#10; IMU --&gt;|I2C| ESP&#10; GPS --&gt;|UART| ESP&#10; ESP --&gt;|UART| FUSION&#10; RKNN --&gt; FUSION&#10; FUSION --&gt; GUIDE&#10; GUIDE --&gt; SPK&#10; GUIDE --&gt; BC&#10; GUIDE --&gt; VIB&lt;/pre&gt;&lt;p&gt;整机采用&lt;strong&gt;胸包式佩戴&lt;/strong&gt;：RK3588 与电池组置于胸前硬壳包内，摄像头从包顶朝前，传感器节点固定于腰带，续航 3 小时以上。&lt;/p&gt;&#10;&lt;h2 id="多传感器融合策略"&gt;&lt;a href="#%e5%a4%9a%e4%bc%a0%e6%84%9f%e5%99%a8%e8%9e%8d%e5%90%88%e7%ad%96%e7%95%a5" class="header-anchor"&gt;&lt;/a&gt;多传感器融合策略&#13;&#10;&lt;/h2&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;传感器&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;职责&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;频率&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;兜底逻辑&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;摄像头 + RKNN&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;目标检测：行人/车辆/障碍/红绿灯/斑马线&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;30fps&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;毫米波雷达&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;测距测速测角；&lt;strong&gt;夜间/雨雾/逆光兜底&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10Hz&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;纯视觉失效时接管&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IMU&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;坡道/坑洼检测、步态分析、跌倒检测&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;200Hz&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GPS 辅助姿态&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GPS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;全局定位、远程监护&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1Hz&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;基站定位降级&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;视觉与雷达互为冗余是本系统的核心设计：白天以视觉语义为主，摄像头失效的夜间与恶劣天气场景由毫米波雷达接管，保证感知链路无死角。&lt;/p&gt;&#10;&lt;h2 id="分级提醒策略"&gt;&lt;a href="#%e5%88%86%e7%ba%a7%e6%8f%90%e9%86%92%e7%ad%96%e7%95%a5" class="header-anchor"&gt;&lt;/a&gt;分级提醒策略&#13;&#10;&lt;/h2&gt;&lt;p&gt;不同距离与场景对应不同的置信度要求和提醒强度，避免过度打扰：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;场景&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;提醒方式&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&amp;lt; 0.8m 障碍（雷达+视觉双确认）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;喇叭强播「停！前方障碍」+ 震动马达&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0.8~2m 车辆逼近&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;喇叭播报「注意车辆靠近」&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2~5m 行人&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;骨传导耳机「前方 3 米有人」&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;红绿灯 / 斑马线识别&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;骨传导耳机「红灯停，检测到斑马线」&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;下坡 / 路面坑洼（IMU）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;骨传导耳机「注意下坡，路面不平」&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="软件架构"&gt;&lt;a href="#%e8%bd%af%e4%bb%b6%e6%9e%b6%e6%9e%84" class="header-anchor"&gt;&lt;/a&gt;软件架构&#13;&#10;&lt;/h2&gt;&lt;p&gt;全 C++ 模块化实现，按 &lt;code&gt;camera / radar / imu / gps / fusion / guide / voice / comm&lt;/code&gt; 划分模块，配置与规则（距离阈值、播报模板）全部外置为 YAML/JSON，便于现场调整：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;推理&lt;/strong&gt;：RKNN NPU 上运行 YOLOv8n 通用检测，预留红绿灯、斑马线专用模型&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;融合&lt;/strong&gt;：GPS UTC 时间戳 + 系统时钟做时空对齐，完成多源目标关联&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;决策&lt;/strong&gt;：场景理解 → 风险分级 → 播报策略三级流水&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;语音&lt;/strong&gt;：Piper 离线 TTS 实时合成常规提示 + 预录 WAV 零延迟播放紧急告警的混合方案，播报队列支持优先级打断&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="项目状态"&gt;&lt;a href="#%e9%a1%b9%e7%9b%ae%e7%8a%b6%e6%80%81" class="header-anchor"&gt;&lt;/a&gt;项目状态&#13;&#10;&lt;/h2&gt;&lt;p&gt;竞赛作品已完成整机集成与多场景实测（室内避障、逆光/雨雾、复杂路口、夜间、坑洼路面），目前仍在持续迭代识别精度与佩戴体验。&lt;/p&gt;&#10;</description></item><item><title>基于人脸识别的视觉门禁系统（RK3588）</title><link>https://zeseanblog.top/projects/face-access-control/</link><pubDate>Tue, 01 Sep 2026 14:05:00 +0800</pubDate><guid>https://zeseanblog.top/projects/face-access-control/</guid><description>&lt;h2 id="项目概述"&gt;&lt;a href="#%e9%a1%b9%e7%9b%ae%e6%a6%82%e8%bf%b0" class="header-anchor"&gt;&lt;/a&gt;项目概述&#13;&#10;&lt;/h2&gt;&lt;p&gt;面向区域门禁的&lt;strong&gt;边缘侧视觉安防系统&lt;/strong&gt;，防止异常访客进入。在 RK3588 上完成视频编解码、多模型 NPU 推理、视频推流的系统集成，实现「识别 → 比对 → 开门」的任务闭环，同时保证库内人脸识别准确度。&lt;/p&gt;&#10;&lt;h2 id="系统链路"&gt;&lt;a href="#%e7%b3%bb%e7%bb%9f%e9%93%be%e8%b7%af" class="header-anchor"&gt;&lt;/a&gt;系统链路&#13;&#10;&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR&#10; CAM["4 路 RTSP 摄像头"] --&gt; PULL["FFmpeg 拉流"]&#10; PULL --&gt; DEC["MPP 硬解码&lt;br/&gt;1080p@30fps"]&#10; DEC --&gt; BUF["共享缓冲区&lt;br/&gt;生产者-消费者队列"]&#10; BUF --&gt; RGA["RGA 预处理&lt;br/&gt;零拷贝"]&#10; RGA --&gt; NPU["NPU 多模型推理&lt;br/&gt;YOLO11 · RetinaFace · FaceNet"]&#10; NPU --&gt; CMP{"人脸比对&lt;br/&gt;SQLite 5k+ 特征库"}&#10; CMP --&gt;|"命中 &gt; 98%"| DOOR["GPIO 继电器开门&lt;br/&gt;延迟 &lt; 1s"]&#10; DEC --&gt; ENC["H.264 封装"]&#10; ENC --&gt; RTMP["RTMP 推流"]&lt;/pre&gt;&lt;p&gt;解码、推理、推流之间采用&lt;strong&gt;生产者-消费者队列&lt;/strong&gt;隔离，端到端延迟 &amp;lt; 200ms，长时间连续运行无内存泄漏。&lt;/p&gt;&#10;&lt;h2 id="关键技术点"&gt;&lt;a href="#%e5%85%b3%e9%94%ae%e6%8a%80%e6%9c%af%e7%82%b9" class="header-anchor"&gt;&lt;/a&gt;关键技术点&#13;&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;多媒体采集处理&lt;/strong&gt;：FFmpeg 实现 4 路 RTSP 视频流拉流；Rockchip MPP 完成 H.264 硬件解码；共享缓冲区保证帧数据的线程安全；解码后封装 H.264 经 RTMP 推流供远程查看&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;多模型 NPU 推理调度&lt;/strong&gt;：RKNN-Toolkit2 完成三模型 INT8 量化部署——YOLO11（人体检测）、RetinaFace（人脸检测）、FaceNet（人脸识别）；量化精度分析后对敏感层做&lt;strong&gt;混合量化&lt;/strong&gt;提升精度，单帧 NPU 推理耗时 &lt;strong&gt;&amp;lt; 35ms&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;工程优化&lt;/strong&gt;：解码零拷贝输出 Buffer 直入 RGA 做图像预处理，显著降低 CPU 负载&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;人脸识别管理&lt;/strong&gt;：本地人脸库管理，SQLite 存储 5000+ 人脸特征，库内验证命中率 &lt;strong&gt;&amp;gt; 98%&lt;/strong&gt;；编写 GPIO 子系统驱动门禁继电器，识别通过到开门 &lt;strong&gt;&amp;lt; 1s&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="核心模块与接口设计"&gt;&lt;a href="#%e6%a0%b8%e5%bf%83%e6%a8%a1%e5%9d%97%e4%b8%8e%e6%8e%a5%e5%8f%a3%e8%ae%be%e8%ae%a1" class="header-anchor"&gt;&lt;/a&gt;核心模块与接口设计&#13;&#10;&lt;/h2&gt;&lt;h3 id="多媒体链路模块"&gt;&lt;a href="#%e5%a4%9a%e5%aa%92%e4%bd%93%e9%93%be%e8%b7%af%e6%a8%a1%e5%9d%97" class="header-anchor"&gt;&lt;/a&gt;多媒体链路模块&#13;&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;模块&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;接口&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;职责&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;stream_loader&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;FFmpeg &lt;code&gt;avformat_open_input / av_read_frame&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4 路 RTSP 拉流接入&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;mpp_decoder&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Rockchip MPP 硬解接口&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;H.264 → NV12，1080p@30fps&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;rga_func&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;imresize / imcvtcolor&lt;/code&gt;（零拷贝 DMA）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;缩放与色彩空间转换&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;mpp_encoder&lt;/code&gt; + &lt;code&gt;streaming_manager&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;H.264 编码 + RTMP 封装推流&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;远程实时查看&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;detection_fusion_manager&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;多模型结果融合&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;检测/识别结果汇总&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="三级级联推理rknn-c-api"&gt;&lt;a href="#%e4%b8%89%e7%ba%a7%e7%ba%a7%e8%81%94%e6%8e%a8%e7%90%86rknn-c-api" class="header-anchor"&gt;&lt;/a&gt;三级级联推理（RKNN C API）&#13;&#10;&lt;/h3&gt;&lt;p&gt;人体 → 人脸 → 特征三级模型逐级过滤，只有命中上一级的候选才进入下一级，显著降低 NPU 平均负载：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;rknn_init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model_size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 加载 INT8 量化 .rknn 模型&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;rknn_inputs_set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;in&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 送入 RGA 预处理后的帧&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;rknn_run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;rknn_outputs_get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 检测框 / 人脸特征输出&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;级联&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;模型&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;输出&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;YOLO11（INT8）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;人体检测框&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RetinaFace（INT8）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;人脸框 + 关键点&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;FaceNet（INT8，敏感层混合量化）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;人脸特征向量&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="人脸比对接口"&gt;&lt;a href="#%e4%ba%ba%e8%84%b8%e6%af%94%e5%af%b9%e6%8e%a5%e5%8f%a3" class="header-anchor"&gt;&lt;/a&gt;人脸比对接口&#13;&#10;&lt;/h3&gt;&lt;p&gt;特征比对走 &lt;strong&gt;SQLite 特征库 + 余弦相似度&lt;/strong&gt;：&lt;code&gt;sqlite3_prepare / step&lt;/code&gt; 逐条读取库内 5000+ 人脸特征，与现场提取的特征做余弦相似度计算，超过阈值即判定命中——库内验证命中率 &amp;gt; 98%。命中后经 GPIO 子系统写寄存器拉起门禁继电器，识别通过到开门 &amp;lt; 1s。&lt;/p&gt;&#10;&lt;h3 id="线程与队列模型"&gt;&lt;a href="#%e7%ba%bf%e7%a8%8b%e4%b8%8e%e9%98%9f%e5%88%97%e6%a8%a1%e5%9e%8b" class="header-anchor"&gt;&lt;/a&gt;线程与队列模型&#13;&#10;&lt;/h3&gt;&lt;p&gt;解码、推理、推流三个环节以&lt;strong&gt;生产者-消费者队列&lt;/strong&gt;隔离：共享缓冲区 + 互斥锁/条件变量保证帧数据线程安全，单路阻塞不拖垮全局链路，端到端延迟 &amp;lt; 200ms，长时间运行无内存泄漏。&lt;/p&gt;&#10;&lt;h2 id="项目状态"&gt;&lt;a href="#%e9%a1%b9%e7%9b%ae%e7%8a%b6%e6%80%81" class="header-anchor"&gt;&lt;/a&gt;项目状态&#13;&#10;&lt;/h2&gt;&lt;p&gt;系统已完成集成与闭环联调，各项指标（识别耗时、端到端延迟、命中率、开门时延）均达标。&lt;/p&gt;&#10;</description></item></channel></rss>