컴퓨터 Vision API 예제(UWP편)

컴퓨터 Vision API


icrosoft Cognitive Services에는 다양한 API가 있는데, 이번에는 시각 관련 API 중 Computer Vison API를 사용해 보았습니다.
컴퓨터 Vison API의 특징은 이미지 분석(이미지 내용의 텍스트화)입니다.이외에도 OCR, 핸드폰 식별(현재 알파벳만 해당), 유명인 식별, 축소판 그림 제작도 있다.
이번 샘플은 영상 분석을 진행한다.

안개 설정


컴퓨터 Vison API를 사용하려면 Azure에 등록해야 합니다.
· Azure 대시보드에서 새로 만들기 - AI+Cognitive Services - Computer Vision API를 선택합니다.

/이름, 사이트, 가격 수준, 리소스 그룹 등을 입력하고 제작 버튼을 누릅니다.

/API를 사용할 때는 끝점을 적어야 합니다.
리소스 관리 - 키를 선택합니다.

・'키 1'또는'키 2'를 적어 둡니다.

이로써 Azure의 설정이 종료됩니다.

프로그램


· VisualStudio 2017에서 UWP를 작성합니다.새 항목 - 빈 응용 프로그램(공용 Windows)으로 엽니다.
・ 솔루션 브라우저 - 찾아보기를 마우스 오른쪽 버튼으로 클릭하고 Nuget 패키지 관리를 선택합니다.

・ 검색 상자에 Vision을 입력합니다.검색 결과에 대한 Microsoft.ProjectOxford.Vision을 설치합니다.

・ 그리고'MainPage.xaml'에 Capture Element 1개, Image 1개, Canvas 1개, TextBox 1개, Button 1개를 배치합니다.

・Computer Vision API는 Restful이므로 대부분의 언어에서 사용할 수 있습니다.UWP(C#)는 MS가 제작한 스펙트럼 라이브러리를 제공하여 컴퓨터 자체 검사와 결과의 투시를 간단하게 처리할 수 있다.
VisionServiceClient 객체 선언
{yoursubscription key}에서 키 관리에 기록된 키를 입력하십시오.
두 번째 매개변수는 생성된 위치에 따라 달라집니다.미국 서부를 선택한 경우 생략할 수 있습니다.
이외에도 끝점을 입력합니다.
//クライアント
client = new VisionServiceClient("{your subscription key}", "https://southeastasia.api.cognitive.microsoft.com/vision/v1.0");
API를 요청할 때 읽어들일 항목을 지정할 수 있습니다.
응답이 원근으로 표시되어 결과를 쉽게 볼 수 있습니다.
private async void Getdata()
        {
            //ファイル呼び出し
            var datafile = await KnownFolders.PicturesLibrary.GetFileAsync("cvpict.jpg");
            var fileStream = await datafile.OpenAsync(FileAccessMode.Read);

            //取得する項目の設定
            var visuals = new VisualFeature[] {
                //VisualFeature.Adult,
                //VisualFeature.Categories,
                //VisualFeature.Color,
                VisualFeature.Description,
                VisualFeature.Faces,
                //VisualFeature.ImageType,
                //VisualFeature.Tags
            };

            //APIの呼び出し
            var response = await client.AnalyzeImageAsync(fileStream.AsStream(), visuals);
            var captions = response.Description.Captions;
            var faces = response.Faces;

            //結果を表示
            var task = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                canvas.Children.Clear();

                resultTbox.Text = "説明:\n" + captions[0].Text + "\n\n";

                var i = 0;
                Windows.UI.Color color;

                foreach (var face in faces)
                {
                    resultTbox.Text = resultTbox.Text + "Face No." + (i + 1).ToString() + "\n";
                    resultTbox.Text = resultTbox.Text + "年齢:\n" + face.Age.ToString() + "\n";
                    resultTbox.Text = resultTbox.Text + "性別:\n" + face.Gender.ToString() + "\n";

                    if (face.Gender == "Male")
                    {
                        color = Windows.UI.Colors.Blue;
                    }
                    else
                    {
                        color = Windows.UI.Colors.Red;
                    }

                    Windows.UI.Xaml.Shapes.Rectangle rect = new Windows.UI.Xaml.Shapes.Rectangle
                    {
                        Height = face.FaceRectangle.Height,
                        Width = face.FaceRectangle.Width,
                        Stroke = new Windows.UI.Xaml.Media.SolidColorBrush(color),
                        StrokeThickness = 2
                    };

                    canvas.Children.Add(rect);
                    Canvas.SetLeft(rect, face.FaceRectangle.Left);
                    Canvas.SetTop(rect, face.FaceRectangle.Top);

                    i++;
                }
            });
        }
이미지 분석 결과는 Description.captions.Text 를 참조하여 얻을 수 있습니다.내용이 영어이기 때문에 Translator API를 이용하여 번역할 수 있습니다.
GitHub에 샘플 소스를 업로드하는 중입니다.
https://github.com/linyixian/ComputerVision_sample

좋은 웹페이지 즐겨찾기