docomo 문자 인식 API를 사용하여 이미지에서 문자 추출
하고 싶은 일
docomo API를 사용하여 이미지에서 문자를 추출하고 싶습니다.
추가 (2016/02/16)
GitHub에 프로그램을 올렸습니다. → 소스
사전 준비
인식할 이미지 파일 (test.jpg)
개발 환경
프로그램
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
}
후기
우선 메모용으로 써 보았습니다.
자세히 알고 싶은 분은 코멘트를 기다리고 있습니다.
Reference
이 문제에 관하여(docomo 문자 인식 API를 사용하여 이미지에서 문자 추출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ichiroex/items/30ffaf53c504d7473bb4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#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
}
후기
우선 메모용으로 써 보았습니다.
자세히 알고 싶은 분은 코멘트를 기다리고 있습니다.
Reference
이 문제에 관하여(docomo 문자 인식 API를 사용하여 이미지에서 문자 추출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ichiroex/items/30ffaf53c504d7473bb4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{
"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
}
우선 메모용으로 써 보았습니다.
자세히 알고 싶은 분은 코멘트를 기다리고 있습니다.
Reference
이 문제에 관하여(docomo 문자 인식 API를 사용하여 이미지에서 문자 추출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ichiroex/items/30ffaf53c504d7473bb4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)