1、前言

《人脸识别实战》系列文章将讲述一个人脸识别系统的设计与实现过程。本文是系列文章的开篇,主要描述系统的整体架构和各模块的功能职责,以及系统所需要的环境依赖部署。详细的设计细节及项目源码地址在以下的公众号发布:

文章同步更新在公众号 AIPlayer,欢迎扫码关注,共同进步

2、系统整体架构

2.1 服务器端

(1)网络消息处理模块

主要负责管理客户端发送来的网络连接请求、消息数据的收发与数据协议解析,以及对图像数据的编解码处理。在系统中以JSON格式进行消息封装,使用TCP连接进行收发通信,而图像数据的解码仅支持OpenCV对图像数据的编解码操作。

(2)图像处理模块

图像处理模块负责处理人脸图像的数据,需要实现的功能包括:

  • 人脸检测:如果客户端发送来的图像数据是人脸图像则不需要再进行检测,否则就需要对人脸进行检测。系统将采用基于ncnn实现的MTCNN算法进行部署。

  • 人脸对齐:将检测到的人脸图像区域调整到正常角度,系统中将使用OpenCV的仿射变换来进行对齐。

  • 人脸特征提取:系统将集成FaceNet和InsightFace两种算法进行人脸的特征提取。

  • 人脸特征比对:使用欧式距离进行人脸特征比对,在阈值范围内选择最小值作为比对结果。

(3)数据库管理模块

数据库管理模块负责数据库的连接与管理以及用户数据的增删改查,主要包括新用户的信息及人脸特征的注册与删除,以及人脸特征比对时的查询操作。系统中使用MySql数据库作为存储仓库。

2.2 客户端

(1)网络处理模块

主要的功能与服务器端相同,可以复用。

(2)图像处理模块

图像处理模块在客户端中仅需要实现人脸检测及人脸对齐即可。

3、环境部署

3.1 依赖

(1)硬件依赖

  • 服务器端:需要运行的人脸特征算法比较耗时,需要GPU加速支持。

  • 客户端:摄像头读取图像,处理器仅需要CPU即可。

(2)软件依赖  

  • 服务器端

    • Tensorflow C++动态库:用于支持FaceNet与InsightFace的运行。

    • OpenCV C++动态库:用于支持图像数据读取,编解码,人脸对齐等操作。

    • ncnn:用于实现MTCNN。

    • Cuda:支持GPU运行。

    • MySql:数据库开发库。

  • 客户端

    • OpenCV:用于支持图像数据读取,编解码及人脸对齐等操作。

    • ncnn:用于实现MTCNN算法的人脸检测。

3.2 环境部署

(1)基础依赖安装

sudo apt-get install -y cmake
sudo apt-get install -y libeigen3-dev
sudo apt-get install -y zlib1g zlib1g.dev
sudo apt-get install -y build-essential libgtk2.0-dev libavcodec-dev
sudo apt-get install -y libavformat-dev libjpeg-dev libtiff5-dev
sudo apt-get install -y libswscale-dev libjasper-dev
sudo apt-get install mysql-server mysql-client libmysqlclient-dev
sudo apt-get install libopenblas-dev

(2)OpenCV编译安装

wget https://github.com/opencv/opencv/archive/4.1.1.zip
sudo apt-get install -y unzip
unzip -x 4.1.1.zip
OPENCV_DIR=$(pwd)/opencv-4.1.1
cd $OPENCV_DIR
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make
sudo make install
sudo echo /usr/local/lib  >> /etc/ld.so.conf.d/opencv.conf
sudo ldconfig
sudo echo -e "PKG_CONFIG_PATH=\$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig\nexport PKG_CONFIG_PATH"  >>  /etc/bash.bashrc
source /etc/bash.bashrc
sudo updatedb

(3)tensorflow动态库编译

  • 下载源码
git clone https://github.com/tensorflow/tensorflow.git
  • cd到tensorflow目录,更新到1.14版本
git checkout r1.14
  • 执行./configure进行项目配置
  • 使用bazel工具进行编译
bazel build --config=opt //tensorflow:libtensorflow_cc.so
  • 编译完成后,在tensorflow根目录下出现 bazel-bin, bazel-genfiles 等文件夹, 按顺序执行以下命令将对应的libtensorflow_cc.so文件和其他文件拷贝进入 /usr/local/lib/ 目录完成后就准备好了tensorflow_cc.so文件,后面在C++编译环境和代码目录下编译时链接这些库即可,比如在CMakefile.txt中添加
mkdir /usr/local/include/tf
cp -r bazel-genfiles/ /usr/local/include/tf/
cp -r tensorflow /usr/local/include/tf/
cp -r third_party /usr/local/include/tf/
cp -r bazel-bin/tensorflow/libtensorflow* /usr/local/lib/
  • 完成后就准备好了tensorflow_cc.so文件,后面在C++编译环境和代码目录下编译时链接这些库即可,比如在CMakefile.txt中添加
include_directories(/usr/local/include/tf)
target_link_libraries(face_id -ltensorflow_cc -ltensorflow_framework)

(4)Cuda安装
   可以参考官网及其它网络资源的教程,这里不再详述。

后续文章发布在公众号 AIPlayer,欢迎扫码关注,共同进步

【人脸识别实战一】系统架构设计相关推荐

  1. 【人脸识别实战二】服务器端设计与实现

    目录 1.前言 2.网络处理模块 2.1 消息处理流程 2.2 消息数据格式 3.人脸图像处理模块 3.1 人脸检测 3.1.1 MTCNN原理简介 3.1.2 算法集成 3.2 人脸对齐 3.3 人 ...

  2. 人脸识别完整项目实战(3):项目系统架构设计

    一.前言 本文是<人脸识别完整项目实战>系列博文第1部分,第2节<项目系统架构设计>,本章内容系统介绍:人脸系统系统的项目架构设计,包括:业务架构.技术架构.应用架构和数据架构 ...

  3. 智能门禁(2)---安检人脸识别人证验证系统解决方案

    安检人脸识别人证验证系统解决方案方案 一.概述及特点 基于可见光下的中远距离人脸识别算法--人脸识别智能监控平台,对多个摄像头监控范围内的多个人脸同时进行检测.跟踪和识别,实时对人员身份进行确认,一旦 ...

  4. 基于人脸识别的考勤系统

    推荐大家个链接:https://wenku.baidu.com/view/871e4bb7974bcf84b9d528ea81c758f5f71f2952?fr=uc 这是一个基于人脸识别的考勤系统的 ...

  5. 人脸识别门禁系统:基于Android的人脸识别门禁系统 毕业设计完整代码详细教程

    完整代码:https://download.csdn.net/download/qq_38735017/87382371 一.研究目的 传统的门禁系统以钥匙作为验证手段,便捷程度低,丢失钥匙之后会导致 ...

  6. BAT大牛亲授基于ElasticSearch的搜房网实战(第四章环系统架构设计与分层)

    从零起步基于ElasticSearch的搜房网(前后端集成)实战(介绍与整体目录)点击即可 静态资源集成太多页面,我已经上传到博客资源链接,供下载.后期代码全部完善后,会上传到github上. 静态资 ...

  7. Python OpenCV开发MR智能人脸识别打卡系统(四、服务模块设计)

    需要源码请点赞关注收藏后评论区留言私信~~~ 整体系统讲解如下 Python OpenCV开发MR智能人脸识别打卡系统(一.需求分析与系统设计) Python OpenCV开发MR智能人脸识别打卡系统 ...

  8. 基于Qt设计的人脸识别门禁系统(录入、识别、对比、删除)

    一.前言 随着现代科技的不断发展,现在的中国已经迈入5G时代,人工智能技术也正逐步广泛运用到了各行各业中,尤其人脸识别技术,已在各大行业中广泛使用.人脸识别门禁系统,可以防止陌生人尾随进入园区,大大降 ...

  9. Python OpenCV开发MR智能人脸识别打卡系统(三、工具模块设计)

    需要源码请点赞关注收藏后评论区留言私信~~~ 整体系统讲解如下 Python OpenCV开发MR智能人脸识别打卡系统(一.需求分析与系统设计) Python OpenCV开发MR智能人脸识别打卡系统 ...

最新文章

  1. mysql 计算两个日期之间的天数
  2. php stdclass,php – 处理stdClass对象
  3. 使用Xshell工具连接虚拟机
  4. Signalr2_消息弹窗
  5. C++|Java混合实验-Spring Boot获取客户端操作系统,浏览器,Ip等信息,Qt端展示
  6. java 高德地图数据库_【爬虫】Java关于高德地图爬取数据
  7. 非纯 []!()输出 始皇帝 推导过程
  8. 尚硅谷python全套-尚硅谷Java视频教程,粉丝无数,人手一套尚硅谷教程
  9. 管理感悟:如何提交问题的解决方案
  10. 深入了解TMG企業版的獨立陣列
  11. 【NodeJs-5天学习】第一天篇② —— 安装NodeJs环境以及VsCode开发工具
  12. ThinkPHP5零食商城系统(前后台)
  13. python 三维地球_python的matplotlib的模拟太阳-地球-月亮运动
  14. JavaScript学习 — 初识json
  15. 第十章分治算法(大数相乘)
  16. Cadence原理图层次化设计
  17. c++实训 选猴子当大王
  18. 最新 ICCV | 35个GAN应用主题梳理,最全GAN生成对抗论文汇总
  19. [8266]小黑固件正式发布
  20. 实达Start BP-830KII 打印机驱动

热门文章

  1. 汉字计算机输入的优越性论文,议论文阅读训练中国第五大发明汉字附答案作文...
  2. 关于 .Net 逆向的那些工具:反编译篇
  3. 元宇宙红海涌动 欧科云链建数据“灯塔”
  4. java 解释器与JIT编译器
  5. 算法(6)深度优先搜索和广度优先搜索
  6. 基于回归分析的股票价格预测
  7. uniapp去掉顶部导航栏后计算手机安全区距离,css背景模糊效果
  8. Autoware-激光雷达目标检测与跟踪
  9. LNMP环境搭建保姆级
  10. go 实现发送短信验证码登录