public static void InitializeFaceAgeImage(string path) { var fcr = new LuxandFaceRecognition(); fcr.Recognize(ref path, false, true); Recognizer = fcr; }
public void LoadPhoto() { using (var ofd = new OpenFileDialogEx("Select template file", "Image Files|*.jpg;*.png;*.jpeg;*.bmp")) { ofd.Multiselect = false; if (ofd.ShowDialog() != DialogResult.OK) { return; } templateImage = ofd.FileName; Recognizer = new LuxandFaceRecognition(); if (!Recognizer.Recognize(ref templateImage, true)) { templateImage = string.Empty; pictureTemplate.Image = null; return; // это ОЧЕНЬ! важно. потому что мы во время распознавания можем создать обрезанную фотку и использовать ее как основную в проекте. } using (var ms = new MemoryStream(File.ReadAllBytes(templateImage))) // Don't use using!! { var img = (Bitmap)Image.FromStream(ms); pictureTemplate.Image = (Bitmap)img.Clone(); img.Dispose(); } RecalcRealTemplateImagePosition(); var eWidth = pictureTemplate.Width - 100; var TopEdgeTransformed = new RectangleF(pictureTemplate.Width / 2f - eWidth / 2f, 30, eWidth, eWidth); // затычка. нужен будет подгон верхней части бошки - сделаю var minX = Recognizer.GetMinX(); var topPoint = (TopEdgeTransformed.Y - ImageTemplateOffsetY) / ImageTemplateHeight; Recognizer.FaceRectRelative = new RectangleF(minX, topPoint, Recognizer.GetMaxX() - minX, Recognizer.BottomFace.Y - topPoint); var noseTip = Recognizer.FacialFeatures[2].Xy; var noseTop = Recognizer.FacialFeatures[22].Xy; var noseBottom = Recognizer.FacialFeatures[49].Xy; ProgramCore.MainForm.RenderControl.PhotoLoaded(Recognizer, TemplateImage); RenderTimer.Start(); if (Math.Abs(Recognizer.RotatedAngle) > 20) { MessageBox.Show("The head rotated more than 20 degrees. Please select an other photo..."); } } }
public void ApplyNewImage(string fileName) { labelHelp.Visible = false; textTemplateImage.Text = fileName; templateImage = fileName; fcr = new LuxandFaceRecognition(); if (!fcr.Recognize(ref templateImage, true)) { textTemplateImage.Text = templateImage = string.Empty; pictureTemplate.Image = null; labelHelp.Visible = true; return; // это ОЧЕНЬ! важно. потому что мы во время распознавания можем создать обрезанную фотку и использовать ее как основную в проекте. } if (fcr.IsMale) { btnMale_Click(null, null); } else { btnFemale_Click(null, null); } using (var ms = new MemoryStream(File.ReadAllBytes(templateImage))) // Don't use using!! { var img = (Bitmap)Image.FromStream(ms); pictureTemplate.Image = (Bitmap)img.Clone(); img.Dispose(); } RecalcRealTemplateImagePosition(); Single distance; if (fcr.IsMale) { distance = facialFeaturesTransformed[22].Y - facialFeaturesTransformed[11].Y; // раньше использовалась 2 точка.но согласно ТЗ от 27.3.2017 используем теперь эту точку } else { distance = facialFeaturesTransformed[2].Y - facialFeaturesTransformed[11].Y; } TopEdgeTransformed.Y = facialFeaturesTransformed[16].Y + distance; // определение высоты по алгоритму старикана TopEdgeTransformed.Y = TopEdgeTransformed.Y < 0 ? 10 : TopEdgeTransformed.Y; RenderTimer.Start(); if (ProgramCore.PluginMode) { var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); var dazPath = Path.Combine(appDataPath, @"DAZ 3D\Studio4\temp\FaceShop\", "fs3d.obj"); if (File.Exists(dazPath)) { if (ProgramCore.CurrentProgram != ProgramCore.ProgramMode.HeadShop_OneClick && ProgramCore.CurrentProgram != ProgramCore.ProgramMode.HeadShop_v11 && ProgramCore.CurrentProgram != ProgramCore.ProgramMode.HeadShop_OneClick_v2) { rbImportObj.Checked = true; } CustomModelPath = dazPath; } else { MessageBox.Show(@"Daz model not found.", @"HeadShop", MessageBoxButtons.OK); } } if (Math.Abs(fcr.RotatedAngle) > 25) { MessageBox.Show("The head rotated more than 20 degrees. Please select an other photo..."); } else { btnApply.Enabled = true; } }