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


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

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


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



1. OpenCV 2.4 버전 제거

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

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

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

5. OpenCV 설치 결과 확인

   5.1. C/C++

   5.2. Python


관련 포스팅


Raspberry Pi 3 사용하는 방법(마이크로 SD 카드에 라즈비안 라이팅, ssh 설정 및 접속방법, raspi-config 설정 방법)

http://webnautes.tistory.com/899  


마이크로 SD 카드에 라즈비안(RASPBIAN) 이미지 파일을 라이팅(writing)하고  SSH 접속을 위해 필요한 작업과 사용하기 전에 꼭 해줘야 하는 설정을 다룹니다.



최종 업데이트 2018. 10. 2 - 파이 카메라로 테스트시 주의점 추가


1. OpenCV 2.4 버전 제거

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




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




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

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

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




2-2. Raspbian 저장소(repository)로부터 패키지 리스트를 업데이트합니다.

기존에 설치된 패키지들의 새로운 버전이 저장소에 있다면 리스트를 업데이트 하기위해 실행합니다.


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. pkg-config는 프로그램 컴파일 및 링크시 필요한 라이브러리에 대한 정보를 메타파일(확장자가 .pc 인 파일)로부터 가져오는데 사용됩니다.


터미널에서 특정 라이브러리를 사용한 소스코드를 컴파일시 필요한 컴파일러 및 링커 플래그를 추가하는데 도움이 됩니다.  

$ sudo apt-get install pkg-config




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

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




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

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




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

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




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

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




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


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

$ sudo apt-get install libgtk2.0-dev



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

libgtk-3-dev

libqt4-dev

libqt5-dev




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

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




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

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




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

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

$ 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 3.4.3 소스코드를 다운로드 받아 압축을 풀어줍니다.

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




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

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

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




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


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

opencv-3.4.3  opencv_contrib-3.4.3




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

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


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

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

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

pi@raspberrypi:~/opencv/opencv-3.4.3/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-3.4.3/modules \
-D WITH_V4L=ON \
-D WITH_FFMPEG=ON \
-D WITH_XINE=ON \
-D BUILD_NEW_PYTHON_SUPPORT=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-3.4.3/build



cmake 실행 결과입니다.


-- General configuration for OpenCV 3.4.3 =====================================
--   Version control:               unknown
--
--   Extra modules:
--     Location (extra):            /home/pi/opencv/opencv_contrib-3.4.3/modules
--     Version control (extra):     unknown
--
--   Platform:
--     Timestamp:                   2018-09-13T10:40:15Z
--     Host:                      Linux 4.14.50-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++11:                      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-narrowing -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-narrowing -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-narrowing -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-narrowing -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):
--     Linker flags (Debug):
--     ccache:                      NO
--     Precompiled headers:         YES
--     Extra dependencies:          dl m pthread rt
--     3rdparty dependencies:
--
--   OpenCV modules:
--     To be built:                 aruco bgsegm bioinspired calib3d ccalib core datasets dnn dnn_objdetect dpm face features2d flann freetype fuzzy hfs highgui img_hash imgcodecs imgproc java_bindings_generator line_descriptor ml objdetect optflow phase_unwrapping photo plot python2 python3 python_bindings_generator reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking video videoio videostab xfeatures2d ximgproc xobjdetect xphoto
--     Disabled:                    js world
--     Disabled by dependency:      -
--     Unavailable:                 cnn_3dobj cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv hdf java matlab ovis sfm ts viz
--     Applications:                apps
--     Documentation:               NO
--     Non-free algorithms:         NO
--
--   GUI:
--     GTK+:                      YES (ver 3.22.11)
--       GThread :                  YES (ver 2.50.3)
--       GtkGlExt:                  NO
--     OpenGL support:              NO
--     VTK support:                 NO
--
--   Media I/O:
--     ZLib:                      /usr/lib/arm-linux-gnueabihf/libz.so (ver 1.2.8)
--     JPEG:                      libjpeg-turbo (ver 1.5.3-62)
--     WEBP:                      build (ver encoder: 0x020e)
--     PNG:                      /usr/lib/arm-linux-gnueabihf/libpng.so (ver 1.6.28)
--     TIFF:                      build (ver 42 - 4.0.9)
--     JPEG 2000:                   build (ver 1.900.1)
--     OpenEXR:                     build (ver 1.7.1)
--     HDR:                      YES
--     SUNRASTER:                   YES
--     PXM:                      YES
--
--   Video I/O:
--     FFMPEG:                      YES
--       avcodec:                  YES (ver 57.64.101)
--       avformat:                  YES (ver 57.56.101)
--       avutil:                  YES (ver 55.34.101)
--       swscale:                  YES (ver 4.2.100)
--       avresample:                NO
--     GStreamer:
--       base:                  YES (ver 1.10.4)
--       video:                  YES (ver 1.10.4)
--       app:                  YES (ver 1.10.4)
--       riff:                  YES (ver 1.10.4)
--       pbutils:                  YES (ver 1.10.4)
--     libv4l/libv4l2:              NO
--     v4l/v4l2:                    linux/videodev2.h
--     Xine:                      YES (ver 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-3.4.3/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)
--     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
--
--   Java:
--     ant:                      NO
--     JNI:                      NO
--     Java wrappers:               NO
--     Java tests:                  NO
--
--   Matlab:                        NO
--
--   Install to:                    /usr/local
-- -----------------------------------------------------------------
--
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/opencv/opencv-3.4.3/build





다음처럼 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-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
#   you most likely don't want this, unless you have an special disk situation
# CONF_SWAPSIZE=100
CONF_SWAPSIZE=1024



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


pi@raspberrypi:~/opencv/opencv-3.4.3/build $ free
             total used        free shared buff/cache   available
Mem:         896672 79656       64716 11840 752300      739640
Swap:        102396           0      102396
pi@raspberrypi:~/opencv/opencv-3.4.3/build $ sudo /etc/init.d/dphys-swapfile restart
[ ok ] Restarting dphys-swapfile (via systemctl): dphys-swapfile.service.
pi@raspberrypi:~/opencv/opencv-3.4.3/build $ free
             total used        free shared buff/cache   available
Mem:         896672 80128       61304 11840 755240      739168
Swap:       1048572           0     1048572



이제 make 명령을 사용하여 컴파일을 시작합니다. time은 시간 측정을 위해 추가했습니다.


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




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


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



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



/etc/ld.so.conf.d/ 디렉토리에 /usr/local/lib를 포함하는 설정파일이 있는지 확인합니다.

pi@raspberrypi:~/opencv/opencv-3.4.3/build $ cat /etc/ld.so.conf.d/*
/opt/vc/lib
# Multiarch support
/lib/arm-linux-gnueabihf
/usr/lib/arm-linux-gnueabihf
/usr/lib/arm-linux-gnueabihf/libfakeroot
# libc default configuration
/usr/local/lib




/usr/local/lib이 출력되지 않았다면 다음 명령을 수행합니다.

pi@raspberrypi:~/opencv/opencv-3.4.3/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.3/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-3.4.3/build $ sudo /etc/init.d/dphys-swapfile restart
[ ok ] Restarting dphys-swapfile (via systemctl): dphys-swapfile.service.


pi@raspberrypi:~/opencv/opencv-3.4.3/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++

C/C++를 위해 OpenCV 라이브러리 사용가능 여부를 확인합니다.

문제 없으면 설치된 OpenCV 라이브러리의 버전이 출력됩니다.


pi@raspberrypi:~/opencv/opencv-3.4.3/build $  pkg-config --modversion opencv
3.4.0



아래처럼 opencv를 찾을 수 없다고 나오면  추가 작업이 필요합니다.


pi@raspberrypi:~/opencv/opencv-3.4.3/build $  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




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'
$ sudo sh -c 'echo export PKG_CONFIG_PATH >> /etc/bash.bashrc'



로그아웃했다가 로그인하면 적용이됩니다.



다시 확인했을 때,  OpenCV 버전이 나와야 합니다.


pi@raspberrypi:~/opencv/opencv-3.4.3/build $ pkg-config --modversion opencv
3.4.3




pkg-config --libs --cflags opencv 명령을 실행했을 때 다음처럼 나오면 문제없이 설치가 완료된 것입니다.


pi@raspberrypi:~/opencv/opencv-3.4.3/build $ pkg-config --libs --cflags opencv
-I/usr/local/include/opencv -I/usr/local/include -L/usr/local/lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core


.


예제 코드를 하나 가져와서 컴파일 해보겠습니다.


$ cp /usr/local/share/OpenCV/samples/cpp/facedetect.cpp ./




테스트를 하기 위해  필요한 웹캠 또는 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;




이제 컴파일 후, 실행시켜 봅니다.


$ 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.3/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
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.x와 python 3x에서 opencv 라이브러리를 사용가능한지는 다음처럼 확인합니다.

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

pi@raspberrypi:~/opencv/opencv-3.4.0/build $ 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__
'3.4.0'
>>>


pi@raspberrypi:~/opencv/opencv-3.4.0/build $ 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__
'3.4.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/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

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-3.4.3/build $ cd
pi@raspberrypi:~ $ rm -rf opencv






해봤어요 www.facebook.com/webnautes/

  1. 이전 댓글 더보기
  2. 27315co 2018.08.01 14:33 신고

    아 정말 감사드립니다. 그렇다면 말씀하신대로 하면 컴파일을 할수있다는뜻인데 그렇다면
    아랫줄의
    ./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

    이것은 왜사용하는것이죠??? 그리고 예제코드를가져올때 $ cp /usr/local/share/OpenCV/samples/cpp/facedetect.cpp ./
    이것은 왜해주는것인가요???

    • webnautes webnautes 2018.08.01 15:12 신고

      얼굴인식 코드를 현재위치로 복사(cp)해서..

      얼굴 인식 코드에서 필요한 xml 파일 2개를 지정해서 실행한것입니다.

    • 27315co 2018.08.01 15:21 신고

      아 그런것이군요 정말감사합니다.!~

  3. yukjeonghun 2018.08.03 19:29 신고

    질문드립니다 ㅜ
    make -j4 입력한뒤 컴파일을 하는데 다음과 같은 에러가 뜹니다..

    [86%] Building CXX object modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/ellipticKeyPoint.cpp.o
    /home/pi/opencv/opencv_contrib-3.4.1/modules/xfeatures2d/src/boostdesc.cpp:653:37: fatal error: boostdesc_bgm.i: No such file or directory
    #include "boostdesc_bgm.i"
    ^
    compilation terminated.
    modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/build.make:91: recipe for target 'modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/boostdesc.cpp.o' failed
    make[2]: *** [modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/boostdesc.cpp.o] Error 1
    make[2]: *** Waiting for unfinished jobs....
    [ 86%] Built target opencv_ximgproc

    • webnautes webnautes 2018.08.04 15:51 신고

      cmake시 인터넷 연결된 상태에서 했나요?

      해당 파일들은 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

  4. Cosak 2018.08.12 20:14 신고

    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'
    $ sudo sh -c 'echo export PKG_CONFIG_PATH >> /etc/bash.bashrc'

    로그아웃했다가 로그인하면 적용이됩니다.

    이 부분을 진행해도 다시
    pi@raspberrypi:~/opencv/opencv-3.4.1/build $ 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

    이렇게 나옵니다. 다른 해결방법이 있을까요? 리플 부탁드리겠습니다.. ㅠ

  5. stu_lee 2018.08.20 15:49 신고

    [ 98%] Building CXX object modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o

    hi im korean.
    but can't get korean input from raspberrypi os.
    it doesn't work here either.
    is there any way of doing that?? help..

  6. stu_lee 2018.08.20 15:51 신고

    ^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:8384: 'modules/python2/CMakeFiles/opencv_python2.dir/all' 타겟에 대한 명령이 실패했습니다
    make[1]: *** [modules/python2/CMakeFiles/opencv_python2.dir/all] 인터럽트
    Makefile:160: 'all' 타겟에 대한 명령이 실패했습니다
    make: *** [all] 인터럽트

    this is the error content mentioned aobve.. help

  7. 우곰 2018.09.03 14:39 신고

    내용이 좋아서 제 블로그에 링크를 걸고 내용 정리만 해 두려고 하는데 괜찮을까요?

  8. ToBeMaster 2018.09.16 12:11 신고

    5.2. Python
    python 2.x와 python 3x에서 opencv 라이브러리를 사용가능한지는 다음처럼 확인합니다.
    각각 OpenCV 버전이 출력되어야 합니다.
    이부분에서 python,을 입력후
    import cv2 를 입력하면
    illegal instruction이라고 나오는데 어떻게 하면 작성자님처럼 결과가 나올 수 있을까요?
    p.s python3를 입력하고 import cv2를 입력해도 마찬가지네요..ㅠㅠㅠㅠ

  9. ToBeMaster2 2018.09.16 15:27 신고

    PRETTY_NAME=”Raspbian GNU/Linux 9 (stretch)”

    NAME=”Raspbian GNU/Linux”

    VERSION_ID=”9″

    VERSION=”9 (stretch)”

    ID=raspbian

    ID_LIKE=debian

    HOME_URL=”http://www.raspbian.org/”

    SUPPORT_URL=”http://www.raspbian.org/RaspbianForums”

    BUG_REPORT_URL=”http://www.raspbian.org/RaspbianBugs
    버전 확인 해 본 결과 이렇게 나왔어요.

    • webnautes webnautes 2018.09.16 15:28 신고

      라즈베리파이에 흰색글씨로 적혀 있는 버전이 있어요..

    • ToBeMaster3 2018.09.16 15:40 신고

      v1.1 이거 말씀하신 건가요?

    • webnautes webnautes 2018.09.16 15:58 신고

      Raspberry Pi 3라고 적혀있지 않나요?

    • ToBeMaster4 2018.09.16 16:06 신고

      전 raspberrypi zero w 씁니다.

    • webnautes webnautes 2018.09.16 16:14 신고

      cmake 실행시 다음 두개 옵션을 빼고 해보세요.

      -D ENABLE_NEON=ON \
      -D ENABLE_VFPV3=ON \

    • ToBeMaster5 2018.09.16 16:28 신고

      작성자님 혹시 제가 opencv를 다 설치한 상태인데 cmake 실행때 두개 옵션 빼라고 하신거는 opencv 이미 설치한 것을 지우고 다시 해야되는 건가요?

    • webnautes webnautes 2018.09.16 16:29 신고

      다시 설치하면 덮어쓰기 되서 지우고 깔 필요는 없습니다

  10. Query 2018.09.17 09:04 신고

    라즈베리파이 제로 w v1.1 라즈비안(Stretch) 입니다
    윗 분과 동일하게 python 과 python3로 import cv2할 시에 Illgal instruction이라는 에러가 뜹니다
    cmake로 두개의 명령어
    -D ENABLE_NEON=ON \
    -D ENABLE_VFPV3=ON \ 를 빼고 실행했음에도 불구하고 여전히 해결되지 않습니다 혹시 다른 해결 방법이 없을까요?

    • webnautes webnautes 2018.09.17 09:12 신고

      옵션을 뺀다고 비활성화되지 않나봅니다.
      다음처럼 해보세요.

      -D ENABLE_NEON=OFF \
      -D ENABLE_VFPV3=OFF \

    • Query 2018.09.17 11:14 신고

      설명해주신데로 해봤는데 해결되지 않았습니다. 오히려 Cmake쪽에서 에러가 나서 포맷을 생각중입니다. 어떻게 해결해야 할까요?
      그리고 보통 파이썬으로 import cv2에서 에러가 날 때 "error : 에러가 난 이유"를 보여주던데 저랑 윗분만 Illegal instruction 이라고만 뜨는 이유도 같이 말씀해주실수 있으신가요?

    • webnautes webnautes 2018.09.17 11:21 신고

      CPU에서 지원하지 않는 명령어를 사용하도록 OpenCV가 컴파일 되서 에러가 나는듯 합니다. 라즈3에선 동작했는데 라즈제로에선 동작안하기 때문입니다.

    • webnautes webnautes 2018.09.17 11:29 신고

      cmake실행시 -- CPU/HW features: 항목에 뭐라고 뜨나요?

    • Query 2018.09.17 11:57 신고

      -- CPU/HW features:
      -- Baseline:
      -- requested: DETECT
      -- required: VFPV3 NEON
      -- disabled: VFPV3 NEON
      -- Configuring incomplete, errors occurred!
      See also "/home/pi/opencv/opencv-3.4.3/build/CMakeFiles/CMakeOutput.log".
      See also "/home/pi/opencv/opencv-3.4.3/build/CMakeFiles/CMakeError.log".

      이런 에러가 발생합니다. 다시 명령어 2개를 ON으로 바꿧음에도 불구하고 계속 에러가 발생합니다. 혹시 재설치를 해야하는건가요? 당장 사용해야해서 opencv를 재설치할 시간이 없습니다.
      해결방법 간곡히부탁드립니다.

    • webnautes webnautes 2018.09.17 12:00 신고

      cmake실행전 build 폴더를 삭제하고 다시 build 폴더를 생성해서 해야 됩니다.

      두 옵션을 OFF로 다시 해서 해보세요

      그리구나서 다시 cmake에서 해당 옵션부분을 체크해보세요

    • Query 2018.09.17 12:32 신고

      build 삭제후 mkdir build부터 명령어 두개 OFF로 하고 다시 진행하면 되는건가요?

      build를 삭제했으니 make -j4도 다시 진행해야되는것이죠?

    • webnautes webnautes 2018.09.17 12:33 신고

      네.그렇게하면 됩니다. make -j4부터 다시해야 합니다

    • Query 2018.09.19 17:18 신고

      감사 인사가 늦었습니다. 덕분에 해결되었습니다. 정말 감사드립니다. 행복한 추석 보내세요

    • webnautes webnautes 2018.09.19 17:43 신고

      해결되어서 다행이군요..^^

  11. pizerow 2018.09.17 13:18 신고

    ToBeMaster님과 Query님 글 보고 illegal instruction 까지 갔고 작성자님께서 조언해주신 것을 보고 cmake 에서 두 부분을 off 했습니다.
    그런데 CPU에서 지원하지 않는 명령어를 사용하도록 OpenCV가 컴파일 되서 에러가 나는듯 합니다. 라즈3에선 동작했는데 라즈제로에선 동작안하기 때문입니다.
    라고 말씀하셨는데
    그렇다면 라즈베리 파이 제로w에서는 방법이 없는 건가요?
    부탁드립니다.

    • webnautes webnautes 2018.09.17 13:43 신고

      라즈2/3가 arm7이고 라즈zero는 arm6라서 문제라네요.

      다음처럼 패키지를 설치해야 할듯합니다.

      sudo apt install python3-opencv

  12. err2083 2018.09.21 12:19 신고

    안녕하세요 블로그 감사히 읽었습니다. 다름이 아니라 python2 에서는 opencv 가 버전이 잘 나오는데 python3 에서는 import2 부터 오류가 나는데 이유를 알수 있을까요?

    • webnautes webnautes 2018.09.21 12:21 신고

      cmake를 다시 실행해서 포스팅의 cmake 결과처럼 python3 항목들이 설정되는지 확인해보세요

  13. psh2517 2018.09.21 12:29 신고

    마지막 facedecect 실행파일까지 실행을 하였는데 , 영상이 따로 뜨지가 않는데 무엇이 문제일까요 ?

  14. psh2517 2018.09.21 12:50 신고

    네네 에러는 뜨지않고 실행창에 실행되고 있는데 영상이 안뜨고 그대로 실행중이라는 커서만 깜빡감빡거리네요 ..
    네 디바이스 파일은 생성되어있었어요 ~ ㅠ.. 저는 주로 putty를 쓰지만 mobaX로 다 해봤습니다..

    • webnautes webnautes 2018.09.21 14:02 신고

      X윈도우에서 치즈같은 프로그램으로 확인해볼 필요가 있을듯합니다.

    • psh2517 2018.10.01 19:30 신고

      수고많으십니다.. 여전히 제 라즈베리파이에서는 카메라 API 창이 안떠서 그래서 질문드립니다. buffer_prepare data will not fit into plane 이런 에러가 뜨는데 .. dmesg를 치면 혹시 해결가능한 건가요 ?

    • webnautes webnautes 2018.10.01 20:05 신고

      카메라 연결후 dmesg를 바로 실행하면 카메라 연결정보가 보입니다.

    • psh2517 2018.10.01 20:48 신고

      아 오타를 적었네요 ... 위의 facedect 예제를 실행했을 때, 카메라 창이 안뜨고 반응이없어서 Ctrl+c 를 해서 , dmesg 메시지를쳤을 때 위의 buffer_prepare data will not fit into plane 이 오류가 떴습니다 ... 영상출력버퍼 문제로 보여서 라즈베리파이 해상도조절 해봤는데 안되네요 .. ㅠㅠ

    • webnautes webnautes 2018.10.01 23:03 신고

      카메라 연결 직후.. dmesg 실행시켰을 때 정상적으로 카메라가 인식되었는지 확인해보세요.

    • psh2517 2018.10.02 10:06 신고

      modprobe 명령어로 커널에 삽입했을때, dmesg로 확인한 결과 정상적으로 연결정보 뜹니다 .ㅠㅠ
      [ 61.678553] Linux video capture interface: v2.00
      [ 61.703673] bcm2835_v4l2: module is from the staging directory, the quality is unknown, you have been warned.
      [ 62.335305] bcm2835-v4l2: scene mode selected 0, was 0
      [ 62.335720] bcm2835-v4l2: V4L2 device registered as video0 - stills mode > 1280x720
      [ 62.341598] bcm2835-v4l2: Broadcom 2835 MMAL video capture ver 0.0.2 loaded.

    • webnautes webnautes 2018.10.02 10:09 신고

      다음 포스팅에 나온대로 치즈로 테스트해보세요.

      http://webnautes.tistory.com/1192

    • psh2517 2018.10.02 13:23 신고

      치즈는 되더라구요 .. raspivid , raspistill 이런 명령어로도 사진은찍힙니다..

    • webnautes webnautes 2018.10.02 20:27 신고

      생각지못한 문제가 있었네요.. 해결방법이 늦었네요..

      open함수에 아규먼트로 0대신에 -1을 대입하면 문제가 해결됩니다.

      VideoCapture cap;
      cap.open(-1);



    • psh2517 2018.10.07 15:57 신고

      정말감사합니다, 덕분에 해결이 되엇네요 ㅎㅎ ㅎㅎ 혹시 원인이 뭔지 알 수 있을까요 ? .. 코드 분석해보니 inputname[0] 에 - '0' 을 빼게 되서 문자'0' 인식이 안되서 이렇게 되는거 같던데 맞나요 ? ㅎㅎ

    • webnautes webnautes 2018.10.07 16:33 신고

      원래 VideoCapture에서 0을 아규먼트로 사용하면 장치에 처음 연결된 첫번째 카메라를 사용하게 됩니다.

      문제가 있어서 접근이 안되는 경우 -1을 사용하면 동작가능한 카메라를 연결해준다 하는 군요

  15. err2083 2018.09.22 22:45 신고

    좋은글 감사합니다. ㅎㅎ

  16. ㅇㄹㄹㄹ 2018.10.08 16:26 신고

    5.1보고 버젼확인하려는데요 따라해봐도 계속 못찾는다고 오류나면 어디서부터 다시해야하나요 ㅜㅜ그리고 cmake 만들때 한줄한줄 복사해서 넣는거 맞죠? 한꺼번에 복사해서 넣으니까 오류나더라구요

  17. 꼬녕스 2018.10.08 21:37 신고

    source ~/.profile
    workon cv

    (cv) pi@raspberrypi:~ $ cd ~/.virtualenvs/cv/lib/python3.4/site-packages/
    (cv) pi@raspberrypi:~/.virtualenvs/cv/lib/python3.4/site-packages $ ln -s /usr/local/lib/python3.4.2/site-packages/cv2.so cv2.so
    (cv) pi@raspberrypi:~/.virtualenvs/cv/lib/python3.4/site-packages $ python

    Python 3.4.2 (default, Sep 26 2018, 07:16:01)
    [GCC 4.9.2] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import cv22
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    ImportError: No module named 'cv2'

    라고 뜹니다ㅜㅜ
    https://blog.naver.com/roboholic84/221139256044
    이 블로그를 따라서 했는데 왜 안될까요..?

  18. jwbae 2018.10.13 20:19 신고

    안녕하세요, 좋은 글 덕분에 많은 공부하고 갑니다. 혹시 그러면 마지막 예제를 통해 얼굴이 나오게 되는것은 스트리밍 되고 있는 것인가요?

    • webnautes webnautes 2018.10.13 20:34 신고

      스트리밍은 아니고 mobaXterm을 사용하면 VNC와 유사하게 동작해서 실행결과 창을 윈도우에서 띄워줍니다.

  19. GUN0S 2018.10.14 00:12 신고

    다 따라했는데 중간에 time make -j4 부분에서
    98% Building CXX object modules/python3/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o
    98% Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o

    여기서 멈춥니다. 어떻게해결해야하나요?ㅜㅜ

    • gun0s 2018.10.14 00:50 신고

      추가로 질문드립니다.
      계속 해봤는데 똑같네요..
      우선 작성자님께서 작성해주신 글 그대로 따라하고있었구요
      따라하면서 CMAKE부분에서 다른 점이 하나있었습니다.
      바로 파이썬의 버전이
      python은 2.7.9
      python3은 3.4.2
      입니다. 혹시 위의 98% 멈춤 해결하려면 어떻게해야하나요 제발 알려주세요 ㅜㅜ

    • webnautes webnautes 2018.10.14 06:21 신고

      그부분이 파이썬용 라이브러리 생성하는 건데. 오래.걸렸던것으로 기억합니다

  20. 라즈베리초보 2018.10.15 14:18 신고

    첨에 github 외국 블로거 글 보고 설치를 했는데 예제 파일이 없어서 이 글 찾은다음 그대로 재설치를 했는데도 예제파일이 없어요 ㅠㅠ
    일단 설치 끝나고 pkg-config --libs --cflags opencv를 해보면

    -I/usr/local/include/opencv -I/usr/local/include -L/usr/local/lib -lopencv_dnn - lopencv_ml -lopencv_objdetect -lopencv_shape -lopencv_stitching -lopencv_superre s -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_imgproc -lopencv_flann -lopencv_core

    작성자님이랑은 다르게 목록이 조금 적게 나와요ㅠㅠ
    또 설치전 Cmake를 했을때 GUI 목록에서 OpenGL 부분도 안나오구요 ㅠㅠ

    작성자님이랑 제 환경이 조금 다른게 제 라즈베리는 Raspberry pi 3 b+ 인데 이게 문제인가요?
    아 그리구 설치 후에도 Cmake 수정하고 다시 설치하면 아무 이상없나요? 아니면 Cmake 변경하려면 다시 삭제하고 해야하나요?

    • webnautes webnautes 2018.10.15 15:23 신고

      라즈비안은 똑같기때문에 차이는 없을듯 보입니다.

      예제코드는 소스코드 디렉토리 opencv/shmples에 있습니다.

    • 라즈베리초보 2018.10.15 15:41 신고

      /usr/local/share/OpenCV/ 폴더에 samples 라는 폴더도 없고 cpp 파일 비스무리한 파일도 없습니다 ㅠㅠ

    • webnautes webnautes 2018.10.15 15:44 신고

      다운로드 받아 압축을 풀었던 opencv / samples를 확인하세요

    • 라즈베리초보 2018.10.15 15:54 신고

      컹 ㅋㅋㅋㅋ 감사합니다 찾았습니다. ㅠㅠ
      cp 명령어를 build 폴더안에서 쓰고 앉았었네요ㅠㅠ이거때매 이틀 헤맸는데 하.. 왜 예제코드 가져오는 명령어 앞에 달라표시만 있었는지 생각을 못햇을까 ㅋㅋㅋㅋ 아직 리눅스 초보라 죄송합니다 ㅠㅠ

    • webnautes webnautes 2018.10.15 15:57 신고

      괜찮습니다. 첨엔 다들 그러는 거죠 ^^

    • 라즈베리초보 2018.10.16 15:01 신고

      sudo 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
      Traceback (most recent call last):
      File "/usr/local/share/OpenCV/samples/python/facedetect.py", line 17, in <module>
      from video import create_capture
      ImportError: No module named video

      cpp 파일은 동작가능한데 python 파일은 이런 오류코드가 뜹니다. cam = create_capture(-1, fallback='synth:bg=../data/lena.jpg:noise=0.05')

      이 소스 코드 수정했고, 그 밑에 소스코드 cap = cv.VideoCapture(-1) 이거는 facedetect.py 파일에 없는데 어디서 수정해야되는지 모르겠습니다. ㅠㅠ 혹시 /usr/local/share/OpenCV/samples/python 폴더에 facedect.py 파일 말고 다른 파일도 함께 넣어줘야하는건가요?

    • webnautes webnautes 2018.10.16 15:30 신고

      확인해보니 facedetect.py를 실행하려면 samples/python 폴더에서 다음 파일들이 추가로 필요합니다.

      common.py
      tst_scene_render.py
      video.py




    • 라즈베리초보 2018.10.16 15:39 신고

      감사합니당 ㅎㅎ
      근데 그냥 opencv-3.4.3 샘플폴더의 Python 폴더 다 복사해서 usr/local/share/OpenCV/samples 에 다 넣어 주니까 되더라구요

      아 그리고 저는 파이 카메라 쓰는데도 -1 코드수정 안해줘도 카메라랑 얼굴인식 실행되던데 대신 이런 메세지가 뜹니다.

      face detection using haar cascades

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


      (python:3326): GStreamer-CRITICAL **: gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed
      ^CTraceback (most recent call last):
      File "/usr/local/share/OpenCV/samples/python/facedetect.py", line 57, in <module>
      rects = detect(gray, cascade)
      File "/usr/local/share/OpenCV/samples/python/facedetect.py", line 23, in detect
      flags=cv.CASCADE_SCALE_IMAGE)

      ㅎㅎ 무튼 실행되면 상관없겠지요?

    • webnautes webnautes 2018.10.16 15:51 신고

      네.. 무시해도 됩니다..

  21. 안녕하세요 2018.10.16 22:25 신고

    저번에 카메라 때문에 질문드렸는데요
    카메라 새로 사서 달아봤는데도 안되더라구요
    그래서 혹시 opencv path가 문제있나 다시 깔아보려는데
    opencv 삭제할때 2.4버전 삭제랑 똑같이 하면 되나요?

    • webnautes webnautes 2018.10.17 00:03 신고

      포스팅처럼 2018년 6월 27일 버전 라즈비안을 설치해서 패키지 업데이트 후 똑같이 진행해보세요.. 그래야 하드웨어 문제인지 알수 있을 듯합니다.

      USB 포트가 4개이니 바꿔서도 꽂아보시구요..

+ Recent posts

티스토리 툴바