התקנה ב-Debian וב-Ubuntu
מתקינים את Bazelisk.
כדי להתקין את Bazelisk, פועלים לפי המסמכים הרשמיים של Bazel.
בודקים את המאגר של MediaPipe.
$ cd $HOME $ git clone --depth 1 https://github.com/google/mediapipe.git # Change directory into MediaPipe root directory $ cd mediapipe
מתקינים את 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
כדי ליצור build של 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", ], )
להרצת דוגמאות למחשבים שולחניים ב-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.
מריצים את הדוגמה 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!
אם נתקלתם בשגיאה ב-build, תוכלו לקרוא את המאמר פתרון בעיות כדי למצוא פתרונות לבעיות נפוצות ב-build.
התקנה ב-CentOS
כתב ויתור: הפעלת MediaPipe ב-CentOS היא ניסיונית.
מתקינים את Bazelisk.
כדי להתקין את Bazelisk, פועלים לפי המסמכים הרשמיים של Bazel.
בודקים את המאגר של MediaPipe.
$ git clone --depth 1 https://github.com/google/mediapipe.git # Change directory into MediaPipe root directory $ cd mediapipe
מתקינים את 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"], )
מריצים את הדוגמה 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!
אם נתקלתם בשגיאה ב-build, תוכלו לקרוא את המאמר פתרון בעיות כדי למצוא פתרונות לבעיות נפוצות ב-build.
התקנה ב-macOS
עבודה מוקדמת:
מתקינים את Bazelisk.
כדי להתקין את Bazelisk, פועלים לפי המסמכים הרשמיים של Bazel.
בודקים את המאגר של MediaPipe.
$ git clone --depth 1 https://github.com/google/mediapipe.git $ cd mediapipe
מתקינים את OpenCV ואת FFmpeg.
אפשרות 1. משתמשים בכלי של מנהל החבילות HomeBrew כדי להתקין את ספריות OpenCV 3 שהומרו מראש לקובצי object. 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"], )
מוודאים ש-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
מריצים את הדוגמה 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!
אם נתקלתם בשגיאה ב-build, תוכלו לקרוא את המאמר פתרון בעיות כדי למצוא פתרונות לבעיות נפוצות ב-build.
התקנה ב-Windows
כתב ויתור: הפעלת MediaPipe ב-Windows היא ניסיונית.
מתקינים את MSYS2 ועורכים את משתנה הסביבה
%PATH%
.אם MSYS2 מותקן ב-
C:\msys64
, מוסיפים אתC:\msys64\usr\bin
למשתנה הסביבה%PATH%
.מתקינים את החבילות הנדרשות.
C:\> pacman -S git patch unzip
מתקינים את Python ומאפשרים לקובץ ההפעלה לערוך את משתנה הסביבה
%PATH%
.מורידים את קובץ ההפעלה של Python ל-Windows מ-https://www.python.org/downloads ומתקינים אותו.
התקנת Visual C++ Build Tools ו-WinSDK
עוברים אל אתר Visual Studio, מורידים את כלי ה-build ומתקינים את Microsoft Visual C++ 2022 Redistributable ואת Microsoft Build Tools 2022.
מורידים את WinSDK מהאתר הרשמי של Microsoft ומתקינים אותו.
מתקינים את Bazel או Bazelisk ומוסיפים את המיקום של קובץ ההפעלה של Bazel למשתנה הסביבה
%PATH%
.אפשרות 1. כדי להתקין את Bazel בגרסה 6.5.0 ואילך, פועלים לפי המסמכים הרשמיים של Bazel.
אפשרות 2. כדי להתקין את Bazelisk, פועלים לפי המסמכים הרשמיים של Bazel.
מגדירים משתני Bazel. מידע נוסף על יצירת גרסאות build ב-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>
בודקים את המאגר של 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
מתקינים את OpenCV.
מורידים את קובץ ההפעלה של 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", )
מריצים את הדוגמה 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!
אם נתקלתם בשגיאה ב-build, תוכלו לקרוא את המאמר פתרון בעיות כדי למצוא פתרונות לבעיות נפוצות ב-build.
התקנה ב-Windows Subsystem for Linux (WSL)
פועלים לפי ההוראות כדי להתקין את Windows Subsystem for Linux (Ubuntu).
מתקינים את Windows ADB ומפעילים את שרת ה-ADB ב-Windows.
פותחים את WSL.
מתקינים את החבילות הנדרשות.
username@DESKTOP-TMVLBJ1:~$ sudo apt-get update && sudo apt-get install -y build-essential git python zip adb openjdk-8-jdk
מתקינים את Bazelisk.
כדי להתקין את Bazelisk, פועלים לפי המסמכים הרשמיים של Bazel.
בודקים את המאגר של MediaPipe.
username@DESKTOP-TMVLBJ1:~$ git clone --depth 1 https://github.com/google/mediapipe.git username@DESKTOP-TMVLBJ1:~$ cd mediapipe
מתקינים את 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
כדי ליצור build של 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"], )
מריצים את הדוגמה 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!
אם נתקלתם בשגיאה ב-build, תוכלו לקרוא את המאמר פתרון בעיות כדי למצוא פתרונות לבעיות נפוצות ב-build.
התקנה באמצעות Docker
לשם כך, נעשה שימוש בקובץ אימג' של Docker שיבודד את התקנת Mediapipe משאר המערכת.
מתקינים את Docker במערכת המארחת.
יוצרים קובץ אימג' של 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
מריצים את הדוגמה 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!
אם נתקלתם בשגיאה ב-build, תוכלו לקרוא את המאמר פתרון בעיות כדי למצוא פתרונות לבעיות נפוצות ב-build.
פיתוח דוגמה ל-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