<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>视频编解码 on Zesean 的博客</title><link>https://zeseanblog.top/tags/%E8%A7%86%E9%A2%91%E7%BC%96%E8%A7%A3%E7%A0%81/</link><description>Recent content in 视频编解码 on Zesean 的博客</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Sat, 05 Sep 2026 14:53:14 +0800</lastBuildDate><atom:link href="https://zeseanblog.top/tags/%E8%A7%86%E9%A2%91%E7%BC%96%E8%A7%A3%E7%A0%81/index.xml" rel="self" type="application/rss+xml"/><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>