如何为face_landmark_front_cpu.binarypb添加flow_limiter_calculator构建自定义MediaPipe Python模型
自定义MediaPipe Python模型构建问题及解决指导
问题背景
我发现MediaPipe Python模型的原始face_landmark_front_cpu.pbtxt中没有flow_limiter_calculator,因此尝试将其添加到face_landmark_front_cpu.binarypb中。
已执行操作
- 在
mediapipe\graphs\face_mesh目录下添加了以下构建配置代码:
mediapipe_binary_graph( name = "face_mesh_python_model", graph = "face_mesh_python_model.pbtxt", output_name = "face_mesh_python_model.binarypb", linkstatic = 1, deps = [ "//mediapipe/calculators/core:constant_side_packet_calculator", "//mediapipe/calculators/core:flow_limiter_calculator", "//mediapipe/modules/face_landmark:face_landmark_front_gpu" ] )
- 使用以下命令执行构建:
build -c opt --define MEDIAPIPE_DISABLE_GPU=1 --action_env PYTHON_BIN_PATH=%PYTHON_PATH_311%/python.exe mediapipe/graphs/face_mesh:face_mesh_python_model --verbose_failures
构建已成功,但生成的face_mesh_python_model.binarypb内容异常,无法正常工作。
解决指导
1. 补全PBTXT图节点定义
仅在构建依赖中声明flow_limiter_calculator是不够的,必须在face_mesh_python_model.pbtxt中添加该计算器的节点配置,确保和图中其他节点的数据流连通。示例配置如下:
node { calculator: "FlowLimiterCalculator" input_stream: "INPUT:input_video" output_stream: "OUTPUT:limited_video" input_side_packet: "MAX_FPS:max_fps" options: { [mediapipe.FlowLimiterCalculatorOptions.ext] { max_fps: 30.0 } } }
根据你的实际业务调整输入输出流名称和参数。
2. 修正构建依赖冲突
构建命令中指定了MEDIAPIPE_DISABLE_GPU=1,但依赖中引用了GPU版本的face_landmark_front_gpu,这会导致不兼容。需替换为CPU版本依赖:
deps = [ "//mediapipe/calculators/core:constant_side_packet_calculator", "//mediapipe/calculators/core:flow_limiter_calculator", "//mediapipe/modules/face_landmark:face_landmark_front_cpu" # 替换为CPU版本 ]
3. 优化构建命令细节
- 确保
%PYTHON_PATH_311%是正确的Python绝对路径,避免环境变量解析错误; - 完整的Bazel构建命令需添加
bazel前缀(若你的环境默认用build则忽略):
bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 --action_env PYTHON_BIN_PATH=C:/Python311/python.exe mediapipe/graphs/face_mesh:face_mesh_python_model --verbose_failures
4. 验证生成的模型文件
构建完成后,用MediaPipe的graph_runner工具验证模型有效性:
bazel run mediapipe/tools/graph_runner -- --calculator_graph_config_file=mediapipe/graphs/face_mesh/face_mesh_python_model.binarypb --input_side_packets=max_fps=30.0 --input_streams=input_video=/path/to/test_video.mp4
通过输出日志定位具体错误信息,进一步排查问题。
内容的提问来源于stack exchange,提问作者Juahn Cho
相关产品推荐
相关产品推荐

