라즈베리파이 프로젝트

라즈베리파이에 openCV설치하기

난쏘공돌이 2021. 9. 3. 01:16

라즈베리파이로 비둘기 퇴치기구를 만들어볼까 해서 미루고 미뤘던openCV설치를 해보려합니다

본 포스팅에서는 2가지 방법을 제시해드리나 필자는 첫번째 방법은 실패하여
두번째 방법으로 진행함을 미리 말씀드립니다.

소개는 해드리니 첫번째 방법 시도하신 후에 안되면 두번째 시도해주세요

먼저 설치하기 전
$sudo apt-get -y update && sudo apt-get -y upgrade
진행해주세요
업그레이드 명령의 경우 30분정도의 시간이 소요될수 있습니다!

upgrade가끝난뒤에 reboot해주기

실행후에는 재부팅 한번 해주세요!

-첫번째 방법-

모 블로그에서 쉽게설치하는 법으로 보았는데요
https://pypi.org/project/opencv-contrib-python/

 

opencv-contrib-python

Wrapper package for OpenCV python bindings.

pypi.org

해당 사이트에 보시면
pip 버전 19.3 버전부터 지원을 한다고 나와있습니다
이 방법은 소스를 받아서 하드웨어에서 컴파일하고 빌드를 하는 방법(두번째 방법) 이 아닌 이미 빌드된 openCV패키지를 설치하는 것인데요

사이트에선 네가지 옵션을 제시합니다

-- 일반적인 데스크톱환경 -- (Windows, macOS, almost any GNU/Linux distribution)

  • pip install opencv-python (메인 패키지만 설치)
  • pip install opencv-contrib-python (모든 패키지 전부 설치함)


-- 서버 환경 -- (such as Docker, cloud environments etc.), no GUI library dependencies

  • pip install opencv-python-headless
  • pip install opencv-contrib-python-headless

우리는 일반적인 데스크톱 환경일경우 이므로 상위 두개중 하나를 선택을 해줄건데요
먼저 본인의 pip 버전을 알아야 합니다
pip -V 를 통해 본인의 버전을 확인해주시구요

19.3 버전 밑 이라면 pip install --upgrade pip 명령을 통해 업그레이드 해주세요

이후에

  • pip install opencv-python (메인 패키지만 설치)
  • pip install opencv-contrib-python (모든 패키지 전부 설치함)

택일 하셔서 실행시켜 주시면 되는데 저는 보기좋게 실패했습니다..

사진 보시면 잘 되었다고 나오는데.. 막상 import cv2하면 안됩니다... 버전도 안나와요.. ㅠㅠ
pkg-config --modversion opencv
해당 명령 통해서 설치 확인해보시면 됩니다

혹시 몰라서 서버환경용도 설치해보았는데

새빨간 문자가 안된다는걸 격렬하게 표현해줬습니다ㅜㅠ


- 두번째 방법 -

!! 여기부턴 vnc가 아닌 터미널 환경에서 필자는 진행하였습니다.
터미널 환경이던 vnc던 상관은 없습니다!


sudo apt-get update 와 sudo apt-get upgrade는 진행하고 오셔야합니다!

바로 패키지를 좀 설치해줄껀데요. 좀 많습니다

sudo apt-get install build-essential cmake -y 
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev -y 
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev -y 
sudo apt-get install libv4l-dev v4l-utils -y 
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev -y 
sudo apt-get install libgtk2.0-dev -y 
sudo apt-get install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev -y 
sudo apt-get install libatlas-base-dev gfortran libeigen3-dev -y 
sudo apt-get install python2.7-dev python3-dev python-numpy python3-numpy -y

하나하나 설치해주시면 되겠슴다!

설치 다하셨으면 github에서 코드를 받아올겁니다

먼저 컴파일을 위해 파일들을 받아놔야하기 때문에 디렉토리를 하나 만들어주세요

mkdir opencv-file 
cd opencv-file 
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.4.0.zip 
unzip opencv.zip 
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.4.0.zip 
unzip opencv_contrib.zip


이후에는 명령어를 통해 아카이브에서 zip파일을 받아와주세요
이후 각 파일을 unzip으로 풀어줍니다.

!주의 - 전 4.4.0 을 설치하려고 했기때문에 저렇게 받은겁니다.
다른버전을 원하시면 다른버전을 넣어주시면됩니다

여기까지 파일을 받으시고 압축을 풀어주셨으면

다음으로
cd opencv-4.4.0
mkdir build
cd 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.4.0/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 ../

터미널 환경에서 그냥 바로 복붙을 하셔도 되나 오류의 가능성이 있어 한줄씩 복붙하시는것을 추천드립니다.
사진처럼 >에 넣으시려면 shift + enter 키의 조합으로 넣으시면 됩니다


다음은 메모리 확장작업을 해줄건데요.

설치중 메모리사용량이 크기때문에 기본 라즈베리의 램 크기로 감당이 안될수도 있습니다
따라서 하드의 공간을 메모리로 사용할수 있게하는 설정을 해줄겁니다


일단 다른 설치글들에서 다 하길래 나도했다 오류나면 안되니깐.. (실제로 메모리 부족현상 있습니다)

 

sudo nano /etc/dphys-swapfile

접근하시면 아래와 같은 문서가 나오는데요

노란색 박스부분을 100에서 2048로 변경해주시면 되겠습니다
그리고 설정을 적용시켜주기 위해 서비스 restart를 해주시면 됩니다

$sudo /etc/init.d/dphys-swapfile restart

이젠 컴파일을 실행할텐데요

※ $ make -j4를 쳐주시면 됩니다
여기서 -j4옵션은
`-j [jobs]'`--jobs=[jobs]'동시에 실행하는 작업들(명령들)의 개수를 지정한다. 매개변수없이 사용하면 make는 가능한 한 많은 작업들을 실행한다. 하나 이상의 `-j'옵션이 있으면 마지막 것이 사용된다.
출처 : http://korea.gnu.org/manual/release/make/make-sjp/make-ko_9.html

다른분들은 보통 -j4옵션 주시고 하시던데 저는 호기심에 매개변수 안넣고 돌렸습니다

++음 일단 돌리다보니 메모리사용이 급격하게 늘어난 탓인지 vnc연결은 끊겼습니다 다만, ssh연결은 살아있네요
vnc환경에서 설치하실때는 그냥 -j4옵션 주시는게 나을듯 합니다
++ 죽었습니다 그냥 -j4옵션 주고하는게 베스트인듯 합니다 ㅜㅜㅜㅜㅜ

++시간 많이걸립니다 느긋하게 기다려주세요

여기까지오는데 한 4~5시간정도 걸린것 같네요
중간에 100%에서 멈추는 경우도 있는데 이 경우 기다리셔도 되고, ctrl+c누르셔서 다시 make하셔도 됩니다

이제 컴파일 된것을 설치해줘야 합니다

이후 ldconfig로 공유 라이브러리 캐시를 다시 설정해줍니다.


이후에 바꿔뒀던 swapfile을 2048에서 다시 100으로 바꿔준뒤 재시작해줍니다


자 이제 끝이났습니다
이제 테스트를 해볼껀데요
아무사진을 다운받으셔서 img = cv2.imread("파일경로를 작성해주세요")
아래코드를 경로만 본인의 상황에 맞게 바꿔주시고 돌려주세요

import cv2 
img = cv2.imread("/home/pi/pekora.jpg") 
cv2.imshow("test",img) 
img_can = cv2.Canny(img,150,220) 
cv2.imshow("Canny",img_can) 
cv2.waitKey(0) 
cv2.destroyAllWindows()

이미지의 경계를 찾는 코드까지 테스트를 완료하면서 이만 글을 마치도록 하겠습니다!