Вы находитесь на странице: 1из 3

using System;

using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using Emgu.CV;
using Emgu.CV.Face;
using Emgu.CV.Structure;

namespace Prototipo1802
{
public static class Eigenfaces
{
public static int eigenTrainedImageCounter;

public static List<Image<Gray, byte>> eigenTrainingImages = new


List<Image<Gray, byte>>();
public static List<int> eigenIntlabels = new List<int>();
public static List<string> eigenlabels = new List<string>();

public static EigenFaceRecognizer eigenFaceRecognizer;

public static bool IsTrained;

public static double eigenThreshold = 7000;

public static bool TrainFromFolder()


{
if (IsTrained)
{
eigenTrainedImageCounter = 0;
eigenTrainingImages.Clear();
eigenIntlabels.Clear();
eigenlabels.Clear();
IsTrained = false;
}

try
{
string dataDirectory = Directory.GetCurrentDirectory() +
@"\TrainedFaces";
string[] files = Directory.GetFiles(dataDirectory, "*.jpg",
SearchOption.AllDirectories);

foreach (var file in files)


{
Image<Gray, byte> trainedImage = new Image<Gray, byte>(file);
//trainedImage._EqualizeHist();
eigenTrainingImages.Add(trainedImage);
eigenlabels.Add(FaceData.FileName(file));
eigenIntlabels.Add(eigenTrainedImageCounter);
eigenTrainedImageCounter++;
Console.WriteLine(eigenTrainedImageCounter);
}
eigenFaceRecognizer = new
EigenFaceRecognizer(eigenTrainedImageCounter, eigenThreshold);
eigenFaceRecognizer.Train(eigenTrainingImages.ToArray(),
eigenIntlabels.ToArray());
//eigenFaceRecognizer.Write(dataDirectory +
@"\0TrainedDataEigen.yaml");
//eigenFaceRecognizer.Read(dataDirectory +
@"\0TrainedDataEigen.yaml");
}
catch (Exception ex)
{
MessageBox.Show("Erro: " + ex.Message);
return IsTrained = false;
}
return IsTrained = true;
}

public static bool TrainFromDataBase()


{
if (IsTrained)
{
eigenTrainedImageCounter = 0;
eigenTrainingImages.Clear();
eigenIntlabels.Clear();
eigenlabels.Clear();
IsTrained = false;
}

try
{
FaceDAL faceDAL = new FaceDAL();
var list = faceDAL.SelectAll();

foreach (var item in list)


{
MemoryStream memoryStream = new MemoryStream(item.Image);
Image<Gray, byte> trainedImage = new Image<Gray,
byte>((Bitmap)Image.FromStream(memoryStream));
eigenTrainingImages.Add(trainedImage);
eigenlabels.Add(FaceData.FileName(item.Name));
eigenIntlabels.Add(eigenTrainedImageCounter);
eigenTrainedImageCounter++;
}
eigenFaceRecognizer = new
EigenFaceRecognizer(eigenTrainedImageCounter, eigenThreshold);
eigenFaceRecognizer.Train(eigenTrainingImages.ToArray(),
eigenIntlabels.ToArray());
//eigenFaceRecognizer.Write(dataDirectory +
@"\0TrainedDataEigen.yaml");
//eigenFaceRecognizer.Read(dataDirectory +
@"\0TrainedDataEigen.yaml");
}
catch (Exception ex)
{
MessageBox.Show("Erro: " + ex.Message);
return IsTrained = false;
}
return IsTrained = true;
}
}
}

Вам также может понравиться