来自图像的EMGU CV人脸识别

时间:2015-05-08 13:55:41

标签: c# c++ opencv emgucv

我之前一直在使用OpenCV进行C ++工作,而且工作得很好。现在,我正在开发一个C#项目并使用EMGU CV进行性别识别。我有预测功能的问题。每次我运行它时,程序在Predict函数上崩溃,当我擦除预测行时,它正在运行。这是我的代码:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
     FaceRecognizer face = new FisherFaceRecognizer(0, 3500);
     face.Load("colorFisherFaceModel.yml");                
     Image<Bgr, Byte> img1 = new Image<Bgr, Byte>("C:\\Users\\sguthesis\\Pictures\\me.jpg");
     cascade = new CascadeClassifier("C:\\Users\\sguthesis\\documents\\visual studio 2013\\Projects\\EmguCV FFR with Image\\EmguCV FFR with Image\\haarcascade_frontalface_alt_tree.xml");
     FaceRecognizer.PredictionResult predictedLabel = face.Predict(img1);
}

另外,我想得到一个输出,1或2. 1为男性,2为女性。我已经训练了许多保存在colorFisherFaceModel.yml上的数据。它在OpenCV上运行良好。但我不知道如何在EMGU CV中使用它。

2 个答案:

答案 0 :(得分:1)

我也在研究EmguCV,所以我想我可以在这里指出一些事情, 所以首先要加载&#34; yml&#34;文件,您在识别器经过培训或从某处获得后保存的文件。因为我的理解首先是你必须训练你的识别器,yml文件的结构是什么。为什么要加载级联,你打算在哪里使用它? (通常这用于检测脸部)

如果您说该程序最可能崩溃,因为训练集中没有项目。 (在这种情况下,我猜它将是yml文件)或者正如我所读到的,你需要在训练集中至少需要两个面才能使用Fisher识别器。

答案 1 :(得分:0)

发生这种情况是因为Predict想要在调用face.Load(yourTrainingFile.xml)方法之前接受培训。

您甚至可以通过face.Train(yourImages.ToArray, imageIds.ToArray())方法或FaceRecognizer.PredictionResult predictedLabel = face.Predict(img1);方法加载现有的xml培训文件。

trycatch代码部分放在调试器不会关闭的Training.xml块中,您将收到错误消息。

PS:如果自上一个face.Train文件创建以来图片数量发生了变化,那么建议您调用face.Load方法而不是// define location of Parse PHP SDK, e.g. location in "Parse" folder // Defaults to ./Parse/ folder. Add trailing slash define( 'PARSE_SDK_DIR', './Parse/' ); // include Parse SDK autoloader require_once( 'autoload.php' ); // Add the "use" declarations where you'll be using the classes use Parse\ParseClient; use Parse\ParseObject; use Parse\ParseQuery; use Parse\ParseACL; use Parse\ParsePush; use Parse\ParseUser; use Parse\ParseInstallation; use Parse\ParseException; use Parse\ParseAnalytics; use Parse\ParseFile; use Parse\ParseCloud; // Init parse: app_id, rest_key, master_key ParseClient::initialize('xxx', 'xxx', 'xxx'); // save something to class TestObject $testObject = ParseObject::create("TestObject"); $testObject->set("foo", "bar"); $testObject->save(); // get the object ID echo $testObject->getObjectId(); echo '<h1>Users</h1>'; // get the first 10 users from built-in User class $query = new ParseQuery("_User"); $query->limit(10); $results = $query->find(); foreach ( $results as $result ) { // echo user Usernames echo $result->get('username') . '<br/>'; } 方法!