【 Edge 】透過 NVIDIA® Jetson AGX Xavier™ 編譯 MediaPipe 0.8.9

【 Edge 】透過 NVIDIA® Jetson AGX Xavier™ 編譯 MediaPipe 0.8.9
Photo by Jeremiah Berman / Unsplash

內容

  • 學習目標
  • 前置準備作業
  • 實驗環境
  • 安裝 Bazel 4.2.2
  • 安裝相依套件
  • 修改相關資訊
  • 避免 any.proto 錯誤
  • 升級 gcc 與 g++
  • 編譯 MediaPipe 0.8.9

學習目標

前置準備作業

  • 可上網的 NVIDIA ® Jetson AGX Xavier™

實驗環境

  • Python version: 3.6.9
  • nvcc version: cuda_10.2_r440.TC440_70.29663091_0
  • Jetpack version: 4.6.1

---2022-04-26---1.11.51

安裝 Bazel 4.2.2

Step 1. 取得遠端更新伺服器的套件檔案清單

  • 請於終端機輸入下方指令

    sudo apt-get update
    

    ---2022-04-26---1.48.20


Step 2. 更新套件

  • 請於終端機輸入下方指令

    sudo apt-get upgrade
    

    ---2022-04-26---1.49.11


Step 3. 安裝所需套件

  • 請於終端機輸入下方指令

    sudo apt-get install -y build-essential zip unzip curl openjdk-11-jdk
    

    ---2022-04-26---1.55.27


Step 4. 下載 Bazel 4.2.2

  • 請於終端機輸入下方指令

    wget https://github.com/bazelbuild/bazel/releases/download/4.2.2/bazel-4.2.2-dist.zip
    

    ---2022-04-26---2.02.11


Step 5. 解壓縮

  • 請於終端機輸入下方指令

    unzip -d bazel bazel-4.2.2-dist.zip
    

    ---2022-04-26---2.03.24


Step 6. 切換路徑到 Bazel 資料夾

  • 請於終端機輸入下方指令

    cd bazel
    

    ---2022-04-26---2.03.53


Step 7. 修改設定

  • 請於終端機輸入下方指令

    sudo vi scripts/bootstrap/compile.sh
    
  • 顯示行號

    :set nu
    

    ---2022-04-26---2.04.48

    ---2022-04-26---2.05.49

  • 新增設定

    • 大約 144 行的行尾加上下方資訊再存檔後離開

      -J-Xmx1600M
      

      ---2022-04-26---2.08.10

      ---2022-04-26---2.08.35


Step 8. 開始 Build

  • 請於終端機輸入下方指令

    env EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk//:jdk" bash ./compile.sh
    

    ---2022-04-26---2.26.45

    ---2022-04-26---2.35.39


Step 9. 複製 Binary 檔

  • 請於終端機輸入下方指令

    sudo cp output/bazel /usr/local/bin/bazel
    

    ---2022-04-26---2.36.17


Step 10. 移除 Bazel 的 ZIP 檔

  • 請於終端機輸入下方指令
    cd .. && rm bazel-4.2.2-dist.zip
    

Step 11. 確認 Bazel 版本

  • 請於終端機輸入下方指令

    bazel --version
    

    ---2022-04-26---2.37.20

安裝相依套件

Step 1. 安裝套件

  • 請於終端機輸入下方指令

    sudo apt-get install -y libopencv-core-dev libopencv-highgui-dev libopencv-calib3d-dev libopencv-features2d-dev libopencv-imgproc-dev libopencv-video-dev python3-dev cmake protobuf-compiler
    

    ---2022-04-26---2.38.14

修改相關資訊

Step 1. 下載 Mediapipe 0.8.9 並解壓縮

  • 請於終端機輸入下方指令進行下載

    wget https://github.com/google/mediapipe/archive/refs/tags/v0.8.9.zip
    

    ---2022-04-26---2.44.37

  • 請於終端機輸入下方指令進行解壓縮

    unzip v0.8.9.zip
    

    ---2022-04-26---2.46.00


Step 2. 切換路徑

  • 請於終端機輸入下方指令

    cd mediapipe-0.8.9
    

    ---2022-04-26---2.46.37


Step 3. 修改設定

  • 請於終端機輸入下方指令

    sed -i -e "/\"imgcodecs\"/d;/\"calib3d\"/d;/\"features2d\"/d;/\"highgui\"/d;/\"video\"/d;/\"videoio\"/d" third_party/BUILD
    

    ---2022-04-26---2.47.14

  • 請於終端機輸入下方指令

    sed -i -e "/-ljpeg/d;/-lpng/d;/-ltiff/d;/-lImath/d;/-lIlmImf/d;/-lHalf/d;/-lIex/d;/-lIlmThread/d;/-lrt/d;/-ldc1394/d;/-lavcodec/d;/-lavformat/d;/-lavutil/d;/-lswscale/d;/-lavresample/d" third_party/BUILD
    

    ---2022-04-26---2.47.46

  • 請於終端機輸入下方指令

    sudo vi third_party/BUILD
    
    "WITH_ITT": "OFF",
    "WITH_JASPER": "OFF",
    "WITH_WEBP": "OFF",
    
    # 在後面增加以下內容:
    
    "ENABLE_NEON": "OFF",
    "WITH_TENGINE": "OFF",
    

    ---2022-04-26---2.48.25

    ---2022-04-26---2.48.59


Step 4. 修改 OpenCV 和 FFMpeg 的編譯文件

  • 請於終端機輸入下方指令

    sed -i "s/x86_64-linux-gnu/aarch64-linux-gnu/g" third_party/opencv_linux.BUILD
    

    ---2022-04-26---2.49.47

  • 請於終端機輸入下方指令

    sed -i "s/x86_64-linux-gnu/aarch64-linux-gnu/g" third_party/ffmpeg_linux.BUILD
    

    ---2022-04-26---2.50.12


Step 5. 支援 CUDA

  • 請於終端機輸入下方指令

    sudo vi /etc/profile
    
    export TF_CUDA_PATHS=/usr/local/cuda-10.2,/usr/lib/aarch64-linux-gnu,/usr/include
    

    ---2022-04-26---2.51.01

    ---2022-04-26---2.51.22

  • 請於終端機輸入下方指令

    sudo vi .bazelrc
    
    # This config refers to building with CUDA available.
    build:using_cuda --define=using_cuda=true
    build:using_cuda --action_env TF_NEED_CUDA=1
    build:using_cuda --crosstool_top=@local_config_cuda//crosstool:toolchain
    
    # This config refers to building CUDA op kernels with nvcc.
    build:cuda --config=using_cuda
    build:cuda --define=using_cuda_nvcc=true
    

    ---2022-04-26---2.52.36

    ---2022-04-26---2.53.14

避免 any.proto 錯誤

Step 1. 切換路徑並下載 protoc

  • 請於終端機輸入下方指令

    cd .. && wget https://github.com/protocolbuffers/protobuf/releases/download/v3.20.0/protoc-3.20.0-linux-aarch_64.zip
    

    ---2022-04-26---2.55.19


Step 2. 解壓縮

  • 請於終端機輸入下方指令
    unzip protoc-3.20.0-linux-aarch_64.zip
    

Step 3. 移動資料夾到適當位置

  • bin 的資料夾與 include 中的 google 資料夾複製到 mediapipe-0.8.6 中

---2022-04-27---9.32.46


Step 4. 修改 mediapipe-0.8.9 中的 setup.py 程式

  • 請於終端機輸入下方指令

    sudo vi mediapipe-0.8.9/setup.py
    
    protoc_command = [self._protoc, '-I.', '--python_out=.', source]
    
    # 將上句修改為下方内容:
    
    protoc_command = [self._protoc, '-I.', '-I/usr/local/include', '--python_out=.', source]
    

    ---2022-04-27---9.33.41

    ---2022-04-27---9.34.18

升級 gcc 與 g++

Step 1. 安裝 software-properties-common

  • 請於終端機輸入下方指令

    sudo apt install software-properties-common
    

    ---2022-04-27---9.35.25


Step 2. 導入 PPA

  • 請於終端機輸入下方指令

    sudo add-apt-repository ppa:ubuntu-toolchain-r/test
    

    ---2022-04-27---9.36.26


Step 3. 安裝 gcc 與 g++

  • 請於終端機輸入下方指令

    sudo apt-get install gcc-8 g++-8
    

    ---2022-04-27---9.37.17


Step 4. 設定優先級

  • 請於終端機輸入下方指令

    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 60 --slave /usr/bin/g++ g++ /usr/bin/g++-8
    

    ---2022-04-27---9.37.56


Step 5. 重新配置系統上默認 gcc 版本

  • 請於終端機輸入下方指令

    sudo update-alternatives --config gcc
    

    ---2022-04-27---9.38.31


Step 6. 確認 gcc 與 g++ 版本

  • 請於終端機輸入下方指令

    gcc --version
    

    ---2022-04-27---9.38.59

  • 請於終端機輸入下方指令

    g++ --version
    

    ---2022-04-27---9.39.52

編譯 MediaPipe 0.8.9

Step 1. 切換路徑到 MediaPipe

  • 請於終端機輸入下方指令
    cd ~/mediapipe-0.8.9/
    

Step 2. 開始編譯

  • 請於終端機輸入下方指令

    • 編譯成功之後,會在 mediapipe-0.8.9 資料夾生成一個名為 dist 的資料夾,裡面會有一個編譯完成的 .wheel 檔案,之後再用 pip 進行安裝即可。
    python3 setup.py gen_protos && python3 setup.py bdist_wheel
    

    ---2022-04-27---9.41.59

    ---2022-04-27---10.43.59


Step 3. 確認 dist 的資料夾

---2022-04-27---10.44.25

GitHub

List of blogs