Compile and install OpenCV 4.5.5 with Gstreamer and FFmpeg support for C3V codec in the C3V Ubuntu environment
Before do this action, you need finish Gstreamer and FFmpeg source code compile flow as below link.
1. Install the building package
sudo apt update
sudo apt install build-essential cmake git pkg-config libgtk-3-dev libcairo2-dev
sudo apt install libjpeg-dev libpng-dev libtiff-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt install libxvidcore-dev libx264-dev
sudo apt install libeigen3-dev
sudo apt install python3-dev python3-numpy python3-testresources2. Get OpenCV 4.5.5 source
cd ~/code
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout -b 4.5.5 4.5.5
cd ~/code
git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout -b 4.5.5 4.5.53. Edit a compile cmake script file “cv_cmake_dnn.sh” and save it in ~/code/opencv
ROOT=/home/sunplus/code
CV_SRC=$ROOT/opencv
CV_BUILD=$ROOT/opencv/build
# ffmpeg-4.4.4
FFMEG_DIR=$ROOT/install-ffmpeg
FFMEG_PKG_CFG=$FFMEG_DIR/lib/pkgconfig
FFMEG_LIB=$FFMEG_DIR/lib
FFMEG_INC=$FFMEG_DIR/include
# GLIB2 directories
GLIB2_DIR=/usr
GLIB2_PKG_CFG=$GLIB2_DIR/lib/aarch64-linux-gnu/pkgconfig
GLIB2_LIB=$GLIB2_DIR/lib/aarch64-linux-gnu
GLIB2_INC=$GLIB2_DIR/include/glib-2.0:$GLIB2_DIR/lib/aarch64-linux-gnu/glib-2.0/include
# gstreamer directories
GST_DIR=$ROOT/install-gstreamer
GST_PKG_CFG=$GST_DIR/lib/aarch64-linux-gnu/pkgconfig
GST_LIB=$GST_DIR/lib/aarch64-linux-gnu/gstreamer-1.0
GST_INC=$GST_DIR/include/gstreamer-1.0
# extern
export PKG_CONFIG_PATH=$GLIB2_PKG_CFG:$GST_PKG_CFG:$FFMEG_PKG_CFG:/usr/lib/aarch64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=$FFMEG_LIB:$GLIB2_LIB:$GST_LIB:$LD_LIBRARY_PATH
echo "PKG_CONFIG_PATH=$PKG_CONFIG_PATH"
echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
# cmake options
CMAKE_INSTALL_PREFIX=$ROOT/install-opencv
CMAKE_PREFIX_PATH=$FFMEG_DIR:$GLIB2_DIR:$GST_DIR
CMAKE_TOOLCHAIN_FILE=$CV_SRC/platforms/linux/aarch64-gnu.toolchain.cmake
echo "CMAKE_INSTALL_PREFIX=$CMAKE_INSTALL_PREFIX"
echo "CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH"
echo "CMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_FILE"
PY_INSTALL=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
PY_EXE=$(which python3)
PY_INC=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())")
PY_LIB=$(python3 -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))")/libpython3.so
NP_INC=$(python3 -c "import numpy; print(numpy.get_include())")
NP_VER=$(python3 -c "import numpy; print(numpy.__version__)")
echo "PY_INSTALL=$PY_INSTALL"
echo "PY_EXE=$PY_EXE"
echo "PY_INC=$PY_INC"
echo "PY_LIB=$PY_LIB"
echo "NP_INC=$NP_INC"
echo "NP_VER=$NP_VER"
pkg-config --modversion gtk+-3.0 #3.24.20
pkg-config --modversion gstreamer-1.0 #1.22.9
mkdir -p $CV_BUILD
cd $CV_BUILD
cmake -D CMAKE_BUILD_TYPE=Release \
-D OPENCV_EXTRA_MODULES_PATH=$ROOT/opencv_contrib/modules \
-D WITH_GSTREAMER=ON \
-D WITH_GTK=ON \
-D WITH_V4L=ON \
-D WITH_FFMPEG=ON \
-D BUILD_opencv_dnn=ON \
-D BUILD_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D WITH_OPENGL=ON \
-D WITH_TBB=ON \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH \
-D PKG_CONFIG_PATH=$PKG_CONFIG_PATH \
-D GSTREAMER_INCLUDE_DIRS=$GST_INC \
-D GSTREAMER_LIBRARIES=$GST_LIB \
-D FFMPEG_INCLUDE_DIRS=$FFMEG_INC \
-D FFMPEG_LIBRARIES=$FFMEG_LIB \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D OPENCV_PYTHON3_INSTALL_PATH=$PY_INSTALL \
-D PYTHON3_EXECUTABLE=$PY_EXE \
-D PYTHON3_INCLUDE_DIR=$PY_INC \
-D PYTHON3_LIBRARY=$PY_LIB \
-D PYTHON3_NUMPY_INCLUDE_DIRS=$NP_INC \
-D PYTHON3_NUMPY_VERSION=$NP_VER \
$CV_SRC4. Use compile cmake script file “cv_cmake_dnn.sh” to generate make confiuration
cd ~/code/opencv
bash cv_cmake_dnn.sh5. Compile and install opencv
cd build
make -j4
sudo make install6. Test
python3 -c "import cv2; print(cv2.__version__)"7. Add link path
Because opencv library is installed in /usr/local/lib, it needs to set this path to system dynamic link path.
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/opencv.conf
sudo ldconfigVerify link path.
ldconfig -p | grep opencv