安装环境
macOS Monterey 12.3
一、安装Homebrew
$ /bin/bash -c "$(curl -fsSL \
https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
//一键安装脚本:
$ /bin/zsh -c"$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
- 安装xcode及命令后工具
$ xcode-select --install
可用以下命令删除旧版本
sudo xcode-select --switch /Library/Developer/CommandLineTools/
或:
sudo rm -rf /Library/Developer/CommandLineTools
- 查看是否安装成功
$ gcc -v
Apple clang version 14.0.0 (clang-1400.0.29.102)
Target: arm64-apple-darwin21.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
- 安装Bazelisk
$ brew install bazelisk
- clone MediaPipe库到本地
$ git clone https://github.com/google/mediapipe.git
$ cd mediapipe
- 安装OpenCV和FFmpeg
$ brew install opencv@3
//glog依赖项导致了一个已知问题,卸载glog
$ brew uninstall --ignore-dependencies glog
若有下载依赖报错,则先下载依赖
$ brew install openexr
$ brew install libvmaf
$ brew install libx11
$ brew install libarchive
$ brew install opencv@3
- 查看Opencv的版本及信息
$ brew info opencv@3
- Opencv安装成功日志:
==> Summary
🍺 /opt/homebrew/Cellar/opencv@3/3.4.16_4: 656 files, 83.6MB
==> Running `brew cleanup opencv@3`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> Caveats
==> opencv@3
opencv@3 is keg-only, which means it was not symlinked into /opt/homebrew,
because this is an alternate version of another formula.
If you need to have opencv@3 first in your PATH, run:
echo 'export PATH="/opt/homebrew/opt/opencv@3/bin:$PATH"' >> ~/.zshrc
For compilers to find opencv@3 you may need to set:
export LDFLAGS="-L/opt/homebrew/opt/opencv@3/lib"
export CPPFLAGS="-I/opt/homebrew/opt/opencv@3/include"
二、下载安装Bazel
- 在 macOS Catalina 或更高版本 (macOS >= 11) 上,根据 Apple 的新应用签名要求,您需要使用 curl 从终端下载安装程序。注意替换版本变量为你要下载的 Bazel 版本号。
$ export BAZEL_VERSION=5.2.0
$ curl -fLO "https://github.com/bazelbuild/bazel/releases/download/$BAZEL_VERSION/bazel-$BAZEL_VERSION-installer-darwin-x86_64.sh"
- 运行安装程序
$ chmod +x "bazel-$BAZEL_VERSION-installer-darwin-x86_64.sh"
./bazel-$BAZEL_VERSION-installer-darwin-x86_64.sh --user
--user 命令会将 Bazel 安装到系统的HOME/bin 目录中,并将 .bazelrc 路径设置为 $HOME/.bazelrc。使用 --help 命令查看其他安装选项。
- 设置环境
如果使用上述 --user 标志运行 Bazel 安装程序,那么 Bazel 可执行文件将安装到 HOME/bin 目录中。建议将此目录添加到默认路径中,如下所示:
export PATH="PATH:HOME/bin"
还可以将此命令添加到 /.bashrc、/.zshrc 或 ~/.profile 文件。
设置完成之后可以通过运行以下命令确认 Bazel 是否已成功安装:
$ bazel --version
bazel 5.3.1
- 安装TensorFlow依赖的Python库
$ pip3 install --user six
查看python版本:python -V
- 设置唯一的bundle ID前缀,通过以下命令获取
$ python3 mediapipe/examples/ios/link_local_profiles.py
- 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
控制台输出:Hello World!
表示安装完成!
使用Tulsi工具构建Xcode项目
- 使用Tulsi工具生成Xcode项目,使用Bazel进行项目构建。
//cd 到 mediapipe文件的同级目录
$ git clone https://github.com/bazelbuild/tulsi.git
$ cd tulsi
# remove Xcode version from Tulsi's .bazelrc (see http://github.com/bazelbuild/tulsi#building-and-installing):
$ sed -i .orig '/xcode_version/d' .bazelrc
# build and run Tulsi:
$ sh build_and_run.sh
完成以上命令会安装一个Tulsi.app到应用程序里
- 使用Tulsi.app打开mediapipe/Mediapipe.tulsiproj。注意:如果Tulsi显示错误说“Bazel could not be found”,在选项中点击“Bazel…”按钮,选择bazel执行在homebrew /bin/文件中。
- 在配置选项卡中选择MediaPipe配置,然后按下下面的Generate生成按钮。
-
输入项目名称,为项目选择WORKSPACE文件。
Tulsi.app执行时报错如图:
- 解决方案
- 执行brew info opencv@3,查看所有依赖是否安装
- 检查bazel版本是否符合要求,因下载了最新的bazel版本且把.bazelversion文件中的版本号修改为了最新版本。修改回来后,按照错误提示执行脚本,就解决了问题
- WORKSPACE文件:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "build_bazel_rules_apple",
sha256 = "4161b2283f80f33b93579627c3bd846169b2d58848b0ffb29b5d4db35263156a",
url = "https://github.com/bazelbuild/rules_apple/releases/download/0.34.0/rules_apple.0.34.0.tar.gz",
)
load(
"@build_bazel_rules_apple//apple:repositories.bzl",
"apple_rules_dependencies",
)
apple_rules_dependencies()
load(
"@build_bazel_rules_swift//swift:repositories.bzl",
"swift_rules_dependencies",
)
swift_rules_dependencies()
load(
"@build_bazel_rules_swift//swift:extras.bzl",
"swift_rules_extra_dependencies",
)
swift_rules_extra_dependencies()
load(
"@build_bazel_apple_support//lib:repositories.bzl",
"apple_support_dependencies",
)
apple_support_dependencies()
BUILD文件:
# @build_bazel_rules_apple//apple:ios.bzl 表示构建iOS平台的bundle
# ios_application 表示iOS应用,
load("@build_bazel_rules_apple//apple:ios.bzl", "ios_application")
# objc库文件
objc_library(
name = "Lib",
srcs = glob([
"**/*.h",
"**/*.m",
]),
data = [
":Main.storyboard",
],
)
# 将“deps”中的代码链接到可执行文件中,收集和编译“deps”中的资源,并将其与可执行文件一起放在.app bundle里, 然后输出一个.ipa应用程序包在他的Payload文件中。
ios_application(
name = "App",
bundle_id = "com.example.app",
families = ["iphone", "ipad"],
infoplists = [":Info.plist"],
minimum_os_version = "15.0",
deps = [":Lib"],
)
打包应用是需要对应的配置文件,从开发者中心下载通用的profile.mobileprovision
配置文件,
例如:
profile.mobileprovision对应的bunld_id是com.companyname.*
,
则需要打开mediapipe/examples/ios/bundle_id.bzl
文件
将BUNDLE_ID_PREFIX = "*SEE_IOS_INSTRUCTIONS*.mediapipe.examples"
修改为BUNDLE_ID_PREFIX = "com.companyname"
然后将你的配置文件符号链接或复制到mediapipe/mediapipe
路径下,下载的文件在~/Downloads
目录下,文件名为Profile_common.mobileprovision
。则执行命令把它做一个符号链接:
$ cd mediapipe
$ ln -s ~/Downloads/Profile_common.mobileprovision mediapipe/provisioning_profile.mobileprovision
-
为你的项目命名并选择 Bazel WORKSPACE 文件的位置,然后单击“下一步”。
-
此时,你应该会看到项目的“Packages”选项卡。在这里,你将在项目中添加任何 BUILD 文件,并设置 Bazel 二进制文件的路径,该二进制文件将用于生成 Xcode 项目和编译。
-
单击“+”按钮添加您的 BUILD 文件。如果你有多个包含要直接构建的目标的 BUILD 文件,请重复此步骤。例如,你可能有一个包含您的规则ios_application和另一个包含ios_unit_test规则的 BUILD 文件。
-
Tulsi 允许你设置生成的 Xcode 项目使用的各种选项。可能最有趣的是“'build' 选项”,Bazel 在编译期间直接使用这些选项。Tulsi 选项可以在两个地方设置,在项目级别(通过“默认选项”选项卡)和基于每代配置。“默认选项”选项卡中设置的值将在创建新的 Tulsi gen 配置时使用,并且对于在项目中工作的每个开发人员都相同的选项最有用。
-
设置项目的最后一步是创建一个或多个生成器配置。一个较大的项目可能有几个 gen 配置,可能一个具有 UI 层的源,另一个具有重要的支持库,等等... Gen 配置允许您根据自己的喜好定制 Xcode 索引的源集,而无需包括每个源文件以便编译。
- 单击“+”按钮将允许您添加新的生成器配置。双击现有配置将允许您对其进行编辑,“-”按钮可用于永久删除以前创建的配置。
请注意,如果你尚未保存项目,则在第一次添加配置时会要求您这样做。你几乎可以将项目保存在您喜欢的任何地方,但你将从将其签入源代码树中获得最大的好处,以便你团队中的其他开发人员可以共享它。tulsiconf-user除了包含可能是用户特定的设置(例如绝对路径)的文件之外,项目包是完全可共享的。
-
设置项目后,你将希望从你的配置之一生成一个 Xcode 项目。这是通过导航到“配置”选项卡来完成的......
-
接下来你就可以将MediaPipe里的各种Demo用手机来进行演示了