Emgucv 无法使用 EigenFaceRecognizer 训练超过 210 张图像,它会停止写入新的细节或数据
Emgucv cannot train more than 210 images using EigenFaceRecognizer it stop writing new details or data
大家好 我对使用 .net 包装器 Emgucv 的 OpenCV 比较陌生 我的程序是简单的人脸检测和识别,首先我训练用户面部,每个用户至少 20 张 100x100 像素的图像并将(EigenFaceRecognizer)数据写入yml 文件,然后在 运行 实时识别或比较之前加载此文件(yml 中的用户图像和数据),它在 9 个用户(9x20 = 180 个图像)下工作得很好。但是,当我尝试注册或培训另一个用户时,我注意到 (EigenFaceRecognizer) 停止在 yml 中写入数据。我们如何解决这个问题?我的数据格式,下面是 yml 扩展
opencv_eigenfaces:
threshold: .Inf
num_components: 10
mean: !!opencv-matrix
rows: 1
cols: 4096
dt: d
data: []
trainingData.yml https://www.dropbox.com/s/itm58o24lka9wa3/trainingData.yml?dl=0
我发现问题是写入数据的时间不够,所以我需要增加延迟。
private async Task LoadData()
{
outputBox.Clear();
var i = 0;
var itemData = Directory.EnumerateFiles("trainingset/", "*.bmp");
var enumerable = itemData as IList<string> ?? itemData.ToList();
var total = enumerable.Count();
_arrayNumber = new int[total];
var listMat = new List<Mat>();
foreach (var file in enumerable)
{
var inputImg = Image.FromFile(file);
_inputEmGuImage = new Image<Bgr, byte>(new Bitmap(inputImg));
var imgGray = _inputEmGuImage.Convert<Gray, byte>();
listMat.Add(imgGray.Mat);
var number = file.Split('/')[1].ToString().Split('_')[0];
if (number != "")
{
_arrayNumber[i] = int.Parse(number);
}
i++;
processImg.Image = _inputEmGuImage.ToBitmap();
outputBox.AppendText($"Person Id: {number} {Environment.NewLine}");
if (total == i)
{
fisherFaceRecognizer.Train(listMat.ToArray(), _arrayNumber);
fisherFaceRecognizer.Write(YlmPath);
// FaceRecognition.Train(listMat.ToArray(), _arrayNumber);
// FaceRecognition.Write(YlmPath);
MessageBox.Show(@"Total of " + _arrayNumber.Length + @" successfully loaded");
}
await Task.Delay(10);
}
}
大家好 我对使用 .net 包装器 Emgucv 的 OpenCV 比较陌生 我的程序是简单的人脸检测和识别,首先我训练用户面部,每个用户至少 20 张 100x100 像素的图像并将(EigenFaceRecognizer)数据写入yml 文件,然后在 运行 实时识别或比较之前加载此文件(yml 中的用户图像和数据),它在 9 个用户(9x20 = 180 个图像)下工作得很好。但是,当我尝试注册或培训另一个用户时,我注意到 (EigenFaceRecognizer) 停止在 yml 中写入数据。我们如何解决这个问题?我的数据格式,下面是 yml 扩展
opencv_eigenfaces:
threshold: .Inf
num_components: 10
mean: !!opencv-matrix
rows: 1
cols: 4096
dt: d
data: []
trainingData.yml https://www.dropbox.com/s/itm58o24lka9wa3/trainingData.yml?dl=0
我发现问题是写入数据的时间不够,所以我需要增加延迟。
private async Task LoadData()
{
outputBox.Clear();
var i = 0;
var itemData = Directory.EnumerateFiles("trainingset/", "*.bmp");
var enumerable = itemData as IList<string> ?? itemData.ToList();
var total = enumerable.Count();
_arrayNumber = new int[total];
var listMat = new List<Mat>();
foreach (var file in enumerable)
{
var inputImg = Image.FromFile(file);
_inputEmGuImage = new Image<Bgr, byte>(new Bitmap(inputImg));
var imgGray = _inputEmGuImage.Convert<Gray, byte>();
listMat.Add(imgGray.Mat);
var number = file.Split('/')[1].ToString().Split('_')[0];
if (number != "")
{
_arrayNumber[i] = int.Parse(number);
}
i++;
processImg.Image = _inputEmGuImage.ToBitmap();
outputBox.AppendText($"Person Id: {number} {Environment.NewLine}");
if (total == i)
{
fisherFaceRecognizer.Train(listMat.ToArray(), _arrayNumber);
fisherFaceRecognizer.Write(YlmPath);
// FaceRecognition.Train(listMat.ToArray(), _arrayNumber);
// FaceRecognition.Write(YlmPath);
MessageBox.Show(@"Total of " + _arrayNumber.Length + @" successfully loaded");
}
await Task.Delay(10);
}
}