您的位置:首页 > 编程语言 > C#

微软认知服务,人脸识别技术的初级实现

2017-02-15 10:39 211 查看
今天参照:

https://www.microsoft.com/cognitive-services/en-us/face-api/documentation/Tutorials/FaceAPIinCSharpTutorial

用vs 2015初步实现了人脸检测,挺实用的,实现过程的问题:

1、在添加如下代码时,系统提示Stream imageFileStream = File.OpenRead(imageFilePath))有问题,需要添加引用解决,我加入了:using System.IO;

private async Task<FaceRectangle[]> UploadAndDetectFaces(string imageFilePath)

        {

            try

            {

                using (Stream imageFileStream = File.OpenRead(imageFilePath))

                {

                    var faces = await faceServiceClient.DetectAsync(imageFileStream);

                    var faceRects = faces.Select(face => face.FaceRectangle);

                    return faceRects.ToArray();

                }

            }

            catch (Exception)

            {

                return new FaceRectangle[0];

            }

        }

2、对BrowseButton_Click事件添加async时,需要用wait对应的事件代码为:

private async  void BrowseButton_Click(object sender, RoutedEventArgs e)

        {

            var openDlg = new Microsoft.Win32.OpenFileDialog();

            openDlg.Filter = "JPEG Image(*.jpg)|*.jpg";

            bool? result = openDlg.ShowDialog(this);

            if (!(bool)result)

            {

                return;

            }

            string filePath = openDlg.FileName;

            Uri fileUri = new Uri(filePath);

            BitmapImage bitmapSource = new BitmapImage();

            bitmapSource.BeginInit();

            bitmapSource.CacheOption = BitmapCacheOption.None;

            bitmapSource.UriSource = fileUri;

            bitmapSource.EndInit();

            FacePhoto.Source = bitmapSource;

            Title = "Detecting...";

            FaceRectangle[] faceRects = await UploadAndDetectFaces(filePath);

            Title = String.Format("Detection Finished. {0} face(s) detected", faceRects.Length);

            if (faceRects.Length > 0)

            {

                DrawingVisual visual = new DrawingVisual();

                DrawingContext drawingContext = visual.RenderOpen();

                drawingContext.DrawImage(bitmapSource,

                    new Rect(0, 0, bitmapSource.Width, bitmapSource.Height));

                double dpi = bitmapSource.DpiX;

                double resizeFactor = 96 / dpi;

                foreach (var faceRect in faceRects)

                {

                    drawingContext.DrawRectangle(

                        Brushes.Transparent,

                        new Pen(Brushes.Red, 2),

                        new Rect(

                            faceRect.Left * resizeFactor,

                            faceRect.Top * resizeFactor,

                            faceRect.Width * resizeFactor,

                            faceRect.Height * resizeFactor

                            )

                    );

                }

                drawingContext.Close();

                RenderTargetBitmap faceWithRectBitmap = new RenderTargetBitmap(

                    (int)(bitmapSource.PixelWidth * resizeFactor),

                    (int)(bitmapSource.PixelHeight * resizeFactor),

                    96,

                    96,

                    PixelFormats.Pbgra32);

                faceWithRectBitmap.Render(visual);

                FacePhoto.Source = faceWithRectBitmap;

            }

        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐