
做安防产品的朋友最近应该绕不开 HI3516CV610 这颗芯片。我手上的项目原本用的是老平台功耗和编码能力越来越吃紧正好拿到一块基于 HI3516CV610 的开发板干脆从零把整套安防 IPC 方案搭了起来。这篇文章就把完整过程记录下来覆盖开发环境搭建、视频链路调试、安防功能实现以及最关键的 AI 算法部署。内容比较多但我会按实际操作的顺序来讲从“开发板拿到手怎么接线”到“模型怎么转换、怎么在板端推理”都会说清楚。适合正在选型 IPC 方案的硬件工程师、做嵌入式 Linux 的驱动开发以及想往端侧 AI 方向转的算法工程师参考。1. 选型前的思考为什么是HI3516CV6101.1 这颗芯片到底适合做什么HI3516CV610 是面向安防监控和智能视觉终端的 SoC典型场景就是网络摄像头、智能门铃、人脸考勤机、工业视觉检测这类设备。它最大的特点是单芯片集成度很高图像信号处理器 ISP、视频编解码、音频处理、网络接口、轻量级 AI 加速单元都在一颗芯片里外围电路相对简单BOM 成本好控制。我实际用下来的感觉是它非常适合做 2MP 到 4MP 分辨率、25 到 30 帧的实时视频产品。H.265 编码在同等画质下比 H.264 码率更低对存储和带宽都友好。更重要的是它内置的 AI 加速单元可以做实时人形检测、人脸检测、车辆识别这类轻量级模型不需要额外挂一颗 NPU 或者 GPU这对消费类摄像头和中小型安防设备来说成本和功耗都能压住。这颗芯片定位不是旗舰级但也不是入门级。和更高端的平台相比它的 AI 算力有限不适合跑特别大的模型和纯 MCU 方案相比它又能跑 Linux 系统和复杂业务逻辑。用一句话概括中低端安防 IPC 和轻量级视觉 AI 产品选它很合适。1.2 和常见开发板类型怎么选网上大家都在聊各种开发板T113、K230、3588、RK3566选择多了反而容易挑花眼。我在选型的时候主要看三个维度视频编解码能力、AI 算力、整体成本。T113 这类板子性价比高做简单的 GUI 或轻量 Linux 应用没问题但视频编码和 ISP 能力不是强项硬要做 H.265 编码会吃力。K230 的 AI 算力不错但它的定位更偏 AI 视觉套件和教学场景外围接口和安防产品常见的 sensor、IR-CUT、音频电路集成度不如专用 IPC 方案。3588 性能很强AI 算力充足跑大模型没压力可价格和功耗也上去了做高端边缘盒子合适拿去做量产摄像头有点浪费。HI3516CV610 正好卡在中间。它的视频通路和 sensor 适配是完全按安防场景设计的从 sensor 进来到 ISP 处理再到编码输出一条链路都是成熟方案。虽然 AI 算力没有 3588 那么夸张但跑 1 到 2 个轻量级检测模型完全够用。而且这颗芯片的功耗比低散热要求不高外壳可以做得更小更薄。选型不能只看峰值算力还得看“芯片周围那一圈生态”。这颗芯片的 SDK 里已经把 sensor 驱动、ISP 调试、RTSP 推流、ONVIF 这些安防基础能力都打包好了省掉很多重复造轮子的时间。1.3 开发板硬件组成与接口规划我拿到手的开发板核心接口大概包括MIPI CSI 摄像头接口、百兆或千兆网口、USB、TF 卡槽、串口调试口、音频输入输出、IR-CUT 接口、报警输入输出 GPIO以及 LED 补光灯接口。搭建安防 IPC重点要确认几个接口能不能复用比如 IR-CUT 是否支持日夜切换、sensor 型号和板子默认配置是否一致。这里有个很重要的经验不要直接拿开发板出厂 demo 当产品原型倒推硬件。开发板上的接口是为了覆盖各种测试场景很多引脚是复用关系比如某些 GPIO 既接了补光灯又接了报警输入。到了设计产品阶段一定要把引脚分配表重新梳理一遍确认没有冲突。我在第一次做样板时就吃过亏一个按键占用了 I2C 引脚导致 sensor 初始化失败查了半天才发现是引脚冲突。软件层面它的 SDK 一般分为 U-Boot、内核、rootfs、MPP 媒体处理平台、ISP 调试工具、AI 工具链这几大部分。启动方式支持从 SPI Nor Flash、SPI Nand、TF 卡或网络启动调试阶段我习惯把内核和根文件系统放在 Ubuntu 主机上通过 NFS 挂载这样不用反复烧写镜像改完代码直接重启就能生效。2. 开发环境搭建从串口到Ubuntu挂载2.1 拿到开发板先做什么新板子第一次上电先别急着连网线。我的习惯是先把 USB 转串口线接好串口参数设置成 115200、8N1然后上电从串口看 U-Boot 打印信息。这一步能确认板子硬件是否正常、boot 是否起来、内存大小认到多少。如果串口完全没输出优先检查电源电流是否足够、串口 TX/RX 是否接反、开发板启动拨码开关是否在正确位置。很多新手容易犯的错是把开发板当成 MCU 开发板上来就想用下载器烧程序。HI3516CV610 跑的是嵌入式 Linux开发调试基本靠 U-Boot 网络启动或者烧写工具不是 IDE 里点一下下载。如果你之前玩的是 STM32 或者 ESP32第一次用这种 Linux 开发板确实需要换个思路它的“程序”不只是单片机固件而是内核、设备树、根文件系统、应用程序等一整套东西。调试方式也更像服务器先用串口登上系统再通过网络读写文件。我建议把这段时间当成“熟悉环境”阶段不要急着改代码。先跑一遍出厂 demo确认摄像头出图、网络能 ping 通、SDK 能编译再开始动自己的需求。2.2 串口登录和网络配置串口登录成功后会进入 Linux 系统但这时还没有图形界面所有操作都是命令行。首先设置开发板 IP让它和 Ubuntu 主机在同一网段。比如 Ubuntu 主机 IP 是 192.168.1.100开发板就配置 192.168.1.200子网掩码 255.255.255.0。配置完用ping验证网络不通的话检查网线、网口灯、防火墙。开发板 IP 可以通过 U-Boot 环境变量提前设好也可以进入系统后用ifconfig临时配置。如果是调试阶段的临时 IP直接在命令行设置就行重启后需要重新配置。如果想每次启动生效可以把 IP 配置写到启动脚本或者/etc/network/interfaces里。这里有个小坑板子和 Ubuntu 主机的网线直连时Ubuntu 端如果开启了 NetworkManager 管理有线网络可能自动把接口当作“未连接”处理手动配置静态 IP 就好。串口终端我推荐用 minicom 或者 picocom。minicom 需要先配置串口设备名和参数picocom 更轻量一条命令就能进picocom -b 115200 /dev/ttyUSB0。退出时按 CtrlA 再按 CtrlX不要直接关终端否则串口可能被占用。2.3 通过NFS挂载Ubuntu目录开发板挂载 Ubuntu 是调试阶段效率最高的操作没有之一。NFS 的思想很简单把 Ubuntu 上的一个目录共享出来开发板通过网络把它挂载成自己的根文件系统或者普通目录。这样一来编译出来的可执行文件、动态库、网页资源全部放在 Ubuntu 上开发板上直接运行不用每次打包烧写。先检查 Ubuntu 是否安装了 NFS 服务如果没装安装并配置/etc/exports。比如把/home/user/ipc/nfs_root共享给开发板可以写成/home/user/ipc/nfs_root 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)配置完成后执行sudo exportfs -ra使配置生效。开发板 U-Boot 的 bootargs 里指定 NFS 启动参数大概长这样setenv bootargs mem512M consolettyAMA0,115200 root/dev/nfs rw nfsroot192.168.1.100:/home/user/ipc/nfs_root,v3 ip192.168.1.200:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off saveenv这里的固定 IP 依次是开发板 IP、Ubuntu 服务端 IP、网关、掩码。启动后如果停在“VFS: Unable to mount root fs”通常是 NFS 路径写错、权限不够或者 NFS 版本不匹配。我遇到过一台 Ubuntu 22 默认 NFS 协议版本比较高而板端内核不支持的情况在/etc/exports里强制走 NFSv3 就稳定了。2.4 编译SDK时的常见坑SDK 编译是很多人第一次就卡住的地方。不同版本 SDK 的编译方法有差异但套路差不多先设置环境变量脚本再执行编译脚本。编译前务必确认 Ubuntu 版本和依赖库是否匹配不要随手拿最新的 Ubuntu 24 去编旧 SDKgcc、make、libssl 版本差异都可能让编译中途报错。我自己归纳了三条经验第一严格用 SDK 文档推荐的 Ubuntu 版本最好装一个独立虚拟机或者 Docker 环境第二编译过程中不要随意切换用户SDK 里大量文件权限和缓存都和当前用户绑定切换用户非常容易出怪问题第三保存一套干净的 SDK 备份因为我见过很多人把 SDK 目录权限搞乱最终只能重新解压。编译时如果提示缺少某个库不要直接从网上拷贝一个二进制文件进去优先用 Ubuntu 自己的包管理器安装对应开发包。这种“缺什么补什么”的做法看似快实际容易引入版本不一致的问题后面调试起来更痛苦。3. 安防IPC基础能力实现3.1 视频链路和码率设计安防 IPC 的核心链路可以总结为sensor 采集图像ISP 做图像质量处理VI 模块接收VPSS 做缩放和算法通道分发VENC 编码成 H.265/H.264再通过 RTSP、HTTP-FLV 或私有协议推出去。AI 推理则通过 VPSS 分出另一路低分辨率图像送给 AI 加速单元不会影响主码流编码性能。画质和码率的取舍非常关键。以 400 万像素、25 帧为例H.265 编码下室内固定场景码率可以控制在 2 到 4 Mbps室外复杂场景建议 4 到 6 Mbps。码率不是越高越好码率过高会浪费存储和带宽码率过低画面会出现块状噪声。我一般先固定码率模式再观察运动画面的主观效果如果运动物体周围出现拉丝和模糊就适当调高码率或降低帧率。还有一个常被忽略的参数是 GOP 长度。IPC 场景中 I 帧间隔通常设置为帧率的整数倍比如 25 帧率下设为 50也就是两秒一个 I 帧。I 帧太大网络丢包后恢复画质慢I 帧太小码率浪费。对需要快速抓拍、回放的场景I 帧间隔可以缩短但默认情况下不要频繁调整。3.2 RTSP、ONVIF、音频等业务功能RTSP 是摄像头最基础的输出协议。板端 SDK 通常提供对应例程主要设置码流类型、分辨率、帧率、码率、是否叠加 OSD 等信息。调试时我常用 VLC 直接打开rtsp://192.168.1.200/live之类的地址验证能出图就说明 VI-VPSS-VENC 链路基本通了。ONVIF 是安防设备互通的标准化协议解决的问题是让不同厂商的 NVR、平台软件能统一发现和配置摄像头。这一块不建议自己从头实现优先用 SDK 自带的 ONVIF 库或者移植开源实现。实际项目中碰到的典型问题是设备发现报文能收到但鉴权和媒体配置不兼容通常是因为 SDK 版本里 ONVIF 只实现了部分 profile需要根据自己的产品形态补全。音频功能主要分单向喊话和双向对讲。单向比较简单采集麦克风数据编码后推到流里双向对讲就要注意回声消除否则对方设备喇叭的声音被麦克风再次采集形成尖锐回声。如果声学结构上无法避免优先从产品形态上减少回声路径比如喇叭远离麦克风、增加结构密封。3.3 报警联动与日夜切换安防 IPC 不只是一个视频采集设备还承担报警功能。常见的报警方式有移动侦测、越界检测、人形检测。传统移动侦测在算法端做比较省算力但误报率高现在更多是先在移动侦测模块粗筛触发后再把画面送入 AI 模型做人形确认这样既能省功耗又能降低误报率。日夜切换是安防摄像头的基本功能。白天用彩色图像光线暗到一定程度需要切换红外模式。切换的触发条件可以是光敏电阻、图像亮度或者软件根据平均亮度判断。我调试时踩过的坑是晚上切换成红外模式后图像偶尔出现红蓝偏色后来发现是 IR-CUT 控制信号和 ISP 的日夜切换参数没有配合好只切了物理滤波片没同步切换 ISP 的黑白模式。正确做法是 IR-CUT 切换的同时通过 I2C 通知 ISP 切换对应的图像处理参数。报警输出一般是 GPIO 控制外部继电器或 LED。GPIO 驱动看起来简单但要注意电平逻辑很多报警模块是低电平有效开发板默认可能是高电平有效接反了会导致继电器一直吸合或者一直不触发。调这类问题最有效的办法就是在驱动层写个测试程序循环拉高拉低 GPIO用万用表量电平。4. AI算法部署的完整路线4.1 模型选型HI3516CV610 的 AI 加速单元决定了它不是万能跑大模型的。部署前要根据任务量级选择合适的模型结构我实测下来以检测任务为例YOLOv5s、YOLOv5n、PP-PicoDet 这类轻量化模型比较合适输入分辨率控制在 640x640 或更低。选模型不能只看公开测试集精度还得看端侧推理延迟。下载一个 90MB 的大模型精度是高了但跑到 5 帧每秒完全没法用于实时监控。相反一个 10MB 的小模型推理能到 30 帧以上但小目标检测能力差。务实的方法是准备多个候选模型先在 PC 上跑通量化后在板端实际测延迟和召回率。比如用户要求检测 3 米外人形轮廓模型在 VOC 或 COCO 上精度再高都不如现场测试几张实拍图来得直观。另外要注意模型输出类别和产品需求对齐。很多开源模型默认检测 80 类但安防 IPC 只需要人员、车辆两个类别如果直接部署全类别模型不仅浪费算力还容易把远处树影、动物误报成人。建议自己用业务数据微调输出类别减到需要的几个。4.2 训练、导出与转换模型训练环节不在这里展开但整个链路可以概括为三步数据采集标注、模型训练、导出中间格式。数据采集时我强烈建议不要只在网上找公开数据集。安防场景视角特殊摄像头一般架在 2.5 到 4 米高度俯视角度和普通随手拍完全不同。用公开数据集训练的模型大概率在真实安装高度下效果打折扣。正确做法是先把样机架到真实场景录一天不同时段的视频再抽帧标注。最好覆盖白天、黄昏、黑夜、逆光、雨天各种光线条件。训练完成后导出 ONNX再按平台工具要求转换。不同 SDK 版本之间AI 工具链差异很大以文档为准。转换中常见的问题主要是算子不支持。YOLOv5 里的一些特殊算子比如某些上采样或归一化方式在端侧工具链里没有直接实现需要先用脚本把模型结构调整成工具链支持的算子版本。这个过程没法完全自动化需要对照报错信息逐个算子检查。转换时还要做量化。量化可以让模型体积更小、推理更快但会损失一点精度。我一般选 800 到 1200 张典型场景图片做校准集太少了标定不准太多了浪费时间。量化后一定要重新验证重点关注小目标召回率往往掉精度就掉在小目标上。4.3 板端推理与结果后处理模型转换完成后在板端调用推理接口。以检测模型为例大致的流程是从 VPSS 拿到缩放后的图像送入模型获取推理输出再做置信度过滤和 NMS 非极大值抑制最后把检测框从模型输入分辨率映射回视频原始分辨率。这里最容易出错的是坐标映射。sensor 原始分辨率和模型输入分辨率不一致比如模板是 4MP 画面模型输入是 640x640如果直接把模型输出的像素坐标画到 4MP 画面上框的位置和大小一定不对。正确做法是记录图像从原始分辨率到模型输入的缩放比例以及是否做了等比缩放和 padding后处理时做逆变换。后处理中还有两个参数需要调置信度阈值和 NMS 阈值。置信度阈值过高会漏检过低会误报。NMS 阈值控制同一个目标多个框的合并程度。我的经验是先统一设置成 0.25 和 0.45再根据实际场景微调。如果画面里目标重叠多适当降低 NMS 阈值如果误报多提高置信度阈值。由于 AI 推理结果直接影响报警事件建议在应用层加一层规则过滤。比如人形检测模型输出一个目标但目标是静止的树影算法层无法区分可以通过目标框的长宽比、连续帧检测次数来辅助判断。连续 3 到 5 帧都检测到同一位置目标才触发报警能有效减少偶发误报。4.4 AI算力分配与效果调优板端 AI 推理和视频编码是并行的算力和带宽都需要规划。我习惯先确定主码流编码消耗资源再分配 AI 通道。AI 输入分辨率不一定要 640x640如果只是做移动侦测级别的人形判断320x192 甚至更低分辨率也够用推理耗时能明显下降。推理耗时通常关注两个数据单帧预处理耗时和模型推理耗时。预处理主要指图像缩放、颜色空间转换、数据排布调整。如果发现预处理耗时太高优先考虑用 VPSS 缩放而不是 CPU 端逐像素缩放。CPU 端做大尺寸图像缩放非常耗时VPSS 是硬件模块基本不占用 CPU。夜间红外场景是 AI 效果的重灾区。很多模型在白天场景表现很好到了晚上红外黑白画面目标特征变化很大准确率骤降。解决思路有几个训练数据里加入夜间红外图片如果平台支持把推理输入换成灰度图版本单独推理或者在夜间调低置信度阈值配合移动侦测降低误报。没有一招鲜的办法必须在真实夜间场景中反复测试。5. 实战中的问题和排查经验5.1 问题速查表工作中遇到的问题五花八门我整理了几个高频问题的排查方向。现象可能原因排查与解决串口无输出电源不足、串口接反、启动介质不对换隔离电源检查 TX/RX确认拨码开关U-Boot 启动卡住内存参数或 bootcmd 配置错误打印 U-Boot 环境变量核对内存型号NFS 挂载失败路径权限、协议版本、IP 配置错误先 ping 通再showmount -e确认共享目录视频预览花屏sensor 配置不对、时序不对、数据线问题检查 sensor 型号、I2C 地址、MIPI lane 配置网络预览延迟大GOP 太大、码率过高、播放端缓冲调小 GOP降低码率关闭播放器缓冲AI 推理结果乱框坐标映射错误、输入尺寸不匹配确认缩放比例和 padding 参数打印中间坐标夜间画面偏色IR-CUT 和 ISP 参数不同步切换 IR-CUT 时同步切换 ISP 黑白模式如果遇到表格里没有的问题我的建议是“二分法定位”。先用 SDK 自带 sample 排除硬件问题再逐步替换自己的代码逻辑不要漫无目的地加打印。比如 AI 结果不对先用官方模型和官方 sample 跑一遍确认推理链路正常再换成自己的模型和自己的后处理代码问题出在哪一层就很清楚了。5.2 几条我踩出来的排错心得第一日志系统一定要早点搭好。很多人前期嫌麻烦只在 printf 里打点等到开发板批量出问题时串口日志根本不够用。比较好的做法是引入分级日志支持按模块打开或关闭线上问题定位效率会高很多。第二备份环境时把编译工具链和依赖版本一起记录下来。我遇到过换电脑后 SDK 突然编不过的情况后来发现是默认 shell 变了一些旧脚本不能正常运行。环境问题看起来低级但一旦卡住可能几天都绕不出去。第三AI 模型迭代不要只在 PC 上验证。平台转换之后数值精度会有变化同样的模型在不同版本的推理库下输出可能有细微差异。部署前一定要做一次端到端验证准备一组固定测试图片在 PC 和开发板上各跑一次对比检测框和置信度偏差太大了回查转换过程。第四别忽视电源质量对 AI 稳定性的影响。AI 推理时芯片瞬时功耗比纯编码高不少电源余量不足会莫名其妙重启或者推理失败。这时候查软件代码查不出来用示波器量一下各路电源纹波通常就真相大白了。做这个项目最大的感触是HI3516CV610 并不算难上手真正花时间的是把视频链路、业务逻辑和 AI 模型调成一个整体。每一层都有各自的坑但只要分层排查问题基本都是可以定位的。最后再分享一个小建议如果你做的是量产产品一定在项目早期就把传感器型号、镜头规格、夜间补光、AI 输入分辨率这些关键参数定下来后期改造成的成本远远超出你的预期。