Skip to content
← 全部新闻

· 作者:OpenIPC 团队

会看东西、转动时依然清晰的摄像机

YOLOv8 在 GK7205V5x0 的 NPU 上运行,模型内置在闪存中,无需任何设置;云台摄像机跟随一个人并在转动过程中保持清晰;防闪烁不再靠猜测,而是直接测试光源。

在摄像机自己的芯片上做目标检测

GK7205V500、V510 和 V530 带有神经网络加速器,YOLOv8 现在可以在上面运行:人、自行车、汽车、摩托车、公交车、卡车、猫和狗。640x384 的帧在小模型上耗时 46-50 ms,在大模型上耗时 102-112 ms。检测结果送往运动检测已有的去处——ONVIF 元数据轨道、浏览器中画在画面上的检测框、录像内的轨道,以及 /api/v1/analytics。

关键之处在于:模型就放在固件本身里面,加速器自行启动。 无需下载,无需编译,无需配置。这些摄像机以前做不到这一点。该功能默认关闭,一行配置即可开启。

模型存放在 xmnpu-models 中,只有 CI 会构建它们,因此每个文件都能追溯到生成它的提交和运行。任何东西发布之前,量化模型必须能找到全精度模型找到的东西;两者不一致时构建失败,不发布任何内容。权重、校准图像和类别列表都通过哈希固定。

底层驱动被重写并开源。固件过去携带的是厂商 SDK 的闭源 npu.o;现在携带的是我们自己的,向厂商库提供同样的设备和同样的 ioctl。它还修复了 blob 没有修复的问题:被丢弃的任务会被释放,没有任何路径在持有互斥锁的情况下返回,正在运行的任务不会从中断处理程序中释放。时钟从 450 提升到 600 MHz。

云台摄像机跟随一个人

浏览器的云台控制面板上有一个跟随按钮,围绕被跟随者的检测框也画在那里。

它分步工作:当云台静止且画面稳定时,检测器把它看到的人交出来;摄像机选定一个并持续跟随,通过离上一个检测框最近的框来识别同一个人;云台转动若干步,直到把人放到画面中央。云台转动期间检测到的东西不会被处理,因为那些帧是糊的。自己触碰控制面板,或通过 ONVIF 或 DVRIP 移动摄像机,跟随就会暂停。

转动时依然清晰

转动时的模糊曾被归因于码率不足。其实是曝光的问题:画面移动时快门是打开的。实测正对测量,四倍码率换来 1.4 倍清晰度,短曝光换来 3.4 倍。

摄像机现在知道电机何时在运行,并只在那段时间缩短曝光,因此转动过程中画面清晰四倍,静止时的码流一点也不会增大。一直保持短曝光会让静止摄像机的码流翻倍,所以没人那样做。

顺带发现了转动时所有观看者的画面同时撕裂的原因。步进电机驱动用忙等待循环来计算步进之间的间隔,因为内核只能以 10 ms 为单位等待,一次转动要吃掉摄像机 70-86% 的 CPU。内核修复后降到 5% 以下,电机也变快了——俯仰快了三倍,从每秒 13 步到 41 步。落后的观看者现在在队列清空后立刻收到一个关键帧:停顿从 0.8-1.0 s 变为 0.1-0.3 s,丢帧从 11-13% 变为 2-3%。

在配备 MIS2009 传感器和步进电机云台的 Goke GK7205V510 上实测,1080p。

防闪烁不再猜测,而是测试光源

市电灯具每秒闪烁一百次,除非快门是半周期的整数倍,否则画面上会出现滚动条纹。以前有一个对抗条纹的模式,但它只在黄昏时启用,在明亮的房间里从不启用——而那正是条纹出现的地方。现在快门始终保持在整周期,条纹从约占画面的五分之一降到百分之一以下。

这破坏了日光场景:在阳光下摄像机需要几毫秒的快门,而现在不能低于十毫秒,画面就过曝了。靠亮度区分阳光和灯具行不通——200 W 泛光灯下的房间读数是其目标的 2.0 倍,室外场景是 2.46 倍,任何阈值都会弄错其中一个。

于是摄像机改为做一个实验。当画面在最短整周期快门下仍远超目标时,它会短暂缩短快门,在看到的画面中寻找灯具的条纹。有条纹,光源就是市电,模式保持开启,该场景一小时内不再询问。没有条纹,光源是稳定的,那就是阳光,快门被放开。检查期间画面会下降一次,持续不到半秒。

存储节省,与 XiongMai 的对比

storageSaver 面向录像要保存数周的摄像机,磁盘比画面更值钱——其他厂商称之为 H.264+、H.265+ 或 H.265X 的同一项工作。三个级别:第一级完全不丢帧,少要约四分之一的空间,在画面的运动部分比默认设置更好;上面两级省得更多,最高一级超过一半,但开始跳帧。

XiongMai 的模式被拆解并在我们的测试台上复现,运行时从他们的固件里读出了每一项设置,因此两者是在同等条件下测量的。安静场景下他们省 13%,我们省 27%。繁忙场景下他们的模式一点不省:码流比默认设置增大 22%,恰恰在有事情发生时表现更差。在画面的运动部分,相同码率下,我们的模式比默认设置画得更好且一帧不丢,而他们的画得更差且丢掉一半的帧。

其他

  • 摄像机可以读取自己的短信。 运营商关于激活、充值或余额用尽的消息,显示在一个页面上,不再需要 AT 命令和手工解码的 UCS2。通过短代码查询余额、发送自己的短信,以及把收到的短信转发到 Telegram。
  • 摄像机报告自己的崩溃。 内核日志在重启后保留,majestic 留下一个包含它最后写入的几行的转储;两者都可以手动或自动提交。它们按最上面五个栈帧的签名归档,所以一百台摄像机上的同一个 bug 就是一行记录。公开列表在 /crashes,提交一个崩溃可获得 Club 星星。
  • 码率完全不需要设置。 现在零表示“自动计算”,依据分辨率、帧率、编解码器和码控模式。这是新的默认值。
  • 夜间可以保持彩色,红外灯和白光灯分在不同的通道上。
  • 更换上行链路不再破坏任何东西。 把摄像机从有线换到 LTE 或换回来,SIP、外发码流、WHIP 和 WebRTC 会话都会在新地址上重连。打开的分享链接也能挺过去。