Ünlü Oscar selfie görüntüsündeki yüzlerin her birinde göz taraması yapmak zorundayım.Çocukların çoğu yakın frontal olduğundan yüzlerde Haar Casacades kullanmayı denedim, ancak göz algılama tamamen rastgele ve hiç bir göz tanınmıyor.Oscar selfie'de göz taraması
bekar yüzlerle görüntülerde göz tespiti için aynı Haar kaskad xml dosyası denedim ve iyi çalıştı.
Gözleri doğru bir şekilde algılamak için hangi adımları izleyebilirim?
ben göz tespiti için kullanılan resim buradan indirilebilir: Aşağıda
https://drive.google.com/file/d/0B3jt6sHgpxO-d1plUjg5eU5udW8/view?usp=sharing
Ben yüz ve göz tespiti için yazdım kodudur. Temel fikir ilk olarak viola jones algoritmasını kullanarak yüzü tespit ettim ve her bir yüz içinde gözleri tespit etmeye çalışıyorum.#include <opencv2/highgui/highgui.hpp>
#include <cv.h>
#include <opencv2/objdetect/objdetect.hpp>
#include <vector>
using namespace cv;
using namespace std;
int x,y,w,h;
int main(int argc, const char** argv)
{
Mat image = imread("oscarSelfie.jpg",CV_LOAD_IMAGE_UNCHANGED);
Mat gray_img;
cvtColor(image, gray_img, CV_BGR2GRAY);
string faceCascade_file = "haarcascade_frontalface_alt2.xml";
string eyeCascade_file = "haarcascade_eye.xml";
CascadeClassifier faceCascade;
CascadeClassifier eyeCascade;
//Cascade classifier is a class which has a method to load the classifier from file
if(!faceCascade.load(faceCascade_file))
{ cout<<"--(!)Error loading\n"; return -1; };
//If it returns zero, it means an error has occured in loading the classifier
if(!eyeCascade.load(eyeCascade_file))
{ cout<<"--(!)Error loading\n"; return -1; };
equalizeHist(gray_img, gray_img);
//Increases contrast and make image more distingushable
/***** Detecting Faces in Image *******/
vector<Rect> faces;
vector<Rect> eyes;
//Rect is a class handling the rectangle datatypes
faceCascade.detectMultiScale(gray_img, faces, 1.1, 1, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30));
//faces.size()-it will return number of faces detected
for(int i = 0; i < faces.size(); i++)
{
x = faces[i].x;
y = faces[i].y;
w = faces[i].width;
h = faces[i].height;
//Point center(faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5);
//ellipse(image, center, Size(faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);
rectangle(image, cvPoint(x,y), cvPoint(x+w,y+h), CV_RGB(0,255,0), 2, 8);
/******** Detecting eyes ***********/
eyeCascade.detectMultiScale(gray_img, eyes, 1.1, 50, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30));
for(int j=0; j < eyes.size(); j++)
{
Point center(faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5);
int radius = cvRound((eyes[j].width + eyes[j].height)*0.25);
circle(image, center, radius, Scalar(255, 0, 0), 4, 8, 0);
}
}
namedWindow("oscarSelfie :)", CV_WINDOW_AUTOSIZE);
imshow("oscarSelfie :)", image);
waitKey(0);
destroyWindow("pic");
return 0;
} `
(https://github.com/Itseez/opencv/blob/master/samples/cpp/facedetect OpenCV [örnekleri], bkz tekerleği yeniden icat gerek .cpp) ve [tutorials] (https://github.com/Itseez/opencv/blob/master/samples/cpp/tutorial_code/objectDetection/objectDetection.cpp) – sturkmen
hey sturkmen, daha önce dersler ve örnekler içerisindeydim ama Tıkanıklık nedeniyle tüm yüzleri algılamıyor gibi görünmüyor ve gözümün algılanması sadece korkunç, bir gözü bile bir çift tespit etmiyor. –