반응형

OpenCV를 빌드하여 Raspberry Pi 5에 설치하는 방법을 다룹니다. Raspberry Pi 4에서 진행했던 대로 Raspberry Pi 5에서 그대로 진행해서 문제없었습니다. 이 문서대로하면 Raspberry Pi 4 에서도 동일하게 동작합니다.  




1. 기존 OpenCV 버전 제거

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

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

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

5. OpenCV 설치 결과 확인

    5.1. C/C++

    5.2. Python




2016. 5.  4    최초작성

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2021.  2. 19   Raspberry Pi 4에서 진행

2021. 11. 22   최종작성 - 2021년 10월 30일에 릴리즈된 Raspberry Pi OS 와 OpenCV 4.5.1

                       Raspberry Pi OS에서 Python 2를 지원하지 않음. 

                       OpenCV 4.5.4로 진행하다가 에러가 나서 다시 4.5.1로 진행

2022. 12.13   OpenCV 4.6.0 진행. Python용 빌드시 문제 해결. 

2023. 11. 4    OpenCV 4.8.1 진행

2024. 7. 27   Raspberry Pi 5, OpenCV 4.10.0




Python에서 사용할 OpenCV만 설치하는 경우에는 다음 명령으로 설치할 수 있습니다. 

하지만 OpenCV의 nonfree 모듈을 사용해야 할 경우에는 컴파일을 해야 합니다.  

 

pip3 install opencv-contrib-python




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

 

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




2024. 3에 릴리즈된 Raspberry PI OS를 사용하여 진행했습니다. 자세한 내용은 다음 포스트를 참고하세요.

 

Raspberry Pi 5 사용 방법

https://webnautes.tistory.com/1886



1. 기존 OpenCV 버전 제거 

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



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

 

$ 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 이전 버전이 설치되어 있는 경우에는 OpenCV  버전이 출력됩니다. 

 

$  pkg-config --modversion opencv

2.4.9.1



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

 

$ sudo apt-get purge  libopencv* python-opencv

$ sudo apt-get autoremove



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

 

$ pkg-config --modversion opencv

3.4.2

 

또는

 

$ pkg-config --modversion opencv4

4.5.1

 

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

 

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



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

 

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

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



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

 

$ sudo apt update 



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

 

$ sudo apt upgrade



2-2, 2-3에서 apt 명령대신 apt-get 명령을 사용하면 에러가 나니 주의하세요.



2-4. 재부팅해줍니다. 

 

$ sudo reboot



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

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

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

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

 

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

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

 

$ sudo apt install build-essential cmake



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

 

$ sudo apt install libjpeg-dev libtiff5-dev libpng-dev



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

 

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



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

 

$ sudo apt install libv4l-dev v4l-utils



3-6. 특정 코덱의 비디오 파일/스트리밍을 읽어오거나 기록하기 위해 필요한 GStreamer 관련 패키지들입니다.

 

$ sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly



3-7. OpenCV에서는 highgui 모듈을 사용하여 자체적으로 윈도우 생성하여 이미지나 영상을 보여줍니다.  

윈도우 생성 등의 GUI를 위해 gtk 또는 qt를 선택해서 사용가능합니다.  본 글에서는  gtk3를 사용합니다. 

 

$ sudo apt install libgtk-3-dev

 

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

 

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

 

3-10. python3-dev 패키지는 파이썬을 위한 헤더파일과 라이브러리가 포함된  패키지들입니다. 

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

 

$ sudo apt install python3-dev python3-numpy



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

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

 

pi@raspberrypi:~ $ mkdir opencv

pi@raspberrypi:~ $ cd opencv

pi@raspberrypi:~/opencv $

 

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

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

$ unzip opencv.zip

 

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

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

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

$ unzip opencv_contrib.zip

 

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

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

opencv-4.10.0/  opencv_contrib-4.10.0/



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

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

 

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

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

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

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



4-5. Python이 라이브러리를 인식하는 위치를 확인합니다. 여기에선 보라색으로 표시한 경로입니다. 

$ python3 -m site

sys.path = [

    '/home/pi/opencv/opencv-4.10.0/build',

    '/usr/lib/python311.zip',

    '/usr/lib/python3.11',

    '/usr/lib/python3.11/lib-dynload',

    '/usr/local/lib/python3.11/dist-packages',

    '/usr/lib/python3/dist-packages',

    '/usr/lib/python3.11/dist-packages',

]

USER_BASE: '/home/pi/.local' (exists)

USER_SITE: '/home/pi/.local/lib/python3.11/site-packages' (doesn't exist)

ENABLE_USER_SITE: True




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

 

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

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

 

보라색으로 표시한 부분은 Python의 라이브러리 찾는 경로로 4-5번에서 확인한 경로로 변경해야 합니다. 

 

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=OFF -DWITH_LIBV4L=ON -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_ENABLE_NONFREE=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.10.0/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 -D PYTHON3_PACKAGES_PATH=/usr/lib/python3.11/dist-packages ../




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



cmake 실행 결과입니다. 문제 발생시 아래 결과와 비교해보세요. 

 

--
-- General configuration for OpenCV 4.10.0 =====================================
--   Version control:               unknown
--
--   Extra modules:
--     Location (extra):            /home/pi/opencv/opencv_contrib-4.10.0/modules
--     Version control (extra):     unknown
--
--   Platform:
--     Timestamp:                   2024-07-27T09:14:12Z
--     Host:                        Linux 6.6.20+rpt-rpi-2712 aarch64
--     CMake:                       3.25.1
--     CMake generator:             Unix Makefiles
--     CMake build tool:            /usr/bin/gmake
--     Configuration:               RELEASE
--
--   CPU/HW features:
--     Baseline:                    NEON FP16
--       required:                  NEON
--     Dispatched code generation:  NEON_DOTPROD NEON_FP16 NEON_BF16
--       requested:                 NEON_FP16 NEON_BF16 NEON_DOTPROD
--       NEON_DOTPROD (1 files):    + NEON_DOTPROD
--       NEON_FP16 (2 files):       + NEON_FP16
--       NEON_BF16 (0 files):       + NEON_BF16
--
--   C/C++:
--     Built as dynamic libs?:      YES
--     C++ standard:                11
--     C++ Compiler:                /usr/bin/c++  (ver 12.2.0)
--     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 -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    -fvisibility=hidden -fvisibility-inlines-hidden -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 -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    -fvisibility=hidden -fvisibility-inlines-hidden -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-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -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-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections    -fvisibility=hidden -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:                 alphamat aruco bgsegm bioinspired calib3d ccalib core datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype 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 signal stereo stitching structured_light superres surface_matching text tracking video videoio videostab wechat_qrcode xfeatures2d ximgproc xobjdetect xphoto
--     Disabled:                    world
--     Disabled by dependency:      -
--     Unavailable:                 cannops cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv hdf java julia matlab ovis python2 sfm ts viz
--     Applications:                apps
--     Documentation:               NO
--     Non-free algorithms:         YES
--
--   GUI:                           GTK3
--     GTK+:                        YES (ver 3.24.38)
--       GThread :                  YES (ver 2.74.6)
--       GtkGlExt:                  NO
--     OpenGL support:              NO
--     VTK support:                 NO
--
--   Media I/O:
--     ZLib:                        /usr/lib/aarch64-linux-gnu/libz.so (ver 1.2.13)
--     JPEG:                        /usr/lib/aarch64-linux-gnu/libjpeg.so (ver 62)
--     WEBP:                        /usr/lib/aarch64-linux-gnu/libwebp.so (ver encoder: 0x020f)
--     PNG:                         /usr/lib/aarch64-linux-gnu/libpng.so (ver 1.6.39)
--     TIFF:                        /usr/lib/aarch64-linux-gnu/libtiff.so (ver 42 / 4.5.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:
--     FFMPEG:                      YES
--       avcodec:                   YES (59.37.100)
--       avformat:                  YES (59.27.100)
--       avutil:                    YES (57.28.100)
--       swscale:                   YES (6.7.100)
--       avresample:                NO
--     GStreamer:                   YES (1.22.0)
--     v4l/v4l2:                    YES (linux/videodev2.h)
--     Xine:                        YES (ver 1.2.13)
--
--   Parallel framework:            pthreads
--
--   Trace:                         YES (with Intel ITT)
--
--   Other third-party libraries:
--     Lapack:                      NO
--     Eigen:                       YES (ver 3.4.0)
--     Custom HAL:                  YES (carotene (ver 0.0.1, Auto detected))
--     Protobuf:                    build (3.19.1)
--     Flatbuffers:                 builtin/3rdparty (23.5.9)
--
--   OpenCL:                        YES (no extra features)
--     Include path:                /home/pi/opencv/opencv-4.10.0/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
--
--   Python 3:
--     Interpreter:                 /usr/bin/python3 (ver 3.11.2)
--     Libraries:                   /usr/lib/aarch64-linux-gnu/libpython3.11.so (ver 3.11.2)
--     Limited API:                 NO
--     numpy:                       /usr/lib/python3/dist-packages/numpy/core/include (ver 1.24.2)
--     install path:                /usr/lib/python3.11/dist-packages/cv2/python-3.11
--
--   Python (for build):            /usr/bin/python3
--
--   Java:
--     ant:                         NO
--     Java:                        NO
--     JNI:                         NO
--     Java wrappers:               NO
--     Java tests:                  NO
--
--   Install to:                    /usr/local
-- -----------------------------------------------------------------




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로 수정합니다.

Ctrl + O를 누르고 엔터를 눌러 저장하고 Ctrl + X를 눌러 빠져나옵니다. 

 

# 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배가 됩니다. 

현재는 Swap이 약 100 메가입니다. 

 

pi@raspberrypi:~/opencv/opencv-4.10.0/build $ free -h

               total        used        free      shared  buff/cache   available

Mem:           7.9Gi       462Mi       3.2Gi        20Mi       4.3Gi       7.4Gi

Swap:           99Mi          0B        99Mi



스왑 관련 서비스를 재시작합니다.

 

pi@raspberrypi:~/opencv/opencv-4.10.0/build $ sudo /etc/init.d/dphys-swapfile restart

Restarting dphys-swapfile (via systemctl): dphys-swapfile.service.



Swap이 약 2기라 바뀝니다. 

 

pi@raspberrypi:~/opencv/opencv-4.10.0/build $ free -h

               total        used        free      shared  buff/cache   available

Mem:           7.9Gi       463Mi       3.2Gi        20Mi       4.3Gi       7.4Gi

Swap:          2.0Gi          0B       2.0Gi




4-10. 이제 make 명령을 사용하여 컴파일을 시작합니다.  $(nproc)는 라즈5의 CPU 코어수를 자동으로 가져옵니다. 



pi@raspberrypi:~/opencv/opencv-4.10.0/build $ time make -j$(nproc)



실행결과 30분가량 걸렸습니다.

 

real    32m16.952s

user    112m55.489s

sys     3m1.476s





아래는 과거 진행한 결과입니다.

 

a.

Raspberry Pi 4에 방열판을 달았을 뿐인데 멈춤 없이 진행이 되었습니다. 

 

real    66m51.708s

user    227m4.180s

sys     15m52.754s



b.

이번엔 Raspberry Pi 400에서 진행했습니다.

 

4.6.0 진행시 걸린 시간입니다.

real 59m13.349s

user 195m28.608s

sys 14m54.936s



4.8.1에서 걸린 시간입니다.

real    92m15.953s

user    316m48.971s

sys     18m5.063s




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




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

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





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

 

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



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



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

 

pi@raspberrypi:~/opencv/opencv-4.10.0/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.10.0/build $ sudo /etc/init.d/dphys-swapfile restart

Restarting dphys-swapfile (via systemctl): dphys-swapfile.service.




pi@raspberrypi:~/opencv/opencv-4.10.0/build $ free -h

               total        used        free      shared  buff/cache   available

Mem:           7.9Gi       462Mi       2.7Gi        20Mi       4.8Gi       7.4Gi

Swap:           99Mi          0B        99Mi






5. OpenCV 설치 결과 확인 

5.1. C/C++

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

 

현재 위치로 웹캠을 보여주는 샘플 코드를 가져옵니다. 

$ cp  /usr/local/share/opencv4/samples/cpp/videocapture_basic.cpp .

 

컴파일합니다. 

$ g++ -o videocapture_basic videocapture_basic.cpp $(pkg-config opencv4 --libs --cflags)



5.1.2. 테스트를 하기 위해  필요한 웹캠을 Raspberry Pi에  연결합니다.

 

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

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

 




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

pi@raspberrypi:~/opencv/opencv-4.10.0/build $ ls /dev/video0

/dev/video0




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

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

https://mobaxterm.mobatek.net/ 

 



실행시켜보면 웹캠 영상이 보입니다.  ESC키를 누르면 종료됩니다.

$ ./videocapture_basic



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

 

5.2. Python

5.2.1. python 3에서 opencv 라이브러리를 사용가능한지는 확인합니다. 다음처럼 OpenCV 버전이 출력되어야 합니다.

 

pi@raspberrypi:~/opencv/opencv-4.10.0/build $ python3

Python 3.11.2 (main, May  2 2024, 11:59:08) [GCC 12.2.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import cv2

>>> cv2.__version__

'4.10.0'

>>> quit()





5.2.2. 예제 코드를 실행해봅니다. 웹캠 영상을 볼 수 있습니다. ESC 키를 누르면 종료됩니다.

 

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




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

 

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

pi@raspberrypi:~ $ rm -rf opencv





반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다. 여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.

영화,책, 생각등을 올리는 블로그도 운영하고 있습니다. https://freewriting2024.tistory.com


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts