Mediapipe - Windows10 编译Mediapipe C++版本保姆级教程

本文详细介绍了如何在Windows10系统上编译Mediapipe的C++版本,包括MSYS2环境配置、Python环境、VS2019与WinSDK的安装、Bazel的配置以及OpenCV的集成。通过编译运行helloworld示例,验证了编译环境的正确性,并提供了将Mediapipe功能封装成dll的资源链接。

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

在这里插入图片描述

1 Windows10编译Mediapipe C++版本

Win7我按照底下的步骤试了一下,在bazel编译的时候总是报:

ERROR: SymlinkDirectories(C:/Users/Administrator/_bazel_Administrator/install/7e447298f5ed9555a00a8dcb11768f3e, c:\users\administrator_bazel_administrator\ucdynfbl\install): CreateJunction:
FATAL: failed to create installation symlink ‘c:\users\administrator_bazel_administrator\ucdynfbl\install’: success

错误截图:

win7上没有成功,但是在win10上成功了。

2 编译步骤

2.1 MSYS2环境配置

MSYS2官网:https://www.msys2.org/

2.1.1 下载安装

点击以下按钮下载msys2

在这里插入图片描述

点击安装,自行设置安装位置。

2.1.2 配置系统环境变量

如安装位置为:D:\Program Files (x86)\msys64,则将D:\Program Files (x86)\msys64\usr\bin添加到系统变量中


2022年9月26日更新:

根据网友大佬的反馈,如果使用的系统为Windows11,则还需要明确在系统环境变量中指定BAZEL_SH为:D:\Program Files (x86)\msys64\usr\bin\bash.exe,示例设置图为:

不然在编译时会出现错误,具体可参考:

2.1.3 升级msys2包数据库

打开MSYS2 MSYS

在打开的MSYS命令行中输入:

pacman -Syu

然后就等待各种包下载升级安装。

2.1.4 升级msys2基础数据库

继续在MSYS中输入:

pacman -Su

等待升级完成

2.1.5 下载安装必要的包:unzip

MSYS2没有内置unzip,需要手动安装。

打开cmd.exe,输入以下命令:

pacman -S git patch unzip

等待下载安装完成即可,经过以上步骤,MSYS2的配置就完成了。

2.2 Python环境配置

需要在电脑上安装python,并且配置系统环境,具体步骤就不再赘述。在Python环境中需要装好tensorflow cpu,如果准备编译GPU版本需要安装gpu版本的tensorflow。

如果在电脑上已经使用Anaconda创建虚拟环境,可以使用Anaconda的base环境或者其中的虚拟环境,我是用的就是Anaconda的base环境。

2.3 安装VS2019和WinSDK

VS官网:https://visualstudio.microsoft.com/zh-hans/free-developer-offers/

下载免费的社区版即可,在安装vs2019的过程中会自动安装WinSDK

2.4 配置Bazel

2.4.1 Bazel下载

官方文档的建议是下载Bazel 3.7.2或者更高版本,这里选择Bazel 3.7.2版本下载。

Bazel下载地址:https://github.com/bazelbuild/bazel/releases

在该页面使劲往下翻,翻到3.7.2下载bazel-3.7.2-windows-x86_64.exe

2.4.2 Bazel系统环境配置

下载的文件名为:bazel-3.7.2-windows-x86_64.exe,为了之后可以更好地在cmd.exe中使用,可以拷贝一个副本,并将其改名为bazel.exe,这样在命令行调用的时候只需要输入bazel而不需要输入bazel-3.7.2-windows-x86_64。

如果bazel.exe保存的路径为:F:\软件安装包\bazel,需要将该路径添加到系统环境变量中,使其可以在命令行中调用,需要将其路径添加到系统环境变量

系统环境配置完成之后,在cmd.exe输入bazel,如出现以下提示则说明配置成功。

在这里插入图片描述

2.5 设置Bazel变量

根据官方文档,需要设置Bazel的编译变量:

# Please find the exact paths and version numbers from your local version.
C:\> set BAZEL_VS=C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools
C:\> set BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC
C:\> set BAZEL_VC_FULL_VERSION=<Your local VC version>
C:\> set BAZEL_WINSDK_FULL_VERSION=<Your local WinSDK version>

其中:

  • BAZEL_VS : vs2019的安装目录,比如我的:D:\Program Files (x86)\Microsoft Visual Studio\2019\Community
  • BAZEL_VC:vs2019安装目录下C++主要目录,比如我的 BAZEL_VC=D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC
  • BAZEL_VC_FULL_VERSION : VS2019的中vc的版本号,

该版本号可以在VS2019的安装目录D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Redist\MSVC下找到:

图片中的14.29.30036就是VC的版本号。

  • BAZEL_WINSDK_FULL_VERSION:WinSDK的版本号,这可以在控制面板-程序-程序和功能中查看,找到Windows Software Development Kit,后面跟的数字就是WinSDK的版本号,如下图所示。

在这里插入图片描述

那么最后我的配置项为:

set BAZEL_VS=D:\Program Files \(x86\)\Microsoft Visual Studio\2019\Community
set BAZEL_VC=D:\Program Files \(x86\)\Microsoft Visual Studio\2019\Community\VC
set BAZEL_VC_FULL_VERSION=14.29.30036
set BAZEL_WINSDK_FULL_VERSION=10.0.19041.685

需要在MSYS上设置Bazel变量而不是在cmd.exe中,在MSYS中依次输入上述命令,这里有个坑,Program Files (x86)的这个括号需要进行转义,所以应该变成Program Files (x86)

2.6 下载opencv

官方文档指出目前使用OpenCV 3.4.10,所以下载OpenCV 3.4.10即可。

下载地址:https://opencv.org/releases/

下载完成之后,点击exe,解压到自己想要的目录,这里我的解压目录是:F:\opencv-3.4.10-vc14_vc15,不要使用中文路径,不然在后面编译会出错。

2.7 Mediapipe仓库克隆以及bazel的编译文件WORKSPACE的修改

使用git迁移Mediapipe官方仓库:

git clone https://github.com/google/mediapipe.git

迁移完成之后,打开该仓库根目录下的WORKSPACE文件,并在该文件中搜索“windows_opencv”,并将OpenCV的路径修改为你本地保存OpenCV的路径

修改后:

new_local_repository(
    name = "windows_opencv",
    build_file = "@//third_party:opencv_windows.BUILD",
    path = "F:\\opencv-3.4.10-vc14_vc15\\opencv\\build",
)

保存即可。

2.8 编译并运行hello world

官方文档提示,如果需要在Windows上编译Mediapipe需要添加

--action_env PYTHON_BIN_PATH="C://path//to//python.exe"

在编译命令行中,这里的PYTHON_BIN_PATH就是上述步骤中所安装的python路径,配置好即可。

2.8.1 编译

使用cmd.exe将目录切换到Mediapipe仓库的根目录下,然后运行以下命令:

bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 --action_env PYTHON_BIN_PATH="D:\\Anaconda\\python.exe" mediapipe/examples/desktop/hello_world

上述的PYTHON_BIN_PATH需要修改为你自己的python路径,编译过程中需要从github上拉取一些库,所以最好科学上网,不然会出现can’t fetch错误。

编译完成可以看到以下信息:

2.8.2 运行

编译完成之后,继续在cmd.exe中依次输入以下命令:

set GLOG_logtostderr=1
bazel-bin\mediapipe\examples\desktop\hello_world\hello_world.exe

如果编译成功,运行结果如下

如果能够编译并且运行成功hello world示例程序,那么说明你的Mediapipe的Windows C++编译环境配置完成,之后的就尽情的在上面做魔改吧!!!

3 Mediapipe功能封装成dll

我已经对Mediapipe的一些功能模块进行了封装,封装的教程如下:

代码已开源,相关的Github项目如下:https://github.com/HW140701/GoogleMediapipePackageDll

如果感兴趣,可以访问我的个站:https://www.stubbornhuang.com/,更多干货等着你!

### MediaPipe 使用指南 MediaPipe 是 Google 开发的一个开源框架,主要用于处理多媒体数据流(如视频、音频和传感器数据)。其设计目标是提供一种灵活且高效的方式来构建复杂的机器学习流水线。以下是关于 MediaPipe 的使用指南、源码解析以及示例项目的详细介绍。 --- #### 一、MediaPipe 使用指南 1. **安装与配置** - 需要先安装 Bazel 构建工具,因为 MediaPipe 使用 Bazel 进行项目管理和编译[^1]。 - 安装 Python 和 C++ 编译器环境,具体版本需求可以参考官方文档[^3]。 - 对于 Android 平台开发,还需要设置 Android SDK 和 NDK 环境变量[^2]。 2. **基本概念** - 数据流图(Graphs):MediaPipe 中的核心概念之一,表示整个数据处理流程的拓扑结构。每个节点称为 Calculator,负责执行特定的任务。 - 计算单元(Calculators):这些是构成 Graph 的基础模块,完成诸如图像预处理、模型推理等功能[^1]。 - 时间戳(Timestamps):用于同步不同输入源的时间序列数据,在实时应用中尤为重要[^1]。 3. **运行第一个例子** 下面展示如何运行一个简单的 Hello World 示例: ```bash bazel build mediapipe/examples/desktop/hello_world:hello_world ./bazel-bin/mediapipe/examples/desktop/hello_world/hello_world ``` --- #### 二、MediaPipe 源码解析 1. **目录结构概述** - `BUILD` 文件定义了 Bazel 的构建规则,描述了哪些文件属于某个目标及其依赖关系[^1]。 - `calculators` 存储各种计算逻辑实现,例如面部检测、手势识别等计算器[^1]。 - `framework` 提供底层支持功能,比如上下文管理、线程池调度等[^1]。 - `gpu` 包含 OpenGL 相关资源,适用于 GPU 加速场景下的图形渲染操作[^1]。 - `graphs` 收集了一些现成可用的标准管道模板,开发者可以直接调用或者修改满足个性化需求[^1]。 2. **关键技术点** - 图形化编程接口允许用户通过 YAML 或 Protobuf 描述复杂的工作流而无需编写大量代码[^3]。 - 多平台兼容性考虑到了桌面端 (Linux, macOS), 移动设备(Android & iOS),甚至嵌入式硬件的支持情况[^2]。 - 性能优化方面采取了许多措施减少延迟并提高吞吐量,包括异步 I/O 设计模式以及智能缓存策略运用其中[^1]。 --- #### 三、示例项目推荐 1. **手部跟踪** 手势估计是一项非常实用的功能,可用于虚拟现实交互等领域。可以通过以下命令快速体验该特性: ```bash bazel run --config=android_arm64 mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu ``` 2. **人体姿态估测** Pose Estimation 能够捕捉人的身体动作轨迹,广泛应用于健身指导软件当中。启动方法如下所示: ```bash bazel build mediapipe/graphs/pose_tracking:pose_tracking_cpu && \ ./bazel-bin/mediapipe/graphs/pose_tracking/pose_tracking_cpu \ --calculator_graph_config_file=mediapipe/graphs/pose_tracking/cpu/pose_tracking.cpu.pbtxt ``` 3. **脸部网格绘制** Face Mesh Demo 可以生成高精度的人脸三维重建效果,适合美妆滤镜类 App 制作过程中的原型验证阶段测试用途。 ```bash bazel build mediapipe/examples/android/src/java/com/google/mediapipe/apps/facemeshgpu adb install bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/facemeshgpu/facemeshgpu.apk ``` --- ###
评论 81
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HW140701

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值