Ich möchte Zeichen aus einem Bild mithilfe der API von docomo extrahieren.
** Nachtrag (16.02.2016) ** Das Programm wurde auf GitHub hochgeladen. → Quelle
--python 2.7 Serie
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
#Werfen Sie Bilddaten und erhalten Sie die Bild-ID im JSON-Format(Anforderung zur Erkennung von Szenenbildern)
def getImageID(fname):
register_openers()
url = 'https://api.apigw.smt.docomo.ne.jp/characterRecognition/v1/document?APIKEY=(Bitte geben Sie den API-Schlüssel ein)'
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'] #Gibt die ID des Bildes zurück
#Extrahieren Sie nur Wörter aus dem erworbenen 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
#Erfassung der Ergebnisse der Szenenbilderkennung
def getWordList(img_id):
register_openers()
url = 'https://api.apigw.smt.docomo.ne.jp/characterRecognition/v1/document/' + img_id + '?APIKEY=(Bitte geben Sie den API-Schlüssel ein)'
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 'Akzeptieren...'
elif status == 'process':
print 'Erkennen...'
elif status == 'success':
print 'Erfolgreiche Anerkennung' #, recog_result
word_list = makeWordList(recog_result)
return word_list
elif status == 'failure':
print 'Erkennungsfehler'
return None
time.sleep(3) #warte ein wenig
if __name__ == '__main__':
#Bild-ID abrufen
img_id = getImageID(sys.argv[1])
#Wortliste abrufen
word_list = getWordList(img_id)
#Zeigen Sie die erkannte Zeichenfolge an
for word in word_list:
print word
>python characterRecognition.py test.jpg
Erkennen...
Erfolgreiche Anerkennung
Zeichenerkennungstest
{
"job": {
"@status": "success",
"@id": "(Bild-ID)", #Bild-ID
"@queue-time": "2016/02/13 17:03:07"
},
"lines": {
"line": [
{
"@text": "\u6587\u5b57\u8a8d\u8b58\u306e\u30c6\u30b9\u30c8", #Erkannte Zeichenkette
"shape": {
"@count": "4",
"point": [ #Koordinaten auf dem Bild von Zeichen(Oben links, unten links, unten rechts, oben rechts)
{
"@x": "35",
"@y": "33"
},
{
"@x": "35",
"@y": "67"
},
{
"@x": "293",
"@y": "67"
},
{
"@x": "293",
"@y": "33"
}
]
}
}
],
"@count": "1"
},
"message": null
}
Ich habe es vorerst für ein Memo geschrieben. Wenn Sie mehr wissen möchten, hinterlassen Sie bitte einen Kommentar.
Recommended Posts