1. 程式人生 > 實用技巧 >Ubuntu下MediaPipe的環境配置

Ubuntu下MediaPipe的環境配置

1.介紹

MediaPipe是一款由Google開發並開源的資料流處理機器學習應用開發框架。它是一個基於圖的資料處理管線,用於構建使用了多種形式的資料來源,如視訊、音訊、感測器資料以及任何時間序列資料。MediaPipe通過將各個感知模型抽象為模組並將其連線到可維護的圖中來解決這些問題。
優點

  • 有效管理資源(CPU和GPU)達到低延遲效能
  • 處理諸如音訊和視訊幀之類的時間序列資料的同步
  • 並測量效能和資源消耗(目前Google正在開發,尚未開源)

官網上給出的Demo:

MediaPipe的主要元件包括:

  • (1) 圖(Graph)-有向圖
  • (2) 資料包(Packet)
  • (3) 節點(Node)
  • (4) 資料流(Stream)
  • (5) 圖配置(GraphConfig)
  • (6) 計算單元(Caculator)
  • (7) 子圖(Subgraph)

2.安裝

2.1 下載MediaPipe原始碼

git clone https://github.com/google/mediapipe.git
cd mediapipe

2.2 安裝bazel

  • 新增Bazel分發URI作為包源
sudo apt install curl gnupg
curl -f https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
  • 安裝和更新bazel
sudo apt update && sudo apt install bazel
sudo apt update && sudo apt full-upgrade

注意:後續編譯中會下載大量依賴庫,由於總所周知的原因,需要在終端進行全域性代理,不然編譯報錯或者直接無法編譯。

2.3 安裝OpenCV和FFmpeg

sudo apt-get install libopencv-core-dev libopencv-highgui-dev \
                       libopencv-calib3d-dev libopencv-features2d-dev \
                       libopencv-imgproc-dev libopencv-video-dev

2.4 安裝GPU庫

sudo apt-get install mesa-common-dev libegl1-mesa-dev libgles2-mesa-dev

2.5 執行hello world

export GLOG_logtostderr=1

# 不啟用GPU
bazel run --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hello_world:hello_world

# 啟用GPU
bazel run --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 mediapipe/examples/desktop/hello_world:hello_world

執行結果列印10次Hello World:

# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!
# Hello World!

3.編譯MediaPipe官方應用

3.1 桌面版的人手姿態追蹤Hand Tracking

  • 編譯(CPU版本)
bazel build -c opt --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hand_tracking:hand_tracking_cpu
  • 執行(CPU版本)
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/hand_tracking/hand_tracking_cpu \
  --calculator_graph_config_file=mediapipe/graphs/hand_tracking/hand_tracking_desktop_live.pbtxt
  • 編譯(GPU版本)
bazel build -c opt --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 \
  mediapipe/examples/desktop/hand_tracking:hand_tracking_gpu
  • 執行(GPU版本)
GLOG_logtostderr=1 bazel-bin/mediapipe/examples/desktop/hand_tracking/hand_tracking_gpu \
  --calculator_graph_config_file=mediapipe/graphs/hand_tracking/hand_tracking_mobile.pbtxt

3.2 安卓版本的人手姿態追蹤Hand Tracking

需要安裝的環境:

  • JAVA Runtime (14.0.2)
  • Android SDK release 28.0.3 and above
  • Android NDK r18b and above.
    建議採用Android Studio安裝Android SDK NDK,在.bashrc中添加里面路徑,採用source .bashrc配置生效:
export ANDROID_HOME=<path to the Android SDK>
export ANDROID_NDK_HOME=<path to the Android NDK>

在命令列中使用Bazel構建Hand Tracking

bazel build -c opt --config=android_arm64 mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu:handtrackinggpu

安裝在指定Android平臺上:

adb install bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu/handtrackinggpu.apk

也可以通過adb指令安裝apk。

附:本人移植在MTK安卓平臺上的構建命令和上訴有所不同:

bazel build -c opt --fat_apk_cpu=arm64-v8a,armeabi-v7a mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu:handtrackinggpu