继上次单步调试hello world后,本来想着其他的 mediapipe example 都是顺利成章,但是并不是这样,编译别的 mediapipe example 报了很多错,今天就带来了一个能无缝跑通的版本,亲测有效
首先,必须申明下版本和对应的链接:
感觉最重要的是mediapipe的版本,因为高于这个版本的就是各种各样的神仙ERROR
1. bazel:6.5.0 Releases · bazelbuild/bazel · GitHub
2. mediapipe: 0.10.10 https://github.com/google-ai-edge/mediapipe/releases/tag/v0.10.10
3. visual studio buildtools 2019 Visual Studio 2019 生成号和发布日期 | Microsoft Learn
4. visual C++ Redistributable Latest supported Visual C++ Redistributable downloads | Microsoft Learn
5. msys 这个感觉版本就影响不大了 MSYS2
6. python 3.9.1 Python Release Python 3.9.1 | Python.org
上述安装之后,就是配置环境变量
这个还是参考Mediapipe - Windows10 编译Mediapipe C++版本保姆级教程-优快云博客
这里补充几点:
1. bazel 相关的这么配置完就不用在命令行 set 了
2.python 安装的时候
勾选下方的 Add python.exe to PATH
下面就可以进入编译环节了
1.终端命令行右键以管理员身份运行
2.cd 到 mediapipe-0.10.10目录下
3.直接开编
命令如下:
注意 --action_env 就是自己安装 python 的路径,记得修改下
bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 --action_env PYTHON_BIN_PATH="D:\\python\\python.exe" mediapipe/examples/desktop/hand_tracking:hand_tracking_cpu
4.编译成功
5.开始运行
命令如下:
set GLOG_logtostderr=1
bazel-bin/mediapipe/examples/desktop/hand_tracking/hand_tracking_cpu --calculator_graph_config_file=mediapipe/graphs/hand_tracking/hand_tracking_desktop_live.pbtxt
这时候会提示少 .tflite 模型文件
这里可以直接去 mediapipe/docs/solutions/hands.md at v0.10.10 · google-ai-edge/mediapipe · GitHub
点击这几个地方
把上面的 full model 下载到 mediapipe-0.10.10\mediapipe\modules\palm_detection 目录下
把下面的 model 下载到 mediapipe-0.10.10\mediapipe\modules\hand_landmark 目录下
文件名称不用改,直接下载即可
继续运行
接下来,会自动弹出摄像头窗口,把手伸到摄像头前,观看效果:
到此,就运行完成了 mediapipe c++ 的手部关节点检测。。
想调试的话就直接参考我的上一篇文章
Windows Mediapipe Vscode 单步调试_怎么调用meidapipe-优快云博客
这次调试的文件是这个
调试的 tasks.json 中内容为:
{
"version": "2.0.0",
"tasks": [
// hello world
{
"label": "Build",
"type": "shell",
"command": "bazel build -c dbg --define MEDIAPIPE_DISABLE_GPU=1 --action_env PYTHON_BIN_PATH=\"D:\\python\\python.exe\" mediapipe/examples/desktop/hello_world"
},
{
"label": "SetEnv",
"type": "shell",
"command": "set GLOG_logtostderr=1"
},
{
"label": "Bazel Build (Hello World)",
"dependsOn": ["Build", "SetEnv"],
"dependsOrder": "sequence"
},
// face mesh
{
"label": "Face mesh build",
"type": "shell",
"command": "bazel build -c dbg --define MEDIAPIPE_DISABLE_GPU=1 --action_env PYTHON_BIN_PATH=\"D://python//python.exe\" mediapipe/examples/desktop/face_mesh:face_mesh_cpu"
},
{
"label": "Bazel Build (Face Mesh)",
"dependsOn": ["Face mesh build", "SetEnv"],
"dependsOrder": "sequence"
},
// hand tracking
{
"label": "Hand tracking build",
"type": "shell",
"command": "bazel build -c dbg --define MEDIAPIPE_DISABLE_GPU=1 --action_env PYTHON_BIN_PATH=\"D://python//python.exe\" mediapipe/examples/desktop/hand_tracking:hand_tracking_cpu"
},
{
"label": "Bazel Build (Hand Tracking)",
"dependsOn": ["Hand tracking build", "SetEnv"],
"dependsOrder": "sequence"
}
]
}
调试的 lanuch.json 中内容为:
{
"version": "0.2.0",
"configurations": [
// hello world
{
"name": "hello world",
"preLaunchTask": "Bazel Build (Hello World)",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/bazel-bin/mediapipe/examples/desktop/hello_world/hello_world.exe",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"console": "externalTerminal"
},
// face mesh
{
"name": "face mesh",
"preLaunchTask": "Bazel Build (Face Mesh)",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/bazel-bin/mediapipe/examples/desktop/face_mesh/face_mesh_cpu.exe",
"args": [
"--calculator_graph_config_file","${workspaceFolder}/mediapipe/graphs/face_mesh/face_mesh_desktop_live.pbtxt"
],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"console": "externalTerminal"
},
// hand tracking
{
"name": "hand tracking",
"preLaunchTask": "Bazel Build (Hand Tracking)",
"type": "cppvsdbg",
"request": "launch",
"program": "${workspaceFolder}/bazel-bin/mediapipe/examples/desktop/hand_tracking/hand_tracking_cpu.exe",
"args": [
"--calculator_graph_config_file","${workspaceFolder}/mediapipe/graphs/hand_tracking/hand_tracking_desktop_live.pbtxt"
],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"console": "externalTerminal"
}
]
}
单步调试结果为:
之后使用右上角的调试角标调试即可
本文没涉及到的地方是科学上网,因为下载很多依赖都要从github上,但这个就八仙过海,各显神通叭。。