我之前一直在使用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中使用它。
答案 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/>';
}
方法!