반응형

라즈비안 : OpenCV를 쉘 스크립트로 설치

배경

 라즈비안에 OpenCV 설치 하는 방법에 대해서는 사실 많은 블로그에서 정리가 되어 있다. 하지만, 그 과정을 따라서 하는 것도 나쁘지는 않지만, 기본적으로 쉘에서 처리가 가능한 것들은 그냥 쉘 스크립트로 만들면 되지 않을까 하는 생각에서 작성하게 되었다.


 이번글은 작성중인 OpenCV 쉘 스크립트를 저장한 정도의 글이 될 것이다. 이후 추후에 쉘 스크립트 문법에 대해서 정리를 해 놓아야 될 것 같다.



OpenCV 설치 확인 및 제거 방법

 라즈비안이 우분투 커널을 사용하므로 마찬가지로 우분투에서 사용했었을 때 실행이 잘 되었다. 다만, 미리 설치가 되어 있을 경우 제거를 해줘야 한다.


pkg-config --modversion opencv
# 제거할 경우
cd {기본opecv 소스폴더의 build 폴더}
make uninstall


제거를 위와 같이 하지 않으면, apt-get purge로 삭제를 해도 pkg-config으로 검사할때 검출이 된다. 아마도 해당 정보를 지우지 못하는 버그가 있는 것 같다.



OpenCV 설치 쉘 스크립트(contirb포함)

 버전 수준으로 따지자면, 0.1 스크립트라고 봐야 할 것이다. 즉, 아직 부족하다고 생각 든다.

 OpenCV3.2.1외에 다른 버전이 필요한 사람이라면, OPENCV_VERSION의 숫자값을 변경하면 된다. 이미 다른 OpenCV가 설치가 되어 있다면, 설치가 진행되지 않는다. 또한, 일반적인 개발 환경으로 셋팅을 한 것이 기 때문에 실제로 배포를 하려고 할 경우는 필요한것만 빌드하도록 수정해야 한다.


#!/bin/bash

# Custom values
OPENCV_VERSION="3.3.1"
OPENCV_REPO=https://github.com/opencv/opencv/archive/"$OPENCV_VERSION".zip
OPENCVCONTRIB_REPO=https://github.com/opencv/opencv_contrib/archive/"$OPENCV_VERSION".zip

# check exit opencv modules
pkg-config --modversion opencv
if [ "$?" -eq 0 ]; then
  echo "You already install opencv"
  exit 0
fi

# Update Debian
sudo apt-get update && sudo apt-get upgrade -y
if [ "$?" -eq 1 ]; then
  echo "Faile Update or Upgrade"
fi

# Install need modules
DEPPKGS=(build-essential cmake)
DEPPKGS+=(pkg-config)
DEPPKGS+=(libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev)
DEPPKGS+=(libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev)
DEPPKGS+=(libv4l-dev v4l-utils)
DEPPKGS+=(libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev)
# Qt4
DEPPKGS+=(libqt4-dev)
DEPPKGS+=(mesa-utils libgl1-mesa-dri libqt4-opengl-dev)
# Optimature lib
DEPPKGS+=(libatlas-base-dev gfortran libeigen3-dev)
DEPPKGS+=(python2.7-dev python3-dev python-numpy python3-numpy)

echo "=== Install depend packages ==="
for DEPPKGNAME in ${DEPPKGS[@]}; do
  dpkg -l | grep "$DEPPKGNAME"
  if [ "$?" -eq 1 ]; then
    sudo apt-get install -y "$DEPPKGNAME"
  fi
done
echo "=== End install depend packages ==="

PWD=`pwd`
WORKSPACE="$PWD"/opencv
if [ ! -d "$WORKSPACE" ]; then
  mkdir "$WORKSPACE"
  cd "$WORKSPACE"
fi

OPENCVZIP="$WORKSPACE"/opencv.zip
if [ ! -f "$OPENCVZIP" ]; then
  wget -O "$OPENCVZIP" "$OPENCV_REPO" \
  && unzip -o "$OPENCVZIP" 
  if [ "$?" -eq 1 ]; then
    echo "fail download '$OPENCVZIP'"
    exit 1
  fi
else
  upzip -o "$OPENCVZIP"
  if [ "$?" -eq 1 ]; then
    echo "fail unzip '$OPENCVZIP'"
    exit 1
  fi
fi

CONTRIBZIP="$WORKSPACE"/opencv_contrib.zip
if [ ! -f "$CONTRIBZIP" ]; then
  wget -O "$CONTRIBZIP" "$OPENCVCONTRIB_REPO" \
  && unzip -o "$CONTRIBZIP"
  if [ "$?" -eq 1 ]; then
    echo "fail download opencv_contrib.zip"
    exit 1
  fi
else
  unzip -o "$CONTRIBZIP"
  if [ "$?" -eq 1 ]; then
    echo "fail unzip '$CONTRIBZIP'"
    exit 1
  fi
fi

# OPENCVDIR="$WORKSPACE"/opencv-3.4.0
OPENCVDIR="$WORKSPACE"/opencv-"$OPENCV_VERSION"
if [ -d "$OPENCVDIR" ]; then
  cd "$OPENCVDIR"
else
  echo "does not have dir '$OPENCVDIR'"
  exit 1
fi

BUILDDIR="$OPENCVDIR"/build
if [ ! -d "$BUILDDIR" ]; then
  mkdir "$BUILDDIR" && cd "$BUILDDIR"
else
  cd "$BUILDDIR"
fi


cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=OFF \
-D WITH_IPP=OFF \
-D WITH_1394=OFF \
-D BUILD_WITH_DEBUG_INFO=OFF \
-D BUILD_DOCS=OFF \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D ENABLE_NEON=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-"$OPENCV_VERSION"/modules \
-D WITH_V4L=ON  \
-D WITH_FFMPEG=ON \
-D WITH_XINE=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
../

if [ "$?" -eq 1 ]; then
  echo "fail OpenCV cmake build '$PWD'"
  exit 1
fi

time make
if [ "$?" -eq 1 ]; then
  echo "fail OpenCV make"
  exit 1
fi

# only in raspberry
sudo make install
if [ "$?" -eq 1 ]; then
  echo "fail OpenCV install"
  exit 1
fi

echo "complete OpenCV install"
exit 0




후기

 라즈베리 파이3의 경우 듀얼코어(make 옵션의 -j2)까지는 에러가 발생하지 않지만, 마지막부분에서 문제가 있는지, 싱글코어로 빌드한것과 시간차이가 거의 없었다. 코어를 3개를 올릴 경우 빌드 막바지에서 메모리가 부족해서 빌드가 중단되는 문제가 있다.


 일부 후기에서 정정한다. swap 가상 메모리의 크기를 늘리면, 모든 코어를 빌드에 투입하여 시간을 단축 시킬 수 있다. 방법은 추후에 기회가 되면 정리 하도록 하겠다.


참조 자료

블로그 OpenCV3.4 설치




반응형

+ Recent posts