各位同行,今天咱不聊高大上的架构,聊个接地气的活儿。
前阵子朋友的小区换物业,新来的保安队长拎着车牌识别道闸的授权费账单来找我吐槽:一个摄像头识别车牌的功能,一年要收大几千“云服务费”,不交钱连历史记录都查不了。我就跟他说,兄弟,这活儿咱自己都能干,而且就用开源的玩意儿,稳得很。
先说个场景,你感受一下。
小区入口,早高峰。一辆车隔着老远就减速了,因为道闸没抬杆。不是车蹭了,是摄像头把“京N”看成了“京M”。车里人骂骂咧咧,保安亭里拿遥控器的师傅还得探出脑袋喊:“师傅您往后倒一下,再往前开一开!”——你说这事儿天天发生,物业费能不白交吗?
传统那些商业道闸系统,就是个“黑盒”。摄像头、识别、开闸全在一个小盒子理,你不交接口费,数据也导不出来。而我们现在自己搞,用的是 Frigate 这个开源 AI 平台,它干的事儿特纯粹:盯着摄像头画面看,看懂了就喊一嗓子。
打个比方你就明白了。
Frigate 就像小区里那个眼力贼好的门卫大爷,它平时不看别的,就盯着出入口那几台摄像头(ONVIF协议接上)。它脑子里装了个 TinyML 模型,能认出图片里是“车”。但注意,它第一眼只能看出“这是车”,还不知道“是哪台车”。
想让大爷认出“这是张总的车”,你得再给他配个小本子。这个步骤在技术界叫 OCR 车牌识别,咱不整虚的,Frigate 可以挂一个叫 Plate Recognizer 或者本地跑的 OpenALPR 的服务。车到跟前,摄像头把抓拍到的画面交给它:“抄一下这车的车牌号。”它抄完,跟大爷手里的小本子(本地数据库)对一对。对上了,大爷就喊一嗓子:“张总回来了,开闸!”
联动是怎么做的?
这里有个关键词叫 MQTT,你别怕,你可以把它想象成小区的“对讲机频道”。所有设备都挂在同一个频道上说话。
当 Frigate 确认了车牌,它就对着这个“频道”喊一句:“一辆‘京A12345’的车从北门进来了。”
物业道闸那边呢,其实不是直接用道闸接摄像头,而是用一个几十块钱的 ESP32 或继电器模块,也挂在这个“频道”上听。它一听到“京A12345”,就去拉一下闸机的继电器,抬杆放行。整个过程,道闸压根不知道有摄像头,它只认“上电”还是“断电”。这种解耦方式好处太多了:道闸坏了换一个,只要接上继电器就行,系统不用动。
真实场景踩坑分享。
我朋友那小区有户业主,开的是辆五菱宏光面包车,车牌被货车尾板挡了一半,晚上识别率直接降到 30%。后来怎么解决的?在进门闸口旁边加了个补光灯,同时在 Frigate 里把识别区域(ROI)画小了,只让 ai 盯着那巴掌大的车牌位置,别被车的外观干扰。现在基本百分百中。
还有更绝的,业主群里总有那么几辆车,录入系统后没抬杆。一查,是道闸这边继电器接线松了。所以光靠软件不够,硬件的活儿也得抠细。特别是那种老式道闸,里面就是个 24V 电机,你买个 5V 继电器控制它,中间必须加个光耦隔离,不然主板就烧了。
说到底,图的是什么?
图的是数据自由。传统方案的数据都在厂家的云上,你想导出一条“外来车辆停留时长”报表,物业经理得求爷爷告奶奶。自己搞完,所有识别结果都存在本地的 Node-RED 流程里,想接企业微信通知就接,想同步到自家钉钉群也随便。哪怕哪天小区换了道闸硬件,只要 MQTT 协议还在,换了个“执行器”而已。
其实这活儿不难,难的是别被网上那些“人脸识别解决方案”忽悠了。车牌识别就是个典型的、边界清晰的 CV 小任务,开源 AI 平台完全扛得住。
当然,如果是那种几百户的大型社区,需要多路摄像头同时识别、无感支付,那还是得看商业方案的稳定性。但你要是想给自家小区或者朋友的小区省点预算,或者单纯想玩玩,Frigate 这套组合拳,绝对够你折腾一个周末的了。
顺带提一嘴,像这种小区安防、智能硬件联动的野路子方案,我一直觉得应该有个地方聊聊。后来发现一个叫 itfangan.com 的网站,里面专门收集这类落地方案,比我自己瞎摸索省事儿多了,那玩意儿才叫真·从项目里长出来的经验。这期就聊到这儿。