AutoML Vision API를 사용해 보았습니다.

AutoML Vision의 API를 사용하여 보았으므로 메모를 남겨 둡니다.

이번에는 파이썬을 사용합니다. JAVA, node.js도 사용할 수있는 것 같습니다.
Client Libraries

이 근처를 참고로하면서 갑니다.
  • 빠른 시작
  • Client for Cloud AutoML API(코드 문서)
  • Github

  • 샘플 코드



    기본적으로 AutoML Vision의 PREDICT 탭에 있는 파이썬 코드를 그대로 두드립니다.
    from google.cloud import automl_v1beta1
    # 認証
    KEY_FILE = "******.json"
    prediction_client = automl_v1beta1.PredictionServiceClient()
    prediction_client = prediction_client.from_service_account_json(KEY_FILE)
    
    # 予測
    name = 'projects/{}/locations/us-central1/models/{}'.format(project_id, model_id)
    payload = {'image': {'image_bytes': content }}
    request = prediction_client.predict(name, payload)
    
    # 予測結果の取得
    print(request)
    

    인증


    automl_v1beta1.PredictionServiceClient() 로 인증합니다.
    아래와 같이 환경 변수를 설정해 두면 거기에서 자동으로 읽어 주는 것 같다.
    export GOOGLE_APPLICATION_CREDENTIALS=key-file
    

    이번에는 환경 변수를 더럽히고 싶지 않았기 때문에 파일로부터 읽어들이도록 했습니다.
    
    prediction_client.from_service_account_json(KEY_FILE)
    

    예측



    name은 project_id와 모델 id를, payload는 지정된 형식의 json을 사용하여 예측할 이미지를 제공합니다.
    name = 'projects/{}/locations/us-central1/models/{}'.format(project_id, model_id)
    payload = {'image': {'image_bytes': content }}
    

    나머지 인수는 다음과 같습니다.
    def predict(self,
                    name,
                    payload,
                    params=None,
                    retry=google.api_core.gapic_v1.method.DEFAULT,
                    timeout=google.api_core.gapic_v1.method.DEFAULT,
                    metadata=None):
    
  • params
    (dict[str -> str])의 형태로 score_threshold 등의 파라미터를 건네준다.
  • retry
    retry 클래스이 있기 때문에 그것에 따라 통과한다. 기본적으로 retry하지 않습니다.
  • timeout
    predict에 비교적 시간이 걸릴 수 있으므로, 타임 아웃은 세트 해 두어도 좋을지도. Github 소스 에 따르면 기본값은 60s

  • 예측 결과 얻기



    json이라고 생각하게 json이 아닌 포맷이었으므로, 빠졌습니다.
    request = prediction_client.predict(name, payload)
    print(request)
    

    AutoML Vision의 PREDICT 탭에서 파이썬 코드를 실행하면 다음 결과가 반환됩니다.
    payload {
      classification {
        score: 0.215105131269
      }
      display_name: "kotobuki_tsumugi"
    }
    

    score는 예측 결과, display_name은 라벨.
    이것이 json이라고 생각하게 json이 아닌 것이 함정입니다.

    그래서 문서을 보면 다음과 같이 쓰여 있습니다.
    Returns: A PredictResponse instance.
    

    그래서 PredictResponce instance 라는 것은 이하.
    class google.cloud.automl_v1beta1.types.PredictResponse
     - payload
     - metadata
    

    아무래도 payload와 metadata를 가지고 있는 클래스라고 합니다.

    그래서 다음과 같이 잘 내용을 꺼낼 수 있습니다.
    print (request.payload)
    

    출력
    [classification {
      score: 0.215105131269
    }
    display_name: "kotobuki_tsumugi"
    ]
    

    또한 score와 display_name은 다음과 같이 검색할 수 있습니다.
    score = request.payload[0].classification.score
    display_name = request.payload[0].display_name
    
    print(score, display_name)
    

    출력
    0.215105131269
    kotobuki_tsumugi
    

    무사 내용을 꺼낼 수 있었습니다.

    예측 결과 획득 2



    데이터 세트를 늘리면 Precision이 더 높은 값이 되었지만 Recall은 낮아졌습니다.


    그러면, 판정하려고 했던 화상에 따라서는 예측 결과가 하늘로 돌아올 수 있었습니다. 아마, Recall(재현도)가 낮으면 하늘이 돌아오는 모양. payload에 error문이라든지는 넣어주지 않았네요....

    Precision 및 Recall은 AutoML Vision의 EVALUATE 탭에 있는 Score threshold 막대에서 변경할 수 있습니다. 데이터 세트의 이미지가 True positives/False negatives인지 여부를 볼 수 있으므로 그것을 보면서 조정할 수 있습니다.

    API를 두드릴 때는 predict 인수의 params에서 설정할 수 있습니다. 기본값은 0.5.

    요약



    이번에는 파이썬을 사용하여 AutoML Vision의 API를 두드려 보았습니다.
    간단하게 사용할 수 있어, 레퍼런스도 제대로 있기 때문에 어렵지 않을까 생각합니다. 아직 베타판이므로 출력 결과의 포맷이나 에러 주위는, 앞으로 알기 쉽게 바뀌어 오는 것이 아닐까요.

    좋은 웹페이지 즐겨찾기