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
- ------------------------------------------------cmakelists.txt-------------------------------------
- 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.cgl_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 /home/pi/camcv/libfacerec/libopencv_facerec.a ${OpenCV_LIBS})
- ---------------------------------------------------------------------------------------------------
빨간색 부분이 추가 된 부분이다.
이제 camcv.c를 다시 편집해야 된다.
sudo nano camcv.c
아래의 내용들을 수정해 준다.
수정하기 귀찮다면 아래 링크에서 수정된 파일을 다운 받을 수 있다.
- -----------------------------------------------camcv.c---------------------------------------------
- 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);
- ---------------------------------------------------------------------------------------------------
수정된 파일을 적용하여 다시 컴파일을 하자
cmake .
make
./camcv
만약 아래와 같은 에러 메세지가 뜬다면
---------------------------------------------------------------------------------------------
mmal: main: Failed to create camera component
mmal: Failed to run camera app. Please check for firmware updates
---------------------------------------------------------------------------------------------
Line 696에서 아래와 같이 바꿔준다.
- else if (!raspipreview_create(&state.preview_parameters))
- => else if ( (status = raspipreview_create(&state.preview_parameters)) != MMAL_SUCCESS)
그리고 다시 컴파일 후 실행을 하면
OpenCV용 window가 나오면서 촬영된 영상이 display 된다.
'Projects > OpenCV for RaspberryPi' 카테고리의 다른 글
Raspberry Pi 에서 Picam을 이용한 OpenCV Final (2) | 2015.02.12 |
---|---|
Raspberry Pi 에서 Picam을 이용한 OpenCV 4 (0) | 2015.02.12 |
Raspberry Pi 에서 Picam을 이용한 OpenCV 2 (0) | 2015.02.12 |
Raspberry Pi 에서 Picam을 이용한 OpenCV 1 (1) | 2015.02.12 |
Raspberry Pi 에서 초 간단 OpenCV 하기(webcam 이용) (2) | 2015.02.12 |