因應 OpenCV 新版 4.9.0,目前將各平臺編譯參數均移除 -D WITH_INF_ENGINE=ON,以免 cmake 階段產生錯誤。需要自行編譯 OpenCV 的網友,請自行複製貼上指令,並修改紅色部分的路徑與版本編號。
★樹莓派 3B+、4B
編譯前需要安裝的Library
$ sudo apt-get install build-essential cmake cmake-qt-gui libjpeg-dev libpng-dev libtiff5-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgtk2.0-dev libgtk-3-dev libcanberra-gtk* libatlas-base-dev gfortran python3-dev
cmake 參數
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-版本編號/modules \
-D ENABLE_NEON=ON \
-D ENABLE_VFPV3=ON \
-D WITH_TBB=ON \
-D WITH_OPENMP=ON \
-D WITH_GSTREAMER=ON \
-D BUILD_TESTS=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF \
-D OPENCV_EXTRA_EXE_LINKER_FLAGS=-latomic \
-D PYTHON_EXECUTABLE3=/usr/bin/python3 \
..
★Ubuntu X86 CPU(需要再測試,不保證 )
編譯前需要安裝的Library
$ sudo apt-get install build-essential cmake cmake-qt-gui libjpeg-dev libpng-dev libtiff5-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgtk2.0-dev libgtk-3-dev libcanberra-gtk* libatlas-base-dev gfortran python3-dev
cmake 參數
若有問題,建議拿掉 WITH_TBB=ON 與 WITH_OPENMP=ON 這兩個參數
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-版本編號/modules \
-D WITH_TBB=ON \
-D WITH_OPENMP=ON \
-D WITH_GSTREAMER=ON \
-D BUILD_TESTS=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF \
-D OPENCV_EXTRA_EXE_LINKER_FLAGS=-latomic \
-D PYTHON_EXECUTABLE=/usr/bin/python3 \
..
★Jetson Nano / NX
先移除內建的 OpenCV
$ sudo sudo apt-get purge *libopencv*
編譯前需要安裝的Library
$ sudo apt-get install build-essential cmake cmake-qt-gui libjpeg-dev libpng-dev libtiff5-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgtk2.0-dev libgtk-3-dev libcanberra-gtk* libatlas-base-dev gfortran python3-dev
cmake 參數
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-版本編號/modules \
-D OPENCV_DNN_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D ENABLE_NEON=ON \
-D CUDA_FAST_MATH=1 \
-D CUDA_ARCH_BIN="5.3,6.2,7.2" \
-D CUDA_ARCH_PTX="" \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D WITH_TBB=ON \
-D WITH_OPENMP=ON \
-D WITH_GSTREAMER=ON \
-D WITH_FFMPEG=ON \
-D BUILD_TESTS=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF \
-D OPENCV_EXTRA_EXE_LINKER_FLAGS=-latomic \
-D PYTHON3_EXECUTABLE=/usr/bin/python3 \
-D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
-D OPENCV_GENERATE_PKGCONFIG=YES \
..
安裝 PyTorch
若要安裝支援 CUDA 的 PyTorch 就不能從 PyTorch 官網下載,必須安裝 Nvidia 打包好的。若以 Xavier NX 為例,若安裝的作業系統是 NX Developer Kit 5.0.2 版本,可安裝的最高 PyTorch 版本為 torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl,可在 Jetson Download Center 找到,下載後執行下列指令安裝。
pip3 install torch-2.1.0a0+41361538.nv23.06-cp38-cp38-linux_aarch64.whl
安裝完後再下載 torchvision 原始碼,版本必須是 0.16.2,不能隨便亂裝其餘版本,並且需要自行編譯原始碼,無法使用 pip install 安裝已編譯好的版本(可安裝,但執行會報錯)。原始碼可在此下載 https://github.com/pytorch/vision/tree/v0.16.2。下載回來後解開,安裝過程需要編譯,因此需要一些時間,指令如下。
unzip v0.16.2.zip
cd vision-0.16.2
python3 setup.py install
若過程中需要其他函數庫,見招拆招去補即可。全部安裝完可執行下列 python 指令看看是否支援 CUDE,若看到 True 就表示支援。
import torch
torch.cuda.is_available()
★macOS
編譯需要安裝的程式
$ brew install python@版本 $ brew install cmake $ brew install opencv $ pip3 install numpy
cmake 參數
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-版本編號/modules \
-D OPENCV_ENABLE_NONFREE=ON \
-D PYTHON3_EXECUTABLE=/usr/local/bin/python3 \
-D PYTHON_EXECUTABLE=/usr/bin/python \
-D BUILD_opencv_python3=ON \
..
★Windows
抱歉,我從來沒在 Windows 中編譯過,願請好心人提供編譯參數。