当前位置: 首页 > news >正文

MediaPipe框架解析(二):mediapipe helloworld

在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

相关文章:

  • 进阶向:Django入门,从零开始构建一个Web应用
  • GAN的思考及应用
  • SCAU期末笔记 - 操作系统 英文定义题
  • ShanghaiCity上海,又解锁一塔2025.06
  • PYTHON从入门到实践9-类和实例
  • LeetCode 第80题 删除有序数组中的重复项Ⅱ
  • Modbus 报文结构与 CRC 校验实战指南(二)
  • 学生宿舍智能控电技术的新发展和控制要求
  • 矩阵及矩阵快速幂
  • Kafka4.0初体验
  • [Linux入门] Linux LVM与磁盘配额入门指南
  • 项目目标不一致时,如何校准方向
  • watch、watchEffect和computed函数的区别
  • 【模型部署】如何在Linux中通过脚本文件部署模型
  • Prompt Depth Anything:以提示方式驱动的Depth Anything用于实现4K分辨率下的精确米制深度估计
  • RabbitMQ中,basicAck、basicNack和basicReject是三种核心的消息确认机制
  • 网络安全碎碎恋
  • Elasticsearch 集群升级实战指引—7.x 升级到 8.x
  • SRS流媒体服务器之本地测试rtc推流bug
  • 【HuggingFace】模型下载至本地访问