앞서 찍은 사진을 파일로 빼는 것 까지 했고, 이제 본격적인 OPENCV를 해보겠습니다.
먼저 관련 패키지들을 설치해 줍니다.
1. GTK + UVC viewer 설치
1 | sudo apt-get install guvcview | cs |
설치가 완료되면 설정을 해줍니다.
1 2 | sudo usermod -a -G video pi sudo modprobe uvcvideo | cs |
2. OPENCV 라이브러리 설치
1 | sudo apt-get install libopencv-dev | cs |
좀 오래걸리니 커피라도~^^
3. 파이선 Opencv 설치
sudo apt-get install python-opencv
4. face recognition 설치
다운로드가 안될 경우
위의 링크를 눌러 다운로드한 후 home/pi/ 에 압축을 풀어줍니다.(samba를 이용하면 편합니다)
압축을 푸신후 폴더로 이동하시면 bytefish-libfacerec-xxx라는 폴더가 나타나는데
편리한 작업을 위해 /home/pi/ 로 이동한 후 폴더명을 bytefish-libfacerec 로 변경해 줍니다.
새로 만든 폴더로 이동 후 cmake 합니다.
1 2 3 | cd .. cd bytefish-libfacerec sudo cmake . | cs |
cmake가 완료 되면 make해 줍니다.
1 | sudo make | cs |
make가 정상적으로 완료 되면 libopencv_facerec.a 라는 파일이 생성됩니다.
이 폴더를 원래 작업중이던 /home/pi/camcv/libfacerec/ 폴더로 이동해 줍니다.
1 2 3 4 | mkdir /home/pi/camcv/libfacerec cd /home/pi/camcv/libfacerec cp -r /home/pi/bytefish-libfacerec/* . cd .. | cs |
이제 cmake를 하기위해 makelist를 수정합니다.
1 | sudo nano CMakeLists.txt | cs |
빨간색 부분이 추가된 부분입니다.(아래부분을 통채로 복사하셔도 됩니다.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | cmake_minimum_required(VERSION 2.8) project(camcv) SET(COMPILE_DEFINITIONS -Werror) #OPENCV find_package( OpenCV REQUIRED ) #except if you’re pierre, change the folder where you installed libfacerec #optional, only if you want to go till step 6 : face recognition link_directories( /home/pi/camcv/libfacerec) include_directories(/opt/vc/include) include_directories(/opt/vc/include/interface/vcos) include_directories(/opt/vc/include/interface/vcos/pthreads) include_directories(/opt/vc/include/interface/vmcs_host/linux) include_directories(.) include_directories(/opt/vc/userland/host_applications/linux/libs/bcm_host/include) include_directories(/opt/vc/userland/interface/vcos) include_directories(/opt/vc/userland) include_directories(/opt/vc/userland/interface/vcos/pthreads) include_directories(/opt/vc/userland/interface/vmcs_host/linux) include_directories(/opt/vc/userland/interface/khronos/include) include_directories(/opt/vc/userland/interface/khronos/common) include_directories(/home/pi/camcv/) include_directories(/home/pi/camcv/gl_scenes/) include_directories(/home/pi/camcv/libfacerec/include/) 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.c gl_scenes/yuv.c tga.c ) 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 libpthread.so libm.so /home/pi/camcv/libfacerec/libopencv_facerec.a ${OpenCV_LIBS}) | cs |
이제 camcv.c를 편집해 줍니다.
1 | sudo nano camcv.c | cs |
수정된 부분은 아래와 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | Lines 61+ : add OpenCV Includes // *** PR : ADDED for OPENCV #include <cv.h> #include <highgui.h> Line 156 : modify init values for test (size of file) // *** PR : modify for demo purpose : smaller image state->timeout = 1000; // 5s delay before take image state->width = 320;//2592; state->height = 200; //1944; Line 230+ : in static void encoder_buffer_callback function. This is the core of the modification. This function is a callback, call to get the image in the queue. buffer contains the picture from the camera. // *** PR : OPEN CV Stuff here ! // create a CvMat empty structure, with size of the buffer. CvMat* buf = cvCreateMat(1,buffer->length,CV_8UC1); // copy buffer from cam to CvMatbuf->data.ptr = buffer->data; // decode image (interpret jpg) IplImage *img = cvDecodeImage(buf, CV_LOAD_IMAGE_COLOR); // we can save it !cvSaveImage(“foobar.bmp”, img,0); // or display it cvNamedWindow(“camcvWin”, CV_WINDOW_AUTOSIZE); cvShowImage(“camcvWin”, img ); cvWaitKey(0); Line 711/726/823 : we remove the native preview window (replaced by opencv window) // *** PR : we don’t want preview camera_preview_port = NULL; // PR : we don’t want preview // status = connect_ports(camera_preview_port, preview_input_port, &state.preview_connection); // mmal_connection_destroy(state.preview_connection); | cs |
camcv.c 파일이 방대하여 일일이 수정하기가 힘들다면 수정된 파일을 다운로드하세요.
파일을 새로 받으셨으면 Line 696을 수정해 주세요.
1 2 | else if (!raspipreview_create(&state.preview_parameters)) => else if ( (status = raspipreview_create(&state.preview_parameters)) != MMAL_SUCCESS) | cs |
이제 컴파일을 새롭게 한 후 실행합니다.
1 2 | sudo cmake . sudo make | cs |
./camcv를 실행해 보면 오류가 뜨는 걸 볼 수 있습니다.
이제는 window 모드에서 작업해야 합니다.
startx로 x-window로 들어간 후 터미널을 열고 실행하면 카메라가 촬영을 시작하면서 새로운 window 가 뜨는걸 확인 하실 수 있습니다.
그리고 jpg파일이 아닌 bmp파일로 저장된걸 확인 할 수 있습니다.
'Projects > OpenCV for RaspberryPi' 카테고리의 다른 글
Raspberry Pi2 picam에서 openCV 적용하기5(final) (105) | 2015.04.23 |
---|---|
Raspberry Pi2 picam에서 openCV 적용하기4 (8) | 2015.04.23 |
Raspberry Pi2 picam에서 openCV 적용하기 2 (24) | 2015.04.23 |
Raspberry Pi2 picam에서 openCV 적용하기 1 (4) | 2015.04.22 |
Raspberry Pi 에서 Picam을 이용한 OpenCV Final (2) | 2015.02.12 |