Mediapipe – Windows10 编译Mediapipe C++版本保姆级教程
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,示例设置图为:
不然在编译时会出现错误,具体可参考:
- https://github.com/google/mediapipe/issues/3459#issuecomment-1167468953
- https://docs.bazel.build/versions/main/install-windows.html#bazel-does-not-find-bash-or-bashexe
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的一些功能模块进行了封装,封装的教程如下:
- Hand Tracking 手部关节点跟踪:https://www.stubbornhuang.com/1562
- Holistic Tracking 全身关节点跟踪:https://www.stubbornhuang.com/1919
代码已开源,相关的Github项目如下:https://github.com/HW140701/GoogleMediapipePackageDll
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Mediapipe – Windows10 编译Mediapipe C++版本保姆级教程
原文链接:https://www.stubbornhuang.com/1555/
发布于:2021年08月09日 20:13:39
修改于:2023年06月26日 21:22:34
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
bazel编译hello_world的时候一直会出现 LNK:2005和LNK:1169的错误,试了好长时间都没法解决,不知道是哪里出问题了。不知道博主有没有遇到过这种情况。
pass_through_calculator.lo.lib(pass_through_calculator.obj) : error LNK2005: "public: static class absl::lts_20210324::strong_equality const absl::lts_20210324::strong_equality::equal" (?equal@strong_equality@lts_20210324@absl@@2V123@B) 已 经在 hello_world.obj 中定义
没有哎,如果实在不行,可以试一下重装系统或者换一台电脑重新配置开发环境
我编译的时候报了一个这个错误,The target you are compiling requires Visual C++ build tools.
Bazel couldn't find a valid Visual C++ build tools installation on your machine.
没找到解决办法
(1)保证电脑上安装了vs2019;(2)配置环境时在配置Bazel变量时确定vs路径正确,请仔细阅读博文