资讯动态

MediaPipe 怎么在 WSL 中完成环境安装并构建 Android 示例?

发布时间:2026/9/12 12:24:25 来源:尧图企业网站定制
MediaPipe 怎么在 WSL 中完成环境安装并构建 Android 示例【免费下载链接】mediapipeCross-platform, customizable ML solutions for live and streaming media.项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe在 Windows 原生环境下无法直接构建 MediaPipe 的 Android 应用官方安装文档明确建议改用 WSLWindows Subsystem for Linux完成这一工作。这篇文章按照 MediaPipe 安装文档 中 Installing on Windows Subsystem for Linux (WSL) 一节的步骤走一遍完整路径在 WSL 的 Ubuntu 中安装编译依赖用 Hello World C 示例验证构建环境然后安装 Android SDK/NDK 并构建 MediaPipe 的 Android 示例 APK最后通过 ADB 安装到设备。全程只依赖仓库文档给出的命令和脚本不做额外扩展。准备条件Windows 侧先装好 WSL 与 ADBWSL 里的所有命令都在 Linux 环境中执行但 ADB 服务需要在 Windows 侧启动。按 install.md 的要求准备三件事安装 WSLUbuntu 发行版按微软官方 WSL 安装说明操作即可。在 Windows 上安装 ADB 并启动 ADB 服务。注意一个硬性约束Windows 侧与 WSL 侧的 adb 版本必须一致。文档给出的例子是如果 WSL 里是 ADB 1.0.39就需要下载与之对应的 Windows 版 platform-tools。版本不一致时 ADB 服务端与客户端会互相拒绝。启动 WSL。文档同时提示Linux 子系统对应的 Windows 目录位于C:\Users\YourUsername\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_SomeID\LocalState\rootfs\home需要回看 WSL 内文件时可用。另外如果你后续要在 WSL 里跑带摄像头的桌面示例文档提前说明了一个限制预编译的 OpenCV 包在 WSL 中不支持摄像头实时摄像头演示不可用只能用视频文件作为输入除非自行用 FFMPEG 和 GStreamer 编译 OpenCV。这条限制不影响本文的 Android 构建目标构建时先知道即可。在 WSL 中安装基础依赖并克隆仓库进入 WSL 后先安装编译所需的系统包。这条命令会写入系统目录需要 sudo 权限副作用是安装build-essential、git、python、zip、adb、openjdk-8-jdksudo apt-get update sudo apt-get install -y build-essential git python zip adb openjdk-8-jdk接下来按 Bazel 官方文档安装 Bazelisk文档要求的是 Bazelisk 而不是直接装 Bazel。然后克隆 MediaPipe 仓库并进入根目录cd $HOME git clone --depth 1 https://gitcode.com/GitHub_Trending/med/mediapipe.git cd mediapipe安装 OpenCV 和 FFmpegMediaPipe 的构建依赖 OpenCVFFmpeg 通过libopencv-video-dev一并装好。文档给出三个选项最短路径是选项 1用 apt 安装预编译包sudo apt-get install libopencv-core-dev libopencv-highgui-dev \ libopencv-calib3d-dev libopencv-features2d-dev \ libopencv-imgproc-dev libopencv-video-dev选项 2 是运行仓库根目录的 setup_opencv.sh自动从源码构建 OpenCV 并修改 MediaPipe 的 OpenCV 配置选项 3 是按 OpenCV 官方文档手动从源码编译。这里有一个容易踩的点apt 装出来的 OpenCV 版本取决于 Ubuntu 发行版版本例如 Ubuntu 20.04 是 4.2。仓库的 WORKSPACE 和 opencv_linux.BUILD 默认按 OpenCV 2/3 配置如果装到的是 OpenCV 4需要修改third_party/opencv_linux.BUILD按文档给出的 OpenCV 4 配置并根据gcc -print-multiarch的结果如x86_64-linux-gnu取消对应行注释# opencv_linux.BUILD for OpenCV 4 installed from Debian package cc_library( name opencv, hdrs glob([ # Uncomment according to your multiarch value (gcc -print-multiarch): # include/aarch64-linux-gnu/opencv4/opencv2/cvconfig.h, # include/arm-linux-gnueabihf/opencv4/opencv2/cvconfig.h, # include/x86_64-linux-gnu/opencv4/opencv2/cvconfig.h, include/opencv4/opencv2/**/*.h*, ]), includes [ # Uncomment according to your multiarch value (gcc -print-multiarch): # include/aarch64-linux-gnu/opencv4/, # include/arm-linux-gnueabihf/opencv4/, # include/x86_64-linux-gnu/opencv4/, include/opencv4/, ], linkopts [ -l:libopencv_core.so, -l:libopencv_calib3d.so, -l:libopencv_features2d.so, -l:libopencv_highgui.so, -l:libopencv_imgcodecs.so, -l:libopencv_imgproc.so, -l:libopencv_video.so, -l:libopencv_videoio.so, ], )如果从 OpenCV 4 链接阶段报undefined reference to cv::...一类错误文档把它归因为 OpenCV 未正确配置应回到 Troubleshooting 的 Incorrect MediaPipe OpenCV config 一节对照修改 WORKSPACE 与opencv_linux.BUILD。用 Hello World C 示例验证构建环境在构建 Android 目标之前先按文档跑一次桌面 Hello World 示例确认 Bazel、OpenCV、FFmpeg 这一整条链是通的。文档要求纯 CPU 桌面环境带MEDIAPIPE_DISABLE_GPU1标志export GLOG_logtostderr1 # WSL 桌面 GPU 当前不受支持使用 CPU 构建 bazel run --define MEDIAPIPE_DISABLE_GPU1 \ mediapipe/examples/desktop/hello_world:hello_world判断标准是文档给出的预期输出文档示例连续打印 10 行Hello World! Hello World! ...共 10 行能打出这 10 行说明编译环境就绪。如果构建失败先查 Troubleshooting其中与 WSL 环境最常相关的几条是找不到 Python 二进制时给 Bazel 命令加--action_env PYTHON_BIN_PATH$(which python3)依赖仓库下载失败多为网络问题时可配置代理或bazel clean --expunge后重试。安装 Android SDK 和 NDK环境验证通过后运行仓库根目录的 setup_android_sdk_and_ndk.sh 安装 Android SDK 和 NDK。这条脚本有几个必须提前知道的副作用它会从dl.google.com下载 Android SDK commandlinetools 和 NDK 压缩包需要可用的外网它会把android_sdk_repository、android_ndk_repository、bind、register_toolchains等规则追加写入WORKSPACE即修改仓库文件安装过程中会清理并重建/tmp/android_sdk/、/tmp/android_ndk/两个临时目录。脚本用法不带参数时使用默认路径NDK 默认版本 r28bcd mediapipe # 在仓库根目录 bash ./setup_android_sdk_and_ndk.sh也可以显式指定路径和版本例如bash ./setup_android_sdk_and_ndk.sh ~/Android/Sdk ~/Android/Ndk r28b --accept-licenses--accept-licenses会自动接受 SDK 许可协议。两个前置判断逻辑读脚本可得如果ANDROID_HOME和ANDROID_NDK_HOME都已设置脚本直接退出由 Bazel 自动定位 SDK/NDK如果目标目录已存在内容对应的 SDK 或 NDK 安装会跳过但 WORKSPACE 的追加仍会执行——所以不要在同一个仓库里重复运行它。脚本成功时的输出文档示例来自脚本自身打印Android SDK is now installed. Consider setting $ANDROID_HOME environment variable to be /root/Android/Sdk Android NDK is now installed. Consider setting $ANDROID_NDK_HOME environment variable to be /root/Android/Sdk/ndk-bundle/android-ndk-r28b Set android_ndk_repository and android_sdk_repository in WORKSPACE Done看到Set android_ndk_repository and android_sdk_repository in WORKSPACE和Done即表示配置完成。构建 Android 示例SDK/NDK 就绪后构建主路径是单个示例目标。以文档中的objectdetectiongpu为例--configandroid_arm64指定 arm64-v8a 架构该配置定义在仓库 .bazelrc 中bazel build -c opt --configandroid_arm64 \ mediapipe/examples/android/src/java/com/google/mediapipe/apps/objectdetectiongpu:objectdetectiongpu构建成功时的输出文档示例Target //mediapipe/examples/android/src/java/com/google/mediapipe/apps/objectdetectiongpu:objectdetectiongpu up-to-date: bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/objectdetectiongpu/objectdetectiongpu_deploy.jar bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/objectdetectiongpu/objectdetectiongpu_unsigned.apk bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/objectdetectiongpu/objectdetectiongpu.apk INFO: Build completed successfully, 2028 total actions产物就是bazel-bin/.../objectdetectiongpu.apkElapsed time和processes那几行数值因机器而异不需要按示例数值核对。如果你想一次构建全部示例仓库根目录的 build_android_examples.sh 是批量入口。注意它没有目标筛选参数会对mediapipe/examples/android/src/java/com/google/mediapipe/apps下的所有应用逐个执行build -c opt --configandroid_arm64basic目录对应目标名helloworldobjectdetection3d会按 shoe/chair/cup 等多个类别各构建一个 APK把 APK 拷贝到-d指定的输出目录然后在终端提示Press a to abort, or press any other key to continue ...不按a就会通过adb install -r把所有 APK 装到已连接的设备上。因此使用前提是你确实要构建并安装全部示例且设备已通过 adb 连上./build_android_examples.sh -d out_dir--nostrip可保留符号默认会加--linkopt-s剥离-i表示跳过构建、只安装-d目录里已有的 APK。安装到设备并验证单目标构建的产物直接用 adb 安装hello world codelab 给出的方式adb install bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/objectdetectiongpu/objectdetectiongpu.apk前提是 Windows 侧 ADB 服务已启动、设备开启开发者选项并已连接。安装命令返回成功后在设备上打开对应应用能启动并出画面即完成端到端验证helloworld 类示例的成功标准是应用内显示Hello World!界面。限制与排查入口WSL 摄像头预编译 OpenCV 在 WSL 中不支持摄像头WSL 内跑桌面实时演示只能用视频文件输入Android 示例的摄像头在设备端不受此限制。adb 版本Windows 与 WSL 两侧 adb 版本必须一致否则连接异常。构建报错Python 路径、依赖下载失败、OpenCV 配置三类问题都有对应条目集中在 Troubleshootinggcc/g6.3 与 7.3 存在已知问题使用 TensorFlow calculators 时应避开这两个版本。自写 Android 应用本文只覆盖构建仓库自带示例。要把 MediaPipe 图跑进自己的 Android 应用接着读 Hello World! on Android它给出了从空应用到FrameProcessor的完整代码路径。【免费下载链接】mediapipeCross-platform, customizable ML solutions for live and streaming media.项目地址: https://gitcode.com/GitHub_Trending/med/mediapipe创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价