|
- 파이썬
$ sudo apt-get update $ sudo apt-get install python3 => 라즈비안 버전에 따라 설치된 파이썬 버전에 차이가 있다. 현재 Python 3.5.3 포함되어 있다.(라즈비안 2018-04-18-raspbian-stretch.img 기준)
- OpenCV
OpenCV 2.4 버전 제거
$ pkg-config --modversion opencv
아래와 같은결과가 나오면 2.4버전 제거가 필요없다.
Package opencv was not found in the pkg-config search path. Perhaps you should add the directory containing `opencv.pc' to the PKG_CONFIG_PATH environment variable No package 'opencv' found
아래와 같은결과가 나오면 2.4버전 제거.
$ pkg-config --modversion opencv 2.4.9.1 삭제진행.. $ sudo apt-get purge libopencv* python-opencv $ sudo apt-get autoremove
- OpenCV 관련 라이브러리 설치하기
개발 툴 설치.
$ sudo apt-get install build-essential cmake pkg-config
이미지 파일 관련 라이브러리 설치.
$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
비디오 파일 관련 라이브러리 설치.
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev
highgui라는 서브 모듈이 있는데 이미지를 스크린에 출력하거나 간단한 GUI를 만드는데 사용.
$ sudo apt-get install libgtk2.0-dev libgtk-3-dev
행렬 연산 및 최적화시키는데 필요.
$ sudo apt-get install libatlas-base-dev gfortran libeigen3-dev
파이썬 헤더를 설치.
$ sudo apt-get install python2.7-dev python3-dev python-numpy python3-numpy
OpenGL 지원.
$ sudo apt-get install mesa-utils libgl1-mesa-dri libqt4-opengl-dev
- OpenCV 설치하기.
소스 코드를 저장할 임시 디렉토리를 생성하여 이동 후.. 진행합니다
다운 : opencv.zip, opencv_contrib.zip
$ cd ins => 개인적으로 만든 폴더 $ mkdir opencv $ cd opencv $ wget -O. opencv.zip https://github.com/opencv/opencv/archive/3.4.1.zip $ unzip opencv.zip $ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.1.zip $ unzip opencv_contrib.zip
opencv-3.4.1 디렉토리로 이동하여 build 디렉토리를 생성하고 build 디렉토리로 이동합니다.
컴파일은 build 디렉토리에서 이루어집니다.
pi@raspberrypi:~/opencv $ cd opencv-3.4.1 pi@raspberrypi:~/opencv/opencv-3.4.1 $ mkdir build pi@raspberrypi:~/opencv/opencv-3.4.1 $ cd build pi@raspberrypi:~/opencv/opencv-3.4.1/build $ |
cmake를 사용하여 OpenCV 컴파일 설정을 해줍니다. 복사해서 터미널에 붙여넣기 해주면 됩니다.
cmake -D CMAKE_BUILD_TYPE=RELEASE \ |
다음 처럼 cmake 실행 중에 추가적인 다운로드도 있으므로 라즈베리파이에 인터넷이 연결된 상태에서 진행하세요..
-- xfeatures2d/boostdesc: Download: boostdesc_bgm.i -- xfeatures2d/boostdesc: Download: boostdesc_bgm_bi.i -- xfeatures2d/boostdesc: Download: boostdesc_bgm_hd.i -- xfeatures2d/boostdesc: Download: boostdesc_binboost_064.i -- xfeatures2d/boostdesc: Download: boostdesc_binboost_128.i -- xfeatures2d/boostdesc: Download: boostdesc_binboost_256.i -- xfeatures2d/boostdesc: Download: boostdesc_lbgm.i -- xfeatures2d/vgg: Download: vgg_generated_48.i -- xfeatures2d/vgg: Download: vgg_generated_64.i -- xfeatures2d/vgg: Download: vgg_generated_80.i -- xfeatures2d/vgg: Download: vgg_generated_120.i -- data: Download: face_landmark_model.dat |
다음과 같은 메시지가 보이면 정상적으로 된 것입니다.
-- Configuring done |
설정한 결과입니다.
-- General configuration for OpenCV 3.4.1 ===================================== |
다음처럼 Python 2 또는 Python 3 라이브러리 항목이 보이지 않는 경우에는
-- Python 2: |
다음 붉은색 줄처럼 해당 경로들을 직접 적어줘야 합니다.
$ 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-3.4.0/modules \ -D WITH_V4L=ON \ -D WITH_FFMPEG=ON \ -D WITH_XINE=ON \ -D BUILD_NEW_PYTHON_SUPPORT=ON \ -D PYTHON2_INCLUDE_DIR=/usr/include/python2.7 \ -D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/lib/python2.7/dist-packages/numpy/core/include/ \ -D PYTHON2_PACKAGES_PATH=/usr/lib/python2.7/dist-packages \ -D PYTHON2_LIBRARY= /usr/lib/arm-linux-gnueabihf/libpython2.7.so \ -D PYTHON3_INCLUDE_DIR=/usr/include/python3.5m \ -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include/ \ -D PYTHON3_PACKAGES_PATH=/usr/lib/python3.5/dist-packages \ -D PYTHON3_LIBRARY=/usr/lib/arm-linux-gnueabihf/libpython3.5m.so \ ../ |
진행하기 전에 스왑(swap) 공간을 늘려줘야 멀티코어를 사용하여 컴파일시에 메모리 부족으로 에러가 나지 않습니다.
( 참고 https://www.pyimagesearch.com/2017/10/09/optimizing-opencv-on-the-raspberry-pi/ )
/etc/dphys-swapfile 파일을 열어서
$ sudo nano /etc/dphys-swapfile |
CONF_SWAPSIZE 변수값을 1024로 수정합니다.
# set size to absolute value, leaving empty (default) then uses computed value |
스왑 서비스 재시작하여 변경된 설정을 반영시켜주면 스왑 크기가 대략 10배가 됩니다.
pi@raspberrypi:~/opencv/opencv-3.4.1/build $ free |
이제 make 명령을 사용하여 컴파일을 시작합니다.
pi@raspberrypi:~/opencv/opencv-3.4.1/build $ make -j4 |
이제 컴파일 결과를 설치합니다.
pi@raspberrypi:~/opencv/opencv-3.4.1/build $ sudo make install |
샘플 코드들은 /usr/local/share/OpenCV/samples/ 위치에 복사됩니다.
/etc/ld.so.conf.d/ 디렉토리에 /usr/local/lib를 포함하는 설정파일이 있는지 확인합니다.
pi@raspberrypi:~/opencv/opencv-3.4.1/build $ cat /etc/ld.so.conf.d/* |
/usr/local/lib이 출력되지 않았다면 다음 명령을 수행합니다.
pi@raspberrypi:~/opencv/opencv-3.4.1/build $ sudo sh -c 'echo '/usr/local/lib' > /etc/ld.so.conf.d/opencv.conf' |
/usr/local/lib을 찾은 경우나 못찾아서 추가한 작업을 한 경우 모두 컴파일시 opencv 라이브러리를 찾을 수 있도록 다음 명령을 실행합니다.
pi@raspberrypi:~/opencv/opencv-3.4.1/build $ sudo ldconfig |
/etc/dphys-swapfile 파일을 열어서
$ sudo nano /etc/dphys-swapfile |
CONF_SWAPSIZE 변수값을 다시 100으로 수정합니다.
# set size to absolute value, leaving empty (default) then uses computed value |
스왑 서비스 재시작하여 변경된 설정을 반영시켜주면 스왑 크기가 원래대로 돌아옵니다.
pi@raspberrypi:~/opencv/opencv-3.4.1/build $ sudo /etc/init.d/dphys-swapfile restart |
pi@raspberrypi:~/opencv/opencv-3.4.1/build $ free |
C/C++를 위해 OpenCV 라이브러리 사용가능 여부를 확인합니다.
문제 없으면 설치된 OpenCV 라이브러리의 버전이 출력됩니다.
pi@raspberrypi:~/opencv/opencv-3.4.1/build $ pkg-config --modversion opencv |
아래처럼 opencv를 찾을 수 없다고 나오면 추가 작업이 필요합니다.
pi@raspberrypi:~/opencv/opencv-3.4.1/build $ pkg-config --modversion opencv |
pkg-config 명령이 /usr/local/lib/pkgconfig 경로에 있는 opencv.pc 파일을 찾을 수 있도록 해줘야 합니다.
$ sudo sh -c 'echo PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig >> /etc/bash.bashrc' |
로그아웃했다가 로그인하면 적용이됩니다.
다시 확인했을 때, OpenCV 버전이 나와야 합니다.
pi@raspberrypi:~/opencv/opencv-3.4.1/build $ pkg-config --modversion opencv |
pkg-config --libs --cflags opencv 명령을 실행했을 때 다음처럼 나오면 문제없이 설치가 완료된 것입니다.
pi@raspberrypi:~/opencv/opencv-3.4.1/build $ pkg-config --libs --cflags opencv |
.
예제 코드를 하나 가져와서 컴파일 해보겠습니다.
$ cp /usr/local/share/OpenCV/samples/cpp/facedetect.cpp ./ |
테스트를 하기 위해 필요한 웹캠 또는 Raspberry Pi Camera(pi camera)를 Raspberry Pi에 먼저 연결합니다.
대부분의 웹캠은 연결후 dmesg | tail 명령어로 해당 웹캠을 확인시 다음처럼 문제 없이 인식이 됩니다.
인식이 안되면 해당 웹캠을 위한 디바이스 드라이버를 설치해줘야 합니다.
/dev/video0 디바이스 파일이 생성되었는지 확인해봅니다.
파이 카메라의 경우에는 아래 포스팅을 참고하세요.
Raspberry Pi Camera Module( pi camera )를 위해 /dev/video0 생성하는 방법
http://webnautes.tistory.com/1192
이제 컴파일 후, 실행시켜 봅니다.
$ g++ -o facedetect facedetect.cpp $(pkg-config --libs --cflags opencv) $ ./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_eye_tree_eyeglasses.xml " --scale=1.3 |
터미널 프로그램으로 MobaXterm을 사용하면 SSH 접속 후, 바로 실행 결과를 확인 가능합니다.
(일종의 VNC처럼 동작해서 속도는 느립니다..)
https://mobaxterm.mobatek.net/
검출시간이 표시되면서 카메라 영상에 얼굴이 검출된 결과를 얻을 수 있습니다.
pi@raspberrypi:~/opencv/opencv-3.4.1/build $ ./facedetect --cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade="/usr/local/share/OpenCV/haarcascades/haarcascade_eye_tree_eyeglasses.xml " --scale=1.3 |
python 2.x와 python 3x에서 opencv 라이브러리를 사용가능한지는 다음처럼 확인합니다.
각각 OpenCV 버전이 출력되어야 합니다.
pi@raspberrypi:~/opencv/opencv-3.4.0/build $ python
|
예제 코드를 실행해봅니다.
$ python /usr/local/share/OpenCV/samples/python/facedetect.py --cascade "/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade "/usr/local/share/OpenCV/haarcascades/haarcascade_eye_tree_eyeglasses.xml" /dev/video0 $ python3 /usr/local/share/OpenCV/samples/python/facedetect.py --cascade "/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade "/usr/local/share/OpenCV/haarcascades/haarcascade_eye_tree_eyeglasses.xml" /dev/video0 |
카메라 영상에 얼굴이 검출된 결과를 얻을 수 있습니다.
pi@raspberrypi:~/opencv/opencv-3.4.0/build $ python /usr/local/share/OpenCV/samples/python/facedetect.py --cascade "/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade "/usr/local/share/OpenCV/haarcascades/haarcascade_eye_tree_eyeglasses.xml" /dev/video0 |
이제 필요 없어진 컴파일에 사용했던 opencv 소스코드 디렉토리를 삭제합니다.
pi@raspberrypi:~/opencv/opencv-3.4.1/build $ cd |
USB Camera기준.
$ sudo apt-get install cmake $ sudo apt-get install libjpeg8-dev
mjpg-streamer로 실시간 streaming 해보기
$ git clone https://github.com/jacksonliam/mjpg-streamer.git $ cd mjpg-streamer/mjpg-streamer/mjpg-streamer-experimental $ make $ sudo make install 완료후...테스트... $ ./mjpg_streamer -i "input_uvc.so -n" -o "output_http.so -w ./www" 확인...인터넷 창을 열고 아래사이트로 이동한다. http://192.168.1.188:8080/
타오바오에서 구입한 USB Camera 설정.
먼저 업체에서 제공한 mjpg-streamer-master.zip파일 적당한곳에 복사하고 압축을 푼다.
이 카메라는 JPEG 와 YUYV 두가지 형식을 지원한다. 그래서
.../mjpg-streamer-experimental/plugins/input_uvc/input_uvc.c 파일의 135줄 소스가 수정되어 있다.
format = V4L2_PIX_FMT_MJPEG ==> format = V4L2_PIX_FMT_YUYV
참고로 알아두고 이제 컴파일만 하면 된다.
$ make $ sudo make install 완료후...테스트... $ ./mjpg_streamer -i "input_uvc.so -n" -o "output_http.so -w ./www" 확인...인터넷 창을 열고 아래사이트로 이동한다. http://192.168.1.188:8080/
현재 WiringPi2 와 Python3.5는 실행 에러가 난다. 그래서 WiringPi 와 Python3.5 기준으로 설치한다.
- Quick Install
$ pip install wiringpi
- Manual Build
$ git clone --recursive https://github.com/WiringPi/WiringPi-Python.git $ cd WiringPi-Python $ sudo apt-get install python-dev python-setuptools swig wiringpi $ sudo python3 setup.py install
pigpio는 라즈베리파이의 GPIO 컨트롤 라이브러리 입니다. 모든 버젼의 라즈베리파이와 호환됩니다. C로 씌여져 있으며, 다른 언어에서도 사용가능합니다. pigpio는 socket과 pipe를 제공합니다.
* 설치 가능한 설치폴더를 생성후 설치하자. $ wget abyz.co.uk/rpi/pigpio/pigpio.tar $ tar xf pigpio.tar $ cd PIGPIO $ make -j4 $ sudo make install * 데몬실행 $ sudo pigpiod * 데몬삭제 $ sudo killall pigpiod