sudo apt install build-essential pkg-config unzip yasm git gfortran libatlas-base-dev -y
snap install cmake --channel 3.14/stable --classic
sudo apt install libssl-dev zlib1g-dev -y
wget https://www.python.org/ftp/python/3.8.6/Python-3.8.6.tar.xz
tar xf Python-3.8.6.tar.xz
cd Python-3.8.6
./configure --prefix=$PWD/../python38
make $(nproc)
make install
Create Pythonv Virtual ENV
cd ..
./python38/bin/python3.8 -m venv venv
source venv/bin/activate
pip install wheel
pip install numpy
git clone -b 4.5.0 https://github.com/opencv/opencv.git --depth 1
git clone -b 4.5.0 https://github.com/opencv/opencv_contrib.git --depth 1
mkdir opencv/build
cd opencv/build
## Build openCV
cmake -D CMAKE_INSTALL_PREFIX=../../install \
-D WITH_TBB=ON \
-D WITH_OPENMP=ON \
-D WITH_IPP=OFF \
-D CMAKE_BUILD_TYPE=RELEASE \
-D BUILD_EXAMPLES=OFF \
-D WITH_NVCUVID=OFF \
-D WITH_CUDA=ON \
-D BUILD_DOCS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_TESTS=OFF \
-D WITH_CSTRIPES=ON \
-D WITH_OPENCL=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D CUDA_ARCH_BIN="7.2" \
-D ENABLE_PRECOMPILED_HEADERS=OFF \
-D CUDA_ARCH_PTX="" \
-D CMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-gnu.toolchain.cmake \
-D CUDA_TOOLKIT_INCLUDE=/usr/local/cuda/targets/aarch64-linux/include \
-D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \
-D CUDA_CUDART_LIBRARY=/usr/local/cuda/targets/aarch64-linux/lib/libcudart.so.10.2 \
-D CUDA_cublas_LIBRARY=/usr/local/cuda/targets/aarch64-linux/lib/stubs/libcublas.so \
-D CUDA_cufft_LIBRARY=/usr/local/cuda/targets/aarch64-linux/lib/stubs/libcufft.so \
-D CUDA_nppc_LIBRARY=/usr/local/cuda/targets/aarch64-linux/lib/stubs/libnppc.so \
-D CUDA_nppial_LIBRARY=/usr/local/cuda/targets/aarch64-linux/lib/stubs/libnppial.so \
-D CUDA_nppicc_LIBRARY=/usr/local/cuda/targets/aarch64-linux/lib/stubs/libnppicc.so \
-D CUDA_nppicom_LIBRARY=/usr/local/cuda/targets/aarch64-linux/lib/stubs/libnppicom.so \
-D CUDA_nppidei_LIBRARY=/usr/local/cuda/targets/aarch64-linux/lib/stubs/libnppidei.so \
-D CUDA_nppif_LIBRARY=/usr/local/cuda/targets/aarch64-linux/lib/stubs/libnppif.so \
-D CUDA_nppig_LIBRARY=/usr/local/cuda/targets/aarch64-linux/lib/stubs/libnppig.so \
-D CUDA_nppim_LIBRARY=/usr/local/cuda/targets/aarch64-linux/lib/stubs/libnppim.so \
-D CUDA_nppist_LIBRARY=/usr/local/cuda/targets/aarch64-linux/lib/stubs/libnppist.so \
-D CUDA_nppisu_LIBRARY=/usr/local/cuda/targets/aarch64-linux/lib/stubs/libnppisu.so \
-D CUDA_nppitc_LIBRARY=/usr/local/cuda/targets/aarch64-linux/lib/stubs/libnppitc.so \
-D CUDA_npps_LIBRARY=/usr/local/cuda/targets/aarch64-linux/lib/stubs/libnpps.so \
-D CUDA_CUDA_LIBRARY=/usr/local/cuda-10.2/targets/aarch64-linux/lib/stubs/libcuda.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=$(python3 -c "import numpy; print(numpy.get_include())") \
-D PYTHON_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON_LIBRARY=$(python3 -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))") \
-D PYTHON3_EXECUTABLE=$(which python3) \
-D OPENCV_SKIP_PYTHON_LOADER=ON \
..
make -j$(nproc)
make install
mv ../../install/lib/python3.8/site-packages/cv2.cpython-38-x86_64-linux-gnu.so ../../install/lib/python3.8/site-packages/cv2.cpython-38-aarch64-linux-gnu.so