ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Raspberry Pi 3에 Extra Module(contrib) 포함하여 OpenCV 4.1.2 설치하는 방법
    OpenCV/Raspberry Pi 개발환경 2019.10.31 12:59



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




    1. 기존 OpenCV 버전 제거

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

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

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

    5. OpenCV 설치 결과 확인

        5.1. C/C++

        5.2. Python



    최초작성 2016. 5. 4

    최종작성 2019. 10. 31





    2019년 9월 26일에 릴리즈된 Raspbian 이미지와 OpenCV 4.1.2을 사용했습니다.

    사용한 버전과 다른 것을 사용하면 예기치 못한 문제가 발생할 수 있습니다. 


    본 포스트에서 4.1.2과 관련해서 추가된 부분은 노랑색 박스에 표시했습니다. 

    이하 버전 사용시에는 필요없는 부분입니다. 

    4.1.2 이후 버전에서도 달라질 수 있습니다. 


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


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





    1. 기존 OpenCV 버전 제거 

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




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


    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




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


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


    또는


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



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


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




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

    2-0. 진행하면서 패키지가 많이 설치되기 때문에  속도를 올리기위해 라즈비안에서 패키지 다운로드하는 곳을 변경합니다.


    https://www.raspbian.org/RaspbianMirrors 에서 South Korea를 찾아 주소를 복사합니다. 

    여기에서는  http://ftp.kaist.ac.kr/raspbian/raspbian/를 사용하겠습니다. 



    sources.list를 열어서 다음처럼 수정합니다. 


    pi@raspberrypi:~ $ sudo nano /etc/apt/sources.list



    수정전

    deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi


    수정후

    deb http://ftp.kaist.ac.kr/raspbian/raspbian/ buster main contrib non-free rpi



    일부 패키지는 라즈베리파이재단(?)의 패키지 저장소에서 가져오기 때문에 패키지 다운로드 속도를 올릴 수 있는 확실한 방법은 아닙니다.  




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

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



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

    여기에서 에러가 난다면 앞에서 추가한 주소를 다른 곳으로 변경해보세요. 


    pi@raspberrypi:~ $ sudo apt-get update 




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


    pi@raspberrypi:~ $ sudo apt-get upgrade



    업데이트한 패키지가 모두 적용되도록 재부팅후 진행합니다. 




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

    3-1. OpenCV를 컴파일하는데 필요한 패키지들을 설치합니다. 

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

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




    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 설정과 컴파일 및 설치


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


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




    4-2. OpenCV 4.1.2 소스코드를 다운로드 받아 압축을 풀어줍니다.

     

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




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

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

     

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




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


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

    opencv-4.1.2  opencv_contrib-4.1.2




    4-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 $  




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

    다음 옵션은 빌드할 OpenCV 버전에 맞추어 아래 경로중 빨간색 부분을 변경하세요. 

    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.2/modules 


    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 ../




    4-7. 다음처럼 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-8. 다음과 같은 메시지가 보이면 정상적으로 된 것입니다.


    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/pi/opencv/opencv-4.1.2/build




    cmake 실행 결과입니다.


    -- General configuration for OpenCV 4.1.2 =====================================

    --   Version control:               unknown

    --

    --   Extra modules:

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

    --     Version control (extra):     unknown

    --

    --   Platform:

    --     Timestamp:                   2019-10-30T13:13:38Z

    --     Host:                       Linux 4.19.75-v7+ armv7l

    --     CMake:                       3.13.4

    --     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 8.3.0)

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

    --     C++ flags (Debug):           -fsigned-char -W -Wall -Werror=return-type -Werror=non-vi        rtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-        declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit -self -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -        Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sectio ns -fdata-sections -mfpu=neon -fvisibility=hidden -fvisibility-inlines-hidden -g -O0 -DDEBU G -D_DEBUG

    --     C Compiler:                  /usr/bin/cc

    --     C flags (Release):           -fsigned-char -W -Wall -Werror=return-type -Werror=non-vi        rtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-        declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Ws hadow -Wuninitialized -Winit-self -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow         -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -mfpu=neon -fvisibility=hidden -O3 -DNDEBUG -DNDEBUG

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

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

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

    --     ccache:                      NO

    --     Precompiled headers:         NO

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

    --     3rdparty dependencies:

    --

    --   OpenCV modules:

    --     To be built:                 aruco bgsegm bioinspired calib3d ccalib core datasets dnn         dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy gapi hfs highgui img_has        h imgcodecs imgproc line_descriptor ml objdetect optflow phase_unwrapping photo plot python2 python3 quality reg rgbd saliency shape stereo stitching structured_light superres surface_ma        tching 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:         YES

    --

    --   GUI:

    --     GTK+:                       YES (ver 2.24.32)

    --       GThread :                  YES (ver 2.58.3)

    --       GtkGlExt:                  YES (ver 1.2.0)

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

    --     VTK support:                 NO

    --

    --   Media I/O:

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

    --     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.36)

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

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

    --     OpenEXR:                     build (ver 2.3.0)

    --     HDR:                       YES

    --     SUNRASTER:                   YES

    --     PXM:                       YES

    --     PFM:                       YES

    --

    --   Video I/O:

    --     FFMPEG:                      YES

    --       avcodec:                   YES (58.35.100)

    --       avformat:                  YES (58.20.100)

    --       avutil:                   YES (56.22.100)

    --       swscale:                   YES (5.3.100)

    --       avresample:                NO

    --     GStreamer:                   YES (1.14.4)

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

    --     Xine:                       YES (ver 1.2.9)

    --

    --   Parallel framework:            pthreads

    --

    --   Trace:                         YES (with Intel ITT)

    --

    --   Other third-party libraries:

    --     Lapack:                      NO

    --     Eigen:                       YES (ver 3.3.7)

    --     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.2/3rdparty/include/opencl/1.2

    --     Link libraries:              Dynamic load

    --

    --   Python 2:

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

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

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

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

    --

    --   Python 3:

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

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

    --     numpy:                       /usr/lib/python3/dist-packages/numpy/core/include (ver 1.        16.2)

    --     install path:                lib/python3.7/dist-packages/cv2/python-3.7

    --

    --   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

    -- Build files have been written to: /home/pi/opencv/opencv-4.1.2/build





    4-9. 진행하기 전에 스왑(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.2/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.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:         896668 86292       63540 18036 746836      726832

    Swap:       2097148           0     2097148

    2048메가로 바뀝니다. 




    4-10. 이제 make 명령을 사용하여 컴파일을 시작합니다.  -j4 옵션을 주고 우선 진행합니다.   


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




    이번에는 에러없이 진행이 되었습니다. 237/60 = 3.9 시간 정도 걸렸네요. 


    real    237m38.085s

    user    517m45.986s

    sys     20m36.789s



    라즈비안 2019년 9월 26일 버전과 OpenCV 4.1.2을 사용했을 때에 문제 없이 완료된 것입니다. 

    사용한 조합이 다르면 문제가 생길 수도 있습니다. 



    혹, python 라이브러리 빌드하는 부분에서 다음처럼 오랫동안 멈춤 현상이 있는 경우 . Ctrl + C를 눌러 중지하고 




    make 명령으로 다시 진행해서 완료하면 됩니다. 


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




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


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



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



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

     

    pi@raspberrypi:~/opencv/opencv-4.1.2/build $ sudo ldconfig




    4-13. /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



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


    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:         896672 85660      220784 22084 590228      725888
    Swap:        102396           0      102396




    5. OpenCV 설치 결과 확인 

    5.1. C/C++

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


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




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


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

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





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


    pi@raspberrypi:~/opencv/opencv-4.1.2/build $ ls /dev/video*

    /dev/video0




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


    sudo modprobe bcm2835-v4l2


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


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

    http://webnautes.tistory.com/1192



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


    //cap.open(deviceID + apiID);

    cap.open(-1);




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

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

    https://mobaxterm.mobatek.net/ 





    실행시켜보면 웹캠 영상이 보입니다. 


    $ ./videocapture_basic



    실행에 문제가 있는 경우 웹캠을 연결한채 재부팅하고나서 VNC를 사용하여 진행하세요.


    Raspberry Pi 3를 VNC로 접속하여 원격 제어하는 방법

    https://webnautes.tistory.com/549 




    5.1.4. 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} )



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

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




    실행시켜보면 웹캠 영상이 보입니다. 


    $ ./videocapture_basic




    5.2. Python


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

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


    pi@raspberrypi:~/opencv/opencv-4.1.2/build $ python
    Python 2.7.16 (default, Apr  6 2019, 01:42:57)
    [GCC 8.2.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'




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


    cap = cv.VideoCapture(-1)



     
    5.2.3. 예제 코드를 실행해봅니다. 웹캠 영상을 볼 수 있습니다. 


    $ python /usr/local/share/opencv4/samples/python/video.py


    $ python3 /usr/local/share/opencv4/samples/python/video.py




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


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




    포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
    댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

    여러분의 응원으로 좋은 컨텐츠가 만들어집니다. 지금 본 내용이 도움이 되었다면 후원 또는 유튜브 구독 부탁드립니다. 감사합니다 : )

    유튜브 구 독 하 기
    후 원 하 기


    댓글 703

    • 이전 댓글 더보기
    • 안녕하세요 2019.10.22 22:05


      전부 설치하고
      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가 없다고 에러띄웁니다.

    • harddddddddddd 2019.10.27 04:06


      중간에 궁굼한점이 생겨여쭈어봅니다.
      pi camera를 이용하여 opencv를 사용할 때에 포스트글처럼 opencv 4.1.1 사용불가하나요??
      불가하다면 어떠한 버전을 사용해야하나요?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.10.27 10:01 신고


        /dev/video0를 생성하면 OpenCV 버전에 상관없이 사용 가능합니다.

        아래 링크를 참고하세요

        Raspberry Pi Camera Module( pi camera )를 위해 /dev/video0 생성하는 방법
        https://webnautes.tistory.com/1192

      • hard 2019.10.27 12:57


        4번까지 확인하였고,
        pi camera를 이용하여 opencv를 사용하고자합니다. 파이카메라이용 dev0확인하고, 이미지 캡쳐까지 완료후에
        5.1.1
        $ g++ -o facedetect /usr/local/share/opencv4/samples/cpp/facedetect.cpp $(pkg-config opencv4 --libs --cflags) -latomic
        부터과정을 이어나가면
        ./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
        이 부분 실행시
        pi@raspberrypi:~/opencv/opencv-4.1.1/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
        [ WARN:0] global /home/pi/opencv/opencv-4.1.1/modules/videoio/src/cap_gstreamer.cpp (1757) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Device '/dev/video0' has no supported format
        [ WARN:0] global /home/pi/opencv/opencv-4.1.1/modules/videoio/src/cap_gstreamer.cpp (886) open OpenCV | GStreamer warning: unable to start pipeline
        [ WARN:0] global /home/pi/opencv/opencv-4.1.1/modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
        과 같은 오류가 발생합니다 무엇이 문제일까요?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.10.27 17:04 신고


        파이카메라의 해상도가 OpenCV와 충돌나는 듯한데 원인이 확실치 않네요..

        아래 포스트에 있는 간단한 카메라 예제로 테스트 해보세요.

        https://webnautes.tistory.com/1351


        그리고 다음처럼 카메라에서 캡처하는 해상도를 조정해보세요.

        cap.set(CV_CAP_PROP_FRAME_WIDTH,640);
        cap.set(CV_CAP_PROP_FRAME_HEIGHT,480);

    • 그린아버 2019.10.27 21:59


      opencv 소스를 이용해서 영상처리관련 코드를 짜고 저장하면서 테스트를 해보고싶은데요. cmake베이스일텐데 사용방법을 모르겠습니다;;
      cmake와 opencv설치가 성공은 한 것 같습니다. 파이캠을 사용하는데
      Raspberry Pi Camera Module( pi camera )를 위해 /dev/video0 생성하는 방법
      http://webnautes.tistory.com/1192
      을 통해서 파이캠으로 캡쳐까지 성공한 상태입니다.

      매번
      LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1.2.0 python
      이 명령어를 통해서 저장이 되지 않는 상태로 테스트만 해볼 수 있는 건가요?
      이 설치 팁은 python 언어로 opencv를 사용하는 것을 위한 게 맞죠?

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


        python 앞에 LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1.2.0를 붙여준건 OpenCV 4.1.1에서만 해당되는 내용입니다.

        OpenCV 4.1.2에서는 해결되었는지 확인을 아직 못해봤네요.


        LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1.2.0 python 소스코드.py로 실행해야 합니다.

      • 그린아버 2019.10.28 20:25


        우선 저는 4.1.1로 설치해서 하고있는데(4.1.2는 공홈에 아직없는거같아요) 해당 명령어로 python 언어파일 컴파일시키니 잘 작동됩니다. 완전감사합니다! ㅠㅠ

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.10.28 21:33 신고


        잘된다니 다행입니다.

        4.1.2는 아래 OpenCV를 위한 깃허브에서 찾을 수 있습니다.
        https://github.com/opencv/opencv/releases

        보통 OpenCV 최신 버전이 공식 홈페이지보단 깃허브에 빨리 올라옵니다.

    • 늦깍이 개발자 2019.10.29 18:11


      9월 26일자로 릴리즈된 라즈비안으로 설치를 이상없이 진행을 했는데요,
      막상 파이썬을 실행해보니 아래와 같이 "cv2" 모듈을 찾을수 없다고 하네요...
      ~ $ python
      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
      Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      ModuleNotFoundError: No module named 'cv2'

      혹시 9월 26일자 라즈비안에서 사용하는 방법은 다를까요?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.10.29 18:50 신고


        라즈비안 버전 또는 업데이트 정도에 따라 cmake 실행시 다음처럼 python이 인식되는지 여부가 달라질 수 있습니다.

        -- Python 2:
        -- Interpreter: /usr/bin/python2.7 (ver 2.7.16)
        -- Libraries: /usr/lib/arm-linux-gnueabihf/libpython2.7.so (ver 2.7.16)
        -- numpy: /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.16.2)
        -- install path: lib/python2.7/dist-packages/cv2/python-2.7
        --
        -- Python 3:
        -- Interpreter: /usr/bin/python3 (ver 3.7.3)
        -- Libraries: /usr/lib/arm-linux-gnueabihf/libpython3.7m.so (ver 3.7.3)
        -- numpy: /usr/lib/python3/dist-packages/numpy/core/include (ver 1.16.2)
        -- install path: lib/python3.7/dist-packages/cv2/python-3.7


        이런 경우 cmake에 다음 항목을 사용중인 라즈비안에 맞게 설정을 바꾸어 추가하여 python을 인식하도록 해주어야 합니다.

        -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/x86_64-linux-gnu/libpython2.7.so \

        -D PYTHON3_INCLUDE_DIR=/usr/include/python3.6m \

        -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include/ \

        -D PYTHON3_PACKAGES_PATH=/usr/lib/python3/dist-packages \

        -D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so \

      • 늦깍이 개발자 2019.10.30 11:00


        답변 감사합니다.

        알려주신 방법으로 시도를 했는데도 불구하고 동일하게 cv모듈을 찾을 수 없다고 하네요... ㅜㅜ;

        그래서 혹시나 하는 마음으로 pip install opencv-python을 실행하니까 3.4.3 버전으로 설치가 되어서 3.4.3버전으로 사용하여야 할 것 같네요.

        그리고 sudo apt install python3-opencv로 설치를 하니까 4.1.1 버전이 설치가 되네요.

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.10.30 11:34 신고


        다행입니다^^

        포스트 내용을 다시 확인해보겠습니다.
        감사합니다~

    • momo 2019.10.31 21:51


      자세한 설명 감사합니다. time make -j4 명령으로 컴파일 하던중 네트웍 커넨션이 끊어져 라즈베리 리부팅 후
      make 로 계속 진행했는데.. 87% 진행하다가 다음과 같은 오류가 났습니다.
      혹시 원인을 알 수 있을까요?

      [ 87%] Linking CXX shared library ../../lib/libopencv_xobjdetect.so
      /usr/bin/ld: CMakeFiles/opencv_xobjdetect.dir/src/wbdetector.cpp.o: file not recognized: file truncated
      collect2: error: ld returned 1 exit status
      make[2]: *** [modules/xobjdetect/CMakeFiles/opencv_xobjdetect.dir/build.make:137: lib/libopencv_xobjdetect.so.4.1.2] 오류 1
      make[1]: *** [CMakeFiles/Makefile2:4644: modules/xobjdetect/CMakeFiles/opencv_xobjdetect.dir/all] 오류 2
      make: *** [Makefile:163: all] 오류 2

    • 오픈씨브이 2019.11.01 09:03


      파이썬 빌드시에 터미널 사용하지 않고
      파이썬 편집기쓰면 안되나요?

    • 감사합니다 2019.11.04 13:12


      wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.2.zip 명령어 실행시 --2019-11-03 22:25:49-- https://github.com/opencv/opencv/archive/4.1.2.zip
      Resolving github.com (github.com)... failed: Temporary failure in name resolution.
      wget: unable to resolve host address ‘github.com’ 라는 오류가 뜨는데 어떻게 해결 가능한가요??

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.05 00:23 신고


        아래 링크를 참고하여 DNS를 추가해보세요.

        https://gracefullight.dev/2017/01/10/Temporary-failure-in-name-resolution-%EC%9D%BC%EC%8B%9C%EC%A0%81%EC%9D%B8-%EC%8B%A4%ED%8C%A8/

    • haides 2019.11.07 21:43


      좋은글 감사합니다
      글을 보며 따라하면서 막히는 부분이 있어서 문의 드립니다.

      현재 웹캠2개를 연결하여 사용중 아래와 같은 에러가 나면서 작동을 안합니다
      [ WARN:0] global /home/pi/opencv/opencv-4.1.2/modules/videoio/src/cap_gstreamer.cpp (933) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1

      캠을 1개씩 테스트 할때는 되는데 2개를 연결하니 안되네요...

      라즈베리파이4에서 USB3.0에 연결하여 테스트 해봤습니다.

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


        혹시 다음처럼 카메라 2대를 사용하도록 코딩을 했는지요?

        https://webnautes.tistory.com/720

      • haides 2019.11.07 22:20


        import datetime
        import cv2
        import RPi.GPIO as GPIO
        import os

        GPIO.setmode(GPIO.BCM)
        GPIO.setup(17, GPIO.IN, GPIO.PUD_UP)

        capture = cv2.VideoCapture(0)
        capture1 = cv2.VideoCapture(2)
        capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
        capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
        capture1.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
        capture1.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

        while True:
        GPIO.wait_for_edge(17, GPIO.FALLING)
        ret, frame = capture.read()
        ret, frame1 = capture1.read()

        now = datetime.datetime.now().strftime("%d_%H-%M-%S")

        cv2.imwrite("/home/pi/Desktop/1.jpg", frame)
        cv2.imwrite("/home/pi/Desktop/2.jpg", frame1)

        capture.release()
        capture1.release()

        파이썬으로 작업을 했습니다.

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.07 23:10 신고


        제가 알기론 VideoCapture에 카메라 인덱스를 적을때 0부터 시작하여 연속적으로 써야 합니다.

        아래 부분에서 2를 1로 고치면 동작할거 같습니다.
        capture = cv2.VideoCapture(0)
        capture1 = cv2.VideoCapture(2)

      • haides 2019.11.08 21:23


        확인을 해보니 0,2,4이렇게 짝수로 인덱스가 잡히네요..
        왜 그런지 초보자라 많이 막막하네요...

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


        카메라를 모두 연결한 상태에서 -1부터 시작해서 어떤 카메라가 연결되나 확인해보세요..

        라즈베리파이의 경우에는 video 디바이스 파일 이름이 제멋대로 인듯하더군요.

    • Yang 2019.11.09 17:38


      안녕하세요 설명해주신대로 다 설치하고 테스트를 진행하려고 하는데 cpp파일이 없으면 어떡하나요...vidiocapture_basic.cpp이 파일이 없어요...

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.09 17:59 신고


        다음 링크에 있는 코드를 복사하여 사용하세요
        https://github.com/opencv/opencv/blob/master/samples/cpp/videocapture_basic.cpp

    • 인두기 2019.11.10 00:08


      안녕하세요 글이 업데이트 됐네요.
      갑자기 다시 쓸 일이 생겨서 동일버전으로 하고 있는데 make 가 99%에서 안되네요.
      예전에는 잘 됐는데 말이죠....
      감사합니다.

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.10 15:38 신고


        저는 4시간만에 make -j4로 성공했지만
        그 이상 걸리는 거 일 수도 있습니다.

        Ctrl + C로 중지하고
        make로 이어서 해보세요

        기다리는거 말고는 다르게 해결할 수 있는 방법이 없습니다.

    • 곰벙이 2019.11.11 12:40



      수고많으십니다 ~
      포스팅을 따라하던중 . 컴파일 하다가 이런 오류가 생기는데 ...

      이유를 모르겠습니다 ^^; 알려주실수 있으실까요 ? 라즈베리파이는 3b 모델을 쓰고있습니다.


      -D OPENCV_GENERATE_PKGCONFIG=ON ../CMake Warning:
      No source or binary directory provided. Both will be assumed to be the
      same as the current working directory, but note that this warning will
      become a fatal error in future CMake releases.

      CMake Error: The source directory "/home/pi/opencv/opencv-4.1.2/build" does not appear to contain CMakeLists.txt.
      Specify --help for usage, or press the help button on the CMake GUI.

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.12 09:18 신고


        cmake 명령을 build폴더 생성하고 이동하여 진행하셨나요?

        opencv-4.1.2 경로에 CMakeLists.txt 파일이 없다는 에러내요.. 확인해보세요.

    • dong9 2019.11.12 00:07


      안녕하세요~ 궁금한 점 있어 여쭤봅니다.
      라즈베리파이 4모델을 사용해서 jupyter 가상환경에 opencv를 설치하고 있는데 마지막까지 다 진행을 하고 python으로 들어가 import cv2 해주는 부분에서 python 2에서는 잘 작동하는데 python 3에서 ImportError: 경로~ undefined symbol: __atomic_fetch_add_8 에러가 발생하네요... 답변 주시면 감사드리겠습니다!

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.12 09:16 신고


        OpenCV 4.1.2로 업데이트되면서 해결된줄 알았는데 라즈비안에 따라 발생하기도 하나보네요.

        Python용으로 사용할거라면
        다음 명령으로 설치하는게 좋지 않을까 싶습니다.

        pip install opencv-contrib-python

    • garden 2019.11.13 09:49


      안녕하세요 설치 중 오류가 발생해서 여쭤봅니다.

      make 설치 도중
      make[2]: *** [modules/python3/CMakeFiles/opencv_python3.dir/build.make:63: modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o] Error 1
      make[1]: *** [CMakeFiles/Makefile2:3815: modules/python3/CMakeFiles/opencv_python3.dir/all] Error 2
      make: *** [Makefile:163: all] Error 2

      이러한 오류가 뜨는데 무슨 원인인지를 모르겠습니다.
      어떻게 해결해야 할까요ㅠㅠㅠ

    • 요사리안 2019.11.15 02:44


      python2로 하면
      [ WARN:0] global /home/pi/opencv/opencv-4.1.2/modules/videoio/src/cap_gstreamer.cpp (1757) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Failed to allocate required memory.
      [ WARN:0] global /home/pi/opencv/opencv-4.1.2/modules/videoio/src/cap_gstreamer.cpp (886) open OpenCV | GStreamer warning: unable to start pipeline
      [ WARN:0] global /home/pi/opencv/opencv-4.1.2/modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
      이 메세지가 뜨고

      python3으로 하면
      File "Face_Recog.py", line 10, in <module>
      import cv2
      File "/home/pi/.local/lib/python3.7/site-packages/cv2/__init__.py", line 3, in <module>
      from .cv2 import *
      ImportError: /home/pi/.local/lib/python3.7/site-packages/cv2/cv2.cpython-37m-arm-linux-gnueabihf.so: undefined symbol: __atomic_fetch_add_8

      이 메세지가 떠서
      LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1.2.0 python 소스코드.py으로 하면
      Traceback (most recent call last):
      File "Face_Recog.py", line 17, in <module>
      recognizer = cv2.face.LBPHFaceRecognizer_create()
      AttributeError: module 'cv2.cv2' has no attribute 'face'

      이 메세지가 뜨는데 어떻게 해결해야 할까요?

      전에 쓰던 라즈베리파이에서는 돌아가는데 새로산 라즈베리파이에서는 안되네요 ㅜㅜ

    • 조조 2019.11.19 04:42


      안녕하세요 안되는게 있어서 질문드립니다.ㅠ
      라즈베리파이3 쓰고있고, 9월26일자 라즈비안 새로 인스톨해서 기본설정만하고,
      이글에서 하라는대로 다 했는데 안되네요.
      앞부분들 다시 여러번 해봤고, 에러 없이 확실히 다 됐는데
      4.6번 에서 cmake가 안됩니다. 혹시 이유를 아시나요? ㅠㅠ
      다음과 같이 뜹니다.
      pi@raspberrypi:~ $ cmake -D CMAKE_BUILD_TYPE=RELEASE \

      >

      CMake Warning:

      No source or binary directory provided. Both will be assumed to be the

      same as the current working directory, but note that this warning will

      become a fatal error in future CMake releases.





      CMake Error: The source directory "/home/pi" does not appear to contain CMakeLists.txt.

      Specify --help for usage, or press the help button on the CMake GUI.

      pi@raspberrypi:~ $ -D CMAKE_INSTALL_PREFIX=/usr/local \

      >

      bash: -D: command not found

      pi@raspberrypi:~ $ -D WITH_TBB=OFF \

      >

      bash: -D: command not found

      pi@raspberrypi:~ $ -D WITH_IPP=OFF \

      >

      bash: -D: command not found

      pi@raspberrypi:~ $ -D WITH_1394=OFF \

      >

      bash: -D: command not found

      pi@raspberrypi:~ $ -D BUILD_WITH_DEBUG_INFO=OFF \

      >

      bash: -D: command not found
      ...
      이런식으로 4.6이 안되는데 원인을 아시면 해결방법좀 부탁드립니다 ㅠㅠ

    • titi 2019.11.19 21:53


      안녕하세요 설치 잘한것 같은데 설치 후에 문제가 있어서 여쭤봅니다..
      설치후에 GUI 에서 File manager(탐색기)가 열리지가않아요
      터미널 상에서는 파일이 있는게 확인되는데,
      GUI상에서는 어떤 폴더도실행하면, 창이 켜졌다가 바로 꺼집니다.
      바탕화면에서 휴지통이나 document 아이콘을 실행해도 마찬가지구요
      다른건 잘 켜지는거 같은데 파일 탐색기가 안열리니 답답하네요... ㅠㅠ 원인을 아시나요?
      opencv 설치하고 나서부터 그러네요

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.19 21:58 신고


        혹시 디스크 용량이 부족한건 아닌지 확인해보세요..

        포스트 설명대로하면 프로그램을 설치하는게 아니라 라이브러리를 설치하는 거라 프로그램 실행에는 영향을 주지 않게 됩니다.

    • titi 2019.11.19 22:24


      디스크 용량이 다음과 같은데 용량 문제는 아니겠죠? 재설치를 해봐야할까요..
      pi@raspberrypi:~ $ df -h
      Filesystem Size Used Avail Use% Mounted on
      /dev/root 15G 8.3G 5.4G 61% /
      devtmpfs 433M 0 433M 0% /dev
      tmpfs 438M 0 438M 0% /dev/shm
      tmpfs 438M 17M 421M 4% /run
      tmpfs 5.0M 4.0K 5.0M 1% /run/lock
      tmpfs 438M 0 438M 0% /sys/fs/cgroup

    • kck 2019.11.20 01:12


      라즈베리파이4에서 2019년 9월 26 릴리즈된 라즈비안과 OpenCV 4.1.2를 사용하였습니다.(포스터대로 설치하였습니다.)

      1. dmesg | tail를 실행하면

      [ 13.082421] Bluetooth: HCI UART protocol Broadcom registered
      [ 13.245848] fuse init (API version 7.27)
      [ 13.440308] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
      [ 13.440316] Bluetooth: BNEP filters: protocol multicast
      [ 13.440328] Bluetooth: BNEP socket layer initialized
      [ 13.486770] Bluetooth: RFCOMM TTY layer initialized
      [ 13.486782] Bluetooth: RFCOMM socket layer initialized
      [ 13.486797] Bluetooth: RFCOMM ver 1.11
      [ 2974.053357] bcm2835-v4l2: vidioc_s_fmt_vid_cap device busy
      [ 2974.144221] bcm2835-v4l2: vidioc_s_fmt_vid_cap device busy

      이렇게만 나오는데 제대로 설치된게 맞나요?

      2. ls /dev/video*를 실행하면

      /dev/video10 /dev/video11 /dev/video12

      이렇게만 나와서 sudo modprobe bcm2835-v4l2를 통하여 /dev/video0 장치를 만들어줘서 현재는

      /dev/video0 /dev/video10 /dev/video11 /dev/video12

      이렇게 나오는데 제대로 한게 맞나요?

      3. 파이카메라여서 cap.open(-1);, cap = cv.VideoCapture(-1)으로 변경하고 ./videocapture_basic, python3 /usr/local/share/opencv4/samples/python/video.py 실행하니깐

      [ WARN:0] global /home/pi/opencv/opencv-4.1.2/modules/videoio/src/cap_gstreamer.cpp (1757) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Cannot identify device '/dev/video-1'.
      [ WARN:0] global /home/pi/opencv/opencv-4.1.2/modules/videoio/src/cap_gstreamer.cpp (886) open OpenCV | GStreamer warning: unable to start pipeline
      [ WARN:0] global /home/pi/opencv/opencv-4.1.2/modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
      Start grabbing
      Press any key to terminate

      cpp이나 파이썬 둘 다 카메라는 잘보이는데 이런게 뜨는게 머가 문제있는건가요?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.20 08:36 신고


        1. 카메라 연결 후 바로 demsg를 실행해야 카메라 연결관련 메시지가 보입니다. 사용하는데 문제 없으면 무시해도 될듯합니다.

        2. 원래는 /dev/video0만 떠야 하는데 라즈베리파이의 경우에는 추가로 몇개 더 뜨는 듯합니다. 저도 이유는 모릅니다. 사용하는데에는 문제 없더군요.

        3. 사용하는데 문제 없으면 무시해도 될듯합니다.

      • kck 2019.11.20 10:20


        3번 경우 지금 경로가 opencv 디렉터리 경로에 있는 어떤 cpp와 관련된 내용 같은데 opencv 디렉터리를 삭제해도 되는건가요

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.21 08:23 신고


        샘플 코드가 다른 곳으로 복사되기 때문에 지워도 상관없지만 그냥 두어도 상관없긴합니다.

    • 리눅스 쌩초짜 2019.11.20 21:52


      저도 여기 있는데로 따라 했더니 잘 되어서 파이썬으로 카메라 찍히는 것까지 확인 했습니다만 파일 매니저가 열렸다 닫히는 현상이 나타났습니다. 리부팅 하여도 증상이 계속되어 https://rottk.tistory.com/55 이곳을 따라 했더니 해결 되었습니다. 제가 리눅스 완전 초짜라 따라하다가 cmake 실행 단계에서 옵션이랑 인수(?)를 입력하라고 나와서 먼지 몰라 패스 했고 cap = cv.VideoCapture(-1) 이것도 리눅스와 파이썬 어디 명령인지 몰라서 둘 다 해봤는데 오류 메세지 떠서 패스.
      디바이스 잡는것도 따로 안했는데 파이썬 예제로 카메라 찍혔습니다. 다만 예제 파일이 끝이 안 나서 작업관리자로 강제 죽였습니다.

    • sjq 2019.11.22 21:28


      안녕하세요 제가 궁금한게 있어서 질문드립니다. 노트북에서 노트북캠을이용하여 코드를 돌리면 잘돌아가는데 라즈베리파이와 웹캠을 이용하여 돌리면 카메라사진이 딜레이가 더 짧아져서 찍히는데 이유를 알수있을까요 예를들어 노트북에선 2초4초6초8초에 딱 찍히는데 라즈베리파이에선 4.52, 4.53,4.54이렇게찍힙니다ㅠ

Designed by Tistory.