提醒🍏:
gRPC
协作开发请见: 开发Tips:如何实现一个rpc接口~
本 C++
项目旨在使用gRPC
框架搭建一个提供人脸身份识别微服务的后端应用,提供人脸身份注册和人脸身份识别的接口。
注意
⚠️ :在Linux
下构建本项目。
运行以下命令进行构建:
cmake -B ./build
cmake --build ./build/
- 使用
GitHub
+git
进行版本管理。 - 使用
Clion
作为集成开发环境IDE
。 - 采用
Google Cpp
作为编码规范(会采用clang-format
作为代码自动格式化工具)。 - 使用
CMake
构建工程。
本分支已经在在前主分支的基础上,对gRPC
的异步服务端的编写做了略微封装,目标是实现人脸身份注册与人脸身份识别两个接口。
- 请求中的参数:
face_img: bytes // 要进行识别的图片
- 响应中的参数:
res: UserInfo // 身份识别的结果
- 响应中的消息:
数据无效:图片格式错误
,识别不到身份
,识别成功
,
- 请求中的参数:
face_img: bytes // 要进行注册的人脸图片
info: UserInfo // 身份信息
- 响应中的参数:
res: User // 注册的结果
- 响应中的消息:
数据无效:图片、身份格式错误
,人脸图片质量过低
,注册成功
,
已通过 SQLITE
数据库 与 QT
的 QSQL
模块实现基本功能,可能的待优化项:
-
Qt
的数据库连接无法跨线程使用,解决办法为维护一个std::thread:id
到的map
。
未来会尝试在开发板上部署模型,可能涉及模型的转换(pytorch
?onnx
?ncnn
?),以及运行他们所需的依赖库。
本项目使用的人脸识别库 SeetaFace2
的人脸特征提取是基于 ResNet50
神经网络实现的,但并没有提供 GPU 加速的功能(源码中预留了 GPU 的代码及接口,并未实现 :<),未来计划使用 SeetaFace6
的 GPU
版本。
- 编译准备:
WSL
下安装CUDA Toolkit
。 - 编译
X86_84 Linux GPU
版本的SeetaFace6
。 - 测试对比
SeetaFace2
与SeetaFace6
的性能表现。 - 交叉编译
aarch64 Linux CPU
版本的SeetaFace6
。