Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6cdc6443b6 | ||
|
|
b65602fd31 | ||
|
|
06c30f1931 | ||
|
|
ebec590cfe | ||
|
|
d3f98334bf | ||
|
|
4dc4b19ddb | ||
|
|
63e679d99c | ||
|
|
c688862570 | ||
|
|
4a20e9909d | ||
|
|
7fb37c80e8 | ||
|
|
c6c80c3745 | ||
|
|
cc6a2f7af6 |
@@ -32,6 +32,9 @@ build:macos --copt=-w
|
|||||||
# Sets the default Apple platform to macOS.
|
# Sets the default Apple platform to macOS.
|
||||||
build --apple_platform_type=macos
|
build --apple_platform_type=macos
|
||||||
|
|
||||||
|
# Compile ObjC++ files with C++17
|
||||||
|
build --per_file_copt=.*\.mm\$@-std=c++17
|
||||||
|
|
||||||
# Allow debugging with XCODE
|
# Allow debugging with XCODE
|
||||||
build --apple_generate_dsym
|
build --apple_generate_dsym
|
||||||
|
|
||||||
@@ -88,6 +91,10 @@ build:darwin_x86_64 --apple_platform_type=macos
|
|||||||
build:darwin_x86_64 --macos_minimum_os=10.12
|
build:darwin_x86_64 --macos_minimum_os=10.12
|
||||||
build:darwin_x86_64 --cpu=darwin_x86_64
|
build:darwin_x86_64 --cpu=darwin_x86_64
|
||||||
|
|
||||||
|
build:darwin_arm64 --apple_platform_type=macos
|
||||||
|
build:darwin_arm64 --macos_minimum_os=10.16
|
||||||
|
build:darwin_arm64 --cpu=darwin_arm64
|
||||||
|
|
||||||
# This bazelrc file is meant to be written by a setup script.
|
# This bazelrc file is meant to be written by a setup script.
|
||||||
try-import %workspace%/.configure.bazelrc
|
try-import %workspace%/.configure.bazelrc
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
4.2.1
|
5.2.0
|
||||||
|
|||||||
@@ -10,5 +10,3 @@ For questions on how to work with MediaPipe, or support for problems that are no
|
|||||||
|
|
||||||
If you are reporting a vulnerability, please use the [dedicated reporting process](https://github.com/google/mediapipe/security).
|
If you are reporting a vulnerability, please use the [dedicated reporting process](https://github.com/google/mediapipe/security).
|
||||||
|
|
||||||
For high-level discussions about MediaPipe, please post to discuss@mediapipe.org, for questions about the development or internal workings of MediaPipe, or if you would like to know how to contribute to MediaPipe, please post to developers@mediapipe.org.
|
|
||||||
|
|
||||||
|
|||||||
@@ -15,4 +15,4 @@
|
|||||||
|
|
||||||
# A list of assignees
|
# A list of assignees
|
||||||
assignees:
|
assignees:
|
||||||
- sgowroji
|
- sureshdagooglecom
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM ubuntu:18.04
|
FROM ubuntu:20.04
|
||||||
|
|
||||||
MAINTAINER <[email protected]>
|
MAINTAINER <[email protected]>
|
||||||
|
|
||||||
@@ -42,6 +42,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|||||||
software-properties-common && \
|
software-properties-common && \
|
||||||
add-apt-repository -y ppa:openjdk-r/ppa && \
|
add-apt-repository -y ppa:openjdk-r/ppa && \
|
||||||
apt-get update && apt-get install -y openjdk-8-jdk && \
|
apt-get update && apt-get install -y openjdk-8-jdk && \
|
||||||
|
apt-get install -y mesa-common-dev libegl1-mesa-dev libgles2-mesa-dev && \
|
||||||
|
apt-get install -y mesa-utils && \
|
||||||
apt-get clean && \
|
apt-get clean && \
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
@@ -49,14 +51,15 @@ RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100 --slave /u
|
|||||||
RUN pip3 install --upgrade setuptools
|
RUN pip3 install --upgrade setuptools
|
||||||
RUN pip3 install wheel
|
RUN pip3 install wheel
|
||||||
RUN pip3 install future
|
RUN pip3 install future
|
||||||
|
RUN pip3 install absl-py numpy opencv-contrib-python protobuf==3.20.1
|
||||||
RUN pip3 install six==1.14.0
|
RUN pip3 install six==1.14.0
|
||||||
RUN pip3 install tensorflow==1.14.0
|
RUN pip3 install tensorflow==2.2.0
|
||||||
RUN pip3 install tf_slim
|
RUN pip3 install tf_slim
|
||||||
|
|
||||||
RUN ln -s /usr/bin/python3 /usr/bin/python
|
RUN ln -s /usr/bin/python3 /usr/bin/python
|
||||||
|
|
||||||
# Install bazel
|
# Install bazel
|
||||||
ARG BAZEL_VERSION=4.2.1
|
ARG BAZEL_VERSION=5.2.0
|
||||||
RUN mkdir /bazel && \
|
RUN mkdir /bazel && \
|
||||||
wget --no-check-certificate -O /bazel/installer.sh "https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VERSION}/b\
|
wget --no-check-certificate -O /bazel/installer.sh "https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VERSION}/b\
|
||||||
azel-${BAZEL_VERSION}-installer-linux-x86_64.sh" && \
|
azel-${BAZEL_VERSION}-installer-linux-x86_64.sh" && \
|
||||||
|
|||||||
@@ -7,14 +7,4 @@ include MANIFEST.in
|
|||||||
include README.md
|
include README.md
|
||||||
include requirements.txt
|
include requirements.txt
|
||||||
|
|
||||||
recursive-include mediapipe/modules *.tflite *.txt *.binarypb
|
recursive-include mediapipe/modules *.txt
|
||||||
exclude mediapipe/modules/face_detection/face_detection_full_range.tflite
|
|
||||||
exclude mediapipe/modules/objectron/object_detection_3d_chair_1stage.tflite
|
|
||||||
exclude mediapipe/modules/objectron/object_detection_3d_sneakers_1stage.tflite
|
|
||||||
exclude mediapipe/modules/objectron/object_detection_3d_sneakers.tflite
|
|
||||||
exclude mediapipe/modules/objectron/object_detection_3d_chair.tflite
|
|
||||||
exclude mediapipe/modules/objectron/object_detection_3d_camera.tflite
|
|
||||||
exclude mediapipe/modules/objectron/object_detection_3d_cup.tflite
|
|
||||||
exclude mediapipe/modules/objectron/object_detection_ssd_mobilenetv2_oidv4_fp16.tflite
|
|
||||||
exclude mediapipe/modules/pose_landmark/pose_landmark_lite.tflite
|
|
||||||
exclude mediapipe/modules/pose_landmark/pose_landmark_heavy.tflite
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ title: Home
|
|||||||
nav_order: 1
|
nav_order: 1
|
||||||
---
|
---
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -13,21 +13,21 @@ nav_order: 1
|
|||||||
[MediaPipe](https://google.github.io/mediapipe/) offers cross-platform, customizable
|
[MediaPipe](https://google.github.io/mediapipe/) offers cross-platform, customizable
|
||||||
ML solutions for live and streaming media.
|
ML solutions for live and streaming media.
|
||||||
|
|
||||||
 | 
|
 | 
|
||||||
:------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------:
|
:------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------:
|
||||||
***End-to-End acceleration***: *Built-in fast ML inference and processing accelerated even on common hardware* | ***Build once, deploy anywhere***: *Unified solution works across Android, iOS, desktop/cloud, web and IoT*
|
***End-to-End acceleration***: *Built-in fast ML inference and processing accelerated even on common hardware* | ***Build once, deploy anywhere***: *Unified solution works across Android, iOS, desktop/cloud, web and IoT*
|
||||||
 | 
|
 | 
|
||||||
***Ready-to-use solutions***: *Cutting-edge ML solutions demonstrating full power of the framework* | ***Free and open source***: *Framework and solutions both under Apache 2.0, fully extensible and customizable*
|
***Ready-to-use solutions***: *Cutting-edge ML solutions demonstrating full power of the framework* | ***Free and open source***: *Framework and solutions both under Apache 2.0, fully extensible and customizable*
|
||||||
|
|
||||||
## ML solutions in MediaPipe
|
## ML solutions in MediaPipe
|
||||||
|
|
||||||
Face Detection | Face Mesh | Iris | Hands | Pose | Holistic
|
Face Detection | Face Mesh | Iris | Hands | Pose | Holistic
|
||||||
:----------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------: | :------:
|
:----------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------: | :------:
|
||||||
[](https://google.github.io/mediapipe/solutions/face_detection) | [](https://google.github.io/mediapipe/solutions/face_mesh) | [](https://google.github.io/mediapipe/solutions/iris) | [](https://google.github.io/mediapipe/solutions/hands) | [](https://google.github.io/mediapipe/solutions/pose) | [](https://google.github.io/mediapipe/solutions/holistic)
|
[](https://google.github.io/mediapipe/solutions/face_detection) | [](https://google.github.io/mediapipe/solutions/face_mesh) | [](https://google.github.io/mediapipe/solutions/iris) | [](https://google.github.io/mediapipe/solutions/hands) | [](https://google.github.io/mediapipe/solutions/pose) | [](https://google.github.io/mediapipe/solutions/holistic)
|
||||||
|
|
||||||
Hair Segmentation | Object Detection | Box Tracking | Instant Motion Tracking | Objectron | KNIFT
|
Hair Segmentation | Object Detection | Box Tracking | Instant Motion Tracking | Objectron | KNIFT
|
||||||
:-------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------: | :---:
|
:-------------------------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------: | :---:
|
||||||
[](https://google.github.io/mediapipe/solutions/hair_segmentation) | [](https://google.github.io/mediapipe/solutions/object_detection) | [](https://google.github.io/mediapipe/solutions/box_tracking) | [](https://google.github.io/mediapipe/solutions/instant_motion_tracking) | [](https://google.github.io/mediapipe/solutions/objectron) | [](https://google.github.io/mediapipe/solutions/knift)
|
[](https://google.github.io/mediapipe/solutions/hair_segmentation) | [](https://google.github.io/mediapipe/solutions/object_detection) | [](https://google.github.io/mediapipe/solutions/box_tracking) | [](https://google.github.io/mediapipe/solutions/instant_motion_tracking) | [](https://google.github.io/mediapipe/solutions/objectron) | [](https://google.github.io/mediapipe/solutions/knift)
|
||||||
|
|
||||||
<!-- []() in the first cell is needed to preserve table formatting in GitHub Pages. -->
|
<!-- []() in the first cell is needed to preserve table formatting in GitHub Pages. -->
|
||||||
<!-- Whenever this table is updated, paste a copy to solutions/solutions.md. -->
|
<!-- Whenever this table is updated, paste a copy to solutions/solutions.md. -->
|
||||||
@@ -136,8 +136,8 @@ run code search using
|
|||||||
|
|
||||||
## Community
|
## Community
|
||||||
|
|
||||||
* [Awesome MediaPipe](https://mediapipe.org) - A curated list of awesome
|
* [Awesome MediaPipe](https://mediapipe.page.link/awesome-mediapipe) - A
|
||||||
MediaPipe related frameworks, libraries and software
|
curated list of awesome MediaPipe related frameworks, libraries and software
|
||||||
* [Slack community](https://mediapipe.page.link/joinslack) for MediaPipe users
|
* [Slack community](https://mediapipe.page.link/joinslack) for MediaPipe users
|
||||||
* [Discuss](https://groups.google.com/forum/#!forum/mediapipe) - General
|
* [Discuss](https://groups.google.com/forum/#!forum/mediapipe) - General
|
||||||
community discussion around MediaPipe
|
community discussion around MediaPipe
|
||||||
|
|||||||
@@ -2,6 +2,12 @@ workspace(name = "mediapipe")
|
|||||||
|
|
||||||
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
|
||||||
|
|
||||||
|
# Protobuf expects an //external:python_headers target
|
||||||
|
bind(
|
||||||
|
name = "python_headers",
|
||||||
|
actual = "@local_config_python//:python_headers",
|
||||||
|
)
|
||||||
|
|
||||||
http_archive(
|
http_archive(
|
||||||
name = "bazel_skylib",
|
name = "bazel_skylib",
|
||||||
type = "tar.gz",
|
type = "tar.gz",
|
||||||
@@ -35,8 +41,9 @@ http_archive(
|
|||||||
|
|
||||||
http_archive(
|
http_archive(
|
||||||
name = "rules_cc",
|
name = "rules_cc",
|
||||||
strip_prefix = "rules_cc-main",
|
strip_prefix = "rules_cc-2f8c04c04462ab83c545ab14c0da68c3b4c96191",
|
||||||
urls = ["https://github.com/bazelbuild/rules_cc/archive/main.zip"],
|
# The commit can be updated if the build passes. Last updated 6/23/22.
|
||||||
|
urls = ["https://github.com/bazelbuild/rules_cc/archive/2f8c04c04462ab83c545ab14c0da68c3b4c96191.zip"],
|
||||||
)
|
)
|
||||||
|
|
||||||
http_archive(
|
http_archive(
|
||||||
@@ -61,11 +68,12 @@ http_archive(
|
|||||||
sha256 = "de682ea824bfffba05b4e33b67431c247397d6175962534305136aa06f92e049",
|
sha256 = "de682ea824bfffba05b4e33b67431c247397d6175962534305136aa06f92e049",
|
||||||
)
|
)
|
||||||
|
|
||||||
# Google Benchmark library.
|
# Google Benchmark library v1.6.1 released on 2022-01-10.
|
||||||
http_archive(
|
http_archive(
|
||||||
name = "com_google_benchmark",
|
name = "com_google_benchmark",
|
||||||
urls = ["https://github.com/google/benchmark/archive/main.zip"],
|
urls = ["https://github.com/google/benchmark/archive/refs/tags/v1.6.1.tar.gz"],
|
||||||
strip_prefix = "benchmark-main",
|
strip_prefix = "benchmark-1.6.1",
|
||||||
|
sha256 = "6132883bc8c9b0df5375b16ab520fac1a85dc9e4cf5be59480448ece74b278d4",
|
||||||
build_file = "@//third_party:benchmark.BUILD",
|
build_file = "@//third_party:benchmark.BUILD",
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -140,12 +148,50 @@ http_archive(
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
load("//third_party/flatbuffers:workspace.bzl", flatbuffers = "repo")
|
||||||
|
flatbuffers()
|
||||||
|
|
||||||
http_archive(
|
http_archive(
|
||||||
name = "com_google_audio_tools",
|
name = "com_google_audio_tools",
|
||||||
strip_prefix = "multichannel-audio-tools-master",
|
strip_prefix = "multichannel-audio-tools-master",
|
||||||
urls = ["https://github.com/google/multichannel-audio-tools/archive/master.zip"],
|
urls = ["https://github.com/google/multichannel-audio-tools/archive/master.zip"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# sentencepiece
|
||||||
|
http_archive(
|
||||||
|
name = "com_google_sentencepiece",
|
||||||
|
strip_prefix = "sentencepiece-1.0.0",
|
||||||
|
sha256 = "c05901f30a1d0ed64cbcf40eba08e48894e1b0e985777217b7c9036cac631346",
|
||||||
|
urls = [
|
||||||
|
"https://github.com/google/sentencepiece/archive/1.0.0.zip",
|
||||||
|
],
|
||||||
|
repo_mapping = {"@com_google_glog" : "@com_github_glog_glog"},
|
||||||
|
)
|
||||||
|
|
||||||
|
http_archive(
|
||||||
|
name = "org_tensorflow_text",
|
||||||
|
sha256 = "f64647276f7288d1b1fe4c89581d51404d0ce4ae97f2bcc4c19bd667549adca8",
|
||||||
|
strip_prefix = "text-2.2.0",
|
||||||
|
urls = [
|
||||||
|
"https://github.com/tensorflow/text/archive/v2.2.0.zip",
|
||||||
|
],
|
||||||
|
patches = [
|
||||||
|
"//third_party:tensorflow_text_remove_tf_deps.diff",
|
||||||
|
"//third_party:tensorflow_text_a0f49e63.diff",
|
||||||
|
],
|
||||||
|
patch_args = ["-p1"],
|
||||||
|
repo_mapping = {"@com_google_re2": "@com_googlesource_code_re2"},
|
||||||
|
)
|
||||||
|
|
||||||
|
http_archive(
|
||||||
|
name = "com_googlesource_code_re2",
|
||||||
|
sha256 = "e06b718c129f4019d6e7aa8b7631bee38d3d450dd980246bfaf493eb7db67868",
|
||||||
|
strip_prefix = "re2-fe4a310131c37f9a7e7f7816fa6ce2a8b27d65a8",
|
||||||
|
urls = [
|
||||||
|
"https://github.com/google/re2/archive/fe4a310131c37f9a7e7f7816fa6ce2a8b27d65a8.tar.gz",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
# 2020-07-09
|
# 2020-07-09
|
||||||
http_archive(
|
http_archive(
|
||||||
name = "pybind11_bazel",
|
name = "pybind11_bazel",
|
||||||
@@ -165,6 +211,15 @@ http_archive(
|
|||||||
build_file = "@pybind11_bazel//:pybind11.BUILD",
|
build_file = "@pybind11_bazel//:pybind11.BUILD",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
http_archive(
|
||||||
|
name = "pybind11_protobuf",
|
||||||
|
sha256 = "baa1f53568283630a5055c85f0898b8810f7a6431bd01bbaedd32b4c1defbcb1",
|
||||||
|
strip_prefix = "pybind11_protobuf-3594106f2df3d725e65015ffb4c7886d6eeee683",
|
||||||
|
urls = [
|
||||||
|
"https://github.com/pybind/pybind11_protobuf/archive/3594106f2df3d725e65015ffb4c7886d6eeee683.tar.gz",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
# Point to the commit that deprecates the usage of Eigen::MappedSparseMatrix.
|
# Point to the commit that deprecates the usage of Eigen::MappedSparseMatrix.
|
||||||
http_archive(
|
http_archive(
|
||||||
name = "ceres_solver",
|
name = "ceres_solver",
|
||||||
@@ -201,7 +256,10 @@ new_local_repository(
|
|||||||
new_local_repository(
|
new_local_repository(
|
||||||
name = "macos_opencv",
|
name = "macos_opencv",
|
||||||
build_file = "@//third_party:opencv_macos.BUILD",
|
build_file = "@//third_party:opencv_macos.BUILD",
|
||||||
path = "/usr/local/opt/opencv@3",
|
# For local MacOS builds, the path should point to an opencv@3 installation.
|
||||||
|
# If you edit the path here, you will also need to update the corresponding
|
||||||
|
# prefix in "opencv_macos.BUILD".
|
||||||
|
path = "/usr/local",
|
||||||
)
|
)
|
||||||
|
|
||||||
new_local_repository(
|
new_local_repository(
|
||||||
@@ -372,10 +430,29 @@ http_archive(
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
# Tensorflow repo should always go after the other external dependencies.
|
# Load Zlib before initializing TensorFlow to guarantee that the target
|
||||||
# 2021-12-02
|
# @zlib//:mini_zlib is available
|
||||||
_TENSORFLOW_GIT_COMMIT = "18a1dc0ba806dc023808531f0373d9ec068e64bf"
|
http_archive(
|
||||||
_TENSORFLOW_SHA256 = "85b90416f7a11339327777bccd634de00ca0de2cf334f5f0727edcb11ff9289a"
|
name = "zlib",
|
||||||
|
build_file = "//third_party:zlib.BUILD",
|
||||||
|
sha256 = "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1",
|
||||||
|
strip_prefix = "zlib-1.2.11",
|
||||||
|
urls = [
|
||||||
|
"http://mirror.bazel.build/zlib.net/fossils/zlib-1.2.11.tar.gz",
|
||||||
|
"http://zlib.net/fossils/zlib-1.2.11.tar.gz", # 2017-01-15
|
||||||
|
],
|
||||||
|
patches = [
|
||||||
|
"@//third_party:zlib.diff",
|
||||||
|
],
|
||||||
|
patch_args = [
|
||||||
|
"-p1",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
# TensorFlow repo should always go after the other external dependencies.
|
||||||
|
# TF on 2022-08-10.
|
||||||
|
_TENSORFLOW_GIT_COMMIT = "af1d5bc4fbb66d9e6cc1cf89503014a99233583b"
|
||||||
|
_TENSORFLOW_SHA256 = "f85a5443264fc58a12d136ca6a30774b5bc25ceaf7d114d97f252351b3c3a2cb"
|
||||||
http_archive(
|
http_archive(
|
||||||
name = "org_tensorflow",
|
name = "org_tensorflow",
|
||||||
urls = [
|
urls = [
|
||||||
@@ -383,7 +460,6 @@ http_archive(
|
|||||||
],
|
],
|
||||||
patches = [
|
patches = [
|
||||||
"@//third_party:org_tensorflow_compatibility_fixes.diff",
|
"@//third_party:org_tensorflow_compatibility_fixes.diff",
|
||||||
"@//third_party:org_tensorflow_objc_cxx17.diff",
|
|
||||||
# Diff is generated with a script, don't update it manually.
|
# Diff is generated with a script, don't update it manually.
|
||||||
"@//third_party:org_tensorflow_custom_ops.diff",
|
"@//third_party:org_tensorflow_custom_ops.diff",
|
||||||
],
|
],
|
||||||
@@ -413,3 +489,6 @@ libedgetpu_dependencies()
|
|||||||
|
|
||||||
load("@coral_crosstool//:configure.bzl", "cc_crosstool")
|
load("@coral_crosstool//:configure.bzl", "cc_crosstool")
|
||||||
cc_crosstool(name = "crosstool")
|
cc_crosstool(name = "crosstool")
|
||||||
|
|
||||||
|
load("//third_party:external_files.bzl", "external_files")
|
||||||
|
external_files()
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ for app in ${apps}; do
|
|||||||
if [[ ${category} != "shoe" ]]; then
|
if [[ ${category} != "shoe" ]]; then
|
||||||
bazel_flags_extended+=(--define ${category}=true)
|
bazel_flags_extended+=(--define ${category}=true)
|
||||||
fi
|
fi
|
||||||
bazel "${bazel_flags_extended[@]}"
|
bazelisk "${bazel_flags_extended[@]}"
|
||||||
cp -f "${bin}" "${apk}"
|
cp -f "${bin}" "${apk}"
|
||||||
fi
|
fi
|
||||||
apks+=(${apk})
|
apks+=(${apk})
|
||||||
@@ -120,7 +120,7 @@ for app in ${apps}; do
|
|||||||
if [[ ${app_name} == "templatematchingcpu" ]]; then
|
if [[ ${app_name} == "templatematchingcpu" ]]; then
|
||||||
switch_to_opencv_4
|
switch_to_opencv_4
|
||||||
fi
|
fi
|
||||||
bazel "${bazel_flags[@]}"
|
bazelisk "${bazel_flags[@]}"
|
||||||
cp -f "${bin}" "${apk}"
|
cp -f "${bin}" "${apk}"
|
||||||
if [[ ${app_name} == "templatematchingcpu" ]]; then
|
if [[ ${app_name} == "templatematchingcpu" ]]; then
|
||||||
switch_to_opencv_3
|
switch_to_opencv_3
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ for app in ${apps}; do
|
|||||||
bazel_flags=("${default_bazel_flags[@]}")
|
bazel_flags=("${default_bazel_flags[@]}")
|
||||||
bazel_flags+=(${target})
|
bazel_flags+=(${target})
|
||||||
|
|
||||||
bazel "${bazel_flags[@]}"
|
bazelisk "${bazel_flags[@]}"
|
||||||
cp -f "${bin_dir}/${app}/"*"_cpu" "${out_dir}"
|
cp -f "${bin_dir}/${app}/"*"_cpu" "${out_dir}"
|
||||||
fi
|
fi
|
||||||
if [[ $build_only == false ]]; then
|
if [[ $build_only == false ]]; then
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ for app in ${apps}; do
|
|||||||
bazel_flags+=(--linkopt=-s)
|
bazel_flags+=(--linkopt=-s)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
bazel "${bazel_flags[@]}"
|
bazelisk "${bazel_flags[@]}"
|
||||||
cp -f "${bin_dir}/${app}/"*".ipa" "${out_dir}"
|
cp -f "${bin_dir}/${app}/"*".ipa" "${out_dir}"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ aux_links:
|
|||||||
- "//github.com/google/mediapipe"
|
- "//github.com/google/mediapipe"
|
||||||
|
|
||||||
# Footer content appears at the bottom of every page's main content
|
# Footer content appears at the bottom of every page's main content
|
||||||
footer_content: "© 2020 GOOGLE LLC | <a href=\"https://policies.google.com/privacy\">PRIVACY POLICY</a> | <a href=\"https://policies.google.com/terms\">TERMS OF SERVICE</a>"
|
footer_content: "© GOOGLE LLC | <a href=\"https://policies.google.com/privacy\">PRIVACY POLICY</a> | <a href=\"https://policies.google.com/terms\">TERMS OF SERVICE</a>"
|
||||||
|
|
||||||
# Color scheme currently only supports "dark", "light"/nil (default), or a custom scheme that you define
|
# Color scheme currently only supports "dark", "light"/nil (default), or a custom scheme that you define
|
||||||
color_scheme: mediapipe
|
color_scheme: mediapipe
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ write outputs. After Close returns, the calculator is destroyed.
|
|||||||
Calculators with no inputs are referred to as sources. A source calculator
|
Calculators with no inputs are referred to as sources. A source calculator
|
||||||
continues to have `Process()` called as long as it returns an `Ok` status. A
|
continues to have `Process()` called as long as it returns an `Ok` status. A
|
||||||
source calculator indicates that it is exhausted by returning a stop status
|
source calculator indicates that it is exhausted by returning a stop status
|
||||||
(i.e. MediaPipe::tool::StatusStop).
|
(i.e. [`mediaPipe::tool::StatusStop()`](https://github.com/google/mediapipe/tree/master/mediapipe/framework/tool/status_util.cc).).
|
||||||
|
|
||||||
## Identifying inputs and outputs
|
## Identifying inputs and outputs
|
||||||
|
|
||||||
@@ -459,6 +459,6 @@ node {
|
|||||||
The diagram below shows how the `PacketClonerCalculator` defines its output
|
The diagram below shows how the `PacketClonerCalculator` defines its output
|
||||||
packets (bottom) based on its series of input packets (top).
|
packets (bottom) based on its series of input packets (top).
|
||||||
|
|
||||||
 |
|
 |
|
||||||
:--------------------------------------------------------------------------: |
|
:--------------------------------------------------------------------------: |
|
||||||
*Each time it receives a packet on its TICK input stream, the PacketClonerCalculator outputs the most recent packet from each of its input streams. The sequence of output packets (bottom) is determined by the sequence of input packets (top) and their timestamps. The timestamps are shown along the right side of the diagram.* |
|
*Each time it receives a packet on its TICK input stream, the PacketClonerCalculator outputs the most recent packet from each of its input streams. The sequence of output packets (bottom) is determined by the sequence of input packets (top) and their timestamps. The timestamps are shown along the right side of the diagram.* |
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ When possible, these calculators use platform-specific functionality to share da
|
|||||||
|
|
||||||
The below diagram shows the data flow in a mobile application that captures video from the camera, runs it through a MediaPipe graph, and renders the output on the screen in real time. The dashed line indicates which parts are inside the MediaPipe graph proper. This application runs a Canny edge-detection filter on the CPU using OpenCV, and overlays it on top of the original video using the GPU.
|
The below diagram shows the data flow in a mobile application that captures video from the camera, runs it through a MediaPipe graph, and renders the output on the screen in real time. The dashed line indicates which parts are inside the MediaPipe graph proper. This application runs a Canny edge-detection filter on the CPU using OpenCV, and overlays it on top of the original video using the GPU.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Video frames from the camera are fed into the graph as `GpuBuffer` packets. The
|
Video frames from the camera are fed into the graph as `GpuBuffer` packets. The
|
||||||
input stream is accessed by two calculators in parallel.
|
input stream is accessed by two calculators in parallel.
|
||||||
|
|||||||
@@ -159,7 +159,7 @@ Please use the `CalculatorGraphTest.Cycle` unit test in
|
|||||||
below is the cyclic graph in the test. The `sum` output of the adder is the sum
|
below is the cyclic graph in the test. The `sum` output of the adder is the sum
|
||||||
of the integers generated by the integer source calculator.
|
of the integers generated by the integer source calculator.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
This simple graph illustrates all the issues in supporting cyclic graphs.
|
This simple graph illustrates all the issues in supporting cyclic graphs.
|
||||||
|
|
||||||
|
|||||||
@@ -169,7 +169,7 @@ behavior depending on resource constraints.
|
|||||||
|
|
||||||
[`CalculatorBase`]: https://github.com/google/mediapipe/tree/master/mediapipe/framework/calculator_base.h
|
[`CalculatorBase`]: https://github.com/google/mediapipe/tree/master/mediapipe/framework/calculator_base.h
|
||||||
[`DefaultInputStreamHandler`]: https://github.com/google/mediapipe/tree/master/mediapipe/framework/stream_handler/default_input_stream_handler.h
|
[`DefaultInputStreamHandler`]: https://github.com/google/mediapipe/tree/master/mediapipe/framework/stream_handler/default_input_stream_handler.h
|
||||||
[`SyncSetInputStreamHandler`]: https://github.com/google/mediapipe/tree/master/mediapipe/framework/stream_handler/sync_set_input_stream_handler.h
|
[`SyncSetInputStreamHandler`]: https://github.com/google/mediapipe/tree/master/mediapipe/framework/stream_handler/sync_set_input_stream_handler.cc
|
||||||
[`ImmediateInputStreamHandler`]: https://github.com/google/mediapipe/tree/master/mediapipe/framework/stream_handler/immediate_input_stream_handler.h
|
[`ImmediateInputStreamHandler`]: https://github.com/google/mediapipe/tree/master/mediapipe/framework/stream_handler/immediate_input_stream_handler.cc
|
||||||
[`CalculatorGraphConfig::max_queue_size`]: https://github.com/google/mediapipe/tree/master/mediapipe/framework/calculator.proto
|
[`CalculatorGraphConfig::max_queue_size`]: https://github.com/google/mediapipe/tree/master/mediapipe/framework/calculator.proto
|
||||||
[`FlowLimiterCalculator`]: https://github.com/google/mediapipe/tree/master/mediapipe/calculators/core/flow_limiter_calculator.cc
|
[`FlowLimiterCalculator`]: https://github.com/google/mediapipe/tree/master/mediapipe/calculators/core/flow_limiter_calculator.cc
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ APIs (currently in alpha) that are now available in
|
|||||||
* Install MediaPipe following these [instructions](./install.md).
|
* Install MediaPipe following these [instructions](./install.md).
|
||||||
* Setup Java Runtime.
|
* Setup Java Runtime.
|
||||||
* Setup Android SDK release 30.0.0 and above.
|
* Setup Android SDK release 30.0.0 and above.
|
||||||
* Setup Android NDK version 18 and above.
|
* Setup Android NDK version between 18 and 21.
|
||||||
|
|
||||||
MediaPipe recommends setting up Android SDK and NDK via Android Studio (and see
|
MediaPipe recommends setting up Android SDK and NDK via Android Studio (and see
|
||||||
below for Android Studio setup). However, if you prefer using MediaPipe without
|
below for Android Studio setup). However, if you prefer using MediaPipe without
|
||||||
@@ -53,7 +53,7 @@ the following:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ echo "android_sdk_repository(name = \"androidsdk\")" >> WORKSPACE
|
$ echo "android_sdk_repository(name = \"androidsdk\")" >> WORKSPACE
|
||||||
$ echo "android_ndk_repository(name = \"androidndk\")" >> WORKSPACE
|
$ echo "android_ndk_repository(name = \"androidndk\", api_level=21)" >> WORKSPACE
|
||||||
```
|
```
|
||||||
|
|
||||||
In order to use MediaPipe on earlier Android versions, MediaPipe needs to switch
|
In order to use MediaPipe on earlier Android versions, MediaPipe needs to switch
|
||||||
|
|||||||
@@ -48,6 +48,16 @@ each project.
|
|||||||
bazel build -c opt --strip=ALWAYS \
|
bazel build -c opt --strip=ALWAYS \
|
||||||
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
|
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
|
||||||
--fat_apk_cpu=arm64-v8a,armeabi-v7a \
|
--fat_apk_cpu=arm64-v8a,armeabi-v7a \
|
||||||
|
--legacy_whole_archive=0 \
|
||||||
|
--features=-legacy_whole_archive \
|
||||||
|
--copt=-fvisibility=hidden \
|
||||||
|
--copt=-ffunction-sections \
|
||||||
|
--copt=-fdata-sections \
|
||||||
|
--copt=-fstack-protector \
|
||||||
|
--copt=-Oz \
|
||||||
|
--copt=-fomit-frame-pointer \
|
||||||
|
--copt=-DABSL_MIN_LOG_LEVEL=2 \
|
||||||
|
--linkopt=-Wl,--gc-sections,--strip-all \
|
||||||
//path/to/the/aar/build/file:aar_name.aar
|
//path/to/the/aar/build/file:aar_name.aar
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -57,6 +67,16 @@ each project.
|
|||||||
bazel build -c opt --strip=ALWAYS \
|
bazel build -c opt --strip=ALWAYS \
|
||||||
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
|
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
|
||||||
--fat_apk_cpu=arm64-v8a,armeabi-v7a \
|
--fat_apk_cpu=arm64-v8a,armeabi-v7a \
|
||||||
|
--legacy_whole_archive=0 \
|
||||||
|
--features=-legacy_whole_archive \
|
||||||
|
--copt=-fvisibility=hidden \
|
||||||
|
--copt=-ffunction-sections \
|
||||||
|
--copt=-fdata-sections \
|
||||||
|
--copt=-fstack-protector \
|
||||||
|
--copt=-Oz \
|
||||||
|
--copt=-fomit-frame-pointer \
|
||||||
|
--copt=-DABSL_MIN_LOG_LEVEL=2 \
|
||||||
|
--linkopt=-Wl,--gc-sections,--strip-all \
|
||||||
//mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example:mediapipe_face_detection.aar
|
//mediapipe/examples/android/src/java/com/google/mediapipe/apps/aar_example:mediapipe_face_detection.aar
|
||||||
|
|
||||||
# It should print:
|
# It should print:
|
||||||
@@ -82,7 +102,7 @@ each project.
|
|||||||
/path/to/your/app/libs/
|
/path/to/your/app/libs/
|
||||||
```
|
```
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
3. Make app/src/main/assets and copy assets (graph, model, and etc) into
|
3. Make app/src/main/assets and copy assets (graph, model, and etc) into
|
||||||
app/src/main/assets.
|
app/src/main/assets.
|
||||||
@@ -100,7 +120,7 @@ each project.
|
|||||||
cp mediapipe/modules/face_detection/face_detection_short_range.tflite /path/to/your/app/src/main/assets/
|
cp mediapipe/modules/face_detection/face_detection_short_range.tflite /path/to/your/app/src/main/assets/
|
||||||
```
|
```
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
4. Modify app/build.gradle to add MediaPipe dependencies and MediaPipe AAR.
|
4. Modify app/build.gradle to add MediaPipe dependencies and MediaPipe AAR.
|
||||||
|
|
||||||
|
|||||||
@@ -55,18 +55,18 @@ To build these apps:
|
|||||||
|
|
||||||
2. Import mediapipe/examples/android/solutions directory into Android Studio.
|
2. Import mediapipe/examples/android/solutions directory into Android Studio.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
3. For Windows users, run `create_win_symlinks.bat` as administrator to create
|
3. For Windows users, run `create_win_symlinks.bat` as administrator to create
|
||||||
res directory symlinks.
|
res directory symlinks.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
4. Select "File" -> "Sync Project with Gradle Files" to sync project.
|
4. Select "File" -> "Sync Project with Gradle Files" to sync project.
|
||||||
|
|
||||||
5. Run solution example app in Android Studio.
|
5. Run solution example app in Android Studio.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
6. (Optional) Run solutions on CPU.
|
6. (Optional) Run solutions on CPU.
|
||||||
|
|
||||||
|
|||||||
@@ -59,6 +59,21 @@ OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
|
|||||||
OpenGL ES profile extensions:
|
OpenGL ES profile extensions:
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If you have connected to your computer through SSH and find when you probe for
|
||||||
|
GPU information you see the output:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
glxinfo | grep -i opengl
|
||||||
|
Error: unable to open display
|
||||||
|
```
|
||||||
|
|
||||||
|
Try re-establishing your SSH connection with the `-X` option and try again. For
|
||||||
|
example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ssh -X <user>@<host>
|
||||||
|
```
|
||||||
|
|
||||||
*Notice the ES 3.20 text above.*
|
*Notice the ES 3.20 text above.*
|
||||||
|
|
||||||
You need to see ES 3.1 or greater printed in order to perform TFLite inference
|
You need to see ES 3.1 or greater printed in order to perform TFLite inference
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ graph on Android.
|
|||||||
A simple camera app for real-time Sobel edge detection applied to a live video
|
A simple camera app for real-time Sobel edge detection applied to a live video
|
||||||
stream on an Android device.
|
stream on an Android device.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Setup
|
## Setup
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ node: {
|
|||||||
|
|
||||||
A visualization of the graph is shown below:
|
A visualization of the graph is shown below:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
This graph has a single input stream named `input_video` for all incoming frames
|
This graph has a single input stream named `input_video` for all incoming frames
|
||||||
that will be provided by your device's camera.
|
that will be provided by your device's camera.
|
||||||
@@ -260,7 +260,7 @@ adb install bazel-bin/$APPLICATION_PATH/helloworld.apk
|
|||||||
Open the application on your device. It should display a screen with the text
|
Open the application on your device. It should display a screen with the text
|
||||||
`Hello World!`.
|
`Hello World!`.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Using the camera via `CameraX`
|
## Using the camera via `CameraX`
|
||||||
|
|
||||||
@@ -377,7 +377,7 @@ Add the following line in the `$APPLICATION_PATH/res/values/strings.xml` file:
|
|||||||
When the user doesn't grant camera permission, the screen will now look like
|
When the user doesn't grant camera permission, the screen will now look like
|
||||||
this:
|
this:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Now, we will add the [`SurfaceTexture`] and [`SurfaceView`] objects to
|
Now, we will add the [`SurfaceTexture`] and [`SurfaceView`] objects to
|
||||||
`MainActivity`:
|
`MainActivity`:
|
||||||
@@ -753,7 +753,7 @@ And that's it! You should now be able to successfully build and run the
|
|||||||
application on the device and see Sobel edge detection running on a live camera
|
application on the device and see Sobel edge detection running on a live camera
|
||||||
feed! Congrats!
|
feed! Congrats!
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
If you ran into any issues, please see the full code of the tutorial
|
If you ran into any issues, please see the full code of the tutorial
|
||||||
[here](https://github.com/google/mediapipe/tree/master/mediapipe/examples/android/src/java/com/google/mediapipe/apps/basic).
|
[here](https://github.com/google/mediapipe/tree/master/mediapipe/examples/android/src/java/com/google/mediapipe/apps/basic).
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ nav_order: 1
|
|||||||
This graph consists of 1 graph input stream (`in`) and 1 graph output stream
|
This graph consists of 1 graph input stream (`in`) and 1 graph output stream
|
||||||
(`out`), and 2 [`PassThroughCalculator`]s connected serially.
|
(`out`), and 2 [`PassThroughCalculator`]s connected serially.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
4. Before running the graph, an `OutputStreamPoller` object is connected to the
|
4. Before running the graph, an `OutputStreamPoller` object is connected to the
|
||||||
output stream in order to later retrieve the graph output, and a graph run
|
output stream in order to later retrieve the graph output, and a graph run
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ on iOS.
|
|||||||
A simple camera app for real-time Sobel edge detection applied to a live video
|
A simple camera app for real-time Sobel edge detection applied to a live video
|
||||||
stream on an iOS device.
|
stream on an iOS device.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Setup
|
## Setup
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ node: {
|
|||||||
|
|
||||||
A visualization of the graph is shown below:
|
A visualization of the graph is shown below:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
This graph has a single input stream named `input_video` for all incoming frames
|
This graph has a single input stream named `input_video` for all incoming frames
|
||||||
that will be provided by your device's camera.
|
that will be provided by your device's camera.
|
||||||
@@ -131,7 +131,7 @@ Create a `BUILD` file in the `$APPLICATION_PATH` and add the following build
|
|||||||
rules:
|
rules:
|
||||||
|
|
||||||
```
|
```
|
||||||
MIN_IOS_VERSION = "10.0"
|
MIN_IOS_VERSION = "11.0"
|
||||||
|
|
||||||
load(
|
load(
|
||||||
"@build_bazel_rules_apple//apple:ios.bzl",
|
"@build_bazel_rules_apple//apple:ios.bzl",
|
||||||
@@ -580,7 +580,7 @@ Update the interface definition of `ViewController` with `MPPGraphDelegate`:
|
|||||||
And that is all! Build and run the app on your iOS device. You should see the
|
And that is all! Build and run the app on your iOS device. You should see the
|
||||||
results of running the edge detection graph on a live video feed. Congrats!
|
results of running the edge detection graph on a live video feed. Congrats!
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Please note that the iOS examples now use a [common] template app. The code in
|
Please note that the iOS examples now use a [common] template app. The code in
|
||||||
this tutorial is used in the [common] template app. The [helloworld] app has the
|
this tutorial is used in the [common] template app. The [helloworld] app has the
|
||||||
|
|||||||
@@ -569,7 +569,7 @@ next section.
|
|||||||
|
|
||||||
Option 1. Follow
|
Option 1. Follow
|
||||||
[the official Bazel documentation](https://docs.bazel.build/versions/master/install-windows.html)
|
[the official Bazel documentation](https://docs.bazel.build/versions/master/install-windows.html)
|
||||||
to install Bazel 4.2.1 or higher.
|
to install Bazel 5.2.0 or higher.
|
||||||
|
|
||||||
Option 2. Follow the official
|
Option 2. Follow the official
|
||||||
[Bazel documentation](https://docs.bazel.build/versions/master/install-bazelisk.html)
|
[Bazel documentation](https://docs.bazel.build/versions/master/install-bazelisk.html)
|
||||||
|
|||||||
@@ -32,9 +32,14 @@ example apps, start from, start from
|
|||||||
xcode-select --install
|
xcode-select --install
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Install [Bazel](https://bazel.build/).
|
3. Install [Bazelisk](https://github.com/bazelbuild/bazelisk)
|
||||||
|
.
|
||||||
|
|
||||||
We recommend using [Homebrew](https://brew.sh/) to get the latest version.
|
We recommend using [Homebrew](https://brew.sh/) to get the latest versions.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
brew install bazelisk
|
||||||
|
```
|
||||||
|
|
||||||
4. Set Python 3.7 as the default Python version and install the Python "six"
|
4. Set Python 3.7 as the default Python version and install the Python "six"
|
||||||
library. This is needed for TensorFlow.
|
library. This is needed for TensorFlow.
|
||||||
@@ -187,6 +192,9 @@ Note: When you ask Xcode to run an app, by default it will use the Debug
|
|||||||
configuration. Some of our demos are computationally heavy; you may want to use
|
configuration. Some of our demos are computationally heavy; you may want to use
|
||||||
the Release configuration for better performance.
|
the Release configuration for better performance.
|
||||||
|
|
||||||
|
Note: Due to an imcoptibility caused by one of our dependencies, MediaPipe
|
||||||
|
cannot be used for apps running on the iPhone Simulator on Apple Silicon (M1).
|
||||||
|
|
||||||
Tip: To switch build configuration in Xcode, click on the target menu, choose
|
Tip: To switch build configuration in Xcode, click on the target menu, choose
|
||||||
"Edit Scheme...", select the Run action, and switch the Build Configuration from
|
"Edit Scheme...", select the Run action, and switch the Build Configuration from
|
||||||
Debug to Release. Note that this is set independently for each target.
|
Debug to Release. Note that this is set independently for each target.
|
||||||
|
|||||||
@@ -113,9 +113,8 @@ Nvidia Jetson and Raspberry Pi, please read
|
|||||||
|
|
||||||
Download the latest protoc win64 zip from
|
Download the latest protoc win64 zip from
|
||||||
[the Protobuf GitHub repo](https://github.com/protocolbuffers/protobuf/releases),
|
[the Protobuf GitHub repo](https://github.com/protocolbuffers/protobuf/releases),
|
||||||
unzip the file, and copy the protoc.exe executable to a preferred
|
unzip the file, and copy the protoc.exe executable to a preferred location.
|
||||||
location. Please ensure that location is added into the Path environment
|
Please ensure that location is added into the Path environment variable.
|
||||||
variable.
|
|
||||||
|
|
||||||
3. Activate a Python virtual environment.
|
3. Activate a Python virtual environment.
|
||||||
|
|
||||||
@@ -131,16 +130,14 @@ Nvidia Jetson and Raspberry Pi, please read
|
|||||||
(mp_env)mediapipe$ pip3 install -r requirements.txt
|
(mp_env)mediapipe$ pip3 install -r requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
6. Generate and install MediaPipe package.
|
6. Build and install MediaPipe package.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
(mp_env)mediapipe$ python3 setup.py gen_protos
|
|
||||||
(mp_env)mediapipe$ python3 setup.py install --link-opencv
|
(mp_env)mediapipe$ python3 setup.py install --link-opencv
|
||||||
```
|
```
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
(mp_env)mediapipe$ python3 setup.py gen_protos
|
|
||||||
(mp_env)mediapipe$ python3 setup.py bdist_wheel
|
(mp_env)mediapipe$ python3 setup.py bdist_wheel
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ following steps:
|
|||||||
}
|
}
|
||||||
return packet.Get<MyType>();
|
return packet.Get<MyType>();
|
||||||
});
|
});
|
||||||
|
}
|
||||||
} // namespace mediapipe
|
} // namespace mediapipe
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 885 KiB |
|
Before Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 797 KiB |
|
Before Width: | Height: | Size: 8.2 MiB |
|
Before Width: | Height: | Size: 170 KiB |
|
Before Width: | Height: | Size: 5.5 MiB |
|
Before Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 361 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 195 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 524 KiB |
|
Before Width: | Height: | Size: 808 KiB |
|
Before Width: | Height: | Size: 6.7 MiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 923 B |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 217 KiB |
|
Before Width: | Height: | Size: 163 KiB |
|
Before Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 128 KiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 302 KiB |
|
Before Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 666 KiB |
|
Before Width: | Height: | Size: 529 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 2.3 MiB |
|
Before Width: | Height: | Size: 808 KiB |
|
Before Width: | Height: | Size: 121 KiB |
|
Before Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 121 KiB |
|
Before Width: | Height: | Size: 3.3 MiB |
|
Before Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 460 KiB |
|
Before Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 299 KiB |
|
Before Width: | Height: | Size: 3.1 MiB |
|
Before Width: | Height: | Size: 383 KiB |
|
Before Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 293 KiB |
|
Before Width: | Height: | Size: 156 KiB |
|
Before Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 5.6 MiB |
|
Before Width: | Height: | Size: 4.7 MiB |
|
Before Width: | Height: | Size: 448 KiB |
|
Before Width: | Height: | Size: 150 KiB |
|
Before Width: | Height: | Size: 297 KiB |
|
Before Width: | Height: | Size: 4.5 MiB |
|
Before Width: | Height: | Size: 617 KiB |