티스토리 뷰

728x90

1. 패키지 업그레이드.

1. Upgrade package.

1.1 기존에 설치된 패키지에 새로운 패키지 리스트를 업데이트.

1.1 Update new package lists existing installed package.

pi@raspberrypi:~ $ sudo apt-get update

 

1.2 새로운 버전의 패키지가 있으면 업그레이드 한다.

1.2 Upgrade if there is new version packages.

pi@raspberrypi:~ $ sudo apt-get upgrade

 

1.3 업그레이드 후 리부팅 

1.3 reboot after upgrade.

pi@raspberrypi:~ $ reboot

 

※ 라즈비안 2019-09-26 버전에서 upgrade 후 File Manager가 안 열리는 경우가 발생하면 아래와 같이 실행하면 된다.

Run code if you can't open File Manager after upgrade.

$ sudo apt-get install --reinstall pcmanfm

 

2. OpenCV 컴파일 전 필요 패키지 설치

2. Install packages before compile OpenCV 

 

2.1 build-essentail 및 cmake 설치

2.1 install build-essentail, cmake

$ sudo apt-get install build-essential cmake

 

2.2 특정 포멧의 이미지 파일을 read, write 하기 위한 필요 패키지 설치

2.2 install packages for read, write image files.

$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

 

2.3 특정 코덱의 비디오 파일을 Read, Write 하기 위한 필요 패키지 설치

2.3 install packages for read, write video files.

$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev

 

2.4 Video4Linux 리눅스에서 실시간 비디오 캡처 및 비디오 디바이스 제어를 위한 API 패키지 설치

2.4 Install API packages for real-time video capture, video device control on video4Linux.

$ sudo apt-get install libv4l-dev v4l-utils

 

2.5 GSreamer는 리눅스 기반에서 영상 스트리밍을 쉽게 처리할 수 있도록 만든 오픈 소스 프레임워크

2.5 GSreamer is open sourse framework made easy to handle video streaming on linux.

$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

 

2.6 OpenCV에서 윈도우 생성 등의 GUI를 위해 gtk 또는 qt를 선택해서 사용하능하며, 여기서는 gtk2를 지정한다.

$ sudo apt-get install libgtk2.0-dev

 

2.7 OpenGL 지원하기 위한 라이브러리 설치

$ sudo apt-get install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev

 

2.8 OpenCV 최적화를 위해 사용되는 라이브러리 설치

$ sudo apt-get install libatlas-base-dev gfortran libeigen3-dev

 

2.9 python 패키지는 OpenCV-Python 바인딩을 위한 패키지이며, Numpy는 매트릭스 연산 등을 빠르게 처리할 수 있다.

$ sudo apt-get install python2.7-dev python3-dev python-numpy python3-numpy

 

3. OpenCV 컴파일 및 설치

3.1 소스 코드 저장 할 임시 디렉토리 생성 및 이동

pi@raspberrypi:~ $ mkdir opencv
pi@raspberrypi:~ $ cd opencv
pi@raspberrypi:~ /opencv $

 

3.2 OpenCV 4.1.2 소스 코드를 다운 받아 압축을 풀어준다.

$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.2.zip
$ unzip opencv.zip

 

3.3 opencv_contrib 다운 및 압축 풀어준다. (SIFT, SURF 등을 사용하기 위해 필요)

$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.1.2.zip
$ unzip opencv_contrib.zip

 

3.4 두 개의 디렉토리 생성 확인

pi@raspberrypi:~ /opencv $ ls -d */
opencv-4.1.2/   opencv_contrib-4.1.2/

 

3.5 opencv-4.1.2 디렉토리로 이동하여 build 디렉토리 생성 및 build 디렉토리 이동 (컴파일은 build 디렉토리에서 이뤄짐!)

pi@raspberrypi:~ /opencv $ cd opencv-4.1.2
pi@raspberrypi:~ /opencv/opencv-4.1.2 $ mkdir build
pi@raspberrypi:~ /opencv/opencv-4.1.2 $ cd build
pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ 

 

3.6 cmake를 사용하여 OpenCV 컴파일 설정을 해준다.

(이 떄는 라즈베리에 인터넷이 연결돼있어야합니다 ! ! ! )

pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ 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 ENABLE_VFPV3=ON \
 > -D WITH_QT=OFF \
 > -D WITH_GTK=ON \
 > -D WITH_OPENGL=ON \
 > -D OPENCV_ENABLE_NONFREE=ON \
 > -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.2/modules \
 > -D WITH_V4L=ON \
 > -D WITH_FFMPEG=ON \
 > -D WITH_XINE=ON \
 > -D ENABLE_PRECOMPILED_HEADERS=OFF \
 > -D BUILD_NEW_PYTHON_SUPPORT=ON \
 > -D OPENCV_GENERATE_PKGCONFIG=ON ../

 

아래와 같은 메시지가 보이면 정상적으로 설치가 된 것 !

-- -----------------------------------------------------------------
 -- 
-- Configuring done
 -- Generating done
 -- Build files have been written to: /home/pi/opencv/opencv-4.1.2/build

 

3.7 컴파일 시 메모리 부족으로 에러가 나지 않도록 swap 공간을 늘려줘야한다.

/etc/dphys-swapfile 을 연다.

pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ sudo nano /etc/dphys-swapfile

 

CONF_SWAPSIZE 변수값을 2048으로 수정한다.

# set size to absolute value, leaving empty (default) then uses computed value
 #   you most likely don't want this, unless you have an special disk situation
#CONF_SWAPSIZE=100
CONF_SWAPSIZE=2048

수정 뒤 ctrl+x -> y ->엔터

빠져나왔으면, swap을 재시작하여 변경된 설정 값을 반영해준다.

pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ sudo /etc/init.d/dphys-swapfile restart
[ ok ] Restarting dphys-swapfile (via systemctl): dphys-swapfile.service.

 

변경된 설정값 확인 (swap : 2097148)

pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ free
                   total          used          free      shared    buff/cache    available
 Mem:       3947004      192488     2154636       17768     1599880     3587344
 Swap:       2097148             0     2097148

 

3.8 make 명령을 사용하여 컴파일 시작 (-j4 옵션을 주고 진행)

이거 오래걸리니까 엔터치고 한숨 자러가세요

pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ make -j4

 

-python 라이브러리 빌드 부분에서 오랫동안 멈춰있으면 Ctrl+c를 눌러 중지하고 make 명령 다시 입력

pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ make

-컴파일 완료

[100%] Built target opencv_python2
[100%] Built target opencv_python3
pi@raspberrypi: ~/opencv/opencv-4.1.2/build $

 

3.9 컴파일 결과물을 설치

pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ sudo make install

 

3.10 opencv 라이브러리를 찾을 수 있도록 다음 명령을 실행한다.

pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ sudo ldconfig

 

3.11 /etc/dphys-swapfile 파일을 열어서 CONF_SWAPSIZE 변수값을 다시 100으로 수정하고 restart

pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ sudo nano /etc/dphys-swapfile

 

수정하고 빠져나와서 RESTART

pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ sudo /etc/init.d/dphys-swapfile restart
[ ok ] Restarting dphys-swapfile (via systemctl): dphys-swapfile.service.

 

다시 돌아온 것을 볼 수 있다.

 

pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ free
                   total          used          free      shared    buff/cache    available
 Mem:       3947004      192488     2154636       17768     1599880     3587344
 Swap:        102396              0      102396

 

 

4. OpenCV 설치 결과 확인

4.1 C/C++

4.1.1 OpenCV 4.x 에서는 옵션으로 opencv대신 opencv4를 사용하면 pkg-config를 사용하여 컴파일 할 수 있다.

pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ g++ -o videocapture_basic /usr/local/share/opencv4/samples/cpp/videocapture_basic.cpp $(pkg-config opencv4 --libs --cflags)

 

4.1.2 테스트를 위해 라즈베리파이 카메라를 연결한다

preferences > Raspberry Pi Configuration 창을 연다.

Interfaces 탭에서 Camera 항목을 Enable 체크하고 OK 클릭 하여 리부팅한다.

 

/dev/video0 디바이스 파일이 생성되었는지 확인한다.

pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ ls /dev/video*
/dev/video0  /dev/video10  /dev/video11  /dev/video12

 

/dev/video-가 없으면 디바이스 장치를 만들어줘야한다.

만드는 법은 webnautes 님 티스토리 참고 ! ! ! ! ( http://webnautes.tistory.com/1192 )

파이 카메라 경우 소스 코드를 수정해야 한다.

open 함수의 아규먼트를 -1로 해야 정상 작동하며, 0으로 하면 카메라를 열지 못하고 무한 대기 상태에 빠지게 된다.

//cap.open(deviceID + apiID);
cap.open(-1);

 

4.1.3 CMake를 사용하는 방법으로 예제 코드를 가져와서 컴파일 해본다.

pi@raspberrypi:~ $ mkdir example
pi@raspberrypi:~ $ cd example
pi@raspberrypi:~ /example $  cp /usr/local/share/opencv4/samples/cpp/videocapture_basic.cpp ./

 

CMakeLists.txt 파일을 생성하여 아래 내용을 복사한다.

pi@raspberrypi:~ /example $ nano CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project( videocapture_basic)
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( videocapture_basic videocapture_basic.cpp )
target_link_libraries( videocapture_basic ${OpenCV_LIBS} )

 

videocapture_basic.cpp 파일을 열어 cap.open(-1)로 수정한다.

pi@raspberrypi:~ /example $ nano videocapture_basic.cpp

 

cap.open(deviceID + apiID) -> cap.open(-1)로 수정한다.

build 디렉토리를 생성하여 컴파일 진행

pi@raspberrypi:~ /example $ mkdir build
pi@raspberrypi:~ /example $ cd build
pi@raspberrypi:~ /example/build $ cmake ..
pi@raspberrypi:~ /example/build $ make

결과화면

결과화면이다.

 

4.1.4 videocapture_basic 파일을 실행 시키면 영상이 보인다.

pi@raspberrypi:~ /example/build $ ./videocapture_basic

실행시 WARN 이 발생하지만 영상 보이는데는 문제 없다.

4.2 Python

4.2.1 python 2 와 python 3 에서 OpenCV 버전이 출력되는지 확인한다.

pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ python
Python 2.7.16 (default, Oct 10 2019, 22:02:15) 
 [GCC 8.3.0] on linux2
 Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
 >>> cv2.__version__
'4.1.2'
pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ python3
Python 3.7.3 (default, Apr  3 2019, 05:39:12) 
 [GCC 8.2.0] on linux
 Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
 >>> cv2.__version__
'4.1.2'

 

4.2.2 Python도 c/c++ 처럼 파이 카메라의 경우 0대신 -1을 사용한다.

//cap = cv.VideoCapture(source)
cap = cv.VideoCapture(-1)

아래 코드를 실행 시켜준 후, cap 부분을 위와같이 수정해준다.

 

pi@raspberrypi:/usr/local/share/opencv4/samples/python $ sudo nano video.py

 

4.2.3 video.py 예제 코드를 실행하면 영상을 볼 수 있다.

pi@raspberrypi:~ $ python /usr/local/share/opencv4/samples/python/video.py
pi@raspberrypi:~ $ python3 /usr/local/share/opencv4/samples/python/video.py

 

 

저는 이 곳을 참고해서 다운하였습니다.

I used this place as a reference and downloaded it.

https://make.e4ds.com/make/learn_guide_view.asp?idx=116

 

e4ds MAKE

 

make.e4ds.com

 

반응형