add support for MacOS with Apple Silicon M1, update README.md, add build_macos_desktop_examples.sh
This commit is contained in:
parent
a715f1ec4d
commit
702ae1769a
|
@ -1 +1 @@
|
|||
4.1.0
|
||||
3.7.2
|
||||
|
|
42
README.md
42
README.md
|
@ -79,6 +79,48 @@ run code search using
|
|||
|
||||
### Build on MacOS
|
||||
|
||||
#### Prepare
|
||||
1. install bazel/opencv/ffmpeg:
|
||||
```bash
|
||||
brew install bazel
|
||||
brew install opencv@3
|
||||
brew install ffmpeg
|
||||
```
|
||||
|
||||
2. Set .bazelversion:
|
||||
Run
|
||||
```bash
|
||||
brew list bazel
|
||||
```
|
||||
to get bazel version, which may print:
|
||||
```
|
||||
/opt/homebrew/Cellar/bazel/4.1.0/bin/bazel
|
||||
/opt/homebrew/Cellar/bazel/4.1.0/bin/bazel-4.1.0
|
||||
/opt/homebrew/Cellar/bazel/4.1.0/etc/bash_completion.d/bazel-complete.bash
|
||||
/opt/homebrew/Cellar/bazel/4.1.0/libexec/bin/ (3 files)
|
||||
/opt/homebrew/Cellar/bazel/4.1.0/share/zsh/site-functions/_bazel```
|
||||
```
|
||||
|
||||
Update .bazelversion:
|
||||
```bash
|
||||
echo 4.1.0 > .bazelversion
|
||||
```
|
||||
|
||||
1. Set the right paths to opencv/ffmpeg in WORKSPACE (line 212~222), for example:
|
||||
```
|
||||
new_local_repository(
|
||||
name = "macos_opencv",
|
||||
build_file = "@//third_party:opencv_macos.BUILD",
|
||||
path = "/opt/homebrew/Cellar/opencv@3/3.4.14_3",
|
||||
)
|
||||
|
||||
new_local_repository(
|
||||
name = "macos_ffmpeg",
|
||||
build_file = "@//third_party:ffmpeg_macos.BUILD",
|
||||
path = "/opt/homebrew/Cellar/ffmpeg/4.4_2",
|
||||
)
|
||||
```
|
||||
|
||||
#### CPU: Apple Silicon M1
|
||||
1. Build "hello_world":
|
||||
```bash
|
||||
|
|
149
build_macos_desktop_examples.sh
Normal file
149
build_macos_desktop_examples.sh
Normal file
|
@ -0,0 +1,149 @@
|
|||
#!/bin/bash
|
||||
# Copyright 2020 The MediaPipe Authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# =========================================================================
|
||||
#
|
||||
# Script to build/run all MediaPipe desktop example apps (with webcam input).
|
||||
#
|
||||
# CPU options: [arm64/m1/M1, x86_64, i386]
|
||||
# To only build "face_detection" app and store it in out_dir for MacOS with M1 CPU:
|
||||
# $ ./build_desktop_examples.sh -c m1 -d out_dir -a face_detection
|
||||
# Omitting -d and the associated directory saves all generated apps in the
|
||||
# current directory.
|
||||
# To build and run all apps and store them in out_dir for MacOS with M1 CPU:
|
||||
# $ ./build_desktop_examples.sh -c m1 -d out_dir
|
||||
# Omitting -d and the associated directory saves all generated apps in the
|
||||
# current directory.
|
||||
# To build all apps and store them in out_dir for MacOS with x86_64 CPU:
|
||||
# $ ./build_desktop_examples.sh -c x86_64 -d out_dir -b
|
||||
# Omitting -d and the associated directory saves all generated apps in the
|
||||
# current directory.
|
||||
# To run all apps already stored in out_dir:
|
||||
# $ ./build_desktop_examples.sh -d out_dir -r
|
||||
# Omitting -d and the associated directory assumes all apps are in the current
|
||||
# directory.
|
||||
|
||||
set -e
|
||||
|
||||
out_dir="."
|
||||
build_only=false
|
||||
run_only=false
|
||||
# cpu options: [arm64/m1/M1, x86_64, i386]
|
||||
# corresponding bazel cpu options: [darwin_arm64, darwin_x86_64, darwin]
|
||||
cpu="arm64"
|
||||
app_dir="mediapipe/examples/desktop"
|
||||
app_name=""
|
||||
bin_dir="bazel-bin"
|
||||
|
||||
while [[ -n $1 ]]; do
|
||||
case $1 in
|
||||
-d)
|
||||
shift
|
||||
out_dir=$1
|
||||
;;
|
||||
-c | --cpu)
|
||||
shift
|
||||
cpu=$1
|
||||
;;
|
||||
-a | --app)
|
||||
shift
|
||||
app_name=$1
|
||||
;;
|
||||
-b)
|
||||
build_only=true
|
||||
;;
|
||||
-r)
|
||||
run_only=true
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported input argument $1."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
case $cpu in
|
||||
x86_64 | i386)
|
||||
cpu="darwin_$cpu"
|
||||
;;
|
||||
arm64 | m1 | M1)
|
||||
cpu="darwin_arm64"
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported cpu argument $1."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "app_dir: $app_dir"
|
||||
echo "out_dir: $out_dir"
|
||||
echo "cpu: $cpu"
|
||||
echo "app_name: $app_name"
|
||||
|
||||
declare -a default_bazel_flags=(build -c opt --define MEDIAPIPE_DISABLE_GPU=1 --cpu $cpu)
|
||||
declare -a bazel_flags
|
||||
|
||||
if [[ ! -z "${app_name}" ]]; then
|
||||
echo "Only build app: ${app_dir}/${app_name}"
|
||||
declare -a apps=("${app_dir}/${app_name}")
|
||||
else
|
||||
echo "Build all available apps under $app_dir"
|
||||
apps="${app_dir}/*"
|
||||
fi
|
||||
|
||||
for app in ${apps}; do
|
||||
if [[ -d "${app}" ]]; then
|
||||
target_name=${app##*/}
|
||||
if [[ "${target_name}" == "autoflip" ||
|
||||
"${target_name}" == "hello_world" ||
|
||||
"${target_name}" == "media_sequence" ||
|
||||
"${target_name}" == "object_detection_3d" ||
|
||||
"${target_name}" == "template_matching" ||
|
||||
"${target_name}" == "youtube8m" ]]; then
|
||||
echo "Skip ${target_name}"
|
||||
continue
|
||||
fi
|
||||
target="${app}:${target_name}_cpu"
|
||||
|
||||
echo "=== Target: ${target}"
|
||||
|
||||
if [[ $run_only == false ]]; then
|
||||
bazel_flags=("${default_bazel_flags[@]}")
|
||||
bazel_flags+=(${target})
|
||||
|
||||
bazel "${bazel_flags[@]}"
|
||||
cp -f "${bin_dir}/${app}/"*"_cpu" "${out_dir}"
|
||||
fi
|
||||
if [[ $build_only == false ]]; then
|
||||
if [[ ${target_name} == "object_tracking" ]]; then
|
||||
graph_name="tracking/object_detection_tracking"
|
||||
elif [[ ${target_name} == "upper_body_pose_tracking" ]]; then
|
||||
graph_name="pose_tracking/upper_body_pose_tracking"
|
||||
else
|
||||
graph_name="${target_name}/${target_name}"
|
||||
fi
|
||||
if [[ ${target_name} == "holistic_tracking" ||
|
||||
${target_name} == "iris_tracking" ||
|
||||
${target_name} == "pose_tracking" ||
|
||||
${target_name} == "upper_body_pose_tracking" ]]; then
|
||||
graph_suffix="cpu"
|
||||
else
|
||||
graph_suffix="desktop_live"
|
||||
fi
|
||||
GLOG_logtostderr=1 "${out_dir}/${target_name}_cpu" \
|
||||
--calculator_graph_config_file=mediapipe/graphs/"${graph_name}_${graph_suffix}.pbtxt"
|
||||
fi
|
||||
fi
|
||||
done
|
|
@ -26,8 +26,7 @@
|
|||
#include "mediapipe/framework/port/status.h"
|
||||
|
||||
#ifdef __APPLE__
|
||||
// #define AUTORELEASEPOOL @autoreleasepool
|
||||
#define AUTORELEASEPOOL
|
||||
#define AUTORELEASEPOOL @autoreleasepool
|
||||
#else
|
||||
#define AUTORELEASEPOOL
|
||||
#endif // __APPLE__
|
||||
|
|
Loading…
Reference in New Issue
Block a user