'2014/03/12 글 목록 :: Horizontal Grays S2

 현재 Ubuntu 12.04에 OpenCV 설치해서 영상처리 프로그래밍 중임.


 640 * 480 해상도에 60fps 의 카메라가 필요해서 찾던 중 좋은 정보 발견!!!


 Sony PlayStation Eye가 USB Interface 임에도 640*480 (60fps), 320 * 240 (120fps) 임 가격도 44,000원 정도로 저렴!!


 여튼 이놈이 실제 60fps가 입력되는지 확인 할 필요가 있슴


 윈도우7에 Visual Studio2010 + OpenCV 에서는 확인 하였슴!! (오~ 조으네)


 여튼 실제 작업할 리눅스 환경에서 드라이버 문제라던지 있을 수 있으므로 동작 및 사양 확인할 필요가 있어서


1. 우선 영상을 녹화 -> 재생하여 해상도 및 프레임 확인 

  1) 가장 널리 알려진 웹캠 프로그램 Cheese에서 영상 녹화 및 확인 결과 640*480에 25fps 로 Fail !! (자동 설정된 Driver)

  2) lsusb 명령으로 현재 USB 장치 확인


       일단 lsusb로 확인한 USB에 연결된 Eye는 Playstation Eye로 확인 된다.

  3) 여기서 Driver 버전 확인, 터미널 열고 modinfo gspca-ov534 입력 

     

 

  3) 확인 결과 gspca/ov534 Driver 잘 잡힘, 즉 Cheese가 걍 25frame으로 녹화한 거임

  4) 다른 프로그램 없나 뒤적뒤적 -> 우분투 소프트웨어 관리자에서 cam으로 검색 camorama webcam viewer 라는 프로그램이 보임 -> 설치

  5) camorama webcam viewer 실행




    오오 하단을 보니 현재 설정 60fps , 평균 54.19fps 잘 된다!!! cheese가 역시 문제였슴



 2. 카메라의 인식 및 동작은 잘 되는 것으로 보이므로 프로그램을 직접 짜서 확인!




  하단 printf 된 콘솔을 확인해보니 프레임 잡아서 뿌리는데 걸리는 시간 그리고 이를 이용해 계산한 Frame Rate, 그리고 평균 Frame Rate를 보니 잘 되고 있다.

  여기서 cvWaitKey(1)의 사용으로 1ms 의 의미없는 지연시간이 들어간다. 

  실제 영상처리 연산을 하자면 60 fps 영상처리는 쉽지 않아 보이긴 한다 --;;


 3. 확인을 위하여 카메라를 30 fps로 설정하고 프로그램을 동작


  

   정확히 동작하고 있다.


 4. 동작을 확인한 소스코드는 다음과 같다. 


 

//============================================================================

// Name        : OpenCVTest3.cpp

// Author      : jslee

// Version     :

// Copyright   : Your copyright notice

// Description : Hello World in C++, Ansi-style

//============================================================================


#include <iostream>

#include <stdio.h>

#include <sys/time.h>


#include "opencv2/opencv.hpp"

struct timeval start_time;

struct timeval end_time;

double elapsed_time;

float fps;

double total_fps = 0.0,average_fps = 0.0;

long cnt=1;




using namespace std;

int main() {


IplImage* img = 0;

int key;


CvCapture* capture = cvCaptureFromCAM(0);

cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH, 640);

cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT, 480);

cvSetCaptureProperty( capture, CV_CAP_PROP_FPS, 30);


while(1)

{

gettimeofday(&start_time,NULL);


cvGrabFrame(capture);

img = cvRetrieveFrame(capture);


cvNamedWindow( "PreviewImage", 1 );

cvShowImage( "PreviewImage", img );


key = cvWaitKey(1);

if(key > 10) break;

//end_time = clock();

gettimeofday(&end_time, NULL);


// elapsed_time = (double)(end_time-start_time) / CLOCKS_PER_SEC;

elapsed_time = (double)(end_time.tv_sec) + (double)(end_time.tv_usec)/1000000.0 - (double)(start_time.tv_sec) - (double)(start_time.tv_usec)/1000000.0;

fps = 1.0 / elapsed_time;

total_fps += fps;

average_fps = total_fps / (double)(cnt);

cnt++;

elapsed_time *= 1000.0;


printf("Elapsed Time = %2.3f ms, Frame Rate = %2.3f (fps), Average Frame Rate = %2.3f \n",elapsed_time,fps,average_fps);




} //end of while(1)


cvReleaseCapture( &capture );

//cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!

return 0;

}


 음.. 일단 오늘 작업은 이걸로 마무리.

 그러고보니 리눅스에서 OpenCV 설치에 관해 안적은듯.. 그건 내일 할수도 있고... 바쁘면 안할수도 있고 ㅋ

+ Recent posts