opencv - Emgucv 无法使用 EigenFaceRecognizer 训练超过 210 张图像,它会停止写入新的细节或数据
问题描述
大家好,我对使用 .net 包装器 Emgucv 的 OpenCV 比较陌生此文件(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);
}
}
推荐阅读
- reactjs - 为什么向 ag-grid-react 添加一列会导致所有单元格重新呈现?
- html - 打开角度材料对话框时,父组件应处于活动状态
- python - 无效的密码格式或未知的散列算法。在 django 休息框架中
- python - 无法将数据写入 CSV 文件
- node.js - Module.create 不从输入中获取数据,req.body 为空
- python - ValueError:操作数无法与形状一起广播 (720,1280) (720,1281)
- mysql - 这三个查询之间是否有任何性能差异
- java - Intellij 搜索某些类不工作,但到处搜索工作
- c# - 从下拉列表中选择值后显示文本框值(应显示从下拉列表中选择产品后的产品数量)
- python - 绘制不同子图中各种连续变量的密度