라즈베리파이 4 OpenCV 4.1.2 ( opencv_contrib 포함 ) 설치하기
{"time":1717347161782,"blocks":[{"id":"jmjWi-KDrT","type":"paragraph","data":{"text":"라즈베리파이 4에 OpenCV 4.1.2 설치"}},{"id":"EKswVVnGCF","type":"headerAlign","data":{"text":"OpenCV 설치 방법은 webnautes님의 티스토리를 참고 하였습니다. ( webnautes 티스토리 방문하기 )","level":2,"alignment":"left"}},{"id":"4JyBKX59EQ","type":"headerAlign","data":{"text":"0. 라즈베리파이에 라즈비안 ( 2019-09-26 버전 ) 기본 설치 후 아래 설치","level":2,"alignment":"left"}},{"id":"GDriBvrJaj","type":"headerAlign","data":{"text":"1. 패키지 업그레이드","level":2,"alignment":"left"}},{"id":"4wsDcllMDe","type":"paragraph","data":{"text":"1.1 기존에 설치된 패키지에 새로운 패키지 리스트를 업데이트 한다."}},{"id":"4vRxhO-z-x","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ $ sudo apt-get update"]]}},{"id":"F_mFxrBX6Z","type":"paragraph","data":{"text":"1.2 새로운 버전의 패키지가 있으면 업그레이드 한다."}},{"id":"mo6-Dt5ZfO","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ $ sudo apt-get upgrade"]]}},{"id":"HJsDm82gu4","type":"paragraph","data":{"text":"1.3 업그레이드 후 리부팅 한다."}},{"id":"VjlHfENqNF","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ $ reboot"]]}},{"id":"_l4NirtuC3","type":"paragraph","data":{"text":"※※ 라즈비안 2019-09-26 버전에서 upgrade 후 File Manager가 안 열리는 경우가 발생하면 아래와 같이 실행한다."}},{"id":"JuboTlD8Gj","type":"table","data":{"withHeadings":false,"content":[["$ sudo apt-get install \\--reinstall pcmanfm"]]}},{"id":"kdMNW9afa9","type":"headerAlign","data":{"text":"2. OpenCV 컴파일전 필요 패키지 설치","level":2,"alignment":"left"}},{"id":"gF90HyO0Bb","type":"paragraph","data":{"text":"2.1 build-essential 및 cmake 설치"}},{"id":"i8-QksMaYg","type":"table","data":{"withHeadings":false,"content":[["$ sudo apt-get install build-essential cmake"]]}},{"id":"Q_8sAllvyH","type":"paragraph","data":{"text":"2.2 특정 포멧의 이미지 파일을 Read, Write 하기 위한 필요 패키지 설치"}},{"id":"2tw3-Oin7_","type":"table","data":{"withHeadings":false,"content":[["$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev"]]}},{"id":"sgb1qAVdxq","type":"paragraph","data":{"text":"2.3 특정 코덱의 비디오 파일을 Read, Write 하기 위한 필요 패키지 설치"}},{"id":"7dbfGff_6l","type":"table","data":{"withHeadings":false,"content":[["$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev"]]}},{"id":"x9KoBvDpNY","type":"paragraph","data":{"text":"2.4 Video4Linux 리눅스에서 실시간 비디오 캡처 및 비디오 디바이스 제어를 위한 API 패키지 설치"}},{"id":"4Nh2IYpeck","type":"table","data":{"withHeadings":false,"content":[["$ sudo apt-get install libv4l-dev v4l-utils"]]}},{"id":"XyxF7PE3vP","type":"paragraph","data":{"text":"2.5 GStreamer는 리눅스 기반에서 영상 스트리밍을 쉽게 처리할 수 있더록 만든 오픈 소스 프레임워크 이다."}},{"id":"RjirUJNELl","type":"table","data":{"withHeadings":false,"content":[["$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev"]]}},{"id":"C1DIRd1Wcu","type":"paragraph","data":{"text":"2.6 OpenCV에서 윈도우 생성 등의 GUI를 위해 gtk 또는 qt를 선택해서 사용가능하며 여기서는 gtk2를 지정해준다."}},{"id":"yTwYt5VbKF","type":"table","data":{"withHeadings":false,"content":[["$ sudo apt-get install libgtk2.0-dev"]]}},{"id":"6hdLvlUV05","type":"paragraph","data":{"text":"2.7 OpenGL 지원하기 위해 필요한 라이브러리 설치"}},{"id":"r-XalHM1bm","type":"table","data":{"withHeadings":false,"content":[["$ sudo apt-get install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev"]]}},{"id":"s3X-y5rTyV","type":"paragraph","data":{"text":"2.8 OpenCV 최적화를 위해 사용되는 라이브러리 설치"}},{"id":"OW05q3o4jx","type":"table","data":{"withHeadings":false,"content":[["$ sudo apt-get install libatlas-base-dev gfortran libeigen3-dev"]]}},{"id":"6gryqwbbjQ","type":"paragraph","data":{"text":"2.9 python 패키지는 OpenCV-Python 바인딩을 위한 패키지이며, Numpy는 매트릭스 연산등을 빠르게 처리할 수 있다."}},{"id":"Rn2IXd3X1x","type":"table","data":{"withHeadings":false,"content":[["$ sudo apt-get install python2.7-dev python3-dev python-numpy python3-numpy"]]}},{"id":"FBUzITuGKZ","type":"headerAlign","data":{"text":"3. OpenCV 컴파일 및 설치","level":2,"alignment":"left"}},{"id":"mwoTZ4EwfP","type":"paragraph","data":{"text":"3.1 소스 코드 저장 할 임시 디렉토리 생성 및 이동"}},{"id":"FKVyyDBuF3","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ $ mkdir opencvpi@raspberrypi:~ $ cd opencvpi@raspberrypi:~ /opencv $\n\t\t\t"]]}},{"id":"0Y5rvaB_17","type":"paragraph","data":{"text":"3.2 OpenCV 4.1.2 소스코드를 다운 받아 압축을 풀어준다"}},{"id":"a5igmlird6","type":"table","data":{"withHeadings":false,"content":[["$wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.2.zip$ unzip opencv.zip\n\t\t\t"]]}},{"id":"qnMl0b8d0B","type":"paragraph","data":{"text":"3.3 opencv_contrib 다운 및 압축 풀어준다 ( SIFT, SURF 등을 사용하기 위해 필요 )"}},{"id":"qHUR0eKxbw","type":"table","data":{"withHeadings":false,"content":[["$wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.1.2.zip$ unzip opencv_contrib.zip\n\t\t\t"]]}},{"id":"82BORicFbK","type":"paragraph","data":{"text":"3.4 두개의 디렉토리 생성 확인"}},{"id":"p6p4PUMtEt","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv $ ls -d */opencv-4.1.2/ opencv_contrib-4.1.2/\n\t\t\t"]]}},{"id":"S1QzTlf9vk","type":"paragraph","data":{"text":"3.5 opencv-4.1.2 디렉토리로 이동하여 build 디렉토리 생상 및 build 디렉토리로 이동 ( 컴파일은 build 디렉토리에서 이루어짐 )"}},{"id":"gpi4EyUHVa","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv $ cd opencv-4.1.2pi@raspberrypi:~ /opencv/opencv-4.1.2 $ mkdir buildpi@raspberrypi:~ /opencv/opencv-4.1.2 $ cd buildpi@raspberrypi:~ /opencv/opencv-4.1.2/build $ \n\t\t\t"]]}},{"id":"6CGOCSXdF9","type":"paragraph","data":{"text":"3.6 cmake를 사용하여 OpenCV 컴파일 설정을 해준다"}},{"id":"slugkFdfZP","type":"paragraph","data":{"text":" ( cmake 실행 중 추가적인 다운로드가 있으므로 라즈베리파이에 인터넷이 연결되어 있어야 한다 )"}},{"id":"o7dJ1pgwd0","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ cmake -D CMAKE_BUILD_TYPE=RELEASE \\> -D CMAKE_INSTALL_PREFIX=/usr/local \\\n\t\t\t> -D WITH_TBB=OFF \\\n\t\t\t> -D WITH_IPP=OFF \\\n\t\t\t> -D WITH_1394=OFF \\\n\t\t\t> -D BUILD_WITH_DEBUG_INFO=OFF \\\n\t\t\t> -D BUILD_DOCS=OFF \\\n\t\t\t> -D INSTALL_C_EXAMPLES=ON \\\n\t\t\t> -D INSTALL_PYTHON_EXAMPLES=ON \\\n\t\t\t> -D BUILD_EXAMPLES=OFF \\\n\t\t\t> -D BUILD_TESTS=OFF \\\n\t\t\t> -D BUILD_PERF_TESTS=OFF \\\n\t\t\t> -D ENABLE_NEON=ON \\\n\t\t\t> -D ENABLE_VFPV3=ON \\\n\t\t\t> -D WITH_QT=OFF \\\n\t\t\t> -D WITH_GTK=ON \\\n\t\t\t> -D WITH_OPENGL=ON \\\n\t\t\t> -D OPENCV_ENABLE_NONFREE=ON \\\n\t\t\t> -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.2/modules \\\n\t\t\t> -D WITH_V4L=ON \\\n\t\t\t> -D WITH_FFMPEG=ON \\\n\t\t\t> -D WITH_XINE=ON \\\n\t\t\t> -D ENABLE_PRECOMPILED_HEADERS=OFF \\\n\t\t\t> -D BUILD_NEW_PYTHON_SUPPORT=ON \\\n\t\t\t> -D OPENCV_GENERATE_PKGCONFIG=ON ../\n\t\t\t"]]}},{"id":"7KLhG10bvY","type":"paragraph","data":{"text":"아래와 같은 메시지가 보이면 정상 적으로 설치가 된 것입니다."}},{"id":"GXx5_yp99B","type":"table","data":{"withHeadings":false,"content":[["\\-- \\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\--\\---\n\t\t\t\\-- \n\t\t\t\\-- Configuring done\n\t\t\t\\-- Generating done\n\t\t\t\\-- Build files have been written to: /home/pi/opencv/opencv-4.1.2/build"]]}},{"id":"4vrkBlB_86","type":"paragraph","data":{"text":"3.7 컴파일 시 메모리 부족으로 에러가 나지 않도록 swap 공간을 늘려줘야 한다."}},{"id":"39yGJLocvV","type":"paragraph","data":{"text":"/etc/dphys-swapfile 파일을 연다"}},{"id":"c5A4uOdi-y","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ sudo nano /etc/dphys-swapfile"]]}},{"id":"jUQA4mAA8B","type":"paragraph","data":{"text":"CONF_SWAPSIZE 변수값을 2048로 수정한다."}},{"id":"AygHwA2eLb","type":"table","data":{"withHeadings":false,"content":[["# set size to absolute value, leaving empty (default) then uses computed value\n\t\t\t# you most likely don't want this, unless you have an special disk situation\n\t\t\t#CONF_SWAPSIZE=100\n\t\t\tCONF_SWAPSIZE=2048"]]}},{"id":"Eq8kGWFA3d","type":"paragraph","data":{"text":"swap을 재시작하여 변경된 설정값을 반영해준다."}},{"id":"ThkkzxJqlW","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ sudo /etc/init.d/dphys-swapfile restart[ ok ] Restarting dphys-swapfile (via systemctl): dphys-swapfile.service.\n\t\t\t"]]}},{"id":"KQbkFq21xo","type":"paragraph","data":{"text":"변경된 설정값 확인 ( swap : 2097148"}},{"id":"_I12LLDYTv","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ free total used free shared buff/cache available\n\t\t\tMem: 3947004 192488 2154636 17768 1599880 3587344\n\t\t\tSwap: 2097148 0 2097148\n\t\t\t"]]}},{"id":"tvdCbd3ZN2","type":"paragraph","data":{"text":"3.8 make 명령을 사용하여 컴파일 시작 ( -j4 옵션을 주고 진행 )"}},{"id":"o1-DrTx2WM","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ make -j4"]]}},{"id":"eB7-aw7reI","type":"paragraph","data":{"text":"- python 라이브러리 빌드부분에서 오랫동안 멈춰 있으면 Ctrl +C를 눌러 중지하고 make 명령으로 다시 진행하면 된다."}},{"id":"EmTbwD8Rpi","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ make"]]}},{"id":"8QNo7dm7ru","type":"paragraph","data":{"text":"- 컴파일 완료"}},{"id":"erR3Im3vMl","type":"simpleImage","data":{"url":"http://192.168.10.9:3000/img_e4dsmake/ck/SRCNBIH9N8EH8X43B7X3.png","caption":"","withBorder":false,"withBackground":false,"stretched":false}},{"id":"VIYs1KGp-i","type":"paragraph","data":{"text":"3.9 컴파일 결과물을 설치"}},{"id":"ihFmOIUYH6","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ sudo make install"]]}},{"id":"ZpIaaV9iMD","type":"paragraph","data":{"text":"샘플 코드들은 /usr/local/share/opencv4/samples/ 위치로 복사된다."}},{"id":"FpOBqxZMuy","type":"simpleImage","data":{"url":"http://192.168.10.9:3000/img_e4dsmake/ck/DDLQMWEA5137N1XIKQDI.png","caption":"","withBorder":false,"withBackground":false,"stretched":false}},{"id":"BFJJeo-uIC","type":"paragraph","data":{"text":"3.10 opencv 라이브러리를 찾을 수 있도록 다음 명령을 실행한다."}},{"id":"0fSsS-uzGc","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ sudo ldconfig"]]}},{"id":"S8rkox11d4","type":"paragraph","data":{"text":"3.11 /etc/dphys-swapfile 파일을 열어서 CONF_SWAPSIZE 변수값을 다시 100으로 수정하고 restart 한다."}},{"id":"LuK6YDGz_b","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ sudo nano /etc/dphys-swapfile"]]}},{"id":"LfOwoQQCC_","type":"simpleImage","data":{"url":"http://192.168.10.9:3000/img_e4dsmake/ck/J8O7TG7F26V5XUF2SJR5.png","caption":"","withBorder":false,"withBackground":false,"stretched":false}},{"id":"pWVwUz3CXQ","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ sudo /etc/init.d/dphys-swapfile restart[ ok ] Restarting dphys-swapfile (via systemctl): dphys-swapfile.service.\n\t\t\t"]]}},{"id":"_7pOmtok9R","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ free total used free shared buff/cache available\n\t\t\tMem: 3947004 192488 2154636 17768 1599880 3587344\n\t\t\tSwap: 102396 0 102396\n\t\t\t"]]}},{"id":"MvFGtqiQN5","type":"headerAlign","data":{"text":"4. OpenCV 설치 결과 확인","level":2,"alignment":"left"}},{"id":"_aVpa5G62l","type":"paragraph","data":{"text":"4.1 C/C++"}},{"id":"uNXb6W4rVm","type":"paragraph","data":{"text":"4.1.1 OpenCV 4.x에서는 옵션으로 opencv 대신 opencv4를 사용하면 pkg-config를 사용하여 컴파일 할 수 있다."}},{"id":"YrIw2BkknW","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ g++ -o videocapture_basic /usr/local/share/opencv4/samples/cpp/videocapture_basic.cpp $(pkg-config opencv4 \\--libs \\--cflags)"]]}},{"id":"d-3k-Byz0Z","type":"paragraph","data":{"text":"4.1.2 테스트를 위해 라즈베리파이 카메라를 연결한다."}},{"id":"0PEkZDfwrN","type":"paragraph","data":{"text":"Preferences > Raspberry Pi Configuration 창을 연다"}},{"id":"rHDK8eunm4","type":"simpleImage","data":{"url":"http://192.168.10.9:3000/img_e4dsmake/ck/ND2UGPXU7QGOF1VSHVHT.png","caption":"","withBorder":false,"withBackground":false,"stretched":false}},{"id":"H5tDxnaEI6","type":"paragraph","data":{"text":"Interfaces 탭에서 Camera 항목을 Enable 체크하고 OK를 클릭하여 리부팅 한다."}},{"id":"WT37zB3VN1","type":"simpleImage","data":{"url":"http://192.168.10.9:3000/img_e4dsmake/ck/J8UAUM3M0UIA8NXUHEC0.png","caption":"","withBorder":false,"withBackground":false,"stretched":false}},{"id":"pG1e5Bsko_","type":"paragraph","data":{"text":"/dev/video0 디바이스 파일이 생성되었는지 확인한다."}},{"id":"tJ_yRg1IJD","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ ls /dev/video*/dev/video0 /dev/video10 /dev/video11 /dev/video12\n\t\t\t"]]}},{"id":"1oeuIshIeH","type":"paragraph","data":{"text":"/dev/video0 가 없으면 디바이스 장치를 만들어줘야 한다."}},{"id":"DYUjAdbfgk","type":"paragraph","data":{"text":"만드는 방법은 webnautes님의 티스토리를 참고 ( http://webnautes.tistory.com/1192 )"}},{"id":"ka89Kgg9oB","type":"paragraph","data":{"text":"파이 카메라의 경우 소스 코드를 수정해야 한다. "}},{"id":"TYBpGcJhCG","type":"paragraph","data":{"text":"open 함수의 아규먼트를 -1로 해야 정상 작동하며, 0으로 하면 카메라를 열지 못하고 무한 대기 상태에 빠지게 된다."}},{"id":"yk8dqlP0Vn","type":"table","data":{"withHeadings":false,"content":[["//cap.open(deviceID + apiID);cap.open(-1);\n\t\t\t"]]}},{"id":"8cXdi142_f","type":"paragraph","data":{"text":"4.1.3 CMake를 사용하는 방법으로 예제 코드를 가져와서 컴파일 해본다."}},{"id":"hwxNMw54ea","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ $ mkdir examplepi@raspberrypi:~ $ cd examplepi@raspberrypi:~ /example $ cp /usr/local/share/opencv4/samples/cpp/videocapture_basic.cpp ./\n\t\t\t"]]}},{"id":"obZc9QMG6Z","type":"paragraph","data":{"text":"CMakeLists.txt 파일을 생성하여 아래 내용을 복사한다."}},{"id":"R6Afm8Z4zz","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /example $ nano CMakeLists.txt"]]}},{"id":"t9DKwGgAUe","type":"table","data":{"withHeadings":false,"content":[["cmake_minimum_required(VERSION 2.8)\n\t\t\tproject( videocapture_basic)\n\t\t\tfind_package( OpenCV REQUIRED )\n\t\t\tinclude_directories( ${OpenCV_INCLUDE_DIRS} )\n\t\t\tadd_executable( videocapture_basic videocapture_basic.cpp )\n\t\t\ttarget_link_libraries( videocapture_basic ${OpenCV_LIBS} )"]]}},{"id":"4IirlCEW4b","type":"paragraph","data":{"text":"videocapture_basic.cpp 파일을 열어 cap.open(-1)로 수정한다."}},{"id":"5C5oRpSMJG","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /example $ nano videocapture_basic.cpp"]]}},{"id":"wtuhwmFbeR","type":"paragraph","data":{"text":"아래 소스코드에서 cap.open(deviceID + apiID) 부분을 cap.open(-1)로 수정한다."}},{"id":"O-KH9IBSmr","type":"simpleImage","data":{"url":"http://192.168.10.9:3000/img_e4dsmake/ck/QCE4XLIA2CWNS6OKED9P.png","caption":"","withBorder":false,"withBackground":false,"stretched":false}},{"id":"kSRHgMmz44","type":"paragraph","data":{"text":"build 디렉토리를 생성하여 컴파일을 진행한다."}},{"id":"-p3tG-ZtPW","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /example $ mkdir buildpi@raspberrypi:~ /example $ cd buildpi@raspberrypi:~ /example/build $ cmake ..pi@raspberrypi:~ /example/build $ make\n\t\t\t"]]}},{"id":"_AnpqZ6TEK","type":"paragraph","data":{"text":"결과는 아래와 같이 나온다."}},{"id":"JHrUA2xJ9z","type":"simpleImage","data":{"url":"http://192.168.10.9:3000/img_e4dsmake/ck/Z69A17KFTNDYG7HFYAWM.png","caption":"","withBorder":false,"withBackground":false,"stretched":false}},{"id":"iYf-GuLpEU","type":"paragraph","data":{"text":"4.1.4 videocapture_basic 파일을 실행 시키면 영상이 보인다."}},{"id":"xPSLwHBW4J","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /example/build $ ./videocapture_basic"]]}},{"id":"NDruqj-OsF","type":"paragraph","data":{"text":"결과 영상"}},{"id":"92DltASyN9","type":"simpleImage","data":{"url":"http://192.168.10.9:3000/img_e4dsmake/ck/1GYQ93G9S83CSNNHAP4G.png","caption":"","withBorder":false,"withBackground":false,"stretched":false}},{"id":"3cktWxquIU","type":"paragraph","data":{"text":"실행시 아래와 같이 WARN 발생하나 영상이 보이는데는 문제가 없다."}},{"id":"B0a1FnDEOL","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /example/build $ ./videocapture_basic\n\t\t\t[ INFO:0] global /home/pi/opencv/opencv-4.1.2/modules/videoio/src/videoio_registry.cpp (187) VideoBackendRegistry VIDEOIO: Enabled backends(7, sorted by priority): FFMPEG(1000); GSTREAMER(990); INTEL_MFX(980); V4L2(970); CV_IMAGES(960); CV_MJPEG(950); XINE(940)\n\t\t\t[ 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'.\n\t\t\t[ 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\n\t\t\t[ 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\n\t\t\t(DEBUG) V4L: opening /dev/video0\n\t\t\tStart grabbing\n\t\t\tPress any key to terminate\n\t\t\t "]]}},{"id":"6UtfqWuskO","type":"paragraph","data":{"text":"4.2 Python"}},{"id":"jcmJRFXOWp","type":"paragraph","data":{"text":"4.2.1 python 2 와 python 3에서 OpenCV 버전이 출력되는지 확인한다."}},{"id":"kBoLipNx3k","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ pythonPython 2.7.16 (default, Oct 10 2019, 22:02:15) \n\t\t\t[GCC 8.3.0] on linux2\n\t\t\tType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\t\t\t>>> import cv2\n\t\t\t>>> cv2.__version__\n\t\t\t'4.1.2'\n\t\t\t"]]}},{"id":"dcWcOyAECa","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ /opencv/opencv-4.1.2/build $ python3Python 3.7.3 (default, Apr 3 2019, 05:39:12) \n\t\t\t[GCC 8.2.0] on linux\n\t\t\tType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\t\t\t>>> import cv2\n\t\t\t>>> cv2.__version__\n\t\t\t'4.1.2'\n\t\t\t"]]}},{"id":"7Hli5ejrhH","type":"paragraph","data":{"text":"4.2.2 Python도 c/c++ 처럼 파이 카메라의 경우 0 대신 -1을 사용한다."}},{"id":"nAmgku1SWU","type":"table","data":{"withHeadings":false,"content":[["//cap = cv.VideoCapture(source)cap = cv.VideoCapture(-1)\n\t\t\t"]]}},{"id":"yLiVNCadzC","type":"paragraph","data":{"text":"아래 소스코드에서 cap = cv.VideoCapture(source) 부분을 cap = cv.VideoCapture(-1)로 수정한다."}},{"id":"YW7cG_S1bM","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:/usr/local/share/opencv4/samples/python $ sudo nano video.py"]]}},{"id":"SdV_qa6u8Q","type":"simpleImage","data":{"url":"http://192.168.10.9:3000/img_e4dsmake/ck/HVNTEDJ7F0QLI9RAC9ES.png","caption":"","withBorder":false,"withBackground":false,"stretched":false}},{"id":"DDhwLDn-nZ","type":"paragraph","data":{"text":"4.2.3 video.py 예제 코드를 실행하면 영상을 볼 수 있다."}},{"id":"GXfvps4EhF","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ $ python /usr/local/share/opencv4/samples/python/video.pypi@raspberrypi:~ $ python3 /usr/local/share/opencv4/samples/python/video.py\n\t\t\t"]]}},{"id":"qyH3usr4rL","type":"simpleImage","data":{"url":"http://192.168.10.9:3000/img_e4dsmake/ck/TK712DHH54LGSWB8KDSG.png","caption":"","withBorder":false,"withBackground":false,"stretched":false}},{"id":"-fZGTtRlTG","type":"paragraph","data":{"text":"python도 c/c++과 같이 실행시 아래와 같이 WARN 발생하나 영상이 보이는데는 문제가 없다."}},{"id":"evYxHEq5wg","type":"table","data":{"withHeadings":false,"content":[["[ INFO:0] global /home/pi/opencv/opencv-4.1.2/modules/videoio/src/videoio_registry.cpp (187) VideoBackendRegistry VIDEOIO: Enabled backends(7, sorted by priority): FFMPEG(1000); GSTREAMER(990); INTEL_MFX(980); V4L2(970); CV_IMAGES(960); CV_MJPEG(950); XINE(940)\n\t\t\t[ 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'.\n\t\t\t[ 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\n\t\t\t[ 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\n\t\t\t(DEBUG) V4L: opening /dev/video0"]]}},{"id":"AirKU_Zemk","type":"paragraph","data":{"text":"필요 없어진 컴파일에 사용했던 opencv 소스 코드 디렉토리를 삭제한다."}},{"id":"7QZ3p5BM4L","type":"table","data":{"withHeadings":false,"content":[["pi@raspberrypi:~ $ rm -rf opencv"]]}}],"version":"2.30.5"}
