Cómo instalarlo en Debian y Ubuntu
Instala Bazelisk.
Sigue la documentación oficial de Bazel para instalar Bazelisk.
Consulta el repositorio de MediaPipe.
$ cd $HOME $ git clone --depth 1 https://github.com/google/mediapipe.git # Change directory into MediaPipe root directory $ cd mediapipe
Instala OpenCV y FFmpeg.
Opción 1. Usa la herramienta del administrador de paquetes para instalar las bibliotecas precompiladas de OpenCV. FFmpeg se instalará a través de
libopencv-video-dev
.SO 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 LTS de Ubuntu 20.4 4.2 LTS de Ubuntu 20.4 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
Nota. En Debian 11/Ubuntu 21.04, cuando se instala OpenCV 4.5 con
libopencv-video-dev
, también se debe instalarlibopencv-contrib-dev
.$ sudo apt-get install -y libopencv-contrib-dev
opencv_linux.BUILD
yWORKSPACE
de MediaPipe ya están configurados para OpenCV 2/3 y deberían funcionar correctamente en cualquier arquitectura:# 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", ], )
Para OpenCV 4, debes modificar
opencv_linux.BUILD
teniendo en cuenta la arquitectura actual:# 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", ], )
Opción 2 Ejecuta
setup_opencv.sh
para compilar OpenCV de forma automática a partir de la fuente y modificar la configuración de OpenCV de MediaPipe. Esta opción realizará automáticamente todos los pasos definidos en la opción 3.Opción 3 Sigue la documentación de OpenCV para compilar OpenCV de forma manual a partir del código fuente.
Es posible que debas modificar
WORKSPACE
yopencv_linux.BUILD
para dirigir MediaPipe a tus propias bibliotecas de OpenCV. Supongamos que OpenCV se instalaría en/usr/local/
, que se recomienda de forma predeterminada.Configuración de 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", ], )
Configuración de 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", ], )
La configuración actual de FFmpeg se define en
ffmpeg_linux.BUILD
y debería funcionar para cualquier arquitectura:# 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", ], )
Para ejecutar ejemplos de escritorio solo en Linux (no en OS X) con aceleración de 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.
Ejecuta Hello World! in C++ example.
$ 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!
Si encuentras un error de compilación, lee Cómo solucionar problemas para encontrar las soluciones de varios problemas de compilación comunes.
Cómo instalarlo en CentOS
Renuncia de responsabilidad: La ejecución de MediaPipe en CentOS es experimental.
Instala Bazelisk.
Sigue la documentación oficial de Bazel para instalar Bazelisk.
Consulta el repositorio de MediaPipe.
$ git clone --depth 1 https://github.com/google/mediapipe.git # Change directory into MediaPipe root directory $ cd mediapipe
Instala OpenCV.
Opción 1: Usa la herramienta del administrador de paquetes para instalar la versión precompilada.
$ sudo yum install opencv-devel
Opción 2. Compila OpenCV a partir del código fuente.
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"], )
Ejecuta Hello World! in C++ example.
$ 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!
Si encuentras un error de compilación, lee Cómo solucionar problemas para encontrar las soluciones de varios problemas de compilación comunes.
Cómo instalar en macOS
Trabajo previo:
Instala Bazelisk.
Sigue la documentación oficial de Bazel para instalar Bazelisk.
Consulta el repositorio de MediaPipe.
$ git clone --depth 1 https://github.com/google/mediapipe.git $ cd mediapipe
Instala OpenCV y FFmpeg.
Opción 1: Usa la herramienta del administrador de paquetes HomeBrew para instalar las bibliotecas precompiladas de OpenCV 3. FFmpeg se instalará a través de OpenCV.
$ brew install opencv@3 # There is a known issue caused by the glog dependency. Uninstall glog. $ brew uninstall --ignore-dependencies glog
Opción 2. Usar la herramienta administrador de paquetes MacPorts para instalar las bibliotecas 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"], )
Asegúrate de tener instalados Python 3 y la biblioteca “six” de Python.
$ 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
Ejecuta el ejemplo de Hello World en 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!
Si encuentras un error de compilación, lee Cómo solucionar problemas para encontrar las soluciones de varios problemas de compilación comunes.
Instala en Windows
Renuncia de responsabilidad: La ejecución de MediaPipe en Windows es experimental.
Instala MSYS2 y edita la variable de entorno
%PATH%
.Si MSYS2 está instalado en
C:\msys64
, agregaC:\msys64\usr\bin
a tu variable de entorno%PATH%
.Instala los paquetes necesarios.
C:\> pacman -S git patch unzip
Instala Python y permite que el ejecutable edite la variable de entorno
%PATH%
.Descarga y, luego, instala el ejecutable de Python para Windows desde https://www.python.org/downloads.
Instala Visual C++ Build Tools 2019 y WinSDK
Ve a el sitio web de VisualStudio, descarga las herramientas de compilación y, luego, instala el paquete redistribuible de Microsoft Visual C++ 2019 y Microsoft Build Tools 2019.
Descarga WinSDK del sitio web oficial de MicroSoft y, luego, instálalo.
Instala Bazel o Bazelisk y agrega la ubicación del archivo ejecutable de Bazel a la variable de entorno
%PATH%
.Opción 1: Sigue la documentación oficial de Bazel para instalar Bazel 6.5.0 o una versión posterior.
Opción 2. Sigue la documentación oficial de Bazel para instalar Bazelisk.
Configura las variables de Bazel. Obtén más detalles sobre "Build on Windows" en la documentación oficial de 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>
Consulta el repositorio de 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
Instala OpenCV.
Descarga el ejecutable de Windows de https://opencv.org/releases/ y, luego, instálalo. MediaPipe 0.10.x es compatible con OpenCV 3.4.10. Recuerda editar el archivo
WORKSPACE
si OpenCV no está instalado enC:\opencv
.new_local_repository( name = "windows_opencv", build_file = "@//third_party:opencv_windows.BUILD", path = "C:\\<path to opencv>\\build", )
Ejecuta el ejemplo de Hello World en 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!
Si encuentras un error de compilación, lee Cómo solucionar problemas para encontrar las soluciones de varios problemas de compilación comunes.
Cómo instalar en el subsistema de Windows para Linux (WSL)
Sigue las instrucciones para instalar el Subsistema de Windows para Linux (Ubuntu).
Instala adb de Windows e inicia el servidor adb en Windows.
Inicia WSL.
Instala los paquetes necesarios.
username@DESKTOP-TMVLBJ1:~$ sudo apt-get update && sudo apt-get install -y build-essential git python zip adb openjdk-8-jdk
Instala Bazelisk.
Sigue la documentación oficial de Bazel para instalar Bazelisk.
Consulta el repositorio de MediaPipe.
username@DESKTOP-TMVLBJ1:~$ git clone --depth 1 https://github.com/google/mediapipe.git username@DESKTOP-TMVLBJ1:~$ cd mediapipe
Instala OpenCV y FFmpeg.
Opción 1: Usa la herramienta del administrador de paquetes para instalar las bibliotecas precompiladas de OpenCV. FFmpeg se instalará a través de 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
Opción 2. Ejecuta
setup_opencv.sh
para compilar OpenCV automáticamente desde la fuente y modificar la configuración de OpenCV de MediaPipe.Opción 3. Sigue la documentación de OpenCV para compilar OpenCV de forma manual a partir del código fuente.
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"], )
Ejecuta el ejemplo de Hello World en 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!
Si encuentras un error de compilación, consulta Solución de problemas para encontrar las soluciones de varios problemas comunes de compilación.
Instalación con Docker
Se utilizará una imagen de Docker que aislará la instalación de Mediapipe del resto del sistema.
Instala Docker en tu sistema anfitrión.
Compila una imagen de Docker con la etiqueta "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
Ejecuta el ejemplo de Hello World en 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!
Si encuentras un error de compilación, consulta Solución de problemas para encontrar las soluciones de varios problemas comunes de compilación.
Compila un ejemplo de MediaPipe para 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