ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RaspberryPi, OpenCV 설치 사용하기
    Search: Iot Iot 2023. 8. 12. 19:12

     

    build과정 참고용, 자동배치 sh파일로 간편하게 설치할 것을 권장.
    'Raspberry Pi, OpenCV 설치 사용하기 (sh파일 실행)'

     

    Module은 시간이 지남에 따라 여러 버전이 릴리스될 수 있다. 약간씩이라도 차이가 있을 것이며 종종 이전 버전이나 표준 라이브러리와 완전히 호환되지 않을 수 있다. 특히 개발자가 많은 프로젝트인 OpenCV는 버전 다양성에 민감하다.

    위험을 최소화하려면 최신 컴파일러와 함께 최신 버전의 OpenCV를 사용하기를 권장한다.
    예를 들어 새로운 Raspbian 운영 체제에서, 오래된 버전의 OpenCV를 설치하는 것은 아주 큰 모험이 될 수 있다. 호환되지 않는 많은 오류를 해결해야 한다. 이것이 Pythonians가 가상 환경을 좋아하는 이유다. 모든 소프트웨어와 필요한 라이브러리를 별도의 디렉토리에 넣어 보관하는 방법을 사용하고 있다.

     

    비전 프로젝트의 경우 GPU의 메모리용량이 중요하다.
    Raspberry Pi의 물리적 RAM을 CPU와 GPU가 사용하고 있다.
    Raspberry Pi 2 또는 3에서 GPU에 할당된 기본값은 64MB이며 이것은 다소 작을 수 있다. GPU의 메모리 양을 늘리는 것을 권장한다.
    Raspberry Pi 4에는 GPU에 128MB가 할당된다. 이정도면 그대로 사용하다 필요하면 변경하면 된다.

    GPU 메모리 용량 조절 방법

    $ sudo raspi-config

    AdvancedOptions -> MemorySplit -> 128MB

     

    OS 비트 확인(32,64,...)

    getconf LONG_BIT

     

     

    필수 유틸 설치

    #sudo apt-get install gcc-arm*
    sudo apt-get install -y build-essential cmake git unzip pkg-config
    
    #sudo apt-get install libopenexr-dev
    sudo apt-get install -y libtbb2 libtbb-dev libdc1394-22-dev
    sudo apt-get install -y protobuf-compiler
    
    sudo apt-get install -y libjpeg-dev libtiff-dev libpng-dev
    sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev
    sudo apt-get install -y libgtk2.0-dev libcanberra-gtk* libgtk-3-dev
    sudo apt-get install -y libgstreamer1.0-dev gstreamer1.0-gtk3
    sudo apt-get install -y libgstreamer-plugins-base1.0-dev gstreamer1.0-gl
    sudo apt-get install -y libxvidcore-dev libx264-dev
    sudo apt-get install -y python3-dev python3-numpy python3-pip
    sudo apt-get install -y libv4l-dev v4l-utils
    sudo apt-get install -y libopenblas-dev libatlas-base-dev libblas-dev
    sudo apt-get install -y liblapack-dev gfortran libhdf5-dev
    sudo apt-get install -y libprotobuf-dev libgoogle-glog-dev libgflags-dev

     

    opencv source 받아서 build를 위한 준비

    # download the latest version
    cd ~ 
    sudo rm -rf opencv*
    git clone --depth=1 https://github.com/opencv/opencv.git
    git clone --depth=1 https://github.com/opencv/opencv_contrib.git

    다른 방식(참고용)

    wget -O opencv.zip https://github.com/opencv/opencv/archive/4.8.0.zip
    wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.8.0.zip
    
    unzip opencv.zip
    unzip opencv_contrib.zipdir
    
    mv  opencv-4.8.0 opencv
    mv  opencv_contrib-4.8.0 opencv_contrib

     

     

     

    opencv build

     

    cmake

    cd ~/opencv/
    mkdir build
    cd build
    
    # run cmake
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D ENABLE_NEON=ON \
    -D WITH_OPENMP=ON \
    -D WITH_OPENCL=OFF \
    -D BUILD_TIFF=ON \
    -D WITH_FFMPEG=ON \
    -D WITH_TBB=ON \
    -D BUILD_TBB=ON \
    -D WITH_GSTREAMER=ON \
    -D BUILD_TESTS=OFF \
    -D WITH_EIGEN=OFF \
    -D WITH_V4L=ON \
    -D WITH_LIBV4L=ON \
    -D WITH_VTK=OFF \
    -D WITH_QT=ON \
    -D WITH_PROTOBUF=OFF \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D INSTALL_PYTHON_EXAMPLES=OFF \
    -D OPENCV_FORCE_LIBATOMIC_COMPILER_CHECK=1 \
    -D PYTHON3_PACKAGES_PATH=/usr/lib/python3/dist-packages \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
    -D BUILD_EXAMPLES=OFF ..

     

    cmake 보고서

    -- General configuration for OpenCV 4.8.0 =====================================
    --   Version control:               unknown
    --
    --   Extra modules:
    --     Location (extra):            /home/j/opencv_contrib/modules
    --     Version control (extra):     unknown
    --
    --   Platform:
    --     Timestamp:                   2023-08-12T12:43:05Z
    --     Host:                        Linux 6.1.21-v8+ aarch64
    --     CMake:                       3.18.4
    --     CMake generator:             Unix Makefiles
    --     CMake build tool:            /usr/bin/gmake
    --     Configuration:               RELEASE
    --
    --   CPU/HW features:
    --     Baseline:                    VFPV3 NEON
    --       requested:                 DETECT
    --       required:                  VFPV3 NEON
    --
    --   C/C++:
    --     Built as dynamic libs?:      YES
    --     C++ standard:                11
    --     C++ Compiler:                /usr/bin/c++  (ver 10.2.1)
    --     C++ flags (Release):         -fsigned-char -W -Wall -Wreturn-type -Wnon-virtual-dtor -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wno-psabi -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -mfpu=neon -fvisibility=hidden -fvisibility-inlines-hidden -fopenmp -O3 -DNDEBUG  -DNDEBUG
    --     C++ flags (Debug):           -fsigned-char -W -Wall -Wreturn-type -Wnon-virtual-dtor -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wno-psabi -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -mfpu=neon -fvisibility=hidden -fvisibility-inlines-hidden -fopenmp -g  -O0 -DDEBUG -D_DEBUG
    --     C Compiler:                  /usr/bin/cc
    --     C flags (Release):           -fsigned-char -W -Wall -Wreturn-type -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-psabi -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -mfpu=neon -fvisibility=hidden -fopenmp -O3 -DNDEBUG  -DNDEBUG
    --     C flags (Debug):             -fsigned-char -W -Wall -Wreturn-type -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-psabi -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -mfpu=neon -fvisibility=hidden -fopenmp -g  -O0 -DDEBUG -D_DEBUG
    --     Linker flags (Release):      -  -Wl,--gc-sections -Wl,--as-needed -Wl,--no-undefined
    --     Linker flags (Debug):        -  -Wl,--gc-sections -Wl,--as-needed -Wl,--no-undefined
    --     ccache:                      NO
    --     Precompiled headers:         NO
    --     Extra dependencies:          dl m pthread rt
    --     3rdparty dependencies:
    --
    --   OpenCV modules:
    --     To be built:                 aruco bgsegm bioinspired calib3d ccalib core datasets dnn dnn_objdetect dnn_superres dpm face features2d flann fuzzy gapi hfs highgui img_hash imgcodecs imgproc intensity_transform line_descriptor mcc ml objdetect optflow phase_unwrapping photo plot python3 quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab wechat_qrcode xfeatures2d ximgproc xobjdetect xphoto
    --     Disabled:                    world
    --     Disabled by dependency:      -
    --     Unavailable:                 alphamat cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv freetype hdf java julia matlab ovis python2 sfm viz
    --     Applications:                perf_tests apps
    --     Documentation:               NO
    --     Non-free algorithms:         YES
    --
    --   GUI:                           NONE
    --     GTK+:                        NO
    --
    --   Media I/O:
    --     ZLib:                        /usr/lib/arm-linux-gnueabihf/libz.so (ver 1.2.11)
    --     JPEG:                        libjpeg-turbo (ver 2.1.3-62)
    --     WEBP:                        build (ver encoder: 0x020f)
    --     PNG:                         /usr/lib/arm-linux-gnueabihf/libpng.so (ver 1.6.37)
    --     TIFF:                        build (ver 42 - 4.2.0)
    --     JPEG 2000:                   build (ver 2.5.0)
    --     OpenEXR:                     build (ver 2.3.0)
    --     HDR:                         YES
    --     SUNRASTER:                   YES
    --     PXM:                         YES
    --     PFM:                         YES
    --
    --   Video I/O:
    --     DC1394:                      NO
    --     FFMPEG:                      NO
    --       avcodec:                   NO
    --       avformat:                  NO
    --       avutil:                    NO
    --       swscale:                   NO
    --       avresample:                NO
    --     v4l/v4l2:                    YES (linux/videodev2.h)
    --
    --   Parallel framework:            TBB (ver 2020.2 interface 11102)
    --
    --   Trace:                         YES (with Intel ITT)
    --
    --   Other third-party libraries:
    --     Lapack:                      NO
    --     Custom HAL:                  YES (carotene (ver 0.0.1))
    --     Protobuf:                    build (3.19.1)
    --     Flatbuffers:                 builtin/3rdparty (23.5.9)
    --
    --   OpenCL:                        YES (no extra features)
    --     Include path:                /home/j/opencv/3rdparty/include/opencl/1.2
    --     Link libraries:              Dynamic load
    --
    --   Python 3:
    --     Interpreter:                 /usr/bin/python3 (ver 3.9.2)
    --     Libraries:                   /usr/lib/arm-linux-gnueabihf/libpython3.9.so (ver 3.9.2)
    --     numpy:                       /usr/lib/python3/dist-packages/numpy/core/include (ver 1.19.5)
    --     install path:                lib/python3.9/site-packages/cv2/python-3.9
    --
    --   Python (for build):            /usr/bin/python3
    --
    --   Java:
    --     ant:                         NO
    --     Java:                        NO
    --     JNI:                         NO
    --     Java wrappers:               NO
    --     Java tests:                  NO
    --
    --   Install to:                    /usr/local
    -- -----------------------------------------------------------------

    주요 확인할 내용
    python찾았는지 확인 'Interpreter: /usr/bin/python3 (ver 3.9.2)'

     

    참고

    딥 러닝 애플리케이션을 구축하려는 경우 NEON 및 VFPV3 지원을 활성화해야 한다.
    Raspicam을 사용하려는 경우 v4l/v4l2를 사용할 수 있는지 확인해야 된다.

     

    빌드를 시작하기 전에 메모리 스왑 공간을 확인해야 한다. 일반적인 경우 100MB의 스왑 메모리면 충분하다. 그러나 대규모 빌드를 사용하면 추가 메모리 공간이 중요하다. 다음 명령을 사용하여 스왑 공간을 늘리자.

    매우 가벼운 텍스트 편집기인 Nano로 dphys-swapfile을 열어서 수정한다.

    sudo nano /etc/dphys-swapfile

     

    파일 내용

    # /etc/dphys-swapfile - user settings for dphys-swapfile package
    # author Neil Franklin, last modification 2010.05.05
    # copyright ETH Zuerich Physics Departement
    #   use under either modified/non-advertising BSD or GPL license
    
    # this file is sourced with . so full normal sh syntax applies
    
    # the default settings are added as commented out CONF_*=* lines
    
    
    # where we want the swapfile to be, this is the default
    #CONF_SWAPFILE=/var/swap
    
    # 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=2048
    
    # set size to computed value, this times RAM size, dynamically adapts,
    #   guarantees that there is enough swap without wasting disk space on excess
    #CONF_SWAPFACTOR=2
    
    # restrict size (computed and absolute!) to maximally this limit
    #   can be set to empty for no limit, but beware of filled partitions!
    #   this is/was a (outdated?) 32bit kernel limit (in MBytes), do not overrun it
    #   but is also sensible on 64bit to prevent filling /var or even / partition
    #CONF_MAXSWAP=2048

    수정할 내용: 'CONF_SWAPSIZE=100'을 늘려 'CONF_SWAPSIZE=2048'와 같이 수정

    Ctrl+X로 닫으며 저장.

    새로운 swap값 적용을 위한 명령

    sudo /etc/init.d/dphys-swapfile stop
    sudo /etc/init.d/dphys-swapfile start

     

    본격적인 작업인 실행할 준비가 끝났다.

     

    # run make
    make -j4
    sudo make install
    sudo ldconfig
    
    # cleaning (frees 320 MB)
    make clean
    sudo apt-get update
    
    echo "~END~"

    Raspberry Pi 4에서는 전체 라이브러리를 구축하는 데 1시간이 조금 넘게 걸린다.
    'make -j4' 동시에 작동하는 4개의 코어로 속도를 높일 수 있다. 때때로 시스템은 99% 또는 100%에서 명백한 이유 없이 충돌한다. 이 경우 이 페이지의 끝에 설명된 대로 다시 시작하고 make -j1로 다시 빌드시도 해본다.
    아마도 make 중에 많은 경고를 보게 될 것이다. 그것에 많은 관심을 기울일 필요 없다. 약간의 버전 차이로 인해 템플릿 오버로드 기능의 미묘한 차이로 인해 생성된다.

     

     

     

    댓글