Training Data는 Opencv 2.4.9 설치 할때 있는 Data를 그대로 써보았는데, 제법 잘 Train 되어 있었다. Cuda와 Opencl은 직접 코딩한거는 아니고, Opencv에서 제공하는 함수를 썻는데, 직접 최적화 한거랑 성능 비교는 나중에 해봐야겠다.
아래 Code는 OpenCV의 OpenCL(Ocl클래스)를 사용한것이다.
[-] Collapse
UINT CSecretDlg::EyeDetectOcl(LPVOID lParam)
{
CSecretDlg *pDlg = (CSecretDlg*)lParam;
CGrab * pGrab = CGrab::GetInstance(1600,1200);
IplImage* pImage = NULL;
Mat matImg;
ocl::OclCascadeClassifier eye_classifier;
eye_classifier.load("C:\\opencv\\sources\\data\\haarcascades\\haarcascade_eye.xml");
while(pDlg->bContinuosGrab)
{
pGrab->GrabImage(pImage);
if(pImage==NULL)
continue;
matImg = cvarrToMat(pImage);
oclMat frame(matImg);
oclMat grayframe;
ocl::cvtColor(frame, grayframe, CV_BGR2GRAY);
ocl::equalizeHist(grayframe,grayframe);
// -------------------------------------------------------------
// face detection routine
// a vector array to store the face found
vector<cv::Rect> eyes;
eye_classifier.detectMultiScale(grayframe, eyes,1.2,4,CV_HAAR_FIND_BIGGEST_OBJECT|CV_HAAR_SCALE_IMAGE,Size(30,30),Size(150,150));
// -------------------------------------------------------------
// draw the results
for(int i=0; i<eyes.size(); i++)
{
rectangle(matImg, eyes[i], cv::Scalar(0,255,0), 3, 4, 0);
}
CDisplayPC::GetInstance()->DisplayImage(matImg,pDlg->m_hWnd,IDC_STATIC_DISPLAY);
}
cvReleaseImage(&pImage);
return 0;
}
{
CSecretDlg *pDlg = (CSecretDlg*)lParam;
CGrab * pGrab = CGrab::GetInstance(1600,1200);
IplImage* pImage = NULL;
Mat matImg;
ocl::OclCascadeClassifier eye_classifier;
eye_classifier.load("C:\\opencv\\sources\\data\\haarcascades\\haarcascade_eye.xml");
while(pDlg->bContinuosGrab)
{
pGrab->GrabImage(pImage);
if(pImage==NULL)
continue;
matImg = cvarrToMat(pImage);
oclMat frame(matImg);
oclMat grayframe;
ocl::cvtColor(frame, grayframe, CV_BGR2GRAY);
ocl::equalizeHist(grayframe,grayframe);
// -------------------------------------------------------------
// face detection routine
// a vector array to store the face found
vector<cv::Rect> eyes;
eye_classifier.detectMultiScale(grayframe, eyes,1.2,4,CV_HAAR_FIND_BIGGEST_OBJECT|CV_HAAR_SCALE_IMAGE,Size(30,30),Size(150,150));
// -------------------------------------------------------------
// draw the results
for(int i=0; i<eyes.size(); i++)
{
rectangle(matImg, eyes[i], cv::Scalar(0,255,0), 3, 4, 0);
}
CDisplayPC::GetInstance()->DisplayImage(matImg,pDlg->m_hWnd,IDC_STATIC_DISPLAY);
}
cvReleaseImage(&pImage);
return 0;
}
댓글 없음:
댓글 쓰기