MediaPipe框架解析(二):mediapipe helloworld

发布于:2025-06-30 ⋅ 阅读:(21) ⋅ 点赞:(0)

MediaPipe框架解析(一):bazel构建中我们在安装完bazel之后在执行“Hello World! in C++ example”的时候报错,所以只简单执行了bazel提供的example,但我们了解bazel只是为了学习mediapipe框架,所以本章还是会继续编译执行mediapipe的helloworld。由于本人技术栈较偏向于安卓,所以后续可能都会默认侧重安卓的角度来理解该框架。

zutils.h中fdopen重定义问题

MediaPipe框架解析(一):bazel构建中我们在安装完bazel之后在执行“Hello World! in C++ example”的时候报了类似如下图所示的一些错误。
zutils_redefinition
从错误信息可知为fdopen和OS_CODE的重定义,尝试如下修改后可以修复问题。
在这里插入图片描述

编译“Hello World! in C++ example”

  1. 首先cd到mediapipe的根目录下
  2. 执行命令“bazel run --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hello_world:hello_world”
    在这里插入图片描述
  3. 待执行完后会生成可执行文件bazel-bin/mediapipe/examples/desktop/hello_world/hello_world
    在这里插入图片描述

编译安卓的helloworld

安卓的helloworld代码位于mediapipe/examples/android/src/java/com/google/mediapipe/apps/basic
可以看到该位置存在一个BUILD文件,其中指定了名为helloworld的android_binary编译规则,具体项目细节我们会在下一章分析,本章先简单运行该helloworld。
在这里插入图片描述

  1. 由于WORKSPACE等文件都位于mediapipe的根目录,所以我们要想编译安卓的helloworld,还是要先cd到mediapipe根目录.
  2. 安卓工程相较于“Hello World! in C++ example”会多一步设置android sdk和ndk的步骤,如下图所示,需要将本地已经存在的安卓sdk路径和ndk路径等信息添加到WORKSPACE文件末尾(若无sdk以及ndk可直接执行mediapipe/setup_android_sdk_and_ndk.sh)
    sdk_ndk
  3. 执行bazel命令构建该helloworld,首次编译会花费较长时间来获取安卓相关的一些依赖,这一点和gradle流程也较相似。
    在这里插入图片描述
  4. 执行成功后会生成helloworld.apk在如下路径,可以执行adb安装即可
    在这里插入图片描述
  5. helloworld安装在手机上后效果如下,是一个边缘检测的应用,下一章会重点解析mediapipe是如何实现这一流程的
    sobel