从事人脸识别行业渐进2年(主要开发监狱的人脸识别服务),内心一直有一个梦想“打造出一款智能化的现代化的监狱管理系统”(不过要智能化到什么程度,心里却没有普尼),恐怕是从事IT行业后,总想设计出一款满意的产品,对自己从事该行业有一个交代做的怪吧。自己去过一些监狱和看守所, 有的确实挺现代化的, 遍地的摄像头,布满监室、走廊等全程360度无死角,主机房超大屏幕全程监控....。
今天我要讲的项目是 “监狱监室人员点名”。直入正题。
项目背景:大家都知道监狱中有很多监室(犯人居住),每个监室关押着为数不同的犯人(大概数目不透露了)。很多监狱需要每天都对这些犯人点名。然而点名还用着传统的方式(至少有部分是这样的):值班民警到每个监室去查人数点名。这样无疑增大了民警的工作。随着 ”人脸识别”技术的成熟,应用监室中的网络摄像机(一般每个监室都有)完全可以做到 ”人脸识别点名”。从而大大减轻民警的工作。当然 用 “指纹识别”、“指静脉识别”等也可以,但是这些设备都需要购买、安装。而网络摄像机一般的监室都有了。
今天突然想把这个项目写出来,给自己留个笔记。当初开发这个项目的时候,充满了激情:需求调研、搭建项目框架、指导界面开发、写业务、写底层、编写C#代码、编写C++底层.....。心想着从此处作为突破点或许能实现“打造出一款智能化的现代化的监狱管理系统”这个想法。后来这个项目也做出来了, 在某监狱试运行了一段时间下线了。原因说出来都是泪。痛定思痛何其痛哉...........。不多说了还是说项目吧。
项目整体架构:
下面是我现画的,之前画的找不到了。
UI界面:这个没什么说的,就是人机交互界面,在下面我会将自己的界面展现出来。
中央调度器:接收界面发来的命令,选择一个闲置的 MCU(后面说是干什么的),发送命令给之。接收 MCU发来的消息,转发给对应的界面显示。其功能远远不止这些。
MCU:乱起的英文名字,洋气。 主要是业务处理:人脸识别、人脸采集、控制摄像机、语音播放器等。
界面和中央调度器我是用 的C#语言、MCU用的 C++。
上面说的不清楚,我举个例子:
界面发送命令“101监室开始点名”->(中央调度器)处理判断等后将消息发给 MCU ->(MCU)从数据库中获取到“101监室”所有人员的信息和人脸特征值,然后控制“101”监室的 “网络摄像机”和“对讲机”进行 点名业务,完成后发送点名结果给“中央调度器”->(中央调度器)处理后发送给界面显示。
实例 时序图:
为什么需要多个 MCU?
mcu 主要是做业务处理。监狱中的监室有几百个(对应的摄像机也有几百),如果一个mcu同时对其进行人脸识别点名(同时控制几百个摄像机进行人脸比对),先不说速度比较慢,恐怕服务器也hold 不住的。 如果每一个监室配一个mcu(安卓系统的设备也可以的),又太奢侈。 最后决定根据服务器的配置和点名的速度 决定 一个mcu 控制多少 监室 。
MCU如何选择 网络摄像机?
网络摄像机都有唯一的 ip地址和监室号, 将这些 ip地址 都固定在 数据库中, mcu根据 接收到的命令(有监室号),选择对应的摄像机。
最后把我的界面贴出来:
最后:
该项目的完美要拥有一个 绝对完美的精确到高的 人脸识别的算法。
在该项目中为了降低算法的难度,已经将 盲比的 1:N 降到 了 1:20左右, 但成功率仍不理想,或许我用的算法 确实不咋地吧。
该文章原创,写的不清楚, 不是好文章,但不许转载。如有侵权或者有触及他人利息等不当之处望指正。 可发邮箱:qiushouzhi634920@163.com