,

구글 비전 API는 머신비전(Machine Vision) api입니다.

머신 비전이라는 것은 컴퓨터의 눈처럼 시각정보(사진, 동영상 같은 것들)를 인식하고 처리하기위한 기술입니다.

 

구글의 비전 API는 웹에서도 체험할 수 있습니다.

참고 : 구글 클라우드 플랫폼 - CLOUD VISION API

 

이미지 넣고 결과를 기다리면 이미지를 분석한 정보를 보여 줍니다.

 

 

이 API를 등록하고 사용 방법을 알아보겠습니다.

 

 

1. 구글 비전 사용

구글 클라우드 플랫폼의 콘솔로 들어가서 'Google Cloud Vision API'를 찾습니다.

해당 API를 찾지 못했으면 아래 링크로 들어가 주세요.

참고 : Google Cloud Platform - Google Cloud Vision API

 

'사용 설정' 버튼을 눌러주면 API가 활성화됩니다.

 

 

 

API가 활성화되면 아래와 같은 대시보드 화면을 볼 수 있습니다.

 

 

2. API 사용하기

전 C#, winform을 사용하여 만들겠습니다.

 

윈폼 프로젝트를 만듭니다.

 

2-1. 사용자 인증 정보 다운로드

여기서 사용할 사용자 인증 정보는 '서비스 계정 키'입니다.

(참고 : 구글 클라우드 플랫폼 - 2. 구글 API 사용자 인증 정보 생성하기 )

 

'서비스 계정 키'를 생성한 후 다운로드된 'json'파일을 사용합니다.

다운로드한 키는 프로젝트 폴더나 출력 폴더에 사해서 넣고 이름을 'My Project.json'으로 바꿔 줍니다.

 

2-2. 참조 추가하기

누겟에서 'Google Cloud Vision'으로 검색하여 'Google.Apis.Vision.v1'과 'Google.Apis.Auth.OAuth2'를 찾아 설치합니다.

 

 

Cloud Vision 참조하기

'Google.Cloud.Vision.V1'는 아직 베타입니다.

'Google.Cloud.Vision.V1'를 설치하고 싶으시면 '시험판 포함'을 활성화해주셔야 합니다.

 

 

2-3. UI만들기

버튼 하나와 텍스트 박스를 하나 추가합니다.

 

 

 

버튼을 누르면 바로 지정된 이미지를 읽어서 비전API로 보낸 다음 OCR결과를 받을 예전입니다.

 

2-4. 코드 넣기

버튼 클릭 이벤트에 다음 코드를 넣습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
private void btnImg_Click(object sender, EventArgs e)
{
    //구글 api 자격증명
    GoogleCredential credential = null;
 
    //다운받은 '사용자 서비스 키'를 지정하여 자격증명을 만듭니다.
    using (var stream = new FileStream(Application.StartupPath + "\\My Project.json", FileMode.Open, FileAccess.Read))
    {
        string[] scopes = { VisionService.Scope.CloudPlatform };
        credential = GoogleCredential.FromStream(stream);
        credential = credential.CreateScoped(scopes);
    }
 
    //자격증명을 가지고 구글 비전 서비스를 생성합니다.
    var service = new VisionService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = "google vision",
        GZipEnabled = true,
    });
 
 
    service.HttpClient.Timeout = new TimeSpan(111);
    //이미지를 읽어 들입니다.
    byte[] file = File.ReadAllBytes(@"aaa.png");
 
    //분석 요청 생성
    BatchAnnotateImagesRequest batchRequest = new BatchAnnotateImagesRequest();
    batchRequest.Requests = new List<AnnotateImageRequest>();
    batchRequest.Requests.Add(new AnnotateImageRequest()
    {
        //"TEXT_DETECTION"로 설정하면 이미지에 텍스트만 추출 합니다.
        Features = new List<Feature>() { new Feature() { Type = "TEXT_DETECTION", MaxResults = 1 }, },
        ImageContext = new ImageContext() { LanguageHints = new List<string>() { "en" } },
        Image = new Google.Apis.Vision.v1.Data.Image() { Content = Convert.ToBase64String(file) }
    });
 
 
    var annotate = service.Images.Annotate(batchRequest);
    //요청 결과 받기
    BatchAnnotateImagesResponse batchAnnotateImagesResponse = annotate.Execute();
    if (batchAnnotateImagesResponse.Responses.Any())
    {
        AnnotateImageResponse annotateImageResponse = batchAnnotateImagesResponse.Responses[0];
        if (annotateImageResponse.Error != null)
        {//에러
            if (annotateImageResponse.Error.Message != null)
                textBox1.Text = annotateImageResponse.Error.Message;
        }
        else
        {//정상 처리
            textBox1.Text = annotateImageResponse.TextAnnotations[0].Description.Replace("\n""\r\n");
        }
    }
}
cs

 

 

아래 코드가 감지할 언어를 설정하는 코드입니다.

{ LanguageHints = new List<string>() { "en" } }

 

감지할 수 있는 언어 목록은 아래 링크에서 확인할 수 있습니다.

참고 : Google Cloud Platform - Google Cloud Vision API > Documentation - Language Support

3. 테스트해보기

이제 테스트를 해봅시다.

버튼을 누른 후 잠시 기다리면 결과가 나옵니다.

 

 

'사용자 서비스 키'와 읽어 들일 이미지 파일만 정확하다면 별문제 없이 동작합니다.

 

마무리

이렇게 간단하게 구글 비전 API를 사용해 보았습니다.

API활성화 시키고 키만 등록하면 바로 사용할 수 있습니다.

 

테스트 프로그램 :  GoogleVisionAPI_Test.zip(다운로드),

깃허브 : https://github.com/dang-gun/GoogleVisionAPITest0001

 

  1. 그냥그렇듯이 2018.12.12 12:01 신고  Address  Edit/Delete  Reply

    안녕하세요, 당근로리야스님

    위 포스팅 잘보았습니다. 다름이 아니라 저도 google vision api를 사용해보려고 하는데 JSON 파일 다운로드 후에 시스템 환경변수로 GOOGLE_APPLICATION_CREDENTIALS 값을 설정하는 것 이외에 C# 코드 내에서 자격 증명을 받을 수 있는 방법을 알고계신지 궁금해서 댓글 남깁니다.

    시스템 환경변수로 만들시에 C#으로 만들어진 DLL에서는 해당 자격 증명을 읽어오지 못하는 현상이 있어서 어떻게 해결할지 고민중입니다...

    감사합니다~!

    • Favicon of https://blog.danggun.net BlogIcon 당근천국 2018.12.17 01:35 신고  Address  Edit/Delete

      제가 알고 있기론 서비스 계정키는 환경변수에 등록해야지만 사용 가능한것으로 알고 있습니다.
      구글 가이드에도 구현하라고 나와있습니다.
      구글 sdk를 사용하면 알아서 처리되는 부분이라 신경써본적이 없어서 모르겠네요.

댓글 작성

이름
패스워드
홈페이지
비밀글

티스토리 툴바