Merge branch 'Easy-train'
This commit is contained in:
commit
a22ef3dcd8
@ -8,13 +8,19 @@ EndProject
|
|||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
|
Release|x64 = Release|x64
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{AFE13E01-F592-4F23-B76C-1D2D33D475FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{AFE13E01-F592-4F23-B76C-1D2D33D475FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{AFE13E01-F592-4F23-B76C-1D2D33D475FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{AFE13E01-F592-4F23-B76C-1D2D33D475FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{AFE13E01-F592-4F23-B76C-1D2D33D475FD}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{AFE13E01-F592-4F23-B76C-1D2D33D475FD}.Debug|x64.Build.0 = Debug|x64
|
||||||
{AFE13E01-F592-4F23-B76C-1D2D33D475FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{AFE13E01-F592-4F23-B76C-1D2D33D475FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{AFE13E01-F592-4F23-B76C-1D2D33D475FD}.Release|Any CPU.Build.0 = Release|Any CPU
|
{AFE13E01-F592-4F23-B76C-1D2D33D475FD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{AFE13E01-F592-4F23-B76C-1D2D33D475FD}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{AFE13E01-F592-4F23-B76C-1D2D33D475FD}.Release|x64.Build.0 = Release|x64
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@ -34,6 +34,26 @@
|
|||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
|
<OutputPath>bin\x64\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Emgu.CV.UI, Version=3.4.1.2976, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="Emgu.CV.UI, Version=3.4.1.2976, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\EMGU.CV.3.4.1.2976\lib\net35\Emgu.CV.UI.dll</HintPath>
|
<HintPath>..\packages\EMGU.CV.3.4.1.2976\lib\net35\Emgu.CV.UI.dll</HintPath>
|
||||||
|
60
FaceRecognizer/MainForm.Designer.cs
generated
60
FaceRecognizer/MainForm.Designer.cs
generated
@ -31,6 +31,11 @@
|
|||||||
this.console = new System.Windows.Forms.RichTextBox();
|
this.console = new System.Windows.Forms.RichTextBox();
|
||||||
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||||
this.pictureBox2 = new System.Windows.Forms.PictureBox();
|
this.pictureBox2 = new System.Windows.Forms.PictureBox();
|
||||||
|
this.TrainBtn = new System.Windows.Forms.Button();
|
||||||
|
this.nameTxtBx = new System.Windows.Forms.TextBox();
|
||||||
|
this.RecconizeBtn = new System.Windows.Forms.Button();
|
||||||
|
this.trainBackWorker = new System.ComponentModel.BackgroundWorker();
|
||||||
|
this.recognizeBackWorker = new System.ComponentModel.BackgroundWorker();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
@ -46,37 +51,83 @@
|
|||||||
this.console.Size = new System.Drawing.Size(776, 120);
|
this.console.Size = new System.Drawing.Size(776, 120);
|
||||||
this.console.TabIndex = 0;
|
this.console.TabIndex = 0;
|
||||||
this.console.Text = "";
|
this.console.Text = "";
|
||||||
|
this.console.ZoomFactor = 2F;
|
||||||
this.console.TextChanged += new System.EventHandler(this.console_TextChanged);
|
this.console.TextChanged += new System.EventHandler(this.console_TextChanged);
|
||||||
//
|
//
|
||||||
// pictureBox1
|
// pictureBox1
|
||||||
//
|
//
|
||||||
|
this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||||
this.pictureBox1.Location = new System.Drawing.Point(464, 12);
|
this.pictureBox1.Location = new System.Drawing.Point(464, 12);
|
||||||
this.pictureBox1.Name = "pictureBox1";
|
this.pictureBox1.Name = "pictureBox1";
|
||||||
this.pictureBox1.Size = new System.Drawing.Size(324, 300);
|
this.pictureBox1.Size = new System.Drawing.Size(324, 300);
|
||||||
|
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
|
||||||
this.pictureBox1.TabIndex = 1;
|
this.pictureBox1.TabIndex = 1;
|
||||||
this.pictureBox1.TabStop = false;
|
this.pictureBox1.TabStop = false;
|
||||||
//
|
//
|
||||||
// pictureBox2
|
// pictureBox2
|
||||||
//
|
//
|
||||||
|
this.pictureBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||||
this.pictureBox2.Location = new System.Drawing.Point(12, 12);
|
this.pictureBox2.Location = new System.Drawing.Point(12, 12);
|
||||||
this.pictureBox2.Name = "pictureBox2";
|
this.pictureBox2.Name = "pictureBox2";
|
||||||
this.pictureBox2.Size = new System.Drawing.Size(324, 300);
|
this.pictureBox2.Size = new System.Drawing.Size(324, 300);
|
||||||
this.pictureBox2.TabIndex = 1;
|
this.pictureBox2.TabIndex = 1;
|
||||||
this.pictureBox2.TabStop = false;
|
this.pictureBox2.TabStop = false;
|
||||||
//
|
//
|
||||||
// Form1
|
// TrainBtn
|
||||||
|
//
|
||||||
|
this.TrainBtn.Location = new System.Drawing.Point(363, 249);
|
||||||
|
this.TrainBtn.Name = "TrainBtn";
|
||||||
|
this.TrainBtn.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.TrainBtn.TabIndex = 2;
|
||||||
|
this.TrainBtn.Text = "Train";
|
||||||
|
this.TrainBtn.UseVisualStyleBackColor = true;
|
||||||
|
this.TrainBtn.Click += new System.EventHandler(this.TrainBtn_Click);
|
||||||
|
//
|
||||||
|
// nameTxtBx
|
||||||
|
//
|
||||||
|
this.nameTxtBx.Location = new System.Drawing.Point(348, 167);
|
||||||
|
this.nameTxtBx.Name = "nameTxtBx";
|
||||||
|
this.nameTxtBx.Size = new System.Drawing.Size(100, 20);
|
||||||
|
this.nameTxtBx.TabIndex = 3;
|
||||||
|
//
|
||||||
|
// RecconizeBtn
|
||||||
|
//
|
||||||
|
this.RecconizeBtn.Location = new System.Drawing.Point(363, 209);
|
||||||
|
this.RecconizeBtn.Name = "RecconizeBtn";
|
||||||
|
this.RecconizeBtn.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.RecconizeBtn.TabIndex = 4;
|
||||||
|
this.RecconizeBtn.Text = "Recognize";
|
||||||
|
this.RecconizeBtn.UseVisualStyleBackColor = true;
|
||||||
|
this.RecconizeBtn.Click += new System.EventHandler(this.RecconizeBtn_Click);
|
||||||
|
//
|
||||||
|
// trainBackWorker
|
||||||
|
//
|
||||||
|
this.trainBackWorker.WorkerReportsProgress = true;
|
||||||
|
this.trainBackWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.trainBackWorker_DoWork);
|
||||||
|
this.trainBackWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.trainBackWorker_RunWorkerCompleted);
|
||||||
|
//
|
||||||
|
// recognizeBackWorker
|
||||||
|
//
|
||||||
|
this.recognizeBackWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.recognizeBackWorker_DoWork);
|
||||||
|
this.recognizeBackWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.recognizeBackWorker_RunWorkerCompleted);
|
||||||
|
//
|
||||||
|
// MainForm
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(800, 450);
|
this.ClientSize = new System.Drawing.Size(800, 450);
|
||||||
|
this.Controls.Add(this.RecconizeBtn);
|
||||||
|
this.Controls.Add(this.nameTxtBx);
|
||||||
|
this.Controls.Add(this.TrainBtn);
|
||||||
this.Controls.Add(this.pictureBox2);
|
this.Controls.Add(this.pictureBox2);
|
||||||
this.Controls.Add(this.pictureBox1);
|
this.Controls.Add(this.pictureBox1);
|
||||||
this.Controls.Add(this.console);
|
this.Controls.Add(this.console);
|
||||||
this.Name = "Form1";
|
this.Name = "MainForm";
|
||||||
this.Text = "Form1";
|
this.Text = "Form1";
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,6 +136,11 @@
|
|||||||
private System.Windows.Forms.RichTextBox console;
|
private System.Windows.Forms.RichTextBox console;
|
||||||
private System.Windows.Forms.PictureBox pictureBox1;
|
private System.Windows.Forms.PictureBox pictureBox1;
|
||||||
private System.Windows.Forms.PictureBox pictureBox2;
|
private System.Windows.Forms.PictureBox pictureBox2;
|
||||||
|
private System.Windows.Forms.Button TrainBtn;
|
||||||
|
private System.Windows.Forms.TextBox nameTxtBx;
|
||||||
|
private System.Windows.Forms.Button RecconizeBtn;
|
||||||
|
private System.ComponentModel.BackgroundWorker trainBackWorker;
|
||||||
|
private System.ComponentModel.BackgroundWorker recognizeBackWorker;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,85 +26,142 @@ namespace FaceRecognizer
|
|||||||
List<Image<Gray, byte>> imageList = new List<Image<Gray, byte>>();
|
List<Image<Gray, byte>> imageList = new List<Image<Gray, byte>>();
|
||||||
List<string> imageLabels = new List<string>();
|
List<string> imageLabels = new List<string>();
|
||||||
List<int> imageIndicies = new List<int>();
|
List<int> imageIndicies = new List<int>();
|
||||||
|
List<int> predictions = new List<int>();
|
||||||
Rectangle[] detectedFaces;
|
Rectangle[] detectedFaces;
|
||||||
|
string trainImagesFolder = Application.StartupPath + "\\Train";
|
||||||
|
string reconizeImagesFolder = Application.StartupPath + "\\photo";
|
||||||
|
|
||||||
|
|
||||||
public MainForm()
|
public MainForm()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
console.AppendText("Main OK!");
|
console.AppendText("Main OK!");
|
||||||
|
}
|
||||||
|
|
||||||
|
void train(string personName)
|
||||||
|
{
|
||||||
|
faceCascade = new CascadeClassifier("haarcascade_frontalface_alt_tree.xml");
|
||||||
|
reconizer = new LBPHFaceRecognizer();
|
||||||
|
int j = 0;
|
||||||
|
foreach (var file in Directory.GetFiles(trainImagesFolder))
|
||||||
|
{
|
||||||
|
if (file.EndsWith("jpg"))
|
||||||
|
{
|
||||||
|
temp = new Image<Gray, byte>(file);
|
||||||
|
temp._EqualizeHist();
|
||||||
|
var detected_faces = faceCascade.DetectMultiScale(temp, 1.1, 2, new Size(24, 24), Size.Empty);
|
||||||
|
if (detected_faces.Length == 0) { continue; }
|
||||||
|
temp.ROI = detected_faces[0];
|
||||||
|
temp = temp.Copy();
|
||||||
|
temp = temp.Resize(24, 24, Inter.Cubic);
|
||||||
|
imageList.Add(temp);
|
||||||
|
imageLabels.Add(Path.GetFileNameWithoutExtension(file));
|
||||||
|
}
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < imageList.Count; i++)
|
||||||
|
{
|
||||||
|
imageIndicies.Add(i);
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
reconizer = new LBPHFaceRecognizer(1, 8, 8, 9, 65);
|
reconizer.Train(imageList.ToArray(), imageIndicies.ToArray());
|
||||||
faceCascade = new CascadeClassifier("faceCascade.xml");
|
reconizer.Write(personName);
|
||||||
console.AppendText("created regocnizer\n" +
|
//console.AppendText("Training done!\nFile Name: " + personName);
|
||||||
"loading cascade\n" +
|
reconizer.Dispose();
|
||||||
"loading images");
|
imageList.Clear();
|
||||||
reconizer.Read("ss");
|
faceCascade.Dispose();
|
||||||
|
temp.Dispose();
|
||||||
|
}
|
||||||
|
catch (Exception e) { } //console.AppendText("Error: " + e.Message); }
|
||||||
|
}
|
||||||
|
|
||||||
|
void recognize(string personName)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//reconizer = new LBPHFaceRecognizer(1, 8, 8, 9, 65);
|
||||||
|
reconizer = new LBPHFaceRecognizer();
|
||||||
|
faceCascade = new CascadeClassifier("haarcascade_frontalface_alt_tree.xml");
|
||||||
|
predictions.Clear();
|
||||||
|
//reconizer = new LBPHFaceRecognizer();
|
||||||
|
reconizer.Read(personName);
|
||||||
|
|
||||||
foreach (var file in Directory.GetFiles(Application.StartupPath))
|
foreach (var file in Directory.GetFiles(reconizeImagesFolder))
|
||||||
{
|
{
|
||||||
|
|
||||||
if (file.EndsWith("jpg"))
|
if (file.EndsWith("jpg"))
|
||||||
{
|
{
|
||||||
Image<Gray, byte> temp2 = new Image<Gray, byte>(file);
|
temp = new Image<Gray, byte>(file);
|
||||||
pictureBox1.Image = temp2.ToBitmap();
|
temp._EqualizeHist();
|
||||||
var result = reconizer.Predict(temp2);
|
|
||||||
console.AppendText(">>result:" + result.Label.ToString());
|
var faces = faceCascade.DetectMultiScale(temp, 1.1, 2, new Size(24, 24), Size.Empty);
|
||||||
|
if (faces.Length == 0) { continue; }
|
||||||
|
temp.ROI = faces[0];
|
||||||
|
temp = temp.Copy();
|
||||||
|
temp.Resize(24, 24, Inter.Cubic);
|
||||||
|
temp.ToBitmap().Save(reconizeImagesFolder + "\\" + i + ".jpg");
|
||||||
|
var result = reconizer.Predict(temp);
|
||||||
|
predictions.Add(result.Label);
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
reconizer.Dispose();
|
||||||
}
|
imageList.Clear();
|
||||||
catch (Exception e)
|
faceCascade.Dispose();
|
||||||
{
|
temp.Dispose();
|
||||||
console.AppendText("Error: " + e.Message);
|
|
||||||
}
|
}
|
||||||
|
catch (Exception e){ throw e; }
|
||||||
|
}
|
||||||
|
|
||||||
//try
|
private void TrainBtn_Click(object sender, EventArgs e)
|
||||||
//{
|
{
|
||||||
// foreach (var file in Directory.GetFiles(Application.StartupPath))
|
trainBackWorker.RunWorkerAsync();
|
||||||
// {
|
console.AppendText("Training started for " + nameTxtBx.Text);
|
||||||
// if (file.EndsWith("jpg"))
|
}
|
||||||
// {
|
|
||||||
// console.AppendText("found: " + Path.GetFileNameWithoutExtension(file));
|
|
||||||
// temp = new Image<Gray, byte>(file);
|
|
||||||
// console.AppendText("loaded: " + Path.GetFileNameWithoutExtension(file));
|
|
||||||
// temp._EqualizeHist();
|
|
||||||
|
|
||||||
// //var detected_faces = faceCascade.DetectMultiScale(temp
|
|
||||||
// // , 1.1
|
|
||||||
// // , 20
|
|
||||||
// // , new Size(24, 24)
|
|
||||||
// // , Size.Empty);
|
|
||||||
// //if (detected_faces.Length == 0) { console.AppendText("lenght zero"); continue; }
|
|
||||||
// //temp.ROI = detected_faces[0];
|
|
||||||
|
|
||||||
// temp = temp.Copy();
|
|
||||||
// temp = temp.Resize(100, 100, Inter.Cubic);
|
|
||||||
// imageList.Add(temp);
|
|
||||||
// imageLabels.Add(Path.GetFileNameWithoutExtension(file));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// for (int i = 0; i < imageList.Count; i++)
|
|
||||||
// {
|
|
||||||
// imageIndicies.Add(i);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// try { reconizer.Train(imageList.ToArray(), imageIndicies.ToArray()); }
|
|
||||||
// catch (Exception e) { console.AppendText("Error: " + e.Message); }
|
|
||||||
// reconizer.Write("faceRecognizer");
|
|
||||||
|
|
||||||
//}
|
|
||||||
//catch (Exception e)
|
|
||||||
//{
|
|
||||||
// console.AppendText("Error: " + e.Message);
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
private void RecconizeBtn_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
recognizeBackWorker.RunWorkerAsync();
|
||||||
|
console.AppendText("Started recognition");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void console_TextChanged(object sender, EventArgs e)
|
private void console_TextChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
console.AppendText("\n");
|
console.AppendText("\n");
|
||||||
|
console.SelectionStart = console.Text.Length;
|
||||||
|
console.ScrollToCaret();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void trainBackWorker_DoWork(object sender, DoWorkEventArgs e)
|
||||||
|
{
|
||||||
|
train(nameTxtBx.Text);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void trainBackWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
|
||||||
|
{
|
||||||
|
console.AppendText("Finished training: " + nameTxtBx.Text);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void recognizeBackWorker_DoWork(object sender, DoWorkEventArgs e)
|
||||||
|
{
|
||||||
|
recognize(nameTxtBx.Text);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void recognizeBackWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
|
||||||
|
{
|
||||||
|
console.AppendText("Recognition finished\nResults:");
|
||||||
|
printResults();
|
||||||
|
}
|
||||||
|
|
||||||
|
void printResults()
|
||||||
|
{
|
||||||
|
foreach(var number in predictions)
|
||||||
|
{
|
||||||
|
console.AppendText(number.ToString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -117,4 +117,10 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<metadata name="trainBackWorker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="recognizeBackWorker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>158, 17</value>
|
||||||
|
</metadata>
|
||||||
</root>
|
</root>
|
Loading…
Reference in New Issue
Block a user