تثبيت

التثبيت على 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 (stretch) 2.4
    Debian 10 (buster) 3.2
    Debian 11 (bullseye) 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) مع تسريع وحدة معالجة الرسومات

    # 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. شغِّل مثال Hello World! في 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. شغِّل مثال Hello World! في 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. تأكَّد من تثبيت Python 3 ومكتبة Python "six".

    $ 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. شغِّل مثال Hello World! في 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. تثبيت Visual C++ Build Tools وWinSDK

    انتقِل إلى موقع VisualStudio الإلكتروني، نزِّل أدوات الإنشاء، ثبِّت Microsoft Visual C++ 2022 Redistributable وMicrosoft Build Tools 2022.

    نزِّل حزمة WinSDK من الموقع الإلكتروني الرسمي لشركة Microsoft ثبِّتها.

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

    الخيار رقم 1. اتّبِع المستندات الرسمية حول Bazel لتركيب الإصدار 6.5.0 من 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\<version>\BuildTools
    C:\> set BAZEL_VC=C:\Program Files (x86)\Microsoft Visual Studio\<version>\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/ ثبِّته. يتوافق الإصدار 0.10.x من MediaPipe مع الإصدار 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. شغِّل مثال Hello World! في 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 Subsystem for Linux (WSL)

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

  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. شغِّل مثال Hello World! في 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 التي ستعزل تثبيت MediaPipe عن بقية النظام.

  1. ثبِّت Docker على نظام المضيف.

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

    $ 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. شغِّل مثال Hello World! في 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