如何将MediaPipe编译成Android中Chaquopy插件可用的 .whl 文件

环境准备

  1. 操作系统:建议使用 Ubuntu 20.04 或者 macOS(这篇博客会以 Ubuntu 为例)。
  2. Python 版本:Python 3.7 或以上版本。
  3. Android Studio:配置好 Android Studio 和 Android NDK(Native Development Kit)。
  4. Android 架构:通常需要编译 ARM 架构的库,比如 armeabi-v7aarm64-v8a,这些架构是 Android 设备常用的。
  5. 依赖工具
    • Bazel:构建 MediaPipe 的工具。
    • CMake:用于编译 C++ 代码。
    • Python NDK:用于 Android 上的 Python 构建。
    • Chaquopy 插件:用于在 Android Studio 中集成 Python 代码。
    • Protobuf:用于处理 MediaPipe 数据结构。

步骤 1:安装构建依赖

安装 Bazel

Bazel 是 MediaPipe 官方推荐的构建工具。你可以通过以下步骤安装 Bazel:

sudo apt update
sudo apt install apt-transport-https curl gnupg
curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor >bazel-archive-keyring.gpg
sudo mv bazel-archive-keyring.gpg /usr/share/keyrings
sudo apt update
sudo apt install bazel-5.0.0
sudo apt update && sudo apt full-upgrade
安装 CMake 和 NDK
sudo apt install cmake

确保你已安装 Android NDK,可以通过 Android Studio 的 SDK Manager 安装。

安装 Protobuf
sudo apt install protobuf-compiler

步骤 2:获取 MediaPipe 源代码

从 GitHub 克隆 MediaPipe 仓库:

git clone https://github.com/google-ai-edge/mediapipe.git
cd mediapipe

步骤 3:配置 Android 构建

MediaPipe 默认是为桌面平台编译的,我们需要为 Android 环境进行配置。你需要使用 bazel 构建工具和 Android NDK 配置文件来生成 Android 架构下的 .whl 文件。

  1. 创建一个针对 Android 的构建配置

mediapipe 目录下创建 android_build 文件夹,用来存放 Android 配置和构建文件。

  1. 修改 WORKSPACE 文件

你需要在 mediapipe/WORKSPACE 文件中增加 Android 相关配置:

load("@bazel_tools//tools/python:rules.bzl", "py_binary", "py_library")
load("@bazel_tools//tools/ndk:ndk.bzl", "android_ndk_toolchain")# 配置 NDK 路径
android_ndk_toolchain(name = "android_ndk",ndk_dir = "/path/to/ndk",  # 指定 NDK 路径
)

确保你已经设置好 NDK 的路径。

步骤 4:编译 MediaPipe 为 .whl 文件

  1. 在 Bazel 构建文件中配置 Python 支持

mediapipe/mediapipe/python 目录下创建 BUILD 文件,定义如何编译 MediaPipe 代码并将其链接到 Python 包中:

load("@bazel_tools//tools/python:rules.bzl", "py_binary", "py_library")py_binary(name = "mediapipe",srcs = glob(["*.py"]),deps = ["//mediapipe/..."  # 引用 MediaPipe 的相关模块],
)
  1. 编译 Android 特定的 .whl 文件

使用以下命令为 Android 编译 MediaPipe:

bazel build --config=android_arm64 //mediapipe/python:mediapipe_wheel

在这个命令中,--config=android_arm64 是为了指定 Android 平台的 ARM64 架构。如果需要编译其他架构(如 armeabi-v7a),可以根据需要修改配置。

注意:
  • //mediapipe/python:mediapipe_wheel 是生成 .whl 文件的目标,你可以根据自己的需求修改构建目标。
  • 编译过程可能会遇到一些依赖问题,特别是涉及到 Android NDK 和 C++ 库时,需要根据错误信息调整配置。

步骤 5:安装 .whl 文件

构建完成后,你会在 bazel-bin/mediapipe/python 目录中看到生成的 .whl 文件。例如,mediapipe-<version>-cp38-cp38-android_16_armeabi_v7a.whl

使用 pip 安装 .whl 文件:

pip install /path/to/mediapipe-<version>-cp38-cp38-android_16_armeabi_v7a.whl

确保安装时选择正确的 Python 版本和 Android 架构。

步骤 6:集成到 Android Studio 和 Chaquopy 插件中

  1. 配置 Chaquopy 插件

在 Android Studio 的 build.gradle 文件中,添加 Chaquopy 插件和 Python 环境配置:

plugins {id 'com.android.application'id 'com.chaquo.python' version '12.0.0'
}android {compileSdk 30defaultConfig {applicationId "com.example.myapp"minSdk 21targetSdk 30versionCode 1versionName "1.0"python {pip {install "mediapipe"  // 安装生成的 .whl 文件}}}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}
}
  1. 调用 Python 代码

在 Android 应用中,你可以通过 Chaquopy 插件调用 Python 代码,例如:

import mediapipe as mpmp_face_detection = mp.solutions.face_detection
mp_drawing = mp.solutions.drawing_utilswith mp_face_detection.FaceDetection(min_detection_confidence=0.2) as face_detection:# 进行图像处理pass
  1. 构建并运行 Android 应用

构建并运行 Android 项目,确保 Python 代码在 Android 设备上能够正常运行。

步骤 7:调试和优化

  • 性能优化:MediaPipe 在 Android 设备上可能会受到硬件性能的限制,特别是在较旧的设备上。你可能需要优化处理流程,例如减少帧率、优化图像处理算法等。
  • 依赖问题:如果在构建过程中遇到任何依赖问题,检查 NDK 配置或尝试使用其他版本的 Android NDK。
  • Python 环境:确保 Chaquopy 插件和 Python 环境配置正确,特别是在涉及到不同 Python 版本和 Android 架构时。

总结

通过上述步骤,你将成功地将 MediaPipe 编译成一个适用于 Android 平台的 .whl 文件,并通过 Chaquopy 插件集成到 Android Studio 项目中。这使得你能够在 Android 应用中使用 MediaPipe 进行实时的图像处理、手势识别等功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37163.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文略读(2025.3.18-更新中)

关于可控视频生成 I2V3D: Controllable image-to-video generation with 3D guidance Image to Video工作&#xff0c;能够实现给一张图&#xff0c;输出一个视频&#xff0c;且可以控制相机。动态信息来自于用户手工设计&#xff08;相机移动&#xff0c;人体骨骼驱动&#x…

Excel导出工具类--复杂的excel功能导出(使用自定义注解导出)

Excel导出工具类 前言: 简单的excel导出,可以用easy-excel, fast-excel, auto-poi,在导出实体类上加上对应的注解,用封装好的工具类直接导出,但对于复杂的场景, 封装的工具类解决不了,要用原生的excel导出(easy-excel, fast-excel, auto-poi都支持原生的) 业务场景: 根据…

神策数据接入 DeepSeek,AI 赋能数据分析与智能运营

在 AI 技术迅猛发展的浪潮下&#xff0c;神策数据正在加速推进人工智能在数据分析和智能运营领域的深度应用。近日&#xff0c;神策数据宣布全面接入 DeepSeek&#xff0c;为企业客户带来更加智能化、高效的数据分析与智能运营服务。这一举措展现了神策数据在人工智能方向的探索…

头歌 JAVA 桥接模式实验

目录 任务描述 实现方式 编程要求 测试说明 代码实现 总结 1 任务描述 某软件公司欲开发一个数据转换工具&#xff0c;可以将数据库中的数据转换成多种文件格式&#xff0c;例如 TXT、XML、PDF 等格式&#xff0c;同时该工具需要支持多种不同的数据库。 本关任务&#…

安全无事故连续天数计算,python 时间工具的高效利用

安全天数计算&#xff0c;数据系统时间直取&#xff0c;安全标准高效便捷好用。 笔记模板由python脚本于2025-03-17 23:50:52创建&#xff0c;本篇笔记适合对python时间工具有研究欲的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&am…

Docker Swarm集群搭建

Docker Swarm集群搭建 1.准备环境 搭建Docker Swarm集群最低需要准备三台设备&#xff0c;且均需要提前安装好Docker。我这里准备了四台机器用于搭建集群&#xff0c;分别是&#xff1a; DockerSwarm-Node1 lemonDockerSwarm-Node1:~$ docker --version Docker version 28.…

Unity教程(二十二)技能系统 分身技能

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

麒麟银河V10服务器RabbitMQ安装

安装步骤 rabbitMQ依赖于erlang的环境&#xff0c;所以需要先安装erlang&#xff0c;erlang跟rabbitMQ是有版本之间的关联关系的&#xff0c;根据对应的版本去安装下载&#xff0c;保证少出问题。 可以通过官网来查看RabbitMQ和erlang之间的版本对应关系 rabbitMQ和erlang之间…

让“树和二叉树”埋在记忆土壤中--性质和概念

Nice to meet your! 目录 树的介绍&#xff1a; 树的创建&#xff1a; 二叉树的概念和结构&#xff1a; 二叉树的存储结构&#xff1a; 树的介绍&#xff1a; 概念和结构&#xff1a; 不知你们是否在现实中看见过分为两个叉的枯树&#xff0c;大概长这样&#xff1a; 那…

UDP协议原理

UDP协议原理 本篇介绍 在前面使用UDP编程时已经基本了解了UDP的工作模式&#xff0c;也知道了UDP有三个特点&#xff1a; 无连接不可靠面向数据报 但是当时并没有具体谈论为什么UDP有以上三个特点&#xff0c;基于这个原因&#xff0c;本篇就会针对这三个原因进行介绍 UDP…

关于金融开发领域的一些专业知识总结

目录 1. 交易生命周期 1.1 证券交易所 1.1.1 交易前 1) 订单生成&#xff08;Order Generation&#xff09; 2) 订单管理&#xff08;Order Management&#xff09; 1.1.2 交易执行 3) 交易匹配&#xff08;Trade Matching&#xff09; 1.1.3 交易后 4) 交易确认&…

Flutter运行错误:UG! exception in phase ‘semantic analysis‘

最近在Mac Mini M4上通过Android Studio导入Flutter项目并运行&#xff0c;结果一直跑不起来&#xff0c;错误日志如下&#xff1a; 执行命令查看版本信息&#xff1a; flutter doctor --verbose通过输出信息Java version OpenJDK Runtime Environment (build 21.0.41242208…

DeepSeek + Kimi 自动生成 PPT

可以先用deepseek生成ppt大纲&#xff0c;再把这个大纲复制到Kimi的ppt助手里&#xff1a; https://kimi.moonshot.cn/kimiplus/conpg18t7lagbbsfqksg 选择ppt模板&#xff1a; 点击生成ppt就制作好了。

【C#语言】C#中的同步与异步编程:原理、示例与最佳实践

文章目录 ⭐前言⭐一、同步编程&#xff1a;简单但低效的线性执行&#x1f31f;代码示例&#x1f31f;执行流程示意图&#x1f31f;同步编程特点 ⭐二、异步编程&#xff1a;非阻塞的高效执行&#x1f31f;代码示例&#x1f31f;执行流程示意图&#x1f31f;异步编程核心机制&a…

【MySQL数据库】存储过程与自定义函数(含: SQL变量、分支语句、循环语句 和 游标、异常处理 等内容)

存储过程&#xff1a;一组预编译的SQL语句和流程控制语句&#xff0c;被命名并存储在数据库中。存储过程可以用来封装复杂的数据库操作逻辑&#xff0c;并在需要时进行调用。 类似的操作还有&#xff1a;自定义函数、.sql文件导入。 我们先从熟悉的函数开始说起&#xff1a; …

【sgFloatDialog】自定义组件:浮动弹窗,支持修改尺寸、拖拽位置、最大化、还原、最小化、复位

sgFloatDialog <template><div :class"$options.name" v-if"visible" :theme"theme" :size"size" :style"style"><!-- 托盘头部 --><div class"header" ref"header" dblclick.s…

Java后端开发技术详解

Java作为一门成熟的编程语言&#xff0c;已广泛应用于后端开发领域。其强大的生态系统和广泛的支持库使得Java成为许多企业和开发者的首选后端开发语言。随着云计算、微服务架构和大数据技术的兴起&#xff0c;Java后端开发的技术栈也不断演进。本文将详细介绍Java后端开发的核…

搭建ISCSI传输的配置与管理

前提是&#xff1a; windows server2019设置成桥接模式&#xff0c;因为要让虚拟机和主机设置成一个网段&#xff0c;才能通过网络进行新建虚拟磁盘。 1.添加ISCSI角色 安装位置 选择文件和存储服务----------文件和iscsl 服务------------iscsl目标服务器 2.右上角点击任务&a…

晶艺代理,100V3.5A高耐压LA1823完全替换MP9487--启烨科技有限公司

晶艺品牌LA1823是异步降压转换器&#xff0c;COT控制&#xff0c;PFM工作模式, 150KHz/ 250KHz/ 450KHz &#xff0c;开关频率可调节&#xff0c;输入电压4.5~100V&#xff0c;2A平均电流&#xff0c;峰值电流3.5A&#xff0c;采用ESOP8封装。 晶艺LA1823的特性&#xff1a; 4.…

2024年消费者权益数据分析

&#x1f4c5; 2024年315消费者权益数据分析 数据见&#xff1a;https://mp.weixin.qq.com/s/eV5GoionxhGpw7PunhOVnQ 一、引言 在数字化时代&#xff0c;消费者维权数据对于市场监管、商家诚信和行业发展具有重要价值。本文基于 2024年315平台线上投诉数据&#xff0c;采用数…