mediapipe教程6:在安卓上运行mediapipe的poseTracking

本文详细介绍了如何在Android设备上运行Mediapipe的poseTracking模块。首先,在Mediapipe工程中创建BUILD文件并配置依赖,然后通过Bazel命令生成aar文件和二进制图。接着,将aar文件和必要的资源文件导入新的Android Studio项目,并修改相应配置。最终,运行项目并在设备上验证。博主还提到了模型的选择以及运行性能与硬件的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、

前言见mediapipe教程4;

准备,官方给的mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackinggpu/MainActivity.java并没有调相机的code,只有打印输出关键点坐标的code,并且我在后续把调用相机的code和官方输出关键点坐标的这些code加到我的android stdio工程后,运行时发现官方打印输出关键点坐标的code有问题;于是我在网上找到了可用代码,分别是下面两个地址,我测试了第一个是没问题的:

https://gitee.com/luo_zhi_cheng/Mediapipe_pose_Tracking_AAR_example

https://gitee.com/luo_zhi_cheng/Mediapipe-android-pose-tracking

最后,这篇博客也开门见山,先直接来步骤;

 

二、在安卓上运行mediapipe的poseTracking

(1)在路径mediapipe/examples/android/src/java/com/google/mediapipe/apps/build_aar_pose/下新建BUILD文件,并复制下面内容

load("//mediapipe/java/com/google/mediapipe:mediapipe_aar.bzl", "mediapipe_aar")

mediapipe_aar(
    name = "mediapipe_pose_tracking",
    calculators = ["//mediapipe/graphs/pose_tracking:pose_tracking_gpu_deps"],
)

 

(2)生成安卓aar文件(生成的文件在bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/build_aar_pose/目录下),命令:

bazel build -c opt --strip=ALWAYS --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --fat_apk_cpu=arm64-v8a,armeabi-v7a mediapipe/examples/android/src/java/com/google/mediapipe/apps/build_aar_pose:mediapipe_pose_tracking

解释见教程4;

 

(3)生成Mediapipe的二进制图(生成文件路径为bazel-bin/mediapipe/graphs/pose_tracking/pose_tracking_gpu.binarypb)

bazel build -c opt mediapipe/graphs/pose_tracking:pose_tracking_gpu_binary_graph

 

(4)新建Android Stdio工程,选择“Empty Activity”,这里我的工程名改为:aar_pose1,复制刚刚编译生成的aar文件到Android Stdio工程的app/libs/目录下;

刚刚编译生成的aar文件路径为:bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/build_aar_pose/mediapipe_pose_tracking.aar

 

(5)复制以下文件到Android Stdio工程的app/src/main/assets/目录下

(具体需要复制什么,见mediapipe/examples/android/src/java/com/google/mediapipe/apps/posetrackinggpu/BUILD中的assets)

bazel-bin/mediapipe/graphs/pose_tracking/pose_tracking_gpu.binarypb
mediapipe/modules/pose_detection/pose_detection.tflite
mediapipe/modules/pose_landmark/pose_landmark_full.tflite

 

(6)打开安卓工程的app/build.gradle,修改其中的内容参考教程4;

 

(7)Android Stdio工程其他文件

1、AndroidManifest.xml,2、activity_main.xml,3、MainActivity.java,4、其他xml文件,如colors\strings\style\themes

以上都复制https://gitee.com/luo_zhi_cheng/Mediapipe_pose_Tracking_AAR_example里面的文件内容过去就可以,

注意这次app/src/main/java/com/example/aar_pose1/下不仅仅有一个.java文件;

 

(8)编译,运行

结果:在我的破安卓机顶盒上运行起来有点卡,可能是因为硬件性能不行;

 

(9)更多

mediapipe官网提供的人体关键点检测模型分为lite、full、heavy三个,由快到慢,由不准到准,可以自己选择,模型在路径mediapipe/modules/pose_landmark/下;

而配置下默认是使用full模型,想要使用不同的模型,请参考:https://blog.csdn.net/luozhichengaichenlei/article/details/117297062中的第2点;

### 集成MediaPipe进行人体姿态检测 为了在安卓应用程序中集成MediaPipe以实现人体姿态检测,开发者可以利用MediaPipe提供的强大工具集以及其无缝集成特性[^2]。MediaPipe不仅支持多种设备和操作系统,还特别针对移动平台进行了优化。 #### 准备工作 确保已安装必要的开发环境,包括但不限于Android Studio、NDK(Native Development Kit),并熟悉基本的Java/Kotlin编程技能。对于希望简化操作流程的情况,还可以考虑引入`cvzone`库来增强用户体验,该库能够使MediaPipe的功能更易于调用和管理[^1]。 #### 创建新项目 启动Android Studio创建一个新的项目,选择适合的应用模板。接着按照官方文档指示完成初步配置,这一步骤至关重要,因为良好的开端有助于后续工作的顺利开展。 #### 添加依赖项 编辑项目的`build.gradle`文件,在dependencies部分加入如下内容: ```gradle implementation 'com.google.medialibrary:mediapipe_java:<version>' ``` 请注意替换`<version>`为最新版本号。此外,如果打算使用`cvzone`辅助,则需额外添加对应的maven仓库地址及相应依赖声明。 #### 初始化Pipeline 在Activity或Fragment类内部初始化MediaPipe pipeline对象,并指定所需处理器模块。这里以人体姿态估计为例展示一段简单的代码片段: ```java // Java 实现方式 private void setupPoseDetection() { CalculatorGraphConfig config = new CalculatorGraphConfig.Graph().addNode( "pose_detection", ImmutableMap.of("MODEL", "full_body") ).toProto(); try (InputStream inputStream = getAssets().open("pose_tracking_cpu.binarypb")) { graph.initialize(config.toByteArray(), /* listener= */ null); graph.startRunningFromOptions(new GraphIOOptions(inputStream, inputSidePackets)); // 设置输入源与输出目标... } catch (IOException e) { Log.e(TAG, "Error reading pose tracking model from assets.", e); } } ``` 上述示例展示了如何加载预训练模型并通过管道传递数据流来进行处理。实际应用场景下还需要进一步完善错误处理机制和服务生命周期管理等方面的工作。 #### 处理结果可视化 最后一步就是将计算得到的姿态信息渲染到界面上供用户查看。借助OpenCV或其他图形绘制API可以帮助我们更好地呈现这些抽象的数据结构。当然也可以通过`cvzone`这样的第三方组件加速这一过程。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值