티스토리 뷰
라즈베리파이에 OPENCV - 4.1.2 설치하기 How to install opencv-4.1.2 on the raspberry pi 4
jainn 2020. 5. 22. 20:391. 패키지 업그레이드.
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
'Capstone Eng_2020' 카테고리의 다른 글
가정 내 영유아 사고 방지 시스템 - 아가 뭐해 ? (0) | 2020.06.23 |
---|---|
라즈베리파이4에 YOLOv3 설치하기. (1) | 2020.06.05 |
SSD 포맷하기 (0) | 2020.06.05 |
라즈베리파이와 노트북 연결하기(Connecting Raspberry Pi to a laptop) (0) | 2020.05.22 |
라즈베리파이 4 설치하기 (Install Raspberry Pi 4) (0) | 2020.05.20 |
- Total
- Today
- Yesterday
- union-find
- ubuntu
- 타일링 자바
- SSAFY
- 백준파이썬
- 우분투
- 프로그래머스 더 맵게
- 프로그래머스 파이썬
- swea 1240 자바
- 더 맵게
- 프로그래머스
- 1699 자바
- 파이썬
- swea 4070 타일링
- yoloV3
- swea 타일링
- 메뉴리뉴얼 풀이
- poker swea
- 백준
- 백준 풀이
- swea 타일링 자바
- 백준 17144
- SWEA
- swea 1240
- 1240 자바
- 파이썬 풀이
- 삼성청년SW아카데미
- 백준 dp 문제
- 3996 자바
- 프로그래머스 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |