docomo의 이미지 인식 API를 이용한 카테고리 추정

하고 싶은 일



docomo가 게시하는 이미지 인식 API를 사용하여 이미지 카테고리를 추정합니다.

이미지 인식 API는 Deep Learning에서 학습한 모델을 기반으로 카테고리를 추정합니다.
Deep Learning에 의한 화상 인식하는 프로그램을 처음부터 구현하고 싶지는 않지만, 화상 인식을 해보고 싶다는 방향입니다.

이번에 구현한 코드는 여기에 업하고 있습니다.



문자 인식을하고 싶은 분은 이쪽


  • docomo 문자 인식 API를 사용하여 이미지에서 문자 추출

  • 사전 준비


  • docomo Developer support에 등록해 API key를 취득한다.
  • docomo Developer support

  • 인식하고 싶은 이미지 파일을 준비 (JPEG, PNG, GIF, BMP, TIFF 형식)
  • 자세한 것은 레퍼런스를 참조
  • 참조


  • 인식 할 이미지 파일 (rose.jpg)





    개발 환경


  • Python 2.7 계

  • 프로그램



    코드의 (APIKEY)에는 docomo developer support에서 얻은 API 키를 할당하십시오.

    imageRecognition.py
    # -*- coding: utf-8 -*-
    # implemented by ichiroex
    # other codes are also available on GitHub (https://github.com/ichiroex)
    
    from poster.encode import multipart_encode
    from poster.streaminghttp import register_openers
    import urllib2
    import json
    import time 
    import urllib
    import re
    import sys
    import argparse
    
    #画像データを投げて、カテゴリの候補上位5つを取得 (カテゴリ認識)
    def getImageCategory(fname, modelName):
    
        register_openers()
    
        APIKEY = "(APIKEY)"
        url = 'https://api.apigw.smt.docomo.ne.jp/imageRecognition/v1/concept/classify/?APIKEY=' + APIKEY
    
        f = open(fname, 'r')
    
        datagen, headers = multipart_encode({"image": f, 'modelName': modelName})
        request = urllib2.Request(url,datagen, headers)
        response = urllib2.urlopen(request)
    
        res_dat = response.read()
    
        #return candidate list
        return json.loads(res_dat)['candidates']
    
    
    if __name__ == '__main__':
    
        # 引数 (オプション設定)
        parser = argparse.ArgumentParser()
        parser.add_argument('--image'    , dest='image', type=str, default='rose.jpg', help='name of input image')
        parser.add_argument('--model'    , dest='model', type=str, default='scene', help='modelName = {scene, fashion_pattern, fashion_type, fashion_style, fashion_color, food, flower, kinoko}')
    
        args = parser.parse_args()
    
        # 画像ファイル名, modelName の設定
        fname = args.image
        model_name = args.model
    
        # カテゴリ候補の取得 (カテゴリ認識を利用)
        candidate_list = getImageCategory(fname, model_name)
    
        # カテゴリのタグとスコアを表示
        for can in candidate_list:
            print can['tag'], can['score']
    

    실행 결과



    --image 옵션으로 이미지 파일을 지정할 수 있습니다.
    기본적으로 rose.jpg입니다.

    또한 --model 옵션을 사용하면 추정할 때 사용할 모델을 지정할 수 있습니다.
    예를 들어, "--model scene"을 지정하면 "결혼식", "수족관", "꽃", "동물"과 같은 장면을 추정하는 모델을 사용할 수 있습니다. (기본적으로 scene입니다.)

    다음은 rose.jpg 장면 카테고리를 추정한 결과입니다.
    카테고리와 확실성을 나타내는 점수를 표시합니다.
    $ python imageRecognition.py --image rose.jpg
    花 0.999078631401
    アウトドア 0.000487390527269
    ゴルフ 0.000105955921754
    サッカー 0.000101881953015
    絵・工作 3.79223347409e-05
    

    아래와 같이 선택적으로 ``--model flower''를 추가하여 꽃 카테고리를 추정할 수 있습니다.
    $ python imageRecognition.py --image rose.jpg --model flower
    バラ 0.992434620857
    ミニバラ 0.00756544619799
    サザンカ 3.99395894135e-09
    カランコエ 2.60835908428e-09
    ゼラニウム 1.24757426612e-09
    

    후기



    Deep Learning에서 학습한 모델을 이용하여 쉽게 이미지 카테고리를 추정할 수 있었습니다.
    developer 등록마저 끝나면 부담없이 이용할 수 있으므로, 무언가 앱 등을 만들고 싶은 분에게 편리합니다.

    이미지 인식 이외에도 다양한 API가 공개되어 있으므로 활용하고 싶습니다.

    좋은 웹페이지 즐겨찾기