【 Edge 】透過 NVIDIA® Jetson AGX Xavier™ 編譯 MediaPipe 0.8.9
內容
- 學習目標
- 前置準備作業
- 實驗環境
- 安裝 Bazel 4.2.2
- 安裝相依套件
- 修改相關資訊
- 避免 any.proto 錯誤
- 升級 gcc 與 g++
- 編譯 MediaPipe 0.8.9
學習目標
- 如何在
NVIDIA® Jetson AGX Xavier™
編譯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
安裝 Bazel 4.2.2
Step 1. 取得遠端更新伺服器的套件檔案清單
-
請於終端機輸入下方指令
sudo apt-get update
Step 2. 更新套件
-
請於終端機輸入下方指令
sudo apt-get upgrade
Step 3. 安裝所需套件
-
請於終端機輸入下方指令
sudo apt-get install -y build-essential zip unzip curl openjdk-11-jdk
Step 4. 下載 Bazel 4.2.2
-
請於終端機輸入下方指令
wget https://github.com/bazelbuild/bazel/releases/download/4.2.2/bazel-4.2.2-dist.zip
Step 5. 解壓縮
-
請於終端機輸入下方指令
unzip -d bazel bazel-4.2.2-dist.zip
Step 6. 切換路徑到 Bazel 資料夾
-
請於終端機輸入下方指令
cd bazel
Step 7. 修改設定
-
請於終端機輸入下方指令
sudo vi scripts/bootstrap/compile.sh
-
顯示行號
:set nu
-
新增設定
-
大約 144 行的行尾加上下方資訊再存檔後離開
-J-Xmx1600M
-
Step 8. 開始 Build
-
請於終端機輸入下方指令
env EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk//:jdk" bash ./compile.sh
Step 9. 複製 Binary 檔
-
請於終端機輸入下方指令
sudo cp output/bazel /usr/local/bin/bazel
Step 10. 移除 Bazel 的 ZIP 檔
- 請於終端機輸入下方指令
cd .. && rm bazel-4.2.2-dist.zip
Step 11. 確認 Bazel 版本
-
請於終端機輸入下方指令
bazel --version
安裝相依套件
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
修改相關資訊
Step 1. 下載 Mediapipe 0.8.9 並解壓縮
-
請於終端機輸入下方指令進行下載
wget https://github.com/google/mediapipe/archive/refs/tags/v0.8.9.zip
-
請於終端機輸入下方指令進行解壓縮
unzip v0.8.9.zip
Step 2. 切換路徑
-
請於終端機輸入下方指令
cd mediapipe-0.8.9
Step 3. 修改設定
-
請於終端機輸入下方指令
sed -i -e "/\"imgcodecs\"/d;/\"calib3d\"/d;/\"features2d\"/d;/\"highgui\"/d;/\"video\"/d;/\"videoio\"/d" third_party/BUILD
-
請於終端機輸入下方指令
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
-
請於終端機輸入下方指令
sudo vi third_party/BUILD "WITH_ITT": "OFF", "WITH_JASPER": "OFF", "WITH_WEBP": "OFF", # 在後面增加以下內容: "ENABLE_NEON": "OFF", "WITH_TENGINE": "OFF",
Step 4. 修改 OpenCV 和 FFMpeg 的編譯文件
-
請於終端機輸入下方指令
sed -i "s/x86_64-linux-gnu/aarch64-linux-gnu/g" third_party/opencv_linux.BUILD
-
請於終端機輸入下方指令
sed -i "s/x86_64-linux-gnu/aarch64-linux-gnu/g" third_party/ffmpeg_linux.BUILD
Step 5. 支援 CUDA
-
請於終端機輸入下方指令
sudo vi /etc/profile export TF_CUDA_PATHS=/usr/local/cuda-10.2,/usr/lib/aarch64-linux-gnu,/usr/include
-
請於終端機輸入下方指令
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
避免 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
Step 2. 解壓縮
- 請於終端機輸入下方指令
unzip protoc-3.20.0-linux-aarch_64.zip
Step 3. 移動資料夾到適當位置
- 將
bin
的資料夾與include
中的google
資料夾複製到 mediapipe-0.8.6 中
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]
升級 gcc 與 g++
Step 1. 安裝 software-properties-common
-
請於終端機輸入下方指令
sudo apt install software-properties-common
Step 2. 導入 PPA
-
請於終端機輸入下方指令
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
Step 3. 安裝 gcc 與 g++
-
請於終端機輸入下方指令
sudo apt-get install gcc-8 g++-8
Step 4. 設定優先級
-
請於終端機輸入下方指令
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 60 --slave /usr/bin/g++ g++ /usr/bin/g++-8
Step 5. 重新配置系統上默認 gcc 版本
-
請於終端機輸入下方指令
sudo update-alternatives --config gcc
Step 6. 確認 gcc 與 g++ 版本
-
請於終端機輸入下方指令
gcc --version
-
請於終端機輸入下方指令
g++ --version
編譯 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
- 編譯成功之後,會在
Step 3. 確認 dist
的資料夾