2、把數據標記好之後就是opencv的事情。訓練的函數非常簡單。只有下面這三句:
Ptr<FaceRecognizer> model = createEigenFaceRecognizer();
model->train(images, labels);
model->save("MyFacePCAModel.xml");
3、然後打開攝像頭進行人臉檢測,就是框出人臉的位置。人臉檢測模型是opencv自帶的。
CascadeClassifier cascade;
cascade.load("haarcascade_frontalface_alt.xml");
這是加載的方法。
cascade.detectMultiScale(gray, faces,
1.1, 2, 0
//|CV_HAAR_FIND_BIGGEST_OBJECT
//|CV_HAAR_DO_ROUGH_SEARCH
| CV_HAAR_SCALE_IMAGE,
Size(30, 30));
這是檢測的方法。這裏檢測得到的就是壹個壹個的人臉的矩形框,然後用畫矩形的方法把它們畫出來就行了。
4、然後就是對檢測到的人臉進行識別了,用我們剛才訓練好的人臉模型。加載:
Ptr<FaceRecognizer> modelPCA = createEigenFaceRecognizer();
modelPCA->load("MyFacePCAModel.xml");
檢測:
int predictPCA = 0;
if (face.rows >= 120)
{
resize(face, face_test, Size(92, 112));
}
if (!face_test.empty())
{
predictPCA = modelPCA->predict(face_test);
}
如果預測結果等於標記結果,說明識別正確。
大致流程就這樣了,如果妳對opencv有了壹定的了解,應該能看懂了。