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

하고 싶은 일



docomo API를 사용하여 이미지에서 문자를 추출하고 싶습니다.

추가 (2016/02/16)
GitHub에 프로그램을 올렸습니다. → 소스

사전 준비


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

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


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





    개발 환경


  • 파이썬 2.7 시스템

  • 프로그램



    characterRecognition.py
    #coding: utf-8
    from poster.encode import multipart_encode
    from poster.streaminghttp import register_openers
    import urllib2
    import json
    import time 
    import urllib
    import re
    import sys
    
    #画像データを投げて、画像のIDをjson形式で取得 (情景画像認識要求)
    def getImageID(fname):
        register_openers()
        url = 'https://api.apigw.smt.docomo.ne.jp/characterRecognition/v1/document?APIKEY=(API keyを入力して下さい)'
    
        f = open(fname, 'r')
    
        datagen, headers = multipart_encode({"image": f, 'lang': 'jpn'})
        request = urllib2.Request(url,datagen, headers)
        response = urllib2.urlopen(request)
    
        res_dat = response.read()
        return json.loads(res_dat)['job']['@id'] #画像のIDを返す
    
    #取得したjsonから単語だけを取り出す。
    def makeWordList(result):
    
        word_list = []
        count  = int(result['lines']['@count'])
    
        for i in range(count):
            word = result['lines']['line'][i]['@text']
            word_list.append(word)
    
        return word_list
    
    #情景画像認識結果取得
    def getWordList(img_id):
    
        register_openers()
        url = 'https://api.apigw.smt.docomo.ne.jp/characterRecognition/v1/document/' + img_id + '?APIKEY=(API keyを入力して下さい)'
    
        request = urllib2.Request(url)
    
        recog_result = {}
        for i in range(5):
            response = urllib2.urlopen(request)
            res_dat = response.read()
    
            recog_result = json.loads(res_dat)
    
            status = recog_result['job']['@status']
    
            if status == 'queue':
                print '受付中...'
            elif status == 'process':
                print '認識処理中...'
            elif status == 'success':
                print '認識成功' #, recog_result
                word_list = makeWordList(recog_result)
                return word_list
            elif status == 'failure':
                print '認識失敗'
                return None
    
            time.sleep(3) #ちょっと待つ
    
    
    
    if __name__ == '__main__':
    
        #画像IDを取得
        img_id = getImageID(sys.argv[1])
    
        #単語リストを取得
        word_list = getWordList(img_id)
    
        #認識した文字列を表示
        for word in word_list:
            print word
    
    

    실행 결과


    >python characterRecognition.py test.jpg
    認識処理中...
    認識成功
    文字認識のテスト
    

    보충 (얻은 json의 예)


    {
      "job": {
        "@status": "success",
        "@id": "(画像ID)", #画像のID
        "@queue-time": "2016/02/13 17:03:07"
      },
      "lines": {
        "line": [
          {
            "@text": "\u6587\u5b57\u8a8d\u8b58\u306e\u30c6\u30b9\u30c8", #認識した文字列
            "shape": {
              "@count": "4",
              "point": [       #文字の画像上の座標 (左上、左下、右下、右上)
                {
                  "@x": "35",
                  "@y": "33"
                },
                {
                  "@x": "35",
                  "@y": "67"
                },
                {
                  "@x": "293",
                  "@y": "67"
                },
                {
                  "@x": "293",
                  "@y": "33"
                }
              ]
            }
          }
        ],
        "@count": "1"
      },
      "message": null
    }
    

    후기



    우선 메모용으로 써 보았습니다.
    자세히 알고 싶은 분은 코멘트를 기다리고 있습니다.

    좋은 웹페이지 즐겨찾기