{"id":19268327,"url":"https://github.com/xuzhijvn/ifcs","last_synced_at":"2025-04-21T19:33:20.974Z","repository":{"id":52539856,"uuid":"177533258","full_name":"xuzhijvn/ifcs","owner":"xuzhijvn","description":"Intelligent  Face Capture System（智能人脸抓拍系统）","archived":false,"fork":false,"pushed_at":"2021-04-26T19:00:14.000Z","size":673,"stargazers_count":27,"open_issues_count":4,"forks_count":8,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-01T15:49:59.711Z","etag":null,"topics":["multithreading","opencv"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xuzhijvn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-03-25T07:10:24.000Z","updated_at":"2025-01-10T02:52:56.000Z","dependencies_parsed_at":"2022-09-08T05:04:25.481Z","dependency_job_id":null,"html_url":"https://github.com/xuzhijvn/ifcs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuzhijvn%2Fifcs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuzhijvn%2Fifcs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuzhijvn%2Fifcs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xuzhijvn%2Fifcs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xuzhijvn","download_url":"https://codeload.github.com/xuzhijvn/ifcs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250120209,"owners_count":21378153,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["multithreading","opencv"],"created_at":"2024-11-09T20:15:48.693Z","updated_at":"2025-04-21T19:33:20.648Z","avatar_url":"https://github.com/xuzhijvn.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# IFCS\n Intelligent Face Capture System（智能人脸抓拍系统），本方案是基于CPU实现的，如需更好的性能，需要参考本方案思想改造成GPU的版本。\n \n## 1. 背景\n\nA.  智能摄像头（抓拍机）将人脸检测功能集成到网络摄像头内部，价格昂贵，智能检测功能与硬件高度集成，不利于后续功能扩展。\n\nB.  大量已有普通网络摄头没有被充分利用\n\n![](https://github.com/xuzhijvn/ifcs/blob/master/images/background.png)\n\n## 2. 目标\n\nA.  构建一种更通用的AI+视频监控的解决方案\n\nB.  充分利用现有资源，给普通网络摄像头赋能\n\n![](https://github.com/xuzhijvn/ifcs/blob/master/images/aims.png)\n\nIFCS并不是现有抓拍机的简单替代方案，IFCS和抓拍机各有适合其自身的应用场景，两种方案互为补充，力争为不同的场景给出最合适的解决方案。\n\n另外，IFCS的设计思想并不是一个新奇事物，多个厂商早已将类似的功能制成专业设备，例如：带有人脸检测功能的NVR，大华集团的IVSS一体机。这些专业设备全都集成了数量不等的GPU单元，GPU性能差异，决定了专业设备的负载能力。IFCS原型是基于CPU开发，旨在验证方案的可行性。\n\n\n## 3. 建设方案（单节点模式）\n\n在只有数十个摄像头的场景（个人认为30个以下），应用单节点方案就能解决问题。在摄像头更多的场景，应用集群模式是一种更好的解决方案。\n\n* 架构设计\n\n![](https://github.com/xuzhijvn/ifcs/blob/master/images/architecture.png)\n\n* 线程模式\n\n![](https://github.com/xuzhijvn/ifcs/blob/master/images/thread-model.png)\n\n\nA.  一个线程（生产者）轮询所有的监控摄像头，以固定的频率读取摄像头的实时数据；\n\nB.  将这些实时数据放入摄像头对应的分片中（Partition，同步阻塞队列）；\n\nC.  每个分片都有一个线程（消费者）去消费该分片里面的数据。\n\n\n因为人脸检查、人脸比对都是CPU密集型操作，每个线程消费一个分片和一个线程消费所有分片效果差不多，通过后面的实验数据也可以证明这一点，即使是多线程\n，响应时间基本也是线性增长的，并不能体现多线程的优势，因为单个人脸检查任务CPU占用率就接近80%。\n\n\n## 4. 建设方案（集群模式）\n\n\n[![](https://res.infoq.com/articles/video-stream-analytics-opencv/en/resources/figure1.png)](https://www.infoq.com/articles/video-stream-analytics-opencv \"实时视频流处理架构设计\")\n\u003e 图为：实时视频流处理架构\n\n+ [英文参考链接](https://www.infoq.com/articles/video-stream-analytics-opencv)\n+ [中文参考链接](https://infoq.cn/article/video-stream-analytics-opencv)\n\n\n## 5. 人脸检测\u0026人脸去重\n\n由于，检测对象可能长时间处在视频监控范围之内，因此，该时间段的视频帧充斥着大量重复检测对象。对所有重复对象都去做后续的1：N人脸识别显然不合理，因此需要合理的去重设计。\n\n不同的人脸检测算法，其识别率、资源占用率不尽相同。但总的来说，人脸检测是一种CPU密集型操作，本课题原型采用自OpenCV封装的哈尔级联人脸检测算法。经测试，该算法检测单帧耗时300ms左右，CPU占用率接近80%。\n\n\nA.  利用openCV人脸检测算法，找出帧里面包含的所有人脸，并保存至临时缓存。（为方便比对，缓存中存放的是经特征提取后的特征值）\n\nB.  将第一步的人脸逐一和缓存中的人脸比对，缓存中没有的人脸则保存下来发往下一步业务逻辑\n\nC.  用第一步得到的人脸替换缓存中的人脸\n\n![](https://github.com/xuzhijvn/ifcs/blob/master/images/deduplicate-1.png)\n\u003e 图5.1：去重原理-1\n\n![](https://github.com/xuzhijvn/ifcs/blob/master/images/deduplicate-2.png)\n\u003e 图5.2：去重原理-2\n\n![](https://github.com/xuzhijvn/ifcs/blob/master/images/deduplicate-3.png)\n\u003e 图5.3：去重原理-3\n\n![](https://github.com/xuzhijvn/ifcs/blob/master/images/deduplicate-4.png)\n\u003e 图5.4：去重原理-4\n\n## 6. 性能测试（单节点模式）\n\n实验结果表明，一个消费者（线程）任务耗时300ms、CPU占用率达到80%，随着消费者数目增多，任务耗时延长，CPU占用率进一步增高；当消费者（线程）任务达到8个时，平均任务完成耗时为2000ms，CPU占用率高达95%以上。（英特尔 Core i7-8550U @ 1.80GHz 四核 ，核心数: 4 / 线程数: 8）\n\n![](https://github.com/xuzhijvn/ifcs/blob/master/images/performance-1.png)\n\n抓拍机以海康威视的产品举例，其价格在2000元左右，IFCS节点服务器为一台价格4800元的个人电脑，普通网络摄像头在200元左右。从数据中可以得知，当监控数量等于3时，本方案能节省10%的成本，并且响应时间和抓拍机基本一致；当监控数量等于6时，本方案能节省50%的成本，并且最长响应时间不足2秒；随着监控点数量越多，节省的成本越多，相应的响应时间越长。\n\n![](https://github.com/xuzhijvn/ifcs/blob/master/images/performance-2.png)\n\n\n    \n## 7. 环境配置（集群模式）\n+ linux\n    + [Zookeeper配置](https://github.com)\n    + [Kafka配置](https://github.com)\n    + [Hadoop配置](https://github.com)\n+ windows\n    + [Zookeeper配置](https://www.jianshu.com/p/f7037105db46)\n    + [Kafka配置](https://www.jianshu.com/p/64d25dcf8300)\n    + Hadoop配置：\n      * [下载Haddop](http://hadoop.apache.org/releases.html)\n      * 修改hadoop-x.x.x/etc/hadoop/hadoop-env.cmd中的JAVA_HOME (路径不能空格)\n     \n## 8. 展望\n\n增加GPU图像处理单元，提升图像处理效率，以便单个IFCS节点能负载更多的摄像机。\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxuzhijvn%2Fifcs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxuzhijvn%2Fifcs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxuzhijvn%2Fifcs/lists"}