Установка

Установка на Debian и Ubuntu

  1. Установите Базелиск.

    Следуйте официальной документации 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 (разрушитель) 3.2
    Debian 11 (яблочко) 4,5
    Убунту 16.04 ЛТС 2.4
    Убунту 18.04 ЛТС 3.2
    Убунту 20.04 ЛТС 4.2
    Убунту 20.04 ЛТС 4.2
    Убунту 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. Запустите Привет, мир! в примере С++ .

    $ 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. Установите Базелиск.

    Следуйте официальной документации Bazel для установки Bazelisk.

  2. Оформить заказ репозитория MediaPipe.

    $ git clone --depth 1 https://github.com/google/mediapipe.git

    # Change directory into MediaPipe root directory
    $ cd mediapipe
  3. Установите ОпенКВ.

    Вариант 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. Запустите Привет, мир! в примере С++ .

    $ 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. Предварительная работа:

    • Установите Доморощенный .
    • Установите Xcode и его инструменты командной строки с помощью xcode-select --install .
  2. Установите Базелиск.

    Следуйте официальной документации 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. Запустите Привет, мир! в примере С++ .

    $ 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++ 2019 и WinSDK.

    Перейдите на веб-сайт VisualStudio , загрузите инструменты сборки и установите распространяемый пакет Microsoft Visual C++ 2019 и Microsoft Build Tools 2019.

    Загрузите WinSDK с официального сайта Microsoft и установите.

  5. Установите Bazel или Bazelisk и добавьте расположение исполняемого файла Bazel в переменную среды %PATH% .

    Вариант 1. Следуйте официальной документации Bazel для установки Bazel 6.1.1 или более поздней версии.

    Вариант 2. Следуйте официальной документации Bazel для установки Bazelisk.

  6. Установите переменные Bazel. Более подробную информацию о «Build on 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. Установите ОпенКВ.

    Загрузите исполняемый файл Windows с https://opencv.org/releases/ и установите. MediaPipe 0.10.x поддерживает OpenCV 3.4.10. Не забудьте отредактировать файл 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:\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. Запустите ВСЛ.

  4. Установите необходимые пакеты.

    username@DESKTOP-TMVLBJ1:~$ sudo apt-get update && sudo apt-get install -y build-essential git python zip adb openjdk-8-jdk
  5. Установите Базелиск.

    Следуйте официальной документации 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. Запустите Привет, мир! в примере С++ .

    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. Создайте образ докера с тегом «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. Запустите Привет, мир! в примере С++ .

    $ 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