Tạo một ứng dụng API khuôn mặt dịch vụ nhận thức Microsoft Azure trong một nửa ...


Phạm Yến Mai
2 năm trước
Hữu ích 0 Chia sẻ Viết bình luận 0
Đã xem 2228

Trong bài viết này, tôi sẽ hướng dẫn bạn cách tạo API khuôn mặt dịch vụ nhận thức Microsoft Azure trong nửa giờ. Dịch vụ nhận thức Microsoft Azure là một bộ API và dịch vụ có sẵn cho các nhà phát triển để làm cho ứng dụng của họ tương tác và thông minh hơn. Điều này trước đây được gọi là Dự án Oxford. Tại đây, Microsoft sử dụng Machine Learning trong nền để tạo các API này. Cho đến nay chúng ta có danh sách API trước đó.

  • Cảm xúc và phát hiện video.
  • Nhận diện khuôn mặt.
  • Nhận dạng giọng nói.
  • Tầm nhìn công nhận.
  • Nói và hiểu ngôn ngữ.
  • Điều kiện tiên quyết

  • Đăng ký Azure.
  • Visual Studio.
  • Nếu bạn không có bất kỳ thuê bao Azure nào, vui lòng đăng ký để đăng ký tại đây .

    Tải xuống mã nguồn

    Bạn luôn có thể tải mã nguồn từ đây:

  • AzureCognitiveServiceFaceAPI
  • Tạo API Face trong Cổng thông tin Azure

    Để biết cách tạo API nhận dạng khuôn mặt trong Azure Portal, vui lòng xem video này:

    Trước khi chúng tôi bắt đầu mã hóa, vui lòng đảm bảo rằng bạn thêm tham chiếu  Microsoft.ProjectOxford.Face từ trình quản lý gói NuGet.

    Microsoft.ProjectOxford.Face

    Sử dụng mã

    Để bắt đầu, hãy mở Visual Studio của bạn và tạo một ứng dụng WPF mới.

    Thêm điều khiển hình ảnh và nút vào MainWindow.xaml:

    <Grid>
            <Image Stretch="UniformToFill" x:Name="FaceImage" HorizontalAlignment="Left" Margin="0,0,0,30"/>
            <Button x:Name="BtnUpload" VerticalAlignment="Bottom" Content="Upload the image" Margin="20,5" Height="20" Click="BtnUpload_Click"/>
        </Grid>

    Tạo một thể hiện của IFaceServiceClient:

    private readonly IFaceServiceClient _faceServiceClient = new FaceServiceClient("key", "end point"); 

    Nếu bạn đang chọn vị trí là Đông Nam Á trong khi tạo Face API trong cổng thông tin, thì bắt buộc phải sử dụng tham số thứ hai - đó là điểm cuối của bạn.

    Tải hình ảnh vào điều khiển hình ảnh:

    private async void BtnUpload_Click(object sender, RoutedEventArgs e)
            {
                //Uploading the image
                var openFrame = new Microsoft.Win32.OpenFileDialog { Filter = "JPEG Image(*.jpg)|*.jpg" };
                var result = openFrame.ShowDialog(this);
                if (!(bool)result)
                    return;
                var filePath = openFrame.FileName;
                var fileUri = new Uri(filePath);
                var bitMapSource = new BitmapImage();
                bitMapSource.BeginInit();
                bitMapSource.CacheOption = BitmapCacheOption.None;
                bitMapSource.UriSource = fileUri;
                bitMapSource.EndInit();
                FaceImage.Source = bitMapSource;
    }

    Phát hiện khuôn mặt đếm:

    /// <summary>
            /// Return the face rectangle counts
            /// </summary>
            /// <param name="filePath"></param>
            /// <returns></returns>
            private async Task<FaceRectangle[]> DetectTheFaces(string filePath)
            {
                try
                {
                    using (var imgStream = File.OpenRead(filePath))
                    {
                        var faces = await _faceServiceClient.DetectAsync(imgStream);
                        var faceRectangles = faces.Select(face => face.FaceRectangle);
                        return faceRectangles.ToArray();
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    throw;
                }
            }

    Vẽ các hình chữ nhật trong các mặt được tìm thấy:

    // Detecting the faces count
                Title = "Detecting....";
                FaceRectangle[] facesFound = await DetectTheFaces(filePath);
                Title = $"Found {facesFound.Length} faces";
                // Draw rectangles
                if (facesFound.Length <= 0) return;
                var drwVisual = new DrawingVisual();
                var drwContext = drwVisual.RenderOpen();
                drwContext.DrawImage(bitMapSource, new Rect(0, 0, bitMapSource.Width, bitMapSource.Height));
                var dpi = bitMapSource.DpiX;
                var resizeFactor = 96 / dpi;
                foreach (var faceRect in facesFound)
                {
                    drwContext.DrawRectangle(Brushes.Transparent, new Pen(Brushes.Blue, 6),
                        new Rect(faceRect.Left * resizeFactor, faceRect.Top * resizeFactor, faceRect.Width * resizeFactor,
                            faceRect.Height * resizeFactor));
                }
                drwContext.Close();
                var renderToImageCtrl = new RenderTargetBitmap((int)(bitMapSource.PixelWidth * resizeFactor), (int)(bitMapSource.PixelHeight * resizeFactor), 96, 96, PixelFormats.Pbgra32);
                renderToImageCtrl.Render(drwVisual);
                FaceImage.Source = renderToImageCtrl;

    Đầu ra

    Bây giờ chạy ứng dụng của bạn và tải lên một hình ảnh. Nó có thể là một hình ảnh duy nhất hoặc một hình ảnh nhóm.

    Đầu ra API nhận dạng khuôn mặt Azure

    Kiểm tra số liệu thống kê trong Azure Portal

    Nếu mọi thứ đều ổn, bạn sẽ có thể xem số liệu thống kê trong cổng thông tin Azure của mình như trước.

    Face API Metric trong Azure Portal

    Nếu bạn muốn so sánh các hình ảnh hoặc xác định người trong một hình ảnh, xin vui lòng đọc tài liệu ở đây .

    Hữu ích 0 Chia sẻ Viết bình luận 0
    Đã xem 2228