安裝環境
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執行時報錯如圖:
image.png - 解決方案
- 執行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 文件的位置,然后單擊“下一步”。
image.png -
此時,你應該會看到項目的“Packages”選項卡。在這里,你將在項目中添加任何 BUILD 文件,并設置 Bazel 二進制文件的路徑,該二進制文件將用于生成 Xcode 項目和編譯。
image.png -
單擊“+”按鈕添加您的 BUILD 文件。如果你有多個包含要直接構建的目標的 BUILD 文件,請重復此步驟。例如,你可能有一個包含您的規則ios_application和另一個包含ios_unit_test規則的 BUILD 文件。
image.png -
Tulsi 允許你設置生成的 Xcode 項目使用的各種選項。可能最有趣的是“'build' 選項”,Bazel 在編譯期間直接使用這些選項。Tulsi 選項可以在兩個地方設置,在項目級別(通過“默認選項”選項卡)和基于每代配置。“默認選項”選項卡中設置的值將在創建新的 Tulsi gen 配置時使用,并且對于在項目中工作的每個開發人員都相同的選項最有用。
image.png -
設置項目的最后一步是創建一個或多個生成器配置。一個較大的項目可能有幾個 gen 配置,可能一個具有 UI 層的源,另一個具有重要的支持庫,等等... Gen 配置允許您根據自己的喜好定制 Xcode 索引的源集,而無需包括每個源文件以便編譯。
image.png - 單擊“+”按鈕將允許您添加新的生成器配置。雙擊現有配置將允許您對其進行編輯,“-”按鈕可用于永久刪除以前創建的配置。
請注意,如果你尚未保存項目,則在第一次添加配置時會要求您這樣做。你幾乎可以將項目保存在您喜歡的任何地方,但你將從將其簽入源代碼樹中獲得最大的好處,以便你團隊中的其他開發人員可以共享它。tulsiconf-user除了包含可能是用戶特定的設置(例如絕對路徑)的文件之外,項目包是完全可共享的。
-
設置項目后,你將希望從你的配置之一生成一個 Xcode 項目。這是通過導航到“配置”選項卡來完成的......
image.png
選擇要生成的配置,并點擊"生成"按鈕.png
選擇保存項目的路徑.png -
接下來你就可以將MediaPipe里的各種Demo用手機來進行演示了
Xcode演示.png