[PYTHON] Extraire des caractères d'images à l'aide de l'API de reconnaissance de caractères de docomo

Chose que tu veux faire

Je souhaite extraire des caractères d'une image à l'aide de l'API de docomo.

** Addendum (2016/02/16) ** Le programme a été téléchargé sur GitHub. → source

Préparation préalable

Fichier image à reconnaître (test.jpg)

test.jpg

Environnement de développement

programme

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

#Lancer des données d'image et obtenir l'ID de l'image au format json(Demande de reconnaissance d'image de scène)
def getImageID(fname):
    register_openers()
    url = 'https://api.apigw.smt.docomo.ne.jp/characterRecognition/v1/document?APIKEY=(Veuillez saisir la clé API)'
    
    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'] #Renvoie l'ID de l'image

#Extrayez uniquement les mots du json acquis.
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

#Acquisition de résultats de reconnaissance d'image de scène
def getWordList(img_id):

    register_openers()
    url = 'https://api.apigw.smt.docomo.ne.jp/characterRecognition/v1/document/' + img_id + '?APIKEY=(Veuillez saisir la clé API)'
    
    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 'Acceptant...'
        elif status == 'process':
            print 'Reconnaître...'
        elif status == 'success':
            print 'Reconnaissance réussie' #, recog_result
            word_list = makeWordList(recog_result)
            return word_list
        elif status == 'failure':
            print 'Échec de la reconnaissance'
            return None

        time.sleep(3) #attendre un peu



if __name__ == '__main__':
    
    #Obtenir l'identifiant de l'image
    img_id = getImageID(sys.argv[1])
    
    #Obtenir une liste de mots
    word_list = getWordList(img_id)
    
    #Afficher la chaîne de caractères reconnue
    for word in word_list:
        print word

Résultat d'exécution

>python characterRecognition.py test.jpg
Reconnaître...
Reconnaissance réussie
Test de reconnaissance de caractères

Supplément (exemple de json acquis)

{
  "job": {
    "@status": "success",
    "@id": "(ID de l'image)", #ID de l'image
    "@queue-time": "2016/02/13 17:03:07"
  },
  "lines": {
    "line": [
      {
        "@text": "\u6587\u5b57\u8a8d\u8b58\u306e\u30c6\u30b9\u30c8", #Chaîne de caractères reconnue
        "shape": {
          "@count": "4",
          "point": [       #Coordonnées sur l'image des personnages(En haut à gauche, en bas à gauche, en bas à droite, en haut à droite)
            {
              "@x": "35",
              "@y": "33"
            },
            {
              "@x": "35",
              "@y": "67"
            },
            {
              "@x": "293",
              "@y": "67"
            },
            {
              "@x": "293",
              "@y": "33"
            }
          ]
        }
      }
    ],
    "@count": "1"
  },
  "message": null
}

Épilogue

Je l'ai écrit pour un mémo pour le moment. Si vous souhaitez en savoir plus, laissez un commentaire.

Recommended Posts

Extraire des caractères d'images à l'aide de l'API de reconnaissance de caractères de docomo
Estimation de catégorie à l'aide de l'API de reconnaissance d'image de docomo
# 5 [python3] Extraire des caractères d'une chaîne de caractères
Détectez les caractères japonais à partir d'images à l'aide de l'API Cloud Vision de Google avec Python
Reconnaissance de caractères à partir d'images! Expliquer la logique de la précision à 100% avec le thème de la Wiire
Reconnaissance de l'âge à l'aide de l'API de Pepper
Reconnaissance d'image avec API à partir de zéro connaissance avec AutoML Vision
Télécharger des images de «Irasutoya» à l'aide de Scrapy
Prédiction géolocalisée à partir d'images à l'aide de DNN
Extraire du texte d'images avec Python
Reconnaissance faciale à l'aide de l'API de Pepper
Exécutez Ansible à partir de Python à l'aide de l'API
J'ai essayé d'extraire des caractères des sous-titres (OpenCV: API Google Cloud Vision)
Extraire des images des ensembles de données Cifar et CUCUMBER-9
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
[Python] (Line) Extraire les valeurs des images graphiques
Charger des images à partir d'une URL à l'aide de Pillow dans Python 3
Téléchargement anonyme d'images à l'aide de l'API Imgur (à l'aide de Python)
J'ai essayé de collecter automatiquement des images érotiques de Twitter à l'aide de l'API Cloud Vision de GCP