본문 바로가기
Projects/OpenCV for RaspberryPi

Raspberry Pi2 picam에서 openCV 적용하기3

by Answer Choi 2015. 4. 23.
반응형

Raspbian JESSIE로 적용하기



앞서 찍은 사진을 파일로 빼는 것 까지 했고, 이제 본격적인 OPENCV를 해보겠습니다.


먼저 관련 패키지들을 설치해 줍니다.


1. GTK + UVC viewer 설치


1
sudo apt-get install guvcview
cs



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


1
2
sudo usermod --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 설치


face recognition 다운로드


다운로드가 안될 경우


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 라는 파일이 생성됩니다.



libopencv_facerec.a 다운로드


이 폴더를 원래 작업중이던 /home/pi/camcv/libfacerec/ 폴더로 이동해 줍니다.


1
2
3
4
mkdir /home/pi/camcv/libfacerec
cd /home/pi/camcv/libfacerec
cp -/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파일로 저장된걸 확인 할 수 있습니다.




반응형

인기글