MediaPipe框架解析(五):c++ face_mesh解析
MediaPipe框架解析(四):android edge_detection详解
Mediapipe作为google的一个开源项目,可以提供开源的、跨平台的常用机器学习(machine learning)方案。 Mediapipe实际上是一个集成的机器学习视觉算法的工具库,包含了人脸检测、人脸关键点、手势识别、头像分割和姿态识别等各种模型。我们前几章都重点在熟悉mediapipe的使用和helloworld,本章我打算研究一下face_mesh,加深一下自己对该框架的理解。
基本代码组成
face_mesh的项目构建文件在mediapipe/examples/desktop/face_mesh/BUILD,该BUILD中总共包括三个产物构建:
- face_mesh_tflite
- face_mesh_cpu
- face_mesh_gpu
我们逐一分析,先看face_mesh_tflite,如下图所示,先看注释部分提供了bazel构建脚本和执行方式的脚本,从face_mesh_tflite的执行脚本中我们可以了解到该demo的功能为通过提供一个输入视频文件,执行本程序后,输出另一个视频文件,后面我们会运行看一下效果,我们现在先继续扫一下项目构成。
face_mesh_tflite是可执行文件的名字,可看到包括了一个tensor flow lite的模型文件face_landmark_with_attention.tflite,以及simple_run_graph_main和desktop_calculators两个项目依赖。从名字上来看大概可以看出simple_run_graph_main用于提供demo的基本业务,desktop_calculators实现了mediapipe的计算节点。
simple_run_graph_main
simple_run_graph_main主要构成如下,可以看到除了一个simple_run_graph_main.cc之外其余的依赖主要是framework和absl下的内容,之前在c++ helloworld源码分析的时候也大致了解过像calculator_framework和absl_log这两个依赖,absl下应该主要是一些通用的库依赖,封装了日志打印等一些基本能力,framework中就涉及了calculator和graph等一些核心框架相关的代码。
待进一步分析依赖和simple_run_graph_main.cc
desktop_calculators
desktop_calculators中主要包括如下依赖
待进一步分析依赖
项目运行及效果展示
直接执行命令
bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 //mediapipe/examples/desktop/face_mesh:face_mesh_tflite
执行过程中碰到如下报错,原因是我没有安装opencv,这里我需要先安装opencv
源码分析
待分析