public MainWindow() { InitializeComponent(); logger = new LogCallBack(PrintLog); string path = @"model\"; SeetafaceHelper.SetDisplayLog(logger); SeetafaceHelper.SetModelDirectory(Encoding.Default.GetBytes(path)); ret = SeetafaceHelper.Init(); initRects(); }
private void Button_Click(object sender, RoutedEventArgs e) { if (ret) { OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == true) { rects.ForEach(r => r.Visibility = Visibility.Hidden); ellipses.ForEach(a => a.Visibility = Visibility.Hidden); BitmapImage bi = new BitmapImage(); // BitmapImage.UriSource must be in a BeginInit/EndInit block. bi.BeginInit(); bi.UriSource = new Uri(ofd.FileName, UriKind.RelativeOrAbsolute); bi.EndInit(); // Set the image source. img.Width = bi.Width; img.Height = bi.Height; img.Source = bi; //FaceInfo faceInfo = new FaceInfo(); //var faceCount = SeetafaceHelper.DetectFace( // ofd.FileName, // ref faceInfo //); StringBuilder json = new StringBuilder(500); var faceCount = SeetafaceHelper.DetectFaces( ofd.FileName, json ); //if (faceCount > 0) { //MessageBox.Show(json.ToString()); JsonSerializer serializer = new JsonSerializer(); FaceInfo[] faces = serializer.Deserialize <FaceInfo[]>( new JsonTextReader( new StringReader(json.ToString()) ) ); for (int i = 0; i < faceCount; i++) { var faceInfo = faces[i]; var rect = rects[i]; rect.Margin = new Thickness(faceInfo.bbox.x, faceInfo.bbox.y, 0, 0); rect.Width = faceInfo.bbox.width; rect.Height = faceInfo.bbox.height; rect.Visibility = Visibility.Visible; } } //else // MessageBox.Show("检测失败"); } } else { MessageBox.Show("初始化失败"); } }
private void Button_Click_4(object sender, RoutedEventArgs e) { if (ret) { feat2 = new float[2048]; feat = feat2; OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() == true) { rects.ForEach(r => r.Visibility = Visibility.Hidden); ellipses.ForEach(a => a.Visibility = Visibility.Hidden); BitmapImage bi = new BitmapImage(); bi.BeginInit(); bi.UriSource = new Uri(ofd.FileName, UriKind.RelativeOrAbsolute); bi.EndInit(); // Set the image source. img.Width = bi.Width; img.Height = bi.Height; img.Source = bi; StringBuilder json = new StringBuilder(1500); var faceCount = SeetafaceHelper.Alignment( ofd.FileName, json ); if (faceCount > 0) { JsonSerializer serializer = new JsonSerializer(); AlignmentResult[] faces = serializer.Deserialize <AlignmentResult[]>( new JsonTextReader( new StringReader(json.ToString()) ) ); //画矩形 for (int i = 0; i < faceCount; i++) { var faceInfo = faces[i].face; var rect = rects[i]; rect.Margin = new Thickness(faceInfo.bbox.x, faceInfo.bbox.y, 0, 0); rect.Width = faceInfo.bbox.width; rect.Height = faceInfo.bbox.height; rect.Visibility = Visibility.Visible; var points = faces[i].landmark; //画点 for (int j = i * 5, k = 0; k < 5; j++, k++) { ellipses[j].Margin = new Thickness(points[k].x, points[k].y, 0, 0); ellipses[j].Visibility = Visibility.Visible; } } //float[] feat = SeetafaceHelper.ExtractFeature(ofd.FileName, ref faces[0].face, ref faces[0].landmark); SeetafaceHelper.ExtractFeature(ofd.FileName, ref faces[0], feat); double sim = SeetafaceHelper.CalcSimilarity(feat1, feat2); MessageBox.Show("相似度:" + sim); } else { MessageBox.Show("检测失败"); } } } else { MessageBox.Show("初始化失败"); } }