IoT 参考实现:如何构建面部访问控制解决方案。
人脸门禁应用程序是一系列物联网参考实现的一部分,旨在指导用户如何为特定问题开发有效的解决方案。
引言
人脸门禁应用程序是一系列物联网参考实现的一部分,旨在指导用户如何为特定问题开发有效的解决方案。该解决方案使用面部识别作为授予物理访问权限的控制系统的基础。该应用程序将一个人的面部图像检测并注册到数据库中,识别进入指定区域的已知用户,并在一个人的面部与数据库中的图像匹配时授予访问权限。
通过此参考实现,开发人员将学会构建和运行一个应用程序,该应用程序可以:
- 检测并注册一个人的面部图像到数据库
- 识别进入指定区域的已知用户
- 当一个人的面部与数据库中的图像匹配时授予访问权限
工作原理
人脸门禁系统由两个主要子系统组成
cvservice
- cvservice是一个使用英特尔®计算机视觉SDK(Intel® CV SDK)的C++应用程序。它连接到USB摄像头(用于检测人脸),然后根据授权用户的训练数据文件进行面部识别,以确定检测到的人是已知用户还是以前未知用户。当识别出用户时,消息会被发布到一个MQTT*代理,处理后的输出帧以原始格式写入stdout(将被管道传输到ffmpeg进行压缩和流式传输)。在这里,摄影视觉库用于面部检测和识别。
webservice
- webservice使用MQTT代理与cvservice进行交互。这是一个基于Node.js*的应用程序,用于在用户访问站提供视觉反馈。当用户被识别为授权用户时,会向他们打招呼,或者提供注册为新用户的选项。它显示高质量、低延迟的动态jpeg流以及用户界面和数据分析。
在用户界面中,有三个标签页:
- 实时流视频
- 用户注册
- 访问历史分析。
这是实时流视频标签页的样子
这是用户注册标签页的样子
这是分析标签页的一个示例
硬件要求
- 第五代英特尔®酷睿™处理器或更新版本或英特尔®至强®v4、英特尔®至强®v5处理器,配备英特尔®显卡技术(如果OEM在BIOS和主板中启用)[在NUC6i7KYK上测试]
- USB网络摄像头[使用Logitech* C922x Pro Stream测试]
软件要求
- Ubuntu* 16.04
- Intel® CV SDK Beta
如何设置
Intel® CV SDK
下载并安装OpenCL*
Intel® CV SDK需要OpenCL*,它是一个单独下载项。我们提供了一个脚本,可以帮助完成安装过程,在此处下载。使用以下命令解压存档:
tar xf install_OCL_driver2_sh.tgz
然后准备一个临时工作区并运行脚本
mkdir opencl-temp ./install_OCL_driver2.sh install --workspace opencl-temp
对于此应用程序,您不需要重新编译Linux*内核,因此在安装过程中被问到时,请回答否。更多详细信息和说明请参阅本文。文章中提到的系统分析器实用程序可用于确认安装是否正确。
下载并安装Intel® CV SDK
安装Intel® CV SDK的指南在此处提供。完成注册后,下载Ubuntu*的存档,解压它,然后运行GUI安装程序
tar xaf intel_cv_sdk_ubuntu_<version>.tgz cd intel_cv_sdk_ubuntu_<version> ./install_GUI.sh
当提示时,以root用户或具有root权限的用户身份安装。其余指南假设您将Intel® CV SDK安装在默认位置。
安装完成后,不要忘记设置CV SDK环境变量
source /opt/intel/computer_vision_sdk_<version>/bin/setupvars.sh
这将是构建和运行cvservice所必需的。要自动化此过程,您可以从.profile或.bashrc中设置脚本。或者,您可以将变量添加到/etc/environment。
ffmpeg
此参考实现使用ffmpeg来压缩和流式传输cvservice的视频输出到webservice客户端。ffmpeg从Ubuntu存储库单独安装
sudo apt update sudo apt install ffmpeg
cvservice
安装Paho* MQTT* C客户端库依赖项
此参考实现使用MQTT在服务之间发送数据。要安装依赖项
sudo apt update sudo apt install libssl-dev
构建可执行文件(从cvservice目录)
mkdir build cd build cmake .. make
webservice
Node.js服务设置的说明可在webservice文件夹中找到。
运行应用程序
-
启动webservice,包括服务器和前端组件。
-
使用以下命令启动ffserver:
sudo ffserver -f ./ffmpeg/server.conf
-
导出所需的环境变量
export MQTT_SERVER=localhost:1883 export MQTT_CLIENT_ID=cvservice export FACE_DB=./defaultdb.xml export FACE_IMAGES=../../webservice/server/node-server/public/profile/
-
从cvservice/build目录启动cvservice并将输出管道传输到ffmpeg
./cvservice 0 2>/dev/null | ffmpeg -f rawvideo -pixel_format bgr24 -video_size vga -i - https://:8090/fac.ffm
-
浏览到
https://:8080