Автоматически захватывать изображение при обнаружении лица через веб-камеру
Я делаю исследовательский проект по обработке изображений. Проект состоит в оценке пользователей с помощью автоматизированной тестовой бумаги, созданной ранее.
Так как это процесс Online в процессе оценки бумаги, мне нужно случайным образом получать пользовательские изображения с веб-камеры пользователя... Я реализую этот проект в обычном приложении для Windows, используя язык C#.
Для этого процесса я успешно перенес изображение пользователя в формат Windows и уже могу определить лицо пользователя.
Дело в том, что я хочу получать изображения пользователей, когда лицо обнаруживается в форме Windows. Я использую библиотеки CV для EMGU для этой реализации обнаружения изображений.
1) Как я собираюсь Захватить изображение пользователя, когда лицо пользователя обнаруживает.. 2) Я хочу, чтобы это захватывало изображение в Случайное время...
Это код, который я использовал для определения лица.
public class ClassifierTrain
{
#region Variables
//Eigen
MCvTermCriteria termCrit;
EigenObjectRecognizer recognizer;
//training variables
List<Image<Gray, byte>> trainingImages = new List<Image<Gray, byte>>();//Images
List<string> Names_List = new List<string>(); //labels
int ContTrain, NumLabels;
//Class Variables
string Error;
bool _IsTrained = false;
#endregion
#region Constructors
/// <summary>
/// Default Constructor, Looks in (Application.StartupPath + "\\TrainedFaces") for traing data.
/// </summary>
public ClassifierTrain()
{
termCrit = new MCvTermCriteria(ContTrain, 0.001);
_IsTrained = LoadTrainingData(Application.StartupPath + "\\TrainedFaces");
}
/// <summary>
/// Takes String input to a different location for training data
/// </summary>
/// <param name="Training_Folder"></param>
public ClassifierTrain(string Training_Folder)
{
termCrit = new MCvTermCriteria(ContTrain, 0.001);
_IsTrained = LoadTrainingData(Training_Folder);
}
#endregion
#region Public
/// <summary>
/// <para>Return(True): If Training data has been located and Eigen Recogniser has been trained</para>
/// <para>Return(False): If NO Training data has been located of error in training has occured</para>
/// </summary>
public bool IsTrained
{
get { return _IsTrained; }
}
/// <summary>
/// Recognise a Grayscale Image using the trained Eigen Recogniser
/// </summary>
/// <param name="Input_image"></param>
/// <returns></returns>
public string Recognise(Image<Gray, byte> Input_image)
{
if (_IsTrained)
{
string t = recognizer.Recognize(Input_image);
return t;
}
else return "";//Blank prefered else can use null
}
/// <summary>
/// Returns a string contatining any error that has occured
/// </summary>
public string Get_Error
{
get { return Error; }
}
/// <summary>
/// Dispose of Class call Garbage Collector
/// </summary>
public void Dispose()
{
recognizer = null;
trainingImages = null;
Names_List = null;
Error = null;
GC.Collect();
}
#endregion
#region Private
/// <summary>
/// Loads the traing data given a (string) folder location
/// </summary>
/// <param name="Folder_loacation"></param>
/// <returns></returns>
private bool LoadTrainingData(string Folder_loacation)
{
if (File.Exists(Folder_loacation +"\\TrainedLabels.xml"))
{
try
{
//message_bar.Text = "";
Names_List.Clear();
trainingImages.Clear();
FileStream filestream = File.OpenRead(Folder_loacation + "\\TrainedLabels.xml");
long filelength = filestream.Length;
byte[] xmlBytes = new byte[filelength];
filestream.Read(xmlBytes, 0, (int)filelength);
filestream.Close();
MemoryStream xmlStream = new MemoryStream(xmlBytes);
using (XmlReader xmlreader = XmlTextReader.Create(xmlStream))
{
while (xmlreader.Read())
{
if (xmlreader.IsStartElement())
{
switch (xmlreader.Name)
{
case "NAME":
if (xmlreader.Read())
{
Names_List.Add(xmlreader.Value.Trim());
NumLabels += 1;
}
break;
case "FILE":
if (xmlreader.Read())
{
//PROBLEM HERE IF TRAININGG MOVED
trainingImages.Add(new Image<Gray, byte>(Application.StartupPath + "\\TrainedFaces\\" + xmlreader.Value.Trim()));
}
break;
}
}
}
}
ContTrain = NumLabels;
if (trainingImages.ToArray().Length != 0)
{
//Eigen face recognizer
recognizer = new EigenObjectRecognizer(trainingImages.ToArray(),
Names_List.ToArray(), 5000, ref termCrit); //5000 default
return true;
}
else return false;
}
catch (Exception ex)
{
Error = ex.ToString();
return false;
}
}
else return false;
}
#endregion
}`
1 ответ
Существует очень хорошая статья исследований Microsoft по вашей теме: http://research.microsoft.com/en-us/um/people/ablake/papers/ablake/romdhani_iccv01.pdf
Это, вы должны использовать в качестве отправной точки. После этого вы должны взглянуть на обработку изображений и прямые преобразования x изображений: http://www.c-sharpcorner.com/UploadFile/ShrutiShrivastava/ImageProcessing12192005061519AM/ImageProcessing.aspx
Привет,