본문 바로가기
Projects/OpenCV for RaspberryPi

Raspberry Pi 에서 Picam을 이용한 OpenCV 3

by Answer Choi 2015. 2. 12.
반응형



최근 업데이트된 포스트 바로가기!!(클릭!!)







3. OpenCV 적용하기




지난chapter에서 camcv로 촬영하는 것 까지 성공했다.


이제 이 파일을 편집하여 OpenCV를 구현해 보자



먼저 관련 package들을 설치하자



GTK + UVC viewer


sudo apt-get install guvcview



 


설치가 완료되면 설정을 해준다.

sudo usermod -a -G video pi

sudo modprobe uvcvideo


OpenCV관련 라이브러리 설치

sudo apt-get install libopencv-dev


여긴 아주 오래 걸린다;;;

파이선 Opencv 설치

sudo apt-get install python-opencv

 


여기까지 설치가 완료되면 OpenCV 라이브러리는 설치가 끝났다.



add(깜박하고 빠진부분이 있어 추가합니다;;;)


install face recognition


face recognition API  <<< 이 링크를 눌러 API를 다운로드 합니다.


home/pi/ 에서 압축을 풀면 bytefish-libfacerec-xxxxxx 라는 폴더가 생긴다.


cd bytefish-libfacerec-xxxxxx(이부분은 ls로 폴더이름을 확인하세요)


sudo cmake .


 



sudo make




폴더안에 libopencv_facerec.a 라는 파일이 생성되었다.


이 파일을 /home/pi/camcv/libfacerec/ 로 복사한다


mkdir /home/pi/camcv/libfacerec


cd /home/pi/camcv/libfacerec


cp -r /home/pi/bytefish-libfacerec-xxxxx/* .  (이부분도 폴더명 확인)


cd..


cmake를 하기위해  cmakelists.txt를 편집하자


nano cmakelists.txt


  1. ------------------------------------------------cmakelists.txt-------------------------------------
  2. cmake_minimum_required(VERSION 2.8)
  3.  project(camcv)
  4.  SET(COMPILE_DEFINITIONS -Werror)
  5.  
  6. #OPENCV
  7. find_package( OpenCV REQUIRED )
  8.  
  9. #except if you’re pierre, change the folder where you installed libfacerec
  10. #optional, only if you want to go till step 6 : face recognition
  11. link_directories( /home/pi/camcv/libfacerec)
  12.  
  13.  include_directories(/opt/vc/include)
  14.  include_directories(/opt/vc/include/interface/vcos)
  15.  include_directories(/opt/vc/include/interface/vcos/pthreads)
  16.  include_directories(/opt/vc/include/interface/vmcs_host/linux)
  17.  include_directories(.)
  18.  
  19.  include_directories(/opt/vc/userland/host_applications/linux/libs/bcm_host/include)
  20.  include_directories(/opt/vc/userland/interface/vcos)
  21.  include_directories(/opt/vc/userland)
  22.  include_directories(/opt/vc/userland/interface/vcos/pthreads)
  23.  include_directories(/opt/vc/userland/interface/vmcs_host/linux)
  24.  include_directories(/opt/vc/userland/interface/khronos/include)
  25.  include_directories(/opt/vc/userland/interface/khronos/common)
  26.  include_directories(/home/pi/camcv/)
  27.  include_directories(/home/pi/camcv/gl_scenes/)
  28.  include_directories(/home/pi/camcv/libfacerec/include/)
  29. add_executable(camcv RaspiCamControl.c RaspiCLI.c RaspiPreview.c camcv.c RaspiTex.c RaspiTexUtil.c gl_scenes/teapot.c gl_scenes/models.c gl_scenes/square.c gl_scenes/mirror.c gl_scenes/sobel.cgl_scenes/yuv.c tga.c )
  30.  
  31.  
  32.  
  33. target_link_libraries(camcv /opt/vc/lib/libmmal_core.so /opt/vc/lib/libmmal_util.so /opt/vc/lib/libmmal_vc_client.so /opt/vc/lib/libvcos.so /opt/vc/lib/libbcm_host.so /opt/vc/lib/libGLESv2.so/opt/vc/lib/libEGL.so /home/pi/camcv/libfacerec/libopencv_facerec.a ${OpenCV_LIBS})
  34. ---------------------------------------------------------------------------------------------------


빨간색 부분이 추가 된 부분이다.




이제 camcv.c를 다시 편집해야 된다.




sudo nano camcv.c


아래의 내용들을 수정해 준다.


수정하기 귀찮다면 아래 링크에서 수정된 파일을 다운 받을 수 있다.


  1. -----------------------------------------------camcv.c---------------------------------------------
  2. Lines 61+ : add OpenCV Includes
  3. // *** PR : ADDED for OPENCV
  4. #include <cv.h>
  5. #include <highgui.h>

  6. Line 156 : modify init values for test (size of file)
  7. // *** PR : modify for demo purpose : smaller image
  8. state->timeout = 1000; // 5s delay before 
  9. take image
  10. state->width = 320;//2592;
  11. state->height = 200; //1944;

  12. Line 230+ : in static void encoder_buffer_callback function. 
  13. This is the core of the modification. 
  14. This function is a callback, call to get the image in the queue. 
  15. buffer contains the picture from the camera.

  16. // *** PR : OPEN CV Stuff here !
  17. // create a CvMat empty structure, with size of the buffer.
  18. CvMat* buf = cvCreateMat(1,buffer->length,CV_8UC1);
  19. // copy buffer from cam to 
  20. CvMatbuf->data.ptr = buffer->data;
  21. // decode image (interpret jpg)
  22. IplImage *img = cvDecodeImage(buf, CV_LOAD_IMAGE_COLOR);
  23. // we can save it 
  24. !cvSaveImage(“foobar.bmp”, img,0);
  25. // or display it
  26. cvNamedWindow(“camcvWin”, CV_WINDOW_AUTOSIZE);
  27. cvShowImage(“camcvWin”, img );
  28. cvWaitKey(0);
  29. Line 711/726/823 : we remove the native preview window (replaced by opencv window)
  30. // *** PR : we don’t want preview
  31. camera_preview_port = NULL;
  32. // PR : we don’t want preview
  33. // status = connect_ports(camera_preview_port, preview_input_port, &state.preview_connection);
  34. // mmal_connection_destroy(state.preview_connection);
  35.  
  36. ---------------------------------------------------------------------------------------------------


수정된 파일 다운받기



수정된 파일을 적용하여 다시 컴파일을 하자


cmake .


make


./camcv



만약 아래와 같은 에러 메세지가 뜬다면

---------------------------------------------------------------------------------------------

mmal: main: Failed to create camera component
mmal: Failed to run camera app. Please check for firmware updates

---------------------------------------------------------------------------------------------


Line 696에서 아래와 같이 바꿔준다.


  1. else if (!raspipreview_create(&state.preview_parameters))
  2. => else if ( (status = raspipreview_create(&state.preview_parameters)) != MMAL_SUCCESS)

그리고 다시 컴파일 후 실행을 하면


OpenCV용 window가 나오면서 촬영된 영상이 display 된다.



반응형

인기글