MediaPipe iOS集成

安装环境

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
  • 解决方案
  1. 执行brew info opencv@3,查看所有依赖是否安装
  2. 检查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除了包含可能是用户特定的设置(例如绝对路径)的文件之外,项目包是完全可共享的。

image.png
  • 设置项目后,你将希望从你的配置之一生成一个 Xcode 项目。这是通过导航到“配置”选项卡来完成的......

    image.png

    选择要生成的配置,并点击"生成"按钮.png

    选择保存项目的路径.png
  • 接下来你就可以将MediaPipe里的各种Demo用手机来进行演示了

    Xcode演示.png

版权声明:
作者:lichengxin
链接:https://www.techfm.club/p/47892.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>