前言:目前主流的开源物体识别算法有MediaPipe和YOLOv1~YOLOv8系列。
其中,YOLO系列是专门的物体识别算法,主要用于目标检测任务,可以直接转成iOS自带的CoreML模型。
MediaPipe是一个多功能AI框架,其算法包括对象检测、图片分类、图片分割、交互式分割、手势识别、手部特征点检测、嵌入图片、人脸检测、面部特征检测、姿势特征点检测、人脸风格化、整体特征点检测,其算法模型不能直接转成iOS自带的CoreML模型,一般使用Tulsi工具把对应算法模型转成framework后在xcode项目中与c++配合调用。
本文以Mediapipe中的姿势特征点检测(PoseTracking)算法(即人体骨骼图)为例,讲解如何将Mediapipe的单个算法打包为ios可用的.framework,并在Xcode项目中使用。
之前已经配置成功过Mediapipe v0.9.2.1的使用环境,涉及安装了python3,opencv@3,bazel 5.3.2, macos13.4.1。打包了PoseTrackingGpuApp.framework。这次xcode和macos系统环境都比之前更新了,而且Mediapipe也出了新版本,因此需要升级,顺便记录下整个过程。
一、环境介绍
- macOS Sonoma 14.4
- Xcode15.4
- Mediapipe v0.10.14(2024年5月最新版)
- 自装python3 版本Python 3.10.5
- opencv@3
- bazel 6.1.1+ (注意Mediapipe v0.10.14需要bazel最低版本为6.1.1,目前本机预装最新版本是6.2.1)
- 注意有些mediapipie版本编译失败,可能是bazel版本与mediapipe版本不匹配且未修改mediapipe中默认使用的bazel版本导致编译失败。
二、环境安装与升级
1、下载Mediapipe0.10.14
Medaipipe0.1.14之github下载地址
下载后解压得到
2、 安装软件包管理工具homebrew
- homebrew是一个包管理器,可以方便的安装与管理软件包和库。
# homebrerw安装
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# homebrew更新
brew update
# homebrew查看版本
brew --version
Homebrew 4.3.2
3、使用brew安装bazelisk
补充:Bazelisk介绍
- Bazelisk 是一个用于简化 Bazel 版本管理的工具,使用Go语言编写。它可以帮助开发者自动下载和使用项目所需的特定版本的 Bazel,而不需要手动安装和管理多个版本的 Bazel
- Bazelisk自动下载和使用项目中指定版本的 Bazel。通过 .bazelversion 文件定义项目所需的 Bazel 版本
- Mediapipe支持bazelisk工具,其项目文件夹根目录下已经创建好了.bazelversion文件,可使用cmd+shift+G输入~/mediapipe-0.10.14/.bazelversion,查看所对应Mediapipe版本支持的最低bazel版本号
- mediapipe的bazel配置文件为.bazelrc,可使用cmd+shift+G输入~/mediapipe-0.10.14/.bazelrc 查看。
# 安装Bazelisk,若homebrew已经link了bazel,需要先brew unlink bazel才能安装成功bazelisk
brew unlink bazel
brew install bazelisk
4、使用brew安装opencv@3
# 查看brew已安装的opencv@3信息
brew info opencv@3
# 安装OpenCV
brew install opencv@3
- 报错,这个错误,意味着 Homebrew 不再支持安装 opencv@3 版本,因为该最新版本已经不再由上游维护,这里没关系,使用以前的3.4.16_9也是可以的
opencv@3 3.4.16_9 -> 3.4.20
Error: opencv@3 has been disabled because it is not maintained upstream!
5、 若没有python3,使用brew安装python3
# 查看本机python3版本
python3 --version
# 查看brew的python3版本
brew info python3
# brew安装python3
brew install python3
- 由于macos自带python,因此下载完python3后需要配置默认使用python3
- 配置方法:cmd+shift+G 输入~/.zshrc,添加一行 alias python=/usr/bin/python3,保存。
# 查看本机python配置路径
which python
# 输出 python: aliased to /usr/bin/python3 说明已经配置好
6、使用python3自带的pip3包管理工具安装six库
pip3 install --user six
3.启动运行mediapip的helloworld文件
- 环境配置好后,我们来运行mediapipe
# cd 到 mediapipe 所在的目录,执行下面操作
export GLOG_logtostderr=1
# 需要bazel设置环境变量'MEDIAPIPE_DISABLE_GPU=1',因为桌面GPU当前不受支持
bazel run --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hello_world:hello_world
- 至此Mediapipe的环境已配置好,并且在终端上成功运行了Mediapipe的最简单的Hello World程序,如果你使用python二次开发算法,此时可以直接进行开发了。
- 如果你需要用Xcode运行Mediapipe则还需要安装Tulsi,使用Tulsi把Mediapipe转成Xcode项目。
三、安装Tulsi
- Tulsi.app用于将Mediapipe转成Xcode项目,使Mediapipe能够在Xcode上运行,后期也可将Mediapipe的算法打包成iOS的静态库(.framework)。
安装步骤如下:
1.下载tulsi
# 定位到mediapipe文件夹
cd /Users/用户名/mediapipe-0.10.14
# 下载Tulsi
git clone https://github.com/bazelbuild/tulsi.git
2.修改tulsi的脚本文件
# 定位到tulsi文件夹
cd tulsi
# 打开脚本文件
open build_and_run.sh
- 修改默认Xcode最小版本为本机实际Xcode版本
- xcode_version=“13.4.1” 改为 xcode_version=“15.4”
3. 终端执行修改后的脚本,来安装Tulsi.app
sh build_and_run.sh
- 成功后弹出应用程序