تثبيت

التثبيت على نظامي التشغيل Debian وUbuntu

  1. ثبِّت Bazelisk.

    متابعة المسؤول مستندات Bazel لتثبيت Bazelisk.

  2. يُرجى الاطّلاع على مستودع MediaPipe.

    $ cd $HOME
    $ git clone --depth 1 https://github.com/google/mediapipe.git
    
    # Change directory into MediaPipe root directory
    $ cd mediapipe
    
  3. تثبيت OpenCV وFFmpeg.

    الخيار 1. استخدام أداة إدارة الحزم لتثبيت أداة OpenCV المجمّعة مسبقًا المكتبات. سيتم تثبيت FFmpeg عبر libopencv-video-dev.

    نظام التشغيل OpenCV
    Debian 9 (توسيع) 2.4
    Debian 10 (buster) 3.2
    Debian 11 (مركز الهدف) 4.5
    نظام التشغيل Ubuntu 16.04 LTS 2.4
    نظام التشغيل Ubuntu 18.04 LTS 3.2
    نظام التشغيل Ubuntu 20.04 LTS 4.2
    نظام التشغيل Ubuntu 20.04 LTS 4.2
    نظام التشغيل Ubuntu 21.04 4.5
    $ sudo apt-get install -y \
        libopencv-core-dev \
        libopencv-highgui-dev \
        libopencv-calib3d-dev \
        libopencv-features2d-dev \
        libopencv-imgproc-dev \
        libopencv-video-dev
    

    ملاحظة: على Debian 11/Ubuntu 21.04 عند تثبيت OpenCV 4.5 مع يجب أيضًا تثبيت libopencv-video-dev وlibopencv-contrib-dev.

    $ sudo apt-get install -y libopencv-contrib-dev
    

    سبق أن تم إعداد opencv_linux.BUILD وWORKSPACE في MediaPipe لبرنامج OpenCV 2/3 ويجب أن يعمل بشكل صحيح على أي بنية:

    # WORKSPACE
    new_local_repository(
      name = "linux_opencv",
      build_file = "@//third_party:opencv_linux.BUILD",
      path = "/usr",
    )
    
    # opencv_linux.BUILD for OpenCV 2/3 installed from Debian package
    cc_library(
      name = "opencv",
      linkopts = [
        "-l:libopencv_core.so",
        "-l:libopencv_calib3d.so",
        "-l:libopencv_features2d.so",
        "-l:libopencv_highgui.so",
        "-l:libopencv_imgcodecs.so",
        "-l:libopencv_imgproc.so",
        "-l:libopencv_video.so",
        "-l:libopencv_videoio.so",
      ],
    )
    

    بالنسبة إلى OpenCV 4، عليك تعديل opencv_linux.BUILD مع مراعاة البنية الحالية:

    # WORKSPACE
    new_local_repository(
      name = "linux_opencv",
      build_file = "@//third_party:opencv_linux.BUILD",
      path = "/usr",
    )
    
    # opencv_linux.BUILD for OpenCV 4 installed from Debian package
    cc_library(
      name = "opencv",
      hdrs = glob([
        # Uncomment according to your multiarch value (gcc -print-multiarch):
        #  "include/aarch64-linux-gnu/opencv4/opencv2/cvconfig.h",
        #  "include/arm-linux-gnueabihf/opencv4/opencv2/cvconfig.h",
        #  "include/x86_64-linux-gnu/opencv4/opencv2/cvconfig.h",
        "include/opencv4/opencv2/**/*.h*",
      ]),
      includes = [
        # Uncomment according to your multiarch value (gcc -print-multiarch):
        #  "include/aarch64-linux-gnu/opencv4/",
        #  "include/arm-linux-gnueabihf/opencv4/",
        #  "include/x86_64-linux-gnu/opencv4/",
        "include/opencv4/",
      ],
      linkopts = [
        "-l:libopencv_core.so",
        "-l:libopencv_calib3d.so",
        "-l:libopencv_features2d.so",
        "-l:libopencv_highgui.so",
        "-l:libopencv_imgcodecs.so",
        "-l:libopencv_imgproc.so",
        "-l:libopencv_video.so",
        "-l:libopencv_videoio.so",
      ],
    )
    

    الخيار 2. شغِّل setup_opencv.sh لإنشاء OpenCV تلقائيًا من وتعديل تهيئة OpenCV لـ MediaPipe. سيؤدي هذا الخيار إلى تنفيذ جميع الخطوات محدد في الخيار 3 تلقائيًا.

    الخيار 3. متابعة OpenCV المستندات لإنشاء OpenCV يدويًا من رمز المصدر.

    قد تحتاج إلى تعديل السمتَين WORKSPACE وopencv_linux.BUILD للإشارة إلى MediaPipe إلى مكتبات OpenCV الخاصة بك. افتراض أنه سيتم تثبيت OpenCV على /usr/local/ وهو الخيار الذي يُنصح به تلقائيًا.

    إعداد OpenCV 2/3:

    # WORKSPACE
    new_local_repository(
      name = "linux_opencv",
      build_file = "@//third_party:opencv_linux.BUILD",
      path = "/usr/local",
    )
    
    # opencv_linux.BUILD for OpenCV 2/3 installed to /usr/local
    cc_library(
      name = "opencv",
      linkopts = [
        "-L/usr/local/lib",
        "-l:libopencv_core.so",
        "-l:libopencv_calib3d.so",
        "-l:libopencv_features2d.so",
        "-l:libopencv_highgui.so",
        "-l:libopencv_imgcodecs.so",
        "-l:libopencv_imgproc.so",
        "-l:libopencv_video.so",
        "-l:libopencv_videoio.so",
      ],
    )
    

    إعداد OpenCV 4:

    # WORKSPACE
    new_local_repository(
      name = "linux_opencv",
      build_file = "@//third_party:opencv_linux.BUILD",
      path = "/usr/local",
    )
    
    # opencv_linux.BUILD for OpenCV 4 installed to /usr/local
    cc_library(
      name = "opencv",
      hdrs = glob([
        "include/opencv4/opencv2/**/*.h*",
      ]),
      includes = [
        "include/opencv4/",
      ],
      linkopts = [
        "-L/usr/local/lib",
        "-l:libopencv_core.so",
        "-l:libopencv_calib3d.so",
        "-l:libopencv_features2d.so",
        "-l:libopencv_highgui.so",
        "-l:libopencv_imgcodecs.so",
        "-l:libopencv_imgproc.so",
        "-l:libopencv_video.so",
        "-l:libopencv_videoio.so",
      ],
    )
    

    تم تحديد إعداد FFmpeg الحالي في ffmpeg_linux.BUILD ومن المفترض أن يعمل بشكل صحيح. لأي بنية:

    # WORKSPACE
    new_local_repository(
      name = "linux_ffmpeg",
      build_file = "@//third_party:ffmpeg_linux.BUILD",
      path = "/usr"
    )
    
    # ffmpeg_linux.BUILD for FFmpeg installed from Debian package
    cc_library(
      name = "libffmpeg",
      linkopts = [
        "-l:libavcodec.so",
        "-l:libavformat.so",
        "-l:libavutil.so",
      ],
    )
    
  4. لتشغيل أمثلة سطح المكتب على Linux فقط (وليس على نظام التشغيل OS X) باستخدام وحدة معالجة الرسومات (GPU) والتسريع.

    # Requires a GPU with EGL driver support.
    # Can use mesa GPU libraries for desktop, (or Nvidia/AMD equivalent).
    sudo apt-get install mesa-common-dev libegl1-mesa-dev libgles2-mesa-dev
    
    # To compile with GPU support, replace
    --define MEDIAPIPE_DISABLE_GPU=1
    # with
    --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11
    # when building GPU examples.
    
  5. تشغيل مرحبًا بالعالم! في مثال C++.

    $ export GLOG_logtostderr=1
    
    # if you are running on Linux desktop with CPU only
    $ bazel run --define MEDIAPIPE_DISABLE_GPU=1 \
        mediapipe/examples/desktop/hello_world:hello_world
    
    # If you are running on Linux desktop with GPU support enabled (via mesa drivers)
    $ bazel run --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 \
        mediapipe/examples/desktop/hello_world:hello_world
    
    # Should print:
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    

إذا واجهت خطأً في الإصدار، يُرجى قراءة استكشاف الأخطاء وإصلاحها للعثور على حلول لعدة مشاكل شائعة ومشكلات الإصدار.

التثبيت على CentOS

إخلاء مسؤولية: لا يزال تشغيل MediaPipe على CentOS في مرحلة تجريبية.

  1. ثبِّت Bazelisk.

    متابعة المسؤول مستندات Bazel لتثبيت Bazelisk.

  2. يُرجى الاطّلاع على مستودع MediaPipe.

    $ git clone --depth 1 https://github.com/google/mediapipe.git
    
    # Change directory into MediaPipe root directory
    $ cd mediapipe
    
  3. ثبِّت OpenCV.

    الخيار رقم 1. استخدم أداة مدير الحزم لتثبيت الإصدار المجمّع مسبقًا.

    $ sudo yum install opencv-devel
    

    الخيار رقم 2. قم بإنشاء OpenCV من رمز المصدر.

    new_local_repository(
        name = "linux_opencv",
        build_file = "@//third_party:opencv_linux.BUILD",
        path = "/usr/local",
    )
    
    new_local_repository(
        name = "linux_ffmpeg",
        build_file = "@//third_party:ffmpeg_linux.BUILD",
        path = "/usr/local",
    )
    
    cc_library(
        name = "opencv",
        srcs = glob(
            [
                "lib/libopencv_core.so",
                "lib/libopencv_highgui.so",
                "lib/libopencv_imgcodecs.so",
                "lib/libopencv_imgproc.so",
                "lib/libopencv_video.so",
                "lib/libopencv_videoio.so",
            ],
        ),
        hdrs = glob([
            # For OpenCV 3.x
            "include/opencv2/**/*.h*",
            # For OpenCV 4.x
            # "include/opencv4/opencv2/**/*.h*",
        ]),
        includes = [
            # For OpenCV 3.x
            "include/",
            # For OpenCV 4.x
            # "include/opencv4/",
        ],
        linkstatic = 1,
        visibility = ["//visibility:public"],
    )
    
    cc_library(
        name = "libffmpeg",
        srcs = glob(
            [
                "lib/libav*.so",
            ],
        ),
        hdrs = glob(["include/libav*/*.h"]),
        includes = ["include"],
        linkopts = [
            "-lavcodec",
            "-lavformat",
            "-lavutil",
        ],
        linkstatic = 1,
        visibility = ["//visibility:public"],
    )
    
  4. تشغيل مرحبًا بالعالم! في مثال C++.

    $ export GLOG_logtostderr=1
    # Need bazel flag 'MEDIAPIPE_DISABLE_GPU=1' if you are running on Linux desktop with CPU only
    $ bazel run --define MEDIAPIPE_DISABLE_GPU=1 \
        mediapipe/examples/desktop/hello_world:hello_world
    
    # Should print:
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    

إذا واجهت خطأً في الإصدار، يُرجى قراءة استكشاف الأخطاء وإصلاحها للعثور على حلول لعدة مشاكل شائعة ومشكلات الإصدار.

جارٍ التثبيت على نظام التشغيل macOS

  1. المرحلة التمهيدية:

    • ثبِّت Homebrew.
    • تثبيت Xcode وسطر الأوامر الأدوات من إنشاء "xcode-select --install"
  2. ثبِّت Bazelisk.

    متابعة المسؤول مستندات Bazel لتثبيت Bazelisk.

  3. يُرجى الاطّلاع على مستودع MediaPipe.

    $ git clone --depth 1 https://github.com/google/mediapipe.git
    
    $ cd mediapipe
    
  4. تثبيت OpenCV وFFmpeg.

    الخيار رقم 1. استخدم أداة مدير حزم HomeBrew لتثبيت نظام التشغيل مكتبات OpenCV 3. سيتم تثبيت FFmpeg عبر OpenCV.

    $ brew install opencv@3
    
    # There is a known issue caused by the glog dependency. Uninstall glog.
    $ brew uninstall --ignore-dependencies glog
    

    الخيار رقم 2. استخدام أداة إدارة حزم MacPorts لتثبيت مكتبات OpenCV

    $ port install opencv
    
    new_local_repository(
        name = "macos_opencv",
        build_file = "@//third_party:opencv_macos.BUILD",
        path = "/opt",
    )
    
    new_local_repository(
        name = "macos_ffmpeg",
        build_file = "@//third_party:ffmpeg_macos.BUILD",
        path = "/opt",
    )
    
    cc_library(
        name = "opencv",
        srcs = glob(
            [
                "local/lib/libopencv_core.dylib",
                "local/lib/libopencv_highgui.dylib",
                "local/lib/libopencv_imgcodecs.dylib",
                "local/lib/libopencv_imgproc.dylib",
                "local/lib/libopencv_video.dylib",
                "local/lib/libopencv_videoio.dylib",
            ],
        ),
        hdrs = glob(["local/include/opencv2/**/*.h*"]),
        includes = ["local/include/"],
        linkstatic = 1,
        visibility = ["//visibility:public"],
    )
    
    cc_library(
        name = "libffmpeg",
        srcs = glob(
            [
                "local/lib/libav*.dylib",
            ],
        ),
        hdrs = glob(["local/include/libav*/*.h"]),
        includes = ["local/include/"],
        linkopts = [
            "-lavcodec",
            "-lavformat",
            "-lavutil",
        ],
        linkstatic = 1,
        visibility = ["//visibility:public"],
    )
    
  5. تأكد من أن بايثون 3 وبايثون "ستة" المكتبة المثبَّتة.

    $ brew install python
    $ sudo ln -s -f /usr/local/bin/python3.7 /usr/local/bin/python
    $ python --version
    Python 3.7.4
    $ pip3 install --user six
    
  6. تشغيل مرحبًا بالعالم! في مثال C++.

    $ export GLOG_logtostderr=1
    # Need bazel flag 'MEDIAPIPE_DISABLE_GPU=1' as desktop GPU is currently not supported
    $ bazel run --define MEDIAPIPE_DISABLE_GPU=1 \
        mediapipe/examples/desktop/hello_world:hello_world
    
    # Should print:
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    

إذا واجهت خطأً في الإصدار، يُرجى قراءة استكشاف الأخطاء وإصلاحها للعثور على حلول لعدة مشاكل شائعة ومشكلات الإصدار.

التثبيت على نظام التشغيل Windows

إخلاء مسؤولية: تشغيل MediaPipe على Windows هو ميزة تجريبية.

  1. تثبيت MSYS2 وتعديل بيئة %PATH% المتغير.

    في حال تثبيت MSYS2 على C:\msys64، أضِف C:\msys64\usr\bin إلى متغيّر بيئة %PATH%

  2. تثبيت الحزم الضرورية.

    C:\> pacman -S git patch unzip
    
  3. تثبيت Python والسماح للملف التنفيذي بتعديل بيئة %PATH% المتغير.

    قم بتنزيل Python Windows التنفيذي من https://www.python.org/downloads وتثبيتها.

  4. تثبيت أدوات الإصدار 2019 من Visual C++ وWinSDK

    الانتقال إلى موقع Visual Studio الإلكتروني نزِّل أدوات التصميم وثبِّت Microsoft Visual C++ 2019 Redistributable. وMicrosoft Build Tools 2019.

    قم بتنزيل WinSDK من موقع MicroSoft الإلكتروني الرسمي وتثبيتها.

  5. تثبيت Bazel أو Bazelisk وإضافة موقع ملف Bazel التنفيذي إلى متغير بيئة %PATH%.

    الخيار رقم 1. متابعة مستندات Bazel الرسمية لتثبيت الإصدار 6.1.1 من Bazel أو الإصدارات الأحدث.

    الخيار رقم 2. متابعة المسؤول مستندات Bazel لتثبيت Bazelisk.

  6. ضبط متغيّرات Bazel مزيد من التفاصيل حول "إنشاء التطبيق على Windows" في مستندات Bazel الرسمية

    # Please find the exact paths and version numbers from your local version.
    C:\> set BAZEL_VS=C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools
    C:\> set BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC
    C:\> set BAZEL_VC_FULL_VERSION=<Your local VC version>
    C:\> set BAZEL_WINSDK_FULL_VERSION=<Your local WinSDK version>
    
  7. يُرجى الاطّلاع على مستودع MediaPipe.

    C:\Users\Username\mediapipe_repo> git clone --depth 1 https://github.com/google/mediapipe.git
    
    # Change directory into MediaPipe root directory
    C:\Users\Username\mediapipe_repo> cd mediapipe
    
  8. ثبِّت OpenCV.

    تنزيل ملف Windows القابل للتنفيذ من https://opencv.org/releases/ وتثبيتها. يتوافق الإصدار MediaPipe 0.10.x مع الإصدار 3.4.10 من OpenCV. تذكر التعديل ملف WORKSPACE في حال عدم تثبيت OpenCV على الرابط C:\opencv.

    new_local_repository(
        name = "windows_opencv",
        build_file = "@//third_party:opencv_windows.BUILD",
        path = "C:\\<path to opencv>\\build",
    )
    
  9. تشغيل مرحبًا بالعالم! في مثال C++.

    C:\Users\Username\mediapipe_repo>bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 --action_env PYTHON_BIN_PATH="C://python_36//python.exe" mediapipe/examples/desktop/hello_world
    
    C:\Users\Username\mediapipe_repo>set GLOG_logtostderr=1
    
    C:\Users\Username\mediapipe_repo>bazel-bin\mediapipe\examples\desktop\hello_world\hello_world.exe
    
    # should print:
    # I20200514 20:43:12.277598  1200 hello_world.cc:56] Hello World!
    # I20200514 20:43:12.278597  1200 hello_world.cc:56] Hello World!
    # I20200514 20:43:12.279618  1200 hello_world.cc:56] Hello World!
    # I20200514 20:43:12.279618  1200 hello_world.cc:56] Hello World!
    # I20200514 20:43:12.279618  1200 hello_world.cc:56] Hello World!
    # I20200514 20:43:12.279618  1200 hello_world.cc:56] Hello World!
    # I20200514 20:43:12.279618  1200 hello_world.cc:56] Hello World!
    # I20200514 20:43:12.279618  1200 hello_world.cc:56] Hello World!
    # I20200514 20:43:12.279618  1200 hello_world.cc:56] Hello World!
    # I20200514 20:43:12.280613  1200 hello_world.cc:56] Hello World!
    

إذا واجهت خطأً في الإصدار، يُرجى قراءة استكشاف الأخطاء وإصلاحها للعثور على حلول لعدة مشاكل شائعة ومشكلات الإصدار.

التثبيت على النظام الفرعي لنظام التشغيل Windows لنظام التشغيل Linux (WSL)

  1. اتّبِع تعليمات تثبيت نظام Windows الفرعي لنظام التشغيل Linux (Ubuntu).

  2. تثبيت Windows ADB وبدء خادم ADB في Windows

  3. إطلاق WSL.

  4. ثبِّت الحزم المطلوبة.

    username@DESKTOP-TMVLBJ1:~$ sudo apt-get update && sudo apt-get install -y build-essential git python zip adb openjdk-8-jdk
    
  5. ثبِّت Bazelisk.

    متابعة المسؤول مستندات Bazel لتثبيت Bazelisk.

  6. يُرجى الاطّلاع على مستودع MediaPipe.

    username@DESKTOP-TMVLBJ1:~$ git clone --depth 1 https://github.com/google/mediapipe.git
    
    username@DESKTOP-TMVLBJ1:~$ cd mediapipe
    
  7. تثبيت OpenCV وFFmpeg.

    الخيار رقم 1. استخدام أداة إدارة الحزم لتثبيت أداة OpenCV المجمّعة مسبقًا المكتبات. سيتم تثبيت FFmpeg عبر libopencv-video-dev.

    username@DESKTOP-TMVLBJ1:~/mediapipe$ sudo apt-get install libopencv-core-dev libopencv-highgui-dev \
                           libopencv-calib3d-dev libopencv-features2d-dev \
                           libopencv-imgproc-dev libopencv-video-dev
    

    الخيار رقم 2. شغِّل setup_opencv.sh لإنشاء OpenCV تلقائيًا من المصدر. وتعديل تهيئة OpenCV لـ MediaPipe.

    الخيار 3. متابعة OpenCV المستندات لإنشاء OpenCV يدويًا من رمز المصدر.

    new_local_repository(
        name = "linux_opencv",
        build_file = "@//third_party:opencv_linux.BUILD",
        path = "/usr/local",
    )
    
    cc_library(
        name = "opencv",
        srcs = glob(
            [
                "lib/libopencv_core.so",
                "lib/libopencv_highgui.so",
                "lib/libopencv_imgcodecs.so",
                "lib/libopencv_imgproc.so",
                "lib/libopencv_video.so",
                "lib/libopencv_videoio.so",
            ],
        ),
        hdrs = glob(["include/opencv4/**/*.h*"]),
        includes = ["include/opencv4/"],
        linkstatic = 1,
        visibility = ["//visibility:public"],
    )
    
  8. تشغيل مرحبًا بالعالم! في مثال C++.

    username@DESKTOP-TMVLBJ1:~/mediapipe$ export GLOG_logtostderr=1
    
    # Need bazel flag 'MEDIAPIPE_DISABLE_GPU=1' as desktop GPU is currently not supported
    username@DESKTOP-TMVLBJ1:~/mediapipe$ bazel run --define MEDIAPIPE_DISABLE_GPU=1 \
        mediapipe/examples/desktop/hello_world:hello_world
    
    # Should print:
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    

إذا واجهت خطأ في الإصدار، يُرجى يمكنك الاطّلاع على مقالة تحديد المشاكل وحلّها للعثور على حلول لعدة مشاكل. ومشكلات الإصدار الشائعة.

التثبيت باستخدام Docker

سيؤدي هذا إلى استخدام صورة Docker ستعمل على عزل تثبيت mediapi عن باقي النظام.

  1. تثبيت Docker على النظام المضيف الخاص بك.

  2. أنشئ صورة Docker باستخدام العلامة "mediapi".

    $ git clone --depth 1 https://github.com/google/mediapipe.git
    $ cd mediapipe
    $ docker build --tag=mediapipe .
    
    # Should print:
    # Sending build context to Docker daemon  147.8MB
    # Step 1/9 : FROM ubuntu:latest
    # latest: Pulling from library/ubuntu
    # 6abc03819f3e: Pull complete
    # 05731e63f211: Pull complete
    # ........
    # See http://bazel.build/docs/getting-started.html to start a new project!
    # Removing intermediate container 82901b5e79fa
    # ---> f5d5f402071b
    # Step 9/9 : COPY . /edge/mediapipe/
    # ---> a95c212089c5
    # Successfully built a95c212089c5
    # Successfully tagged mediapipe:latest
    
  3. تشغيل مرحبًا بالعالم! في مثال C++.

    $ docker run -it --name mediapipe mediapipe:latest
    
    root@bca08b91ff63:/mediapipe# GLOG_logtostderr=1 bazel run --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hello_world
    
    # Should print:
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    

إذا واجهت خطأ في الإصدار، يُرجى يمكنك الاطّلاع على مقالة تحديد المشاكل وحلّها للعثور على حلول لعدة مشاكل. ومشكلات الإصدار الشائعة.

  1. إنشاء مثال على MediaPipe Android

    $ docker run -it --name mediapipe mediapipe:latest
    
    root@bca08b91ff63:/mediapipe# bash ./setup_android_sdk_and_ndk.sh
    
    # Should print:
    # Android NDK is now installed. Consider setting $ANDROID_NDK_HOME environment variable to be /root/Android/Sdk/ndk-bundle/android-ndk-r19c
    # Set android_ndk_repository and android_sdk_repository in WORKSPACE
    # Done
    
    root@bca08b91ff63:/mediapipe# bazel build -c opt --config=android_arm64 mediapipe/examples/android/src/java/com/google/mediapipe/apps/objectdetectiongpu:objectdetectiongpu
    
    # Should print:
    # Target //mediapipe/examples/android/src/java/com/google/mediapipe/apps/objectdetectiongpu:objectdetectiongpu up-to-date:
    # bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/objectdetectiongpu/objectdetectiongpu_deploy.jar
    # bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/objectdetectiongpu/objectdetectiongpu_unsigned.apk
    # bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/objectdetectiongpu/objectdetectiongpu.apk
    # INFO: Elapsed time: 144.462s, Critical Path: 79.47s
    # INFO: 1958 processes: 1 local, 1863 processwrapper-sandbox, 94 worker.
    # INFO: Build completed successfully, 2028 total actions