OpenCV 4.1.0과 opencv_contrib(extra modules)를 컴파일하여 Raspberry Pi 3에 설치하는 방법을 다룹니다.


2018년 11월 13일에 릴리즈된 Raspbian 이미지를 사용했습니다.

OpenCV를 컴파일하기 위해서는 최소 16G Micro SD 카드를 사용해야 합니다.


포스팅은 라즈비안 초기 이미지부터 진행하기 때문에 상황이 다른 경우에는 모두  대처하기가 힘든 점을 감안해주세요.





1. 기존 OpenCV 버전 제거

2. 기존 설치된 패키지 업그레이드

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

4. OpenCV 설정과 컴파일 및 설치

5. OpenCV 설치 결과 확인

   5.1. C/C++

   5.2. Python




업데이트


2019. 2. 1

OpenCV 4.0.1, 빌드시 make -j4 대신에 make 사용


2019. 4. 22

OpenCV 4.1.0, 기존과 빌드 과정이 달라진 점 없습니다.




1. 기존 OpenCV 버전 제거

1-1. OpenCV 2.4대 버전이 설치되어 있으면 새로 설치하는 OpenCV 4.1.0 버전이 제대로 동작하지 않기 때문에 제거해주어야 합니다.




1-2. 아래처럼 보이면 OpenCV 2.4대 버전이 설치안되어 있는 상태입니다.

다음 단계로 넘어가도  됩니다.


pi@raspberrypi:~ $ pkg-config --modversion opencv
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



OpenCV 2.4대 버전이 설치되어 있는 경우에는 OpenCV  2.4 버전이 출력됩니다.

pi@raspberrypi:~ $  pkg-config --modversion opencv
2.4.9.1



다음 명령으로 OpenCV 라이브러리 설정 파일을 포함해서 기존에 설치된 OpenCV 패키지를 삭제하고 진행해야 합니다.

pi@raspberrypi:~ $ sudo apt-get purge  libopencv* python-opencv
pi@raspberrypi:~ $ sudo apt-get autoremove




컴파일하여 설치한 경우 다음처럼 OpenCV 버전을 확인할 수 있습니다.


pi@raspberrypi:~ $ pkg-config --modversion opencv
3.4.2


또는


pi@raspberrypi:~ $ pkg-config --modversion opencv4
4.1.0



다음 명령으로 기존에 설치된 opencv 라이브러리를 삭제합니다.


pi@raspberrypi:~ $ sudo find /usr/local/ -name "*opencv*" -exec rm  {} \;



2. 기존 설치된 패키지 업그레이드

2-1. OpenCV 4.1.0을 설치해주기 전에 기존에 설치된 패키지들을 업그레이드 해주기 위한 작업입니다.

오래 걸리더라도 해주는 것이 좋습니다.




2-2. 기존에 설치된 패키지의 새로운 버전이 저장소에 있다면 패키지 리스트를 업데이트합니다.


pi@raspberrypi:~ $ sudo apt-get update




2-3. 기존에 설치된 패키지의 새로운 버전이 있으면 업그레이드합니다.


pi@raspberrypi:~ $ sudo apt-get upgrade




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

3-1. 일부 패키지는 배포된 Raspbian 이미지에 이미 포함되어 있는 경우도 있습니다.

또는 다른 패키지 설치시 같이 설치되기도 하지만 필요한 패키지들이라 언급하도록 하겠습니다.


OpenCV를 컴파일하는데 사용하는 것들이 포함된 패키지들을 설치합니다.




3-2. build-essential 패키지에는 C/C++ 컴파일러와 관련 라이브러리, make 같은 도구들이 포함되어 있습니다.

cmake는 컴파일 옵션이나 빌드된 라이브러리에 포함시킬 OpenCV 모듈 설정등을 위해 필요합니다.


$ sudo apt-get install build-essential cmake




3-3. 특정 포맷의 이미지 파일을 불러오거나 기록하기 위해 필요한 패키지들입니다.

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




3-4. 특정 코덱의 비디오 파일을 읽어오거나 기록하기 위해 필요한 패키지들입니다.

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




3-5. Video4Linux 패키지는 리눅스에서 실시간 비디오 캡처를 지원하기 위한 디바이스 드라이버와 API를 포함하고 있습니다.

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




3-6. GStreamer는 비디오 스트리밍을 위한 라이브러리입니다.

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




3-7. OpenCV에서는 highgui 모듈을 사용하여 자체적으로 윈도우 생성하여 이미지나 비디오들을 보여줄 수 있습니다.


윈도우 생성 등의 GUI를 위해 gtk 또는 qt를 선택해서 사용가능합니다.  여기서는 gtk2를 지정해주었습니다.

$ sudo apt-get install libgtk2.0-dev



그외 선택 가능한 패키지는 다음과 같습니다.

libgtk-3-dev

libqt4-dev

libqt5-dev




3-8. OpenGL 지원하기 위해 필요한 라이브러리입니다.

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




3-9. OpenCV 최적화를 위해 사용되는 라이브러리들입니다.

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




3-10. python2.7-dev와 python3-dev 패키지는 OpenCV-Python 바인딩을 위해 필요한 패키지들입니다.

Numpy는 매트릭스 연산등을 빠르게 처리할 수 있어서 OpenCV Python에서 사용됩니다.

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




4. OpenCV 설정과 컴파일 및 설치

소스 코드를 저장할 임시 디렉토리를 생성하여 이동 후.. 진행합니다


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




OpenCV 4.1.0 소스코드를 다운로드 받아 압축을 풀어줍니다.

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




opencv_contrib(extra modules) 소스코드를 다운로드 받아 압축을 풀어줍니다.

SIFT, SURF 등을 사용하기 위해 필요합니다.

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




다음처럼 두 개의 디렉토리가 생성됩니다.


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

opencv-4.1.0  opencv_contrib-4.1.0




opencv-4.1.0 디렉토리로 이동하여 build 디렉토리를 생성하고 build 디렉토리로 이동합니다.

컴파일은 build 디렉토리에서 이루어집니다.


pi@raspberrypi:~/opencv $  cd opencv-4.1.0

pi@raspberrypi:~/opencv/opencv-4.1.0 $  mkdir build

pi@raspberrypi:~/opencv/opencv-4.1.0 $  cd build

pi@raspberrypi:~/opencv/opencv-4.1.0/build $  




cmake를 사용하여 OpenCV 컴파일 설정을 해줍니다.  복사해서 터미널에 붙여넣기 해주면 됩니다.


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_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.0/modules \
-D WITH_V4L=ON \
-D WITH_FFMPEG=ON \
-D WITH_XINE=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON ../



다음처럼 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
-- Generating done
-- Build files have been written to: /home/pi/opencv/opencv-4.1.0/build



cmake 실행 결과입니다.


-- General configuration for OpenCV 4.1.0 =====================================

--   Version control:               unknown

--

--   Extra modules:

--     Location (extra):            /home/pi/opencv/opencv_contrib-4.1.0/modules

--     Version control (extra):     unknown

--

--   Platform:

--     Timestamp:                   2019-04-21T05:59:13Z

--     Host:                      Linux 4.14.98-v7+ armv7l

--     CMake:                      3.7.2

--     CMake generator:             Unix Makefiles

--     CMake build tool:            /usr/bin/make

--     Configuration:               RELEASE

--

--   CPU/HW features:

--     Baseline:                    VFPV3 NEON

--       requested:                 DETECT

--       required:                  VFPV3 NEON

--

--   C/C++:

--     Built as dynamic libs?:      YES

--     C++ Compiler:                /usr/bin/c++ (ver 6.3.0)

--     C++ flags (Release):         -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit-self -Wno-delete-non-virtual-dtor -Wno-comment -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -mfpu=neon -mfp16-format=ieee -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG -DNDEBUG

--     C++ flags (Debug):           -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit-self -Wno-delete-non-virtual-dtor -Wno-comment -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -mfpu=neon -mfp16-format=ieee -fvisibility=hidden -fvisibility-inlines-hidden -g -O0 -DDEBUG -D_DEBUG

--     C Compiler:                  /usr/bin/cc

--     C flags (Release):           -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Winit-self -Wno-comment -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -mfpu=neon -mfp16-format=ieee -fvisibility=hidden -O3 -DNDEBUG -DNDEBUG

--     C flags (Debug):             -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Winit-self -Wno-comment -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -mfpu=neon -mfp16-format=ieee -fvisibility=hidden -g -O0 -DDEBUG -D_DEBUG

--     Linker flags (Release):      -Wl,--gc-sections

--     Linker flags (Debug):        -Wl,--gc-sections

--     ccache:                      NO

--     Precompiled headers:         YES

--     Extra dependencies:          dl m pthread rt /usr/lib/arm-linux-gnueabihf/libGLU.so /usr/lib/arm-linux-gnueabihf/libGL.so

--     3rdparty dependencies:

--

--   OpenCV modules:

--     To be built:                 aruco bgsegm bioinspired calib3d ccalib core datasets dnn dnn_objdetect dpm face features2d flann freetype fuzzy gapi hfs highgui img_hash imgcodecs imgproc line_descriptor ml objdetect optflow phase_unwrapping photo plot python2 python3 quality reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking video videoio videostab xfeatures2d ximgproc xobjdetect xphoto

--     Disabled:                    world

--     Disabled by dependency:      -

--     Unavailable:                 cnn_3dobj cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv hdf java js matlab ovis sfm ts viz

--     Applications:                apps

--     Documentation:               NO

--     Non-free algorithms:         NO

--

--   GUI:

--     GTK+:                      YES (ver 2.24.31)

--       GThread :                  YES (ver 2.50.3)

--       GtkGlExt:                  YES (ver 1.2.0)

--     OpenGL support:              YES (/usr/lib/arm-linux-gnueabihf/libGLU.so /usr/lib/arm-linux-gnueabihf/libGL.so)

--     VTK support:                 NO

--

--   Media I/O:

--     ZLib:                      /usr/lib/arm-linux-gnueabihf/libz.so (ver 1.2.8)

--     JPEG:                      /usr/lib/arm-linux-gnueabihf/libjpeg.so (ver 62)

--     WEBP:                      build (ver encoder: 0x020e)

--     PNG:                      /usr/lib/arm-linux-gnueabihf/libpng.so (ver 1.6.28)

--     TIFF:                      /usr/lib/arm-linux-gnueabihf/libtiff.so (ver 42 / 4.0.8)

--     JPEG 2000:                   /usr/lib/arm-linux-gnueabihf/libjasper.so (ver 1.900.1)

--     OpenEXR:                     build (ver 1.7.1)

--     HDR:                      YES

--     SUNRASTER:                   YES

--     PXM:                      YES

--     PFM:                      YES

--

--   Video I/O:

--     FFMPEG:                      YES

--       avcodec:                  YES (57.64.101)

--       avformat:                  YES (57.56.101)

--       avutil:                  YES (55.34.101)

--       swscale:                  YES (4.2.100)

--       avresample:                NO

--     GStreamer:                   YES (1.10.4)

--     v4l/v4l2:                    YES (linux/videodev2.h)

--     Xine:                      YES (1.2.6)

--

--   Parallel framework:            pthreads

--

--   Trace:                         YES (built-in)

--

--   Other third-party libraries:

--     Lapack:                      NO

--     Eigen:                      YES (ver 3.3.2)

--     Custom HAL:                  YES (carotene (ver 0.0.1))

--     Protobuf:                    build (3.5.1)

--

--   OpenCL:                        YES (no extra features)

--     Include path:                /home/pi/opencv/opencv-4.1.0/3rdparty/include/opencl/1.2

--     Link libraries:              Dynamic load

--

--   Python 2:

--     Interpreter:                 /usr/bin/python2.7 (ver 2.7.13)

--     Libraries:                   /usr/lib/arm-linux-gnueabihf/libpython2.7.so (ver 2.7.13)

--     numpy:                      /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.12.1)

--     install path:                lib/python2.7/dist-packages/cv2/python-2.7

--

--   Python 3:

--     Interpreter:                 /usr/bin/python3 (ver 3.5.3)

--     Libraries:                   /usr/lib/arm-linux-gnueabihf/libpython3.5m.so (ver 3.5.3)

--     numpy:                      /usr/lib/python3/dist-packages/numpy/core/include (ver 1.12.1)

--     install path:                lib/python3.5/dist-packages/cv2/python-3.5

--

--   Python (for build):            /usr/bin/python2.7

--

--   Java:

--     ant:                      NO

--     JNI:                      NO

--     Java wrappers:               NO

--     Java tests:                  NO

--

--   Install to:                    /usr/local

-- -----------------------------------------------------------------

--

-- Configuring done

-- Generating done





다음처럼 Python 2 또는 Python 3 라이브러리 항목이 보이지 않는 경우에는


--   Python 2:
--     Interpreter:                 /usr/bin/python2.7 (ver 2.7.13)
--     Libraries:                   /usr/lib/arm-linux-gnueabihf/libpython2.7.so (ver 2.7.13)
--     numpy:                      /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.12.1)
--     packages path:               lib/python2.7/dist-packages
--
--   Python 3:
--     Interpreter:                 /usr/bin/python3 (ver 3.5.3)
--     Libraries:                   /usr/lib/arm-linux-gnueabihf/libpython3.5m.so (ver 3.5.3)
--     numpy:                      /usr/lib/python3/dist-packages/numpy/core/include (ver 1.12.1)
--     packages path:               lib/python3.5/dist-packages
--
--   Python (for build):            /usr/bin/python2.7




다음 붉은색 줄처럼 해당 경로들을 직접 적어줘야 합니다. 포스팅에서 사용한 옵션과 차이가 있을 수 있습니다.


$ 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=OFF \

-D WITH_GTK=ON \

-D WITH_OPENGL=ON \

-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.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  변수값을 100에서 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



스왑 서비스 재시작하여 변경된 설정을 반영시켜주면 스왑 크기가 대략 20배가 됩니다.


pi@raspberrypi:~/opencv/opencv-4.1.0/build $ free
             total used        free shared buff/cache   available
Mem:         896672 79656       64716 11840 752300      739640
Swap:        102396           0      102396

100 메가 였던 Swap이


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


pi@raspberrypi:~/opencv/opencv-4.1.0/build $ free
             total used        free shared buff/cache   available

Mem:         896668 86292       63540 18036 746836      726832

Swap:       2097148           0     2097148

2048메가로 바뀝니다.




이제 make 명령을 사용하여 컴파일을 시작합니다.

-j4 옵션을 주면 컴파일 시간이 줄어들지만(75분)  에러가 날 확률이 높아지지고 이 옵션을 주지 않으면 너무 오래걸려서(5시간)  시험삼아 -j3로 낮추어서 해보았습니다.


pi@raspberrypi:~/opencv/opencv-4.1.0/build $ time make -j3



다음 부분에서 멈춤 현상이 있습니다. Ctrl + C를 눌러 중지하고



make 명령으로 다시 진행해서 완료했습니다.

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



make 명령만으로 진행하거나 make -j4로 진행하다가 위 스크린샷 부분에서 중지하고 make 명령으로 진행하면 될 듯합니다.



이제 컴파일 결과물을 설치합니다.


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



샘플 코드들은 /usr/local/share/opencv4/samples/ 위치에 복사됩니다.



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

pi@raspberrypi:~/opencv/opencv-4.1.0/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
#   you most likely don't want this, unless you have an special disk situation
CONF_SWAPSIZE=100
#CONF_SWAPSIZE=1024



스왑 서비스 재시작하여 변경된 설정을 반영시켜주면 스왑 크기가 원래대로 돌아옵니다.


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


pi@raspberrypi:~/opencv/opencv-4.1.0/build $ free
             total used        free shared buff/cache   available
Mem:         896672 85660      220784 22084 590228      725888
Swap:        102396           0      102396




5. OpenCV 설치 결과 확인

5.1. C/C++

OpenCV 4.1.0에서 pkg-config를 디폴트로 지원하지 않습니다.  CMake를 사용해서 컴파일 해야 합니다.


옵션으로 opencv대신에 opencv4를 사용하면 pkg-config를 사용하여 컴파일할 수 있습니다.


$ g++ -o facedetect /usr/local/share/opencv4/samples/cpp/facedetect.cpp $(pkg-config opencv4 --libs --cflags)



실행시켜보면 얼굴 인식이 됩니다.


$ ./facedetect --cascade="/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade="/usr/local/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml" --scale=1.3




CMake를 사용하는 방법입니다. 예제 코드를 하나 가져와서 컴파일 해보겠습니다.


pi@raspberrypi:~ $ mkdir example

pi@raspberrypi:~ $ cd example

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



CMakeLists.txt 파일을 생성하여 다음 내용을 복사합니다.


pi@raspberrypi:~/example $ nano CMakeLists.txt


cmake_minimum_required(VERSION 2.8)
project( facedetect)
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( facedetect facedetect.cpp )
target_link_libraries( facedetect ${OpenCV_LIBS} )



build 디렉토리를 생성하여 컴파일을 진행합니다.

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



테스트를 하기 위해  필요한 웹캠 또는 Raspberry Pi Camera(pi camera)를  Raspberry Pi에 먼저 연결합니다.


대부분의 웹캠은 연결후 dmesg | tail 명령어로 해당 웹캠을 확인시 다음처럼 문제 없이 인식이 됩니다.

인식이 안되면 해당 웹캠을 위한 디바이스 드라이버를 설치해줘야 합니다.




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




파이 카메라의 경우에는 다음 명령으로 /dev/video0 장치를 만들어줘야 합니다.


sudo modprobe bcm2835-v4l2


자세한 내용은 아래 포스팅을 참고하세요.


Raspberry Pi Camera Module( pi camera )를 위해 /dev/video0 생성하는 방법

http://webnautes.tistory.com/1192



파이 카메라의 경우 추가로 소스코드를 수정해야 합니다. open 함수의 아규먼트를 -1로 해야 정상적으로 동작합니다. 0으로 하면 카메라를 열지 못하고 무한 대기 상태에 빠지게 됩니다.


VideoCapture capture;
........................................
if(!capture.open(-1))
           cout << "Capture from camera #" <<  camera << " didn't work" << endl;




이제 실행시켜 봅니다.


$ ./facedetect --cascade="/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade="/usr/local/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml " --scale=1.3




터미널 프로그램으로 MobaXterm을 사용하면 SSH 접속 상태에서 실행해보면 바로 실행 결과를 확인 가능합니다.

(일종의 VNC처럼 동작해서 속도는 느립니다..)


https://mobaxterm.mobatek.net/




검출시간이 표시되면서 카메라 영상에 얼굴이 검출된 결과를 얻을 수 있습니다.


pi@raspberrypi:~/example/build $ ./facedetect --cascade="/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade="/usr/local/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml " --scale=1.3

Video capturing has been started ...
[ INFO:0] Initialize OpenCL runtime...
detection time = 317.549 ms
detection time = 292.267 ms
detection time = 285.393 ms
detection time = 287.672 ms
detection time = 291.738 ms
detection time = 336.075 ms
detection time = 297.108




5.2. Python


python 2와 python 3에서 opencv 라이브러리를 사용가능한지는 다음처럼 확인합니다.

각각 OpenCV 버전이 출력되어야 합니다.

pi@raspberrypi:~ $ python
Python 2.7.13 (default, Nov 24 2017, 17:33:09)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.1.0'
>>>


pi@raspberrypi:~ $ python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170124] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.1.0'
>>>




파이 카메라의 경우 캡처에 문제가 있다면  소스코드에서 다음부분을 -1로 수정해줘야 합니다.


cam = create_capture(-1, fallback='synth:bg=../data/lena.jpg:noise=0.05')



파이 카메라의 경우 다른 코드에서도 0 대신에 다음처럼 -1을 사용해야 합니다.


cap = cv.VideoCapture(-1)




예제 코드를 실행해봅니다.


$ python /usr/local/share/opencv4/samples/python/facedetect.py --cascade "/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade "/usr/local/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml" /dev/video0


$ python3 /usr/local/share/opencv4/samples/python/facedetect.py --cascade "/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade "/usr/local/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml" /dev/video0




카메라 영상에 얼굴이 검출된 결과를 얻을 수 있습니다.


pi@raspberrypi:~/opencv/opencv-4.1.0/build $ python /usr/local/share/opencv4/samples/python/facedetect.py --cascade "/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade "/usr/local/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml" /dev/video0

face detection using haar cascades

USAGE:
   facedetect.py [--cascade <cascade_fn>] [--nested-cascade <cascade_fn>] [<video_source>]

[ INFO:0] Initialize OpenCL runtime...




이제 필요 없어진 컴파일에 사용했던 opencv 소스코드 디렉토리를 삭제합니다.


pi@raspberrypi:~/opencv/opencv-4.1.0/build $ cd
pi@raspberrypi:~ $ rm -rf opencv





해봤어요 www.facebook.com/webnautes/
진행하다가 문제 생기면 사소한 것이라도 댓글로 남겨주시면 감사하겠습니다.

  1. 이전 댓글 더보기
  2. 서현주 2018.12.02 12:15 신고

    하아.. 답변감사드립니다.
    처음 올린 소스의 오류를 해결하는 것 보다.
    두번째로 올린 소스를 처음 올린 소스와 비슷하게 만드는게 더 빠를 것 같네요. ㅠㅠ 왜 에러가 날까요?

  3. 서현주 2018.12.02 12:35 신고

    2번째 소스의 xml 경로와 같은 파일을 사용하여 얼굴인식 까지는 해결 되었습니다.
    하지만 eye,xml 같은경우는 경로가 잡히지 않네요. 이 둘의 차이는

    1번째 소스의 같은 경우 github 에서 다운받아
    haarcascade_frontalface_default.xml
    haarcascade_eye.xml
    /usr/local/share/opencv4/haarcascades/ 폴더에 넣었는데 문제가 되는 행동인가요?

    2번째 소스의 같은 경우 그냥 기존에 있던 파일을 사용했고.
    haarcascade_frontalface_alt.xml

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2018.12.02 12:40 신고

      크롬에서 github에서 다운로드 받은 파일을 선택한 다음 RAW를 클릭하고 Ctrl + S를 눌러서 저장해야 합니다.

      또는 RAW 클릭 후..
      해당 주소를 복사하여 라즈베리파이에서 다음처럼 다운로드 해도 됩니다.

      wget https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_eye.xml

  4. 서현주 2018.12.02 12:51 신고

    와~...
    해결되었습니다. 감사합니다.
    제가 그냥 우클릭 마우링크 저장을 했는데.
    저장하는 방식에 문제가 있었군요. 친절한 답변 감사드립니다.

  5. 안정모 2018.12.03 21:59 신고

    안녕하세요 블로그에 잘 참고하면서 열일하고 있습니다 항상 감사합니다

    그런데 예전까지는 잘 깔았는데, opencv를 올려주신 순서대로 다 설치하고 오류없이 진행했는데

    pkg-config --modversion opencv로 opencv버전을 확인하면 안깔려있는 상태처럼 똑같이 뜹니다...

    그래서 어쩔수 없이 sudo apt-get install libopencv-dev로 2.7버전의 opencv를 사용하고 있는데요...

    블로그 순서대로 잘 따라갔는데도 왜 opencv 의 라이브러리가 설치가 안되어 있을까요??(이부분은 직접 라즈베리파이 내부의 폴더에서 opencv 파일을 일일이 찾아본결과)

    도움좀 부탁드립니다....

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2018.12.03 22:04 신고

      OpenCV 4.0.0에선 pkg-config를 지원하지 않기때문 입니다.

      설치는 완료된 상태가 맞습니다.

      그리고 코드를 컴파일시 cmake를 사용해야합니다.

  6. Aaron 2018.12.18 11:20 신고

    make 도중에 라즈베리파이 화면이 아예 검은색이 되버리는데 왜그럴까요.. 화면이 안나오다보니 오류메세지도 못잡아내겟고.. 그냥 내버려둬도 진행은 안되고 make -j4나 -j1이나 똑같네요..

  7. Aaron 2018.12.18 11:49 신고

    답변감사드립니다
    지금 다시한번진행해봤는데 화면이 우선 멈춘 후에 일정 간이 지나고 검은 화면으로 바뀌는 것 같더군요...
    vnc 연결도 끊어지고 하는데 이런건 파이 문제일까요..?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2018.12.18 11:55 신고

      라즈베리파이의 데스크톱이 화면 보호기가 있어서 끊기는 듯합니다. SSH로 진행하는게 나을듯합니다

  8. 라즈베리파이 입문자 2019.01.04 00:18 신고

    강좌 잘 보고 조금 조금씩 퇴근 후에 공부하고 있습니다.
    님 강좌 잘 따라서 했는데 마지막에서 실행하니 에러가 발생했습니다. C와 파이썬 두 가지 다 동일한 에러가 발생합니다.
    어느 부분에서 문제가 있는지 궁금합니다.
    조언 부탁 드립니다.

    -- C
    (facedetect:1085): GStreamer-CRITICAL **: gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed
    Video capturing has been started ...

    -- 파이썬
    (python:1144): GStreamer-CRITICAL **: gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed
    select timeout

  9. Favicon of https://nortul.tistory.com BlogIcon 노털 2019.01.04 13:18 신고

    정리해주신 글 잘보고 있습니다.

    이번에 윗 글을 따라서 4.0.1을 설치하고 facedetect.cpp를 cmake를 이용하여 make 하는 과정에서 다음과 같은 오류가 발생하는데 혹시 해결책을 아시는지요.
    qt5도 다 설치가 되어있는 상황입니다. 그런데 library를 저렇게 찾아도 되는 것인지...

    그냥 prompt에서는 compile이 정상적으로 되는데 cmake를 이용하여 make할 때는 다음과 같은 에러가 발생하네요.
    [아시겠지만 4.0.0 이상부터는 pkg-config에서 opencv가 아니라 opencv4라고 입력해야 하더라고요]
    [g++ --std=c++11 facedetect.cpp `pkg-config --cflags --libs opencv4`] -> 정상


    [make] -> Error
    [ 50%] Linking CXX executable facedetect
    /usr/bin/ld: cannot find -lQt5::Core
    /usr/bin/ld: cannot find -lQt5::Gui
    /usr/bin/ld: cannot find -lQt5::Widgets
    /usr/bin/ld: cannot find -lQt5::Test
    /usr/bin/ld: cannot find -lQt5::Concurrent
    collect2: error: ld returned 1 exit status
    CMakeFiles/facedetect.dir/build.make:170: recipe for target 'facedetect' failed
    make[2]: *** [facedetect] Error 1
    CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/facedetect.dir/all' failed
    make[1]: *** [CMakeFiles/facedetect.dir/all] Error 2
    Makefile:83: recipe for target 'all' failed
    make: *** [all] Error 2

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2019.01.04 15:54 신고

      opencv4를 사용하면 되는거 알려주셔서 감사합니다.

      포스팅은 gtk를 사용하도록 되어있는데 cmake에선 qt를 찾네요.

      libqt5-dev를 설치하고 다시 해보세요

  10. 라즈베리파이 입문자 2019.01.04 15:04 신고

    import cv2 as cv
    cap = cv.VideoCapture(-1)
    while(True):
    ret, img_color = cap.read()

    if ret == False:
    continue;
    img_gray = cv.cvtColor(img_color, cv.COLOR_BGR2GRAY)
    cv.imshow('bgr', img_color)
    cv.imshow('gray', img_gray)
    if cv.waitKey(1) & 0xFF == 27:
    break
    cap.release()
    cv.destroyAllWindows()

    위의 예제파일 실행시키면 아래와 같은 출력 에러 표시됩니다.
    화면에는 "bgr","gray" 두 창으로 실시간 카메라 영상이 출력 됩니다.
    출력 에러 ->
    (python3:1230): GStreamer-CRITICAL **: gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed

    뭔가 중간에 잘못 된 것 같아서 처음부터 다시 따라 할려고 하는데 앞에 설치했던 파일 삭제 방법을 모르겠습니다.
    그래서 그냥 라즈비안 이미지부터 다시 올려서 해볼 계획입니다.ㅠ.ㅠ

  11. Favicon of https://nortul.tistory.com BlogIcon 노털 2019.01.04 17:57 신고

    해결하였습니다.

    CMakeLists.txt에 다음을 추가하였습니다.

    find_package(Qt5Gui)
    find_package(Qt5Core)
    find_package(Qt5Widgets)
    find_package(Qt5Test)
    find_package(Qt5Concurrent)
    find_package(Qt5OpenGL)

  12. 라즈베리파이 입문자 2019.01.07 11:21 신고

    안녕하세요~
    지난주에 샘플코드 실행시 에러메시지가 계속 표시되어서 어제 라즈비안 이미지 다시 올려서 처음부터 진행 했습니다.
    그런데....cmake 과정을 진행하니 아래와 같은 에러가 발생합니다. 이전 댓글에 보니 단순오타 였다는 내용이 있는데. 지난주에는 정상적으로 잘 되었었구요.
    폴더 결로 변경해도 동일하게 에러가 발생합니다.
    제가 무엇을 잘 못 했을까요......?

    pi@raspberrypi:~/opencv/opencv-4.0.0/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_EXTRA_MODULES_PATH=../../opencv_contrib-4.0.0/modules \
    > -D WITH_V4L=ON \
    > -D WITH_FFMPEG=ON \
    > -D WITH_XINE=ON \
    > -D BUILD_NEW_PYTHON_SUPPORT=ON \
    >
    CMake Error: The source directory "/home/pi/opencv/opencv-4.0.0/build/BUILD_NEW_PYTHON_SUPPORT=ON" does not exist.
    Specify --help for usage, or press the help button on the CMake GUI.
    pi@raspberrypi:~/opencv/opencv-4.0.0/build $ -D OPENCV_GENERATE_PKGCONFIG=ON \
    bash: -D: command not found
    pi@raspberrypi:~/opencv/opencv-4.0.0/build $ ../

  13. 라즈베리파이 입문자 2019.01.08 00:44 신고

    안녕하세요
    덕분에 얼굴인식 예제까지 가능했습니다. 감사드립니다.
    그런데..
    mobaxterm을 사용하면 PC화면에서 라즈베리 카메라 촬영 영상이 표시되면서 얼굴을 인식합니다. 지연시간이 4~5초 정도 있습니다
    라즈베리파이에 직접 모니터를 연결하고 예제를 실행하면 윈도우 창이 생기지만 그냥 표시영역에 회색으로만 채워지고 카메라 영상이 보이지 않습니다.
    movaxterm에서는 보이고요...
    movaxterm 연결을 해제하고 라즈베리에서 단독으로 실행 시켜도 회색으로만 표시됩니다.(리부팅 후에도 같습니다.)
    C++ 과 파이썬 예제 둘 다 똑같습니다
    참고로 라즈베리설정에서 해상도 설정을 진입하면 해상도 메뉴가 아무것도 없습니다. 지난번 라즈비안 이미지는 ' 2018-11-13-raspbian-stretch-full.img'로 설치 했었는데 해상도 메뉴가 전부 표시 되었습니다. 지금은 '2018-11-13-raspbian-stretch.img' 로 설치 한 상태입니다.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2019.01.08 09:49 신고

      다음 처럼 영상이 정상적으로 캡처된 경우에만 화면에 보여지도록 해보세요..

      https://stackoverflow.com/a/20931314

    • 라즈베리파이 입문자 2019.01.08 14:27 신고

      안녕하세요. 항상 답변에 감사하게 생각하고 있습니다.
      혹시나 하고 지난번 이미지로 다시 올리고 예제 실행하니 정상적으로 동작 하였습니다. "2018-11-13-raspbian-stretch-full.img"
      모니터에 직접 연결하니 실제 반응 속도와 화면에 표시되는 반응 속도는 1.3~1.8 정도 지연 되었고, movaxterm 사용시에는 약 9초 정도 지연이 있었습니다. 라즈베리 캠과 usb 캠과 비교했을때 반응속도 차이는 없었고요.

      두 가지 이미지 다 처음부터 똑 같이 한 것입니다.
      근데 처음 이미지는 한글 설정을 할 수 없어서 한글 입력이 안되는 문제가 있고, 두 번째 이미지는 화면 해상도 메뉴가 안 나오는 문제가 있었습니다.
      아마 초기 설치에...뭐가 실수 있었나 봅니다....

      감사합니다.

  14. KYH 2019.01.29 18:51 신고

    make -j4로 깔때 1시간정도 기다려서 100%까지 기다리구 Ctrl + c 로 강제종료하구 make 입력하는거맞나요?
    이렇게 했는데 문제가 발생했습니다.
    make -j4 써서 [100%] Building CXX object modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o 이렇게만 떠서 이제 강제종료하구 make 입력했는데 다운로드 시간이 10초정도 걸리면서 99%까지 빠르게 올라가더라구요 근데 99%에서 [ 99%] Building CXX object modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o 이렇게 뜨고 멈추네요....

    참고로 강제종료하면

    ^Cmodules/python2/CMakeFiles/opencv_python2.dir/build.make:62: 'modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o' 타겟에 대한 명령이 실패했습니다
    make[2]: *** [modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o] 인터럽트
    CMakeFiles/Makefile2:8641: 'modules/python2/CMakeFiles/opencv_python2.dir/all' 타겟에 대한 명령이 실패했습니다
    make[1]: *** [modules/python2/CMakeFiles/opencv_python2.dir/all] 인터럽트
    Makefile:160: 'all' 타겟에 대한 명령이 실패했습니다
    make: *** [all] 인터럽트

    이렇게 뜹니다.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2019.01.29 19:02 신고

      make -j4로 하다가 강제로 종료하고 make로 이어서 하는게 맞습니다.

      파이썬 모듈 생성하는 부분이라 오래걸립니다.

      실행시키고 좀 대기해보세요.

    • Ysh 2019.01.31 16:08 신고

      저도 몇일째 따라하고 있는데 make -j4 이후로 make만 하면 99% 에서 위에 메세지가 뜨면서 그 다음으로 진행해도 설치가 안돼요 ㅠㅠ 어떻게 하면 해결할수있나요? ㅠㅠㅠㅠㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2019.02.01 12:36 신고

      make clean으로 기존 컴파일 결과 지우고

      -j4 없이 make만 하면 해결될 수 있습니다.

      대신 컴파일 시간이 길어집니다.

  15. ePON 2019.01.29 19:31 신고

    CONF_SWAPSIZE 변수를 1024로 변경시켜주는 방법을 자세히 알 수 있을까요?

    수정을 완료하고 어떤 명령어를 어떻게 입력해야 할지 모르겠습니다

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2019.01.29 19:34 신고

      다음 명령을 사용하면 스왑 사이즈 변경한 것이 반영됩니다.

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

    • Favicon of https://unicool.tistory.com BlogIcon UNICool 2019.01.30 08:50 신고

      @webnautes webnautes

      CONF_SWAPSIZE 부분을 수정해주고

      명령어를 어떻게 입력해야 할지 모르겠습니다

      ctrl+조합으로 다양한 명령어들이 존재하네요

      메일주소를 알 수 있으면 캡쳐본을 올려서 보여드리겠는데 보내드릴 방법이 전혀 없네요 쪽지같은것도 없구

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2019.01.30 08:51 신고

      nano라면 Ctrl + o를 누르면 저장됩니다

  16. ws 2019.02.11 16:20 신고

    안녕하세요 opencv 설치 관련해서 문의좀 드리겠습니다.
    상기 내용 보며 따라하는 도중 하기 라인에서 오류가 발생하여 문의드립니다.

    [cmake를 사용하여 OpenCV 컴파일 설정을 해줍니다. 복사해서 터미널에 붙여넣기 해주면 됩니다. ] 진행시 하기와 같은 오류가 발생합니다.

    -- Configuring incomplete, errors occurred!
    See also "/home/ws/opencv/opencv-4.0.1/build/CMakeFiles/CMakeOutput.log".
    See also "/home/ws/opencv/opencv-4.0.1/build/CMakeFiles/CMakeError.log".

    ../build/CMakeFiles/CMakeError.log 내용을 보니
    #include <sys/videoio.h> 를 찾을 수 없다고 나옵니다.

    어떻게 해야 이걸 해결 할 수 있을까요?
    답변 달아주시면 감사하겠습니다.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2019.02.11 16:30 신고

      3장에 있는 패키지중 다음 패키지를 설치안한듯합니다.

      sudo apt-get install libv4l-dev v4l-utils

    • ws 2019.02.11 17:07 신고

      빠른 답변 감사합니다.

      ~/opencv$ sudo apt-get install libv4l-dev v4l-utils
      Reading package lists... Done
      Building dependency tree
      Reading state information... Done
      libv4l-dev is already the newest version (1.14.2-1).
      v4l-utils is already the newest version (1.14.2-1).
      0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

      정상적으로 설치 되어있는데 의아하네요 ㅠㅠ
      이유를 모르겠습니다..

      업무중 막혀서 난감하네요..
      혹시 4.0.1버전에서만 그런건지 다른 링크로 다운로드 받아서 진행해 보고 있습니다.. ^^

    • ws 2019.02.11 18:04 신고

      3.4.0버전에서는 정상적으로 진행됩니다.
      라이브러리들 버전에 따라 뭔가 상이한것이 아닌가 의문스럽네요..

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2019.02.11 18:26 신고

      검색해봐도 원인을 알기가 쉽지 않네요.

      제 경우엔..
      2018년 11월 13일에 릴리즈된 Raspbian 이미지를 SD카드에 설치한 후.. 바로 진행해서 성공했습니다...



    • Favicon of https://gaiag.tistory.com BlogIcon 가이아쥐 2019.04.01 16:13 신고

      혹시 이 문제 해결하셨나요?! 저도 동일한 문제가 발생해서 ㅠㅠ 해결을 못하고 있습니다

      도움부탁드려요!

  17. 장세웅 2019.03.11 15:13 신고

    ./facedetect --cascade="/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade="/usr/local/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml " --scale=1.3
    Video capturing has been started ...
    detection time = 341.854 ms
    terminate called after throwing an instance of 'cv::Exception'
    what(): OpenCV(4.0.1) /home/pi/opencv/opencv-4.0.1/modules/highgui/src/window.cpp:627: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'

    이러한 오류가 발생하는데 왜그런건가요 ㅠㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2019.03.11 15:36 신고

      컴파일시 gtk가 빠진듯합니다.

      cmake시 아래 항목이 다음처럼 보여야 합니다.

      GUI:
      --     GTK+:                      YES (ver 2.24.31)
      --       GThread :                  YES (ver 2.50.3)
      --       GtkGlExt:                  YES (ver 1.2.0)

    • 장세웅 2019.03.11 19:57 신고

      그러면 처음부터 다시 받아야 하나요? ㅠㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2019.03.11 20:00 신고

      네 cmake로 컴파일 설정시 문제가 생긴듯합니다.

    • 장세웅 2019.03.11 20:01 신고

      dpkg: warning: files list file for package 'mesa-utils' missing; assuming package has no files currently installed
      dpkg: warning: files list file for package 'vlc-bin' missing; assuming package has no files currently installed
      dpkg: warning: files list file for package 'python3-venv' missing; assuming package has no files currently installed
      dpkg: warning: files list file for package 'adwaita-icon-theme' missing; assuming package has no files currently installed
      dpkg: warning: files list file for package 'libjsoncpp1:armhf' missing; assuming package has no files currently installed
      dpkg: warning: files list file for package 'libxcb-xkb1:armhf' missing; assuming package has no files currently installed
      dpkg: warning: files list file for package 'libavahi-core7:armhf' missing; assuming package has no files currently installed
      dpkg: unrecoverable fatal error, aborting:
      files list file for package 'python3-smbus:armhf' is missing final newline
      E: Sub-process /usr/bin/dpkg returned an error code (2)

      sudo apt-get install libgtk2.0-dev
      하면 위와 같은 에러가 발생합니당 ㅠㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2019.03.11 20:04 신고

      다음처럼 해보세요.

      sudo apt-get update
      sudo apt-get install --reinstall libgtk2.0-dev


      그리고 글에 언급한 패키지를 모두 설치해야 문제가 발생하지 않습니다.

    • 장세웅 2019.03.11 20:09 신고

      위에 말씀해 주신것 처럼 했는데도 에러가 나네요 ㅠㅠ 아예 지우고 다시 설치하는게 나을 것 같습니다.

      빠른 답변 감사합니다.

    • 장세웅 2019.03.11 21:21 신고

      혹시 opencv-4.0.1 삭제할 수 있는 방법이 있을까요?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2019.03.11 21:23 신고

      다음 명령으로 삭제가능하지만 권장하지는 않습니다.

      sudo find /usr/local/ -name "*opencv*" -exec rm -i {} \;

  18. 장세웅 2019.03.13 00:20 신고

    picam에서 사용하려면 4.0.1버전을 삭제해야하는데 어떻게 할 수 있을까요
    저번에 알려주신 방법을 해봤는데 삭제가 안됩니다. ㅠㅠ

  19. ㅇㅁㅇ 2019.03.23 23:45 신고

    감사합니다 덕분에 잘 설치했습니다

  20. 학생 2019.03.26 15:34 신고

    안녕하세요. 이 블로그를 통해서 원하는 결과를 얻어서 너무 뿌듯한 학생입니다.

    다름이 아니라 영상이다보니 빛에 민감하는 것을 방지하기 위해 적외선 파이카메라를 사용하려고 합니다.
    혹시 적외선 파이카메라를 사용할 때 소스코드를 변경해야 할 부분이 있을까요? 이전에는 파이카메라를 사용하였습니다.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2019.03.26 15:49 신고

      좋은 결과를 얻었다니 축하드립니다. ^^

      적외선 카메라는 사용해본적이 없지만...

      적외선 카메라로부터 넘어오는 영상을 OpenCV에서 제대로 화면에 보여주는지만 확인하면 될듯합니다.

      OpenCV에서는 기본적으로 BGR 채널로 영상을 가져오는데 어떨지 모르겠군요..


  21. opencv 2019.04.15 21:19 신고

    안녕하세요. 블로그에서 도움 많이 받고 있습니다!
    저희가 opencv 4.0.1를 사용하다가 호완이 많이 안되서 3.4.4버전으로 바꾸려고 하고 있는데
    3.4.4버전도 위에 본문과 똑같이 따라하면 되는건가요???

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes webnautes 2019.04.15 21:56 신고

      감사합니다..

      설치하는 방식은 큰 차이가 없습니다.

      다음 옵션은 OpenCV 4.x로 넘어오면서 추가한 건데.. 최근에 나온 OpenCV 3.x에서도 필요할지 모르겠네요.

      cmake 명령에서 우선 다음 옵션이 추가된 상태로 해보고 혹 에러나면 빼시면 될듯합니다.

      -D OPENCV_GENERATE_PKGCONFIG=ON

+ Recent posts