반응형

 

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

Raspberry Pi 3에서도 동일하게 동작합니다. 




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에서 진행



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

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

 

pip3 install opencv-contrib-python





2021년 1월 11일에 릴리즈된 Raspberry Pi OS 이미지와 OpenCV 4.5.1을 사용했습니다.

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


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


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




1. 기존 OpenCV 버전 제거 

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



1-2. 아래처럼 보이면 OpenCV 이전 버전이 설치안되어 있는 상태입니다. 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 이전 버전이 설치되어 있는 경우에는 OpenCV  버전이 출력됩니다.

 

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



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

 

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




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

 

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

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



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

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

 

 pi@raspberrypi:~ $ sudo apt-get update 



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

 

pi@raspberrypi:~ $ sudo apt-get upgrade



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

 

pi@raspberrypi:~ $ sudo reboot



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

 

$ 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 gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly



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

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

 

$ sudo apt-get install libgtk2.0-dev



그외 선택 가능한 패키지는 다음과 같습니다. QT를 사용하려면 cmake 옵션에 WITH_GTK 대신에 WITH_QT를 추가해야 합니다. 

 

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 패키지는 파이썬을 위한 헤더파일과 라이브러리가 포함된  패키지들입니다. 

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

 

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

$ unzip opencv.zip



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

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

 

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

$ unzip opencv_contrib.zip



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

 

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

opencv-4.5.1  opencv_contrib-4.5.1



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

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

 

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

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

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

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




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

 

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

-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.1/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.5.1/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.5.1/build



cmake 실행 결과입니다.

 

-- General configuration for OpenCV 4.5.1 =====================================

--   Version control:               unknown

--

--   Extra modules:

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

--     Version control (extra):     unknown

--

--   Platform:

--     Timestamp:                   2021-02-19T13:24:34Z

--     Host:                        Linux 5.10.11-v7l+ 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++ standard:                11

--     C++ Compiler:                /usr/bin/c++  (ver 8.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 -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 -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 -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 -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 -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-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-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  -mfpu=neon -fvisibility=hidden -g  -O0 -DDEBUG -D_DEBUG

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

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

--     ccache:                      NO

--     Precompiled headers:         NO

--     Extra dependencies:          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:                 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 python2 python3 quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking video videoio videostab xfeatures2d ximgproc xobjdetect xphoto

--     Disabled:                    world

--     Disabled by dependency:      -

--     Unavailable:                 cnn_3dobj cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv hdf java julia 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-linux-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: 0x020f)

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

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

--     JPEG 2000:                   build (ver 2.3.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.5.1/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.5.1/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.5.1/build $ free

              total        used        free      shared  buff/cache   available

              total        used        free      shared  buff/cache   available

Mem:        3919136       62104     2461072        8648     1395960     3693744

Swap:        102396           0      102396

100 메가 였던 Swap이



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

[ ok ] Restarting dphys-swapfile (via systemctl): dphys-swapfile.service.

 

pi@raspberrypi:~/opencv/opencv-4.5.1/build $ free

              total        used        free      shared  buff/cache   available

Mem:        3919136       64196     2457588        8648     1397352     3691628

Swap:       2097148           0     2097148

2048메가로 바뀝니다. 



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

 

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

 

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

54분 걸렸네요. 

 

real    54m47.954s

user    179m51.480s

sys     12m45.602s



Raspberry Pi 3에서 진행했던 결과입니다.


트위터에서 오래 빌드하는 과정에 라즈베리파이3가 과열되어 문제 된다는 말이 보여서 

이번에는 새로 구입한 라즈베리파이3용 냉각팬을 돌리면서 진행했습니다. 


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


real    256m37.705s

user    587m51.886s

sys     24m29.895s



다음 링크의 스크립트를 사용하여 빌드 40% 진행했을 때 온도를 측정해보니 다음과 같습니다.

https://www.cyberciti.biz/faq/linux-find-out-raspberry-pi-gpu-and-arm-cpu-temperature-command/


GPU => temp=44.0'C

CPU => 43'C


Raspberry Pi OS 2020년 8월 20일 버전과 OpenCV 4.5.0을 사용했을 때에 문제 없이 완료된 것입니다. 추가로 빌드시 발생하는 열을 냉각시키기위해 냉각팬을 돌렸습니다. 사용한 조합이 다르면 예상치 못한  문제가 생길 수도 있습니다. 



혹, python 라이브러리 빌드하는 부분에서 다음처럼 오랫동안 멈춤 현상이 있는 경우 . Ctrl + C를 눌러 중지하고 (이 부분이 오래 걸리는 부분인데 멈춤현상이 오래 지속되기도 합니다. 과열때문인거 같아서 이번에 냉각팬을 새로 구입하여 진행해봤습니다. 이 부분에서 위에서 사용한 스크립트로 온도를 측정해보면  과열때문에 문제가 된건지 알 수 있을 듯합니다.)


 


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


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



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

 

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



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



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

 

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

[ ok ] Restarting dphys-swapfile (via systemctl): dphys-swapfile.service.



pi@raspberrypi:~/opencv/opencv-4.5.1/build $ free

              total        used        free      shared  buff/cache   available

Mem:        3919136       62084     2132948        8648     1724104     3687716

Swap:        102396           0      102396



5. OpenCV 설치 결과 확인 

5.1. C/C++

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

 

이번에 설치시 OpenCV 4.5.1에서 GStreamer를 디폴트로 사용하게 되었는데 문제가 있어서 수정을 했습니다.  참고로 다음 경고가 나오면서 영상이 보이지 않았습니다.

 

[ WARN:0] global /home/pi/opencv/opencv-4.5.1/modules/videoio/src/cap_gstreamer.cpp (935) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1



현재 위치로 코드를 가져옵니다. 

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



파일을 열어서 다음 부분을 수정합니다. Ctrl + O를 눌러 저장하고  Ctrl + X를 눌러 빠져옵니다. 

$  nano videocapture_basic.cpp

 

int apiID = cv::CAP_V4L2;



빌드합니다. 

 

$ g++ -o videocapture_basic 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.5.1/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 4를 VNC로 접속하여 원격 제어하는 방법

https://webnautes.tistory.com/549 



5.2. Python

 

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

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

 

pi@raspberrypi:~/opencv/opencv-4.5.1/build $ python

Python 2.7.16 (default, Oct 10 2019, 22:02:15)

[GCC 8.3.0] on linux2

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

>>> import cv2

>>> cv2.__version__

'4.5.1'

>>> quit()



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

Python 3.7.3 (default, Jul 25 2020, 13:03:44)

[GCC 8.3.0] on linux

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

>>> import cv2

>>> cv2.__version__

'4.5.1'

>>> quit()




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



C++때와 똑같은 에러가 나지만 영상은 보이네요

 

[ WARN:0] global /home/pi/opencv/opencv-4.5.1/modules/videoio/src/cap_gstreamer.cpp (935) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1



하지만 C++ 처럼 수정을 해보았습니다. 직접 예제를 작성하면 코드가 더 간단해지지만 

OpenCV에서 있는 것으로 진행해보았습니다. 

 

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

$ cp /usr/local/share/opencv4/samples/python/tst_scene_render.py .

$ cp /usr/local/share/opencv4/samples/python/common.py .

$ chmod +w video.py



video.py 파일을 열어서 

 

$ nano video.py



188번째 줄을 다음처럼 수정합니다. Ctrl + O로 저장후, Ctrl + X로 종료합니다. 

 

        cap = cv.VideoCapture(source, cv.CAP_V4L2)



실행해봅니다. 경고문 없이 영상이 바로 보입니다. 

 

$ python video.py

 

$ python3 video.py




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

 

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

pi@raspberrypi:~ $ rm -rf opencv



반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.

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

유튜브 구독하기


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

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">
  1. 이전 댓글 더보기
  2. thumbnail
    매룬어
    2020.09.02 08:38

    안녕하세요 opencv 설치 중에 오류 떠서 질문이 있습니다.
    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.2/modules \
    이 코드에서 자꾸 경로가 존재하지 않는다는 에러 메세지가 뜨는데 어떻게 하면 좋을까요?

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.09.02 09:09 신고

      디렉토리 이름에서 4.1.2 부분이 동일한가요
      동일하다면 contrib 폴더 위치를 확인하여 다시 입력해주세요

  3. thumbnail
    매룬어
    2020.09.02 10:35

    오늘 질문했던 사람입니다.
    포스트에 올라온 글 그대로 폴더를 만들어서 했음에도 불구하고 -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.2/modules \ 부분에서 파일이 존재하지 않다고 에러 메세지가 뜹니다.
    저 경로가 인식되지 않아서 그런가 싶어서 저 경로를 그대로 치면 잘 나옵니다.
    인터넷에서 이런 오류는 CMakeLists.txt 파일을 찾지 못했기 때문이라는 글을 봤습니다. 한 번 확인해보니 opencv 폴더 내부에 파일이 있었습니다. 이런 경우에는 opencv 파일 경로로 바꾸어야 하나요? 만약 그렇다면 경로 설정을 어떻게 해주어야 하나요?

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.09.02 20:17 신고

      opencv-4.1.2폴더에 build폴더를 만든후...build 디렉토리에서 cmake를 실행했나요

      터미널에서 build로 이동한후 ls ../../o
      실행하면 opencv_contrib-4.1.2 폴더가 보이나요

    • thumbnail
      BlogIcon 매룬어
      2020.09.05 22:00

      이제야 봤네요 ㅠㅠ
      음... cmake 실행한 부분은 글에서 나온대로 했습니다.

      opencv/opencv-4.1.2/build 에서 ls ../../o를 실행하면 '../../o'라는 파일이나 디레토리가 없다고 나옵니다.

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.09.06 06:24 신고

      오타났네요. ls ../../하면 어떤게 보이나요?

    • thumbnail
      BlogIcon 매룬어
      2020.09.07 22:27

      opencv-4.1.2, opencv.zip ,
      opencv_contrib-4.1.2, opencv_contrib.zip, video.py

      이렇게 나옵니다. 여기서 video.py는 제가 opencv 모듈을 이용해 짜려고 했던 파일입니다.

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.09.07 22:34 신고

      opencv_contrib-4.1.2안에 modules폴더가 있다면 경로는 정상인데 이상하군요

    • thumbnail
      Favicon of https://maelun-fish-itocean.tistory.com BlogIcon 매룬어
      2020.09.08 14:22 신고

      흠... 저기 opencv에 필요한 모듈 중 설치를 할 수 없던 게 하나 있었는데 설마 그거때문에 그럴까요?

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.09.09 22:40 신고

      cmake 명령을 한줄로 만들어서 실행해보세요. 각 줄 끝에 있는 \를 제거하면 됩니다.

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.09.09 22:44 신고

      한줄로 만들어 놓은것을 본문에 추가했습니다. 사용해보세요

    • thumbnail
      Favicon of https://maelun-fish-itocean.tistory.com BlogIcon 매룬어
      2020.09.10 20:40 신고

      드디어 됐네요! 정말 감사합니다!!!!!!!!!!!!!!!!!!!!!!!!!!!

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.09.10 20:44 신고

      다행입니다.

  4. thumbnail
    raspberrypi
    2020.09.02 17:59

    안녕하세요, 위에 올린 질문에 이어서 한가지만 더 질문 드리겠습니다.

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

    이것을 이용하여 컴파일 한다고 가정하면 그렇다면 뒷 부분의 pkg-confing 뒷 부분에 제가 include 하고 싶은 헤더파일의 이름을 적어주면 되는것인가요?

  5. thumbnail
    raspberrypi
    2020.09.06 18:05

    안녕하세요, 한가지 여쭤볼게 있어서 글 남깁니다.
    앞서 카메라의 영상 저장 후 영상의 픽셀값으로 LED를 제어 하려고 합니다.
    wiringPi를 이용하여 제어하려고 하는데

    wiringPi의 헤더파일을 추가하고 싶을때
    g++ -o example example.cpp $(pkg-config opencv4 --libs --cflags) -lwiringPi 이런식으로 컴파일이 가능한지 여쭤보고 싶습니다!

  6. thumbnail
    Favicon of https://maelun-fish-itocean.tistory.com BlogIcon 매룬어

    안녕하세요 잘 보고 있습니다.
    python3에서 opencv 모듈 설치 안되는 게 확인되어서 위에 나온대로 pip3 install opencv-contrib-python
    으로 설치를 했고, opencv 모듈이 설치된 게 획안되었습니다.
    그런데 코드를 작성하고 컴파일해보니 python3 opencv 모듈에서 에러경고가 떴습니다. 이런 경우는 어떻게 하는게 좋을까요?

  7. thumbnail
    매룬어
    2020.09.14 18:17

    Traceback (most recent call last):
    File "/home/pi/PetTurn_Video/Cutvideo.py", line 1, in <module>
    import cv2
    File "/home/pi/.local/lib/python3.7/site-packages/cv2/__init__.py", line 3, in <module>
    from .cv2 import *
    ImportError: libhdf5_serial.so.103: cannot open shared object file: No such file or directory
    이렇게 에러가 나던데 python3에서 opencv 모듈이 안됐던 상황입니다. 어떻게 해야하나요?

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.09.14 20:40 신고

      다음처럼 패키지를 설치해보세요.

      sudo apt-get update

      sudo apt-get install libhdf5-dev libhdf5-serial-dev

    • thumbnail
      BlogIcon 매룬어
      2020.09.16 15:56

      항상 정말 잘보고 있습니다. ㅠㅠㅠ
      선생님이 알려주신 코드를 입력했음에 불구하고 다음과 같은 오류가 뜹니다.
      Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      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


      Thonny에서는 실행이 안되지만 명령줄에서 다음과 명령어를 치면 opencv 모듈이 열렸습니다.
      LD_PRELOAD = / usr / lib / arm-linux-gnueabihf / libatomic.so.1 python3

      지금 카메라 인식 같은 건 다 잘되는데 python에서 문제가 계속 발생해 코드 실행이 안되는 거 같습니다. 혹시 python2만이라도 실행이 가능할까요....

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.09.16 20:20 신고

      다음 코드를 추가하여 해결한 분도 있네요

      import OS os.environ['LD_PRELOAD'] = '/usr/lib/arm-linux--gnueabihf/libatomic.so.1'

      import cv2하기전에 추가하세요

  8. thumbnail
    SUNNY
    2020.10.06 13:31

    안녕하세요 자세한 글과 설명 감사합니다. 제가 두번정도 같은 방식으로 설치를 했는데 build과정에서 같은 오류가 나는데 혹시 어떤문제인지 알수있을까요? 막상 검색해도 알기 힘드네요....

    In file included from /home/pi/opencv/-4.1.2/modules/videoio/src/cap_xine.cpp:53:
    /usr/include/xine/xineutils.h:42:10 error: /usr/include/xine/list.h: 입력 /출력 오류
    #include <xine/list.h>

    make: *** [Makefile:163: all] 오류2
    혹시 아시는 바 있으면 조언 부탁드립니다.

  9. thumbnail
    라즈벱
    2020.10.25 13:51

    안녕하세요 좋은 정보 감사합니다

    제가 포스트 중 4.2를 하는 중입니다
    HTTP request sent, awaiting response ... 404 not found
    2020-10-25 04:43:33 ERROR 404: Not Found

    이렇게 뜹니다 ㅠㅠ 혹시 해서 넣어야하는 링크를 인터넷 주소창에 넣었더니 404 not found 가 나오네요...
    혹시 해결방법이 있을까요??

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

      4.2에서 다운로드하는 다음 주소를 확인하니 정상적으로 다운로드가 됩니다.

      https://github.com/opencv/opencv/archive/4.1.2.zip

      라즈베리파이에서 인터넷이 정상적으로 되는지 확인해보세요.

  10. thumbnail
    키키
    2020.10.27 06:29

    안녕하세요. python 2.7.16 에서는 import가 되는데 3.7.3에서는 import할 시 모듈을 찾을 수 없다는 에러가 나옵니다. 무엇이 문제일까요

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.10.27 12:20 신고

      다음 포스트에서
      https://webnautes.tistory.com/1186


      다음 부분 아래있는 cmake를 참고하여

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


      본포스트의 cmake 실행결과대로 cmake 옵션을 바꾸면 됩니다.

      혹시 모르니 파이썬3가 실행가능한지도 확인해보세요

    • thumbnail
      BlogIcon 키키
      2020.10.27 23:53

      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 WITH_QT=OFF \
      -D WITH_GTK=ON \
      -D WITH_OPENGL=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 BUILD_NEW_PYTHON_SUPPORT=ON \
      -D OPENCV_GENERATE_PKGCONFIG=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/config-arm-liunx-gnueabihf/libpython2.7.so \
      -D PYTHON3_INCLUDE_DIR=/usr/include/python3.7m \
      -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/python3.7/config-3.7m-arm-linux-gnueabihf/libpython3.7m.so \
      ../

      참고해서 해결했습니다. 감사합니다.

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.10.27 23:55 신고

      해결해서 다행입니다. 해결방법 공유 감사합니다

  11. thumbnail
    라야츠
    2020.10.28 17:51

    [ 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: Device '/dev/video0' is busy
    [ 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

    해당 오류가 뜨면서 opencv가 동작을 안하네요 어떻게 해결하나요?

  12. thumbnail
    라즈벱
    2020.10.28 18:30

    안녕하세요 제로W로 4일동안 컴파일만 했습니다....
    드디어 끝나서 이후를 진행중인데 samples 파일과 코드들이 생성되지 않았습니다
    혹시 따로 만들어줘야 하는건가요?

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.10.28 18:34 신고

      복사안된 경우 opencv 소스.폴더내의 sample폴더를 사용하면 됩니다

    • thumbnail
      BlogIcon 라즈벱
      2020.10.28 18:59

      opencv-4.1.2/samples/cpp 경로에 videocapture_basic.cpp 가 있는데 그럼 g++을 어떻게 써줘야하나요??

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.10.28 19:27 신고

      블로그 글에 있는 g++ 명령에서 해당 cpp 파일의 전체 경로를 수정하면 됩니다. 참고로 pwd를 입력하면 현재 위치의 경로를 알 수 있습니다

    • thumbnail
      BlogIcon 라즈벱
      2020.10.28 20:20

      pi@raspberrypi:~/opencv/opencv-4.1.2/build $ python
      Python 2.7.16 (default, Oct 10 2019, 22:02:15)
      [GCC 8.3.0] on linux2
      Type "help", "copyright", "credits" or "license" for more information.
      >>> import cv2
      Illegal instruction

      5.2에서 파이선의 경우 이렇게 뜨는데...
      -D ENABLE_NEON=OFF \는 했고
      -D ENABLE_VFPV3=ON \는 OFF할 경우 에러가 떠서 ON으로 했습니다.
      혹시 몰라
      sudo apt install python3-opencv도 했습니다
      제로W에서 다른 방법이 없는걸까요...?

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.10.28 23:12 신고

      제로 W에선 해본적이 없어서 정확한 답변이 어렵습니다 이전 댓글 중 관련 내용이 있었던 것 같습니다

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.10.28 23:13 신고

      파이썬용 ,OpenCV는 다음처럼 설치할 수 있습니다

      pip install opencv-contrib-python

    • thumbnail
      BlogIcon 라즈벱
      2020.10.28 23:32

      pi@raspberrypi:~ $ pip install opencv-contrib-python
      Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
      Collecting opencv-contrib-python
      Could not find a version that satisfies the requirement opencv-contrib-python (from versions: )
      No matching distribution found for opencv-contrib-python
      pi@raspberrypi:~ $ cd opencv
      pi@raspberrypi:~/opencv $ cd opencv-4.1.2
      pi@raspberrypi:~/opencv/opencv-4.1.2 $ cd build
      pi@raspberrypi:~/opencv/opencv-4.1.2/build $ pip install opencv-contrib-python
      Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
      Collecting opencv-contrib-python
      Could not find a version that satisfies the requirement opencv-contrib-python (from versions: )
      No matching distribution found for opencv-contrib-python

      이렇게 나옵니다...

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.10.29 03:50 신고

      제로용 패키지를 제공하지 않나봅니다. 빌드할수 밖에 없어보이네요

  13. thumbnail
    Favicon of https://1234dwasd.tistory.com BlogIcon 마우스먹통

    4-10 진행중 오래걸려서 make를 사용했음에도 불구하고 오래걸려서 질문 남깁니다..

    원레 저 구간 막바지가 매우 오래걸리나요?

  14. thumbnail
    Favicon of https://sogoodst.tistory.com BlogIcon 쏘굿스트t

    초보적인 질문 한가지 드립니다..
    4-2 진행 중 unzip : cannot find or open
    이라는 오류가 발생했습니다.
    검색했을땐 절대경로를 어떻게 하라고 ㅎㅏ는거같은데 제가 리눅스 배우기 시작한지 얼마 안되어
    댓글로 질문 드립니다 ㅠㅠ

  15. thumbnail
    Favicon of https://fhfh12322323.tistory.com BlogIcon 벨브

    안녕하세요. 지오코더를 사용해 주소를 뽑아야하는데요.
    지번과 도로명주소가 가끔 무작위로 출력되는 현상이 있던데,
    도로명이나 지번 둘중에 하나의 형식만 출력되도록 할 순 없을까요?

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.11.25 14:48 신고

      다른 API를 사용하여 일반 주소인경우 도로명 주소로 변경해야 할듯합니다. 한가지로 출력하도록 조정이 안되기 때문입니다.

  16. thumbnail
    Favicon of https://kmes0219.tistory.com BlogIcon kootae

    5.1 진행중입니다..

    videocapture_basic.cpp 를 cp를 이용해서 찾으면 디렉터리가 아닙니다 라고 뜨고..

    직접 들어가서 수정하면 수정권한이 없다고 합니다.

    어떻게 해야 5.1을 진행할수있을까요?

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.12.01 15:48 신고

      해당 파일을 홈디렉토리로 복사해와야 수정 진행이 가능합니다.

    • thumbnail
      Favicon of https://kmes0219.tistory.com BlogIcon kootae
      2020.12.01 15:52 신고

      홈 디렉토리로 복사해와서 수정을 했습니다.. 그 이후에 복사해서 가져온 video 파일을 다시 usr/local에 집어넣어야하나요? 기존파일은 어떻하죠?..

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.12.01 16:05 신고

      현재 폴더에서 컴파일후 실행하면 됩니다

    • thumbnail
      Favicon of https://kmes0219.tistory.com BlogIcon kootae
      2020.12.01 16:50 신고

      파이 카메라에서 소스코드를 수정해야한다고 적혀있는데.. open 함수에서 아규먼트를 -1로 수정하는것은 어디서 수정하는 것인가요?..

    • thumbnail
      2020.12.01 17:02

      비밀댓글입니다

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.12.01 20:50 신고

      개인적인 응답은 어렵습니다. 설치를 완료하셨으면 OpenCV 강좌를 찾아보거나 OpenCV 책을 참고해보세요.

    • thumbnail
      Favicon of https://kmes0219.tistory.com BlogIcon kootae
      2020.12.01 22:37 신고

      ls /dev/video* 을 할때 6개정도 되는 비디오가 뜨는데 상관없나요?.. video0도 뜨긴합니다.

      cap.open(-1)소스 코드를 어디에 저장하는지 잘 모르겠습니다..

      5.2.1 실행에서 python부분을 실행하였는데
      import cv2에서 '2'부분이 인식이 안된다고 에러가 납니다.. 어떻게 해야할까요?ㅠㅠ

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.12.02 22:14 신고

      다음 링크에 있는 코드를 사용하세요.
      https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_video_display/py_video_display.html

      다음처럼 -1을 사용하면 됩니다.
      cap = cv2.VideoCapture(-1)

      5.2.1 처럼했는데 에러가 나면 Python용 OpenCV가 제대로 설치안된겁니다.

  17. thumbnail
    Favicon of https://cuckoohoo.tistory.com BlogIcon 쿡후

    안녕하세요!! 하다가 gtk/gtkgl.h: no such file or directory 오류가 나는데 어떻게 해야하나요?? 처음부터 다시 해야하나요//..?

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.12.05 14:30 신고

      다음 패키지가 설치 안된듯합니다.

      sudo apt-get install libgtk2.0-dev

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.12.05 14:31 신고

      설치후 CMAKE 부터 다시 해보세요

      cmake 결과에 다음 항목을 확인해보세요.

      -- 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-linux-gnueabihf/libGLU.so)

      -- VTK support: NO

    • thumbnail
      Favicon of https://cuckoohoo.tistory.com BlogIcon 쿡후
      2020.12.05 14:31 신고

      다시하고 있는데 이제는 100%가 됐습니다. 너무 오래 걸리네요 ㅠㅠㅠ

    • thumbnail
      Favicon of https://cuckoohoo.tistory.com BlogIcon 쿡후
      2020.12.05 14:31 신고

      동시에 답변이 달렸네요!! 감사합니다!!

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.12.05 14:32 신고

      다행입니다. PC에서 하지 않으면 오래 걸리는 듯합니다.

    • thumbnail
      Favicon of https://cuckoohoo.tistory.com BlogIcon 쿡후
      2020.12.05 15:04 신고

      cap.open(-1)에서
      오류가 error near unexpected token '-1'입니다.
      웹캡을 설치하고 enabled를 안해서 그런가요
      그런데 설정에서 카메라 enabled을 하려하니 재부팅 한다는데 재부팅 해도 되나요??

    • thumbnail
      Favicon of https://cuckoohoo.tistory.com BlogIcon 쿡후
      2020.12.05 15:29 신고

      재부팅 했는데 계속 -1이 안되네요 ㅠㅠ

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2020.12.05 19:04 신고

      재부팅해도 됩니다. 문법적 오류 같네요.

  18. thumbnail
    Favicon of https://myolive.tistory.com BlogIcon 찡쪽

    와우...엄청난 자료 너무 너무 감사합니다 ^^;
    파이3b+, eMMC(16GB) 설치 성공하고 영상까지 잘 나옵니다 ^___^;
    저는 eMMC를 사용하여서 opencv컴파일 하는데 약 1시간 30분 정도 걸렸어요
    이번 프로젝트가 자율주행이라 opencv를 검색하던중 발견하게 되었네요....
    앞으로도 좋은 자료 많이 많이 부탁드립니다.

    * 저도 30년째 개발하고 있지만 이렇게 자세하게 공유해 주신게 정말 대단합니다 저는 제 일하기도 바쁜데 ㅠ ㅋ

  19. thumbnail
    Favicon of https://helpmeplz1.tistory.com BlogIcon bmj1234

    Traceback (most recent call last):
    File "video.py", line 218, in <module>
    cv.imshow('capture %d' % i, img)
    cv2.error: OpenCV(4.5.1) /home/pi/opencv/opencv-4.5.1/modules/highgui/src/window_gtk.cpp:624: error: (-2:Unspecified error) Can't initialize GTK backend in function 'cvInitSystem'
    웹캠으로 배우는중입니다. 웹캠이라 5.2.2는 변경 안하고 곧장 파이썬 실행해주면 이렇게 뜨는데 무슨 문제인가요...? 설치중에 문제는 없었던 것 같은데..

    • thumbnail
      Favicon of https://helpmeplz1.tistory.com BlogIcon bmj1234
      2021.04.04 15:13 신고

      아 그리고 $ ./videocapture_basic 실행시 파일또는 디렉토리가 없다고 뜨네요

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2021.04.04 16:16 신고

      검색해보니 다음 링크를 통해 해당 에러를 해결한 사람이 있다고 하네요

      https://github.com/opencv/opencv/issues/18461

      확인해보진 못했습니다.


      두번째 질문은 예제 컴파일이 되지않아 실행파일이 없어 발생한 에러로 보입니다.

  20. thumbnail
    2021.06.28 13:46

    비밀댓글입니다

  21. thumbnail
    2021.07.18 22:43

    비밀댓글입니다

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2021.07.18 22:57 신고

      1. 어떤 에러가 나는지 정확히 알려주세요.

      2. pkg-config opencv4를 사용해서 확인하셨나요? 이건 C++용 OpenCV 설치 여부를 확인하는 겁니다. 파이썬용은 1번에서 했던 방식으로 확인해야 합니다.

      3. 웹캠을 연결후 dmesg를 실행하면 카메라 관련 연결 성공여부 로그가 보입니다.

      파이썬용을 위해서라면 OpenCV를 빌드하지 말고 다음 명령으로 설치해서 사용해도 됩니다.

      파이썬 버전에 따라 pip 또는 pip3로 실행하세요.

      pip3 install opencv-contrib-python

    • thumbnail
      Favicon of https://nopenone.tistory.com BlogIcon name_tag
      2021.07.19 16:54 신고

      Pip3 install opencv-contrib-python 으로 실행한후 opencv 사용가능한지 다시 확인하려했으나 버전 확인 시 또 같은 attribute error가 뜹니다..ㅠ 정확한 오류는 python3 확인하려할때 다음과 같습니다

      Traceback(most recent call last):
      File "<stdin>", line 1, in <module>
      AttributeError: module 'cv2.cv2' has no attribute '_version_'

      해결방법이 있을까요ㅠ 보통 입력을 잘못했을때 나는 에러라 검색되는데 cv2._version_ 이게 아닌건가요ㅠ

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2021.07.19 17:11 신고

      우선 pip3로 opencv-contrib-python 지우세요

      버전충돌 같습니다. find /usr | grep cv2.*.so 로 검색하여 cv2로 시작하는 확장자가 so인 파일을 찾아지우세요

      그리고나서 pip3로 opencv를 다시 설치해보세요

    • thumbnail
      Favicon of https://nopenone.tistory.com BlogIcon name_tag
      2021.07.19 21:04 신고

      말씀해주신대로 지우고 검색하니 python 2.7.x(기억이 잘 안납니다..)에 cv2로 시작하는 so 파일을 찾아서 rm 명령어로 지우고 다시 설치했습니다! 근데 동일하게 파이썬 환경에서 확인해보니 이전과 동일한 오류가 또 나타나네요...ㅠㅠㅠㅠㅠ 이후 다시 find 과정을 진행해보니 그 전과는 다른 파일이 생성되긴 했습니다
      (새롭게 생성된 파일 : /usr/local/lib/python3.7/dist-package/cv2/python-3.7/cv2-cpython-37m-arm-linux-gnueabihf.so)

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2021.07.19 21:13 신고

      지금 다시 보니 오타네요

      _version_ 가 아니라 __version__입니다.

      _를 version 양쪽으로 2번씩 입력해야 합니다.

    • thumbnail
      Favicon of https://nopenone.tistory.com BlogIcon name_tag
      2021.07.19 22:10 신고

      헉ㅠㅠ 감사합니다!!! 정말 오타였다니ㅜㅜ 너무 허무하네요... 덕분에 무사히 설치 및 확인까지 해낼 수 있었습니다!! 감사합니다!!

      저 근데 라즈베리파이 카메라 포스트는 아니지만 여쭤볼게 있습니다ㅠㅠ 웹캠으로 진행할때는 cheese로 화면이 나왔는데 라즈베리파이 카메라로 바꾸니 ls /dev/video0 -l 시 포스팅에 적어주신대로 다 잘 나왔는데 막상 화면을 확인하려 하니 검정색 화면밖에 안나오네요ㅠ 이 이외에 vcgencmd get_camera 역시 모두 1이 나옴을 확인했습니다...
      (참고로 해당 포스트에서 5-1 videocapture_basic.cpp 에서 id 바꾸는 단계에서 처음 웹캠으로 진행할때는 오류가 나지 않았으나 라즈베리파이 카메라로 바꾸고 진행하니 빌드가 오류가 발생합니다... (collect2 : Id returned 1 exit요 에러입니다)) 조금더 도와주시길 부탁드립니다ㅠㅜ
      (물론 카메라 연결 위치까지 다 확인하였고 찾아보니 재부팅할 경우 해결된 경우도 있다는데 저는 아니네요...)

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2021.07.19 22:42 신고

      다행이네요.. 제 경우엔 카메라 오픈시 0 대신에 -1을 사용하면 해결되었습니다.

    • thumbnail
      Favicon of https://nopenone.tistory.com BlogIcon name_tag
      2021.07.19 23:04 신고

      앗 제가 그부분이 잘 이해가 안갔는데요..! 제가 실행할 파이썬 코드에서 해당부분을 바꿔야하는 건가요? 어디에 코드를 추가하라 하신건지 모르겠습니다ㅠ

      실행할 파이썬 코드 내에서 작업을 말씀하신거면 코드 실행 전 카메라 동작 확인을 위해 raspistill -o image.jpg 코드를 확인차 진행하려 했는데 오류가 발생합니다

      mmal : mmal_vc_component_enable : failed to enable component ENOSPC
      mmal : camera component couldn't be enable
      mmal : main : Failed to create camera component
      mmal : Failed to run camera app. Please check your firmware updates

      진행시 raspi_config 에서 카메라 enable 설정 후 리부트까지 진행했었고 업데이트 사항 역시 포스팅에 맞춰서 다 진행했었습니다! 카메라 위치 확인 다시 꽂기 등 다른 방안으로 해결하려 했지만 실패했고 현재는 말씀해주신 것처럼 무한대기상태에서 진행해서 그런거라 카메라 작동이 안되는 것 때문에 해당 오류가 나오는 것으로 추측하고 있긴 합니다...

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2021.07.19 23:06 신고

      VideoCapture cap(0)이라면 VideoCapture cap(-1)로 바꾸는 겁니다.

    • thumbnail
      2021.07.20 21:45

      비밀댓글입니다

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2021.07.20 22:03 신고

      fit_generator가 나중에 사라진다는 경고문이라 무시해도 됩니다. fit_generator 대신에 fit를 사용해야 하는데 메소드 이름만 fit로 바꾸면 아마도 동작할겁니다.


    • thumbnail
      Favicon of https://nopenone.tistory.com BlogIcon name_tag
      2021.07.21 15:35 신고

      헛 감사합니다! 영상에서 이미 설명해주셨엇는데 제가 놓쳤었네요..ㅠㅠ
      근데 제가 저장된 이미지를 가지고 예측하는것이 아니고 캠으로 실시간으로 받아서 연속적으로 분석하는걸로 바꿀려하는데 올려주신 코드 중에 두번째 코드에서 앞쪽부분에 카메라 import 부분과 continous를 넣으면 될 것 같다고 생각했는데 주어진 코드를 메인루프에 넣어서 돌려야하는걸까요...? 혹시 참고할만한 자료가 있으시다면 부탁드리고싶습니다ㅠㅠ

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2021.07.21 15:42 신고

      웹캠 으로부터 영상가져오는 예제에 필요한 코드를 넣어보세요

    • thumbnail
      Favicon of https://nopenone.tistory.com BlogIcon name_tag
      2021.07.21 17:37 신고

      모델 학습 완료시키고 손글씨 분석 코드를 진행해보았는데 글씨로 보이는 것이 보이나 화면에 너무 크게 나와서 어떤 숫자인지 파악할 수가 없고 맞게 판단되었는지도 모르겠습니다...ㅠ 손글씨로 숫자를 써서 이를 사진찍어 test3.jpg파일로 저장한 후 진행하였습니다! 무슨 문제일까요...?

    • thumbnail
      Favicon of https://nopenone.tistory.com BlogIcon name_tag
      2021.07.21 17:38 신고

      앗 더불어 실행을 마무리 할료고 q를 눌러 빠져나온 순간 마지막에 attributeerror : 'str' object has no attribute 'decode' 라 뜨네요! 해독 진행이 안된걸까요?

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2021.07.21 17:49 신고

      어떤것이 화면에 크게 나온다는 건가요? decode부분은 코드를 확인해보세요. 이미지 객체가 아닌 문자열 객체에서 호출해서 문제가 된다는 에러입니다

    • thumbnail
      Favicon of https://nopenone.tistory.com BlogIcon name_tag
      2021.07.21 18:59 신고

      명령어를 입력해서 실행하면 영상에서 올려주신것처럼 숫자 영역에 사각형이 생기고 위에 인식한 숫자 결과가 나와야하는것 아닌가요! 제가 코드를 실행하면 마치 5 숫자의 이미지를 넣었다고 할 때 5의 부분만 많이 확대시킨 이미지가 출력됩니다.. 너무 크게 출력되어서 5라는 숫자 전체도 다 안보이고 위에 막대 부분만 검정색으로 나타나는 그런 형태입니다. 처음엔 검정색만 존재하는 것 같아 출력이 안되는 줄 알았는데 창을 쭉 옆으로 넘기다 보니 흰색 배경도 검출되는 것을 보면서 겨우 숫자의 일부분이란 걸 알았네요...! 디코드 코드는 아직 수정한 코드를 반영하지 않고 기능 확인을 위해 올려주신 코드 그대로 사용했습니다ㅠㅜ

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

      숫자를 너무 가까이에서 찍어서 인듯합니다. 숫자 주변에 공백이 있도록 좀 멀리서 찍으세요.. 몇번해보면 될듯합니다 .

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2021.07.21 19:03 신고

      decode는 단계별로 실행해서 원인을 찾아야 할거 같습니다

    • thumbnail
      Favicon of https://nopenone.tistory.com BlogIcon name_tag
      2021.07.21 19:37 신고

      다시 멀리서 공백이 많도록 해서 찍어보았는데도 digit 화면이 너무 크게 나옵니다.. 이번에는 다른 에러가 뜨긴 하네요...

      cv2.error:opencv(4.5.3) /tmp/pip-install-qpybvs7a/opencv-contrib-python/opencv/modules/imgproc/src/morph.dispatch.cpp:1163: error: (-215:Assertion failed) !_src.empty() in function 'morphologyEx'

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2021.07.21 19:45 신고

      원래대로 찍고 코드에서 숫자이미지 주변에 공백을 크게해야 겠네요..숫자가 크게 나오는 이유는 알수없군요

    • thumbnail
      Favicon of https://nopenone.tistory.com BlogIcon name_tag
      2021.07.21 20:43 신고

      선생님!!!!! 원래 엔터를 누르면 숫자가 나타나는 것인가요?? 엔터를 누를때마다 숫자로 인식된 사진과 함께 터미널창에 숫자가 등장합니다! 헌데 저는 3개 숫자만 썻는데 앞에 쓰레기 값들이라 할지 아주 작은 점들까지 인식되어 그 점들의 위치와 비슷한 숫자들이 나타나는데 이를 막을 방법이 없으까요? 다행이 마지막엔 3개의 숫자가 잘 인싣됩니다@

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2021.07.21 21:13 신고

      다행이네요.. 영역 크기가 일정 크기 이하이면 무시하도록 하면 될듯합니다.

    • thumbnail
      Favicon of https://nopenone.tistory.com BlogIcon name_tag
      2021.07.21 21:53 신고

      엇...영역 크기 기준은 어떻게 잡아야 할까요...? 그 prediction을 확인해보니 제가 원한 결과가 나올때는 99이상일때여서 쓰레기값이라고 해야하나요? 원치 않는 부분에서까지 점들을 숫자로 인식해서 나오는 애들 수치를 보니 60~95 사이로 다양해서 99이하면 안나오도록 만들었더니 사진은 나오지만 결과값만 출력이 안되는 형태로 나왔습니다! 그래서 이제 사진도 안나오게 하고싶은데 말씀하신데로 영역 크기 부분을 줄이면 될것같은데 코드를 잘 모르겠습니다ㅠㅠ

    • thumbnail
      Favicon of https://nopenone.tistory.com BlogIcon name_tag
      2021.07.21 22:03 신고

      아 크기 화면이 너무 크게 나와서 파악이 잘 안되었던 부분을 줄였더니 문제를 확인할 수 있었습니다! 배경에 제가 흰색 배경 넘어로 뒤에 사물이 존재했던것 까지 찍으니 흑백 사진으로 봤을때 사물까지 백색처리되어 그 부분이 숫자로 인식되어버리네요.... 숫자 인식율이 99퍼 이하는 잘라버리기로 했는데 여러 실험 결과 1.0으로도 인식되는 쓰레기이미지 값들이 있어서 얘네를 처리하기가 힘드네요... 배경을 무시할 방법이 있을까요?

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2021.07.21 22:33 신고

      여기에 질문을 남기니 어느 포스트에 있는 코드를 보고 얘기하는건지 알수 없어 답변하기가 애매하네요.. 비슷한 포스트가 여러개인데 각 포스트별로 코드가 약간씩 달라서요. 해당 포스트에서 질문해주세요

    • thumbnail
      Favicon of https://webnautes.tistory.com BlogIcon webnautes
      2021.07.21 22:34 신고

      중간 단계 출력을 보면 이미지를 이진화해서 숫자부분만 하얀색으로 보이게 하는게 있을겁니다.