Détectez les caractères japonais à partir d'images à l'aide de l'API Cloud Vision de Google avec Python

Détectez les caractères japonais à partir d'images à l'aide de l'API Cloud Vision de Google avec Python

introduction

Article pratique pour regarder en arrière et corriger les connaissances acquises en développant Serverless Web App Mosaic / 87b57dfdbcf218de91e2), et je prévois un total de 17 articles, actuellement 13 articles et 4 autres, mais j'en ai un peu marre. J'en ai marre, ou je veux commencer à implémenter de nouvelles fonctionnalités. C'est pourquoi j'ai commencé. Pour ajouter une fonction de détection de caractère.

Détection de personnage? Reconnaissance de caractère? Cela ressemble à l'OCR (Optical Character Recognition). Il semble que les caractères puissent être détectés même avec AWS Rekognition, mais malheureusement, il ne semble pas prendre en charge le japonais. (En janvier 2020. Je ne l'ai pas essayé, mais il semble qu'il ne soit pas encore pris en charge.) Cependant, l'API Cloud Vision de Google prend également en charge le japonais, j'ai donc décidé de l'utiliser.

API Cloud Vision activée

Alors faisons-le tout de suite. Accédez à Google Cloud Platform ou Google Developpers Console> API et services. https://console.cloud.google.com/apis https://console.developers.google.com/apis

Appuyez sur le bouton "+ Activer l'API et les services" en haut de l'écran. Screenshot 2020-01-11 at 11.55.13.png Screenshot 2020-01-11 at 11.56.22.png

Recherchez et activez l'API Cloud Vision. Screenshot 2020-01-11 at 11.56.55.png Screenshot 2020-01-11 at 11.58.07.png

Un compte de service sera ajouté en tant qu'informations d'authentification, mais il sera omis ici car il chevauche cet article.

Utiliser l'API Google Vision avec Lambda (Python3)

Pour importer la bibliothèque requise pour appeler l'API de Google avec un compte de service, veuillez consulter cet article comme précédemment.

Le code qui transmet le fichier image local à l'API Vision et détecte le visage et le texte ressemble à ceci:

lambda_function.py


  : 
def detectFacesByGoogleVisionAPIFromF(localFilePath, bucket, dirPathOut):
    try:
        keyFile = "service-account-key.json"
        scope = ["https://www.googleapis.com/auth/cloud-vision"]
        api_name = "vision"
        api_version = "v1"
        service = getGoogleService(keyFile, scope, api_name, api_version)
        
        ctxt = None
        with open(localFilePath, 'rb') as f:
            ctxt = b64encode(f.read()).decode()
        
        service_request = service.images().annotate(body={
            "requests": [{
                "image":{
                    "content": ctxt
                  },
                "features": [
                    {
                        "type": "FACE_DETECTION"
                    }, 
                    {
                        "type": "TEXT_DETECTION"
                    }
                ]
            }]
        })
        response = service_request.execute()
        
    except Exception as e:
        logger.exception(e)

def getGoogleService(keyFile, scope, api_name, api_version):
    credentials = ServiceAccountCredentials.from_json_keyfile_name(keyFile, scopes=scope)
    return build(api_name, api_version, credentials=credentials, cache_discovery=False) 

Dans cet exemple de code, «FACE_DETECTION» et «TEXT_DETECTION» sont spécifiés. En plus de cela, vous pouvez spécifier LABEL_DETECTION, LANDMARK_DETECTION, LOGO_DETECTION, etc., mais si vous le spécifiez, la charge sera ajoutée en conséquence. Par conséquent, si le but est uniquement la détection de caractères, il est préférable de spécifier uniquement TEXT_DETECTION. Screenshot 2020-01-12 at 14.58.06.png Je n'entrerai pas dans les détails de ce qui peut être spécifié pour les fonctionnalités et le json renvoyé. Consultez la documentation de l'API Cloud Vision (https://cloud.google.com/vision/docs?hl=ja). Cliquez ici pour obtenir des informations sur les tarifs (https://cloud.google.com/vision/pricing?hl=ja).

Je voulais vraiment Vision pour les fichiers téléchargés sur Google Drive

Mais je ne pouvais pas.

test.py


        imageUri = "https://drive.google.com/uc?id=" + fileID
        service_request = service.images().annotate(body={
            "requests": [{
                "image":{
                    "source":{
                      "imageUri": imageUri
                    }
                  },
                "features": [
                    {
                        "type": "FACE_DETECTION"
                    }, 
                    {
                        "type": "TEXT_DETECTION"
                    }
                ]
            }]
        })
        response = service_request.execute()

Je pensais que ce serait cool comme ça, mais j'ai eu l'erreur suivante, et j'ai essayé diverses choses, mais je ne pouvais pas le faire après tout.

response.json


{"responses": [{"error": {"code": 7, "message": "We're not allowed to access the URL on your behalf. Please download the content and pass it in."}}]}
{"responses": [{"error": {"code": 4, "message": "We can not access the URL currently. Please download the content and pass it in."}}]}ass it in."}}]}

Je peux appeler Vision, mais il semble que je ne puisse pas accéder à l'image (imageUri) sur le Web à partir de Vision. Cela ne fonctionnait pas même si je spécifiais le lien direct de l'image sur le compartiment public de S3. Le mystère est. S'il vous plaît, faites-moi savoir.

Contrôle de fonctionnement

TEXT_DETECTION vous donne deux éléments: textAnnotations et fullTextAnnotation. Le résultat de l'inclusion de la zone détectée par textAnnotations en bleu et de la zone détectée par fullTextAnnotation en vert était le suivant. faces-aaaaaa.png

Je pense que les résultats sont raisonnables, mais j'ai l'impression que la plage d'un caractère est légèrement différente pour le bleu, probablement parce qu'il est japonais.

En outre, il semble faible lorsque chaque personnage est indépendant comme le montre l'image ci-dessous. Que ce soit aussi un problème propre aux japonais, qu'il puisse être détecté s'il s'agit d'une caractéristique différente, ou s'il peut être ajusté avec d'autres paramètres, je ne l'ai pas approfondi, mais je n'ai quand même pas obtenu le résultat attendu. Il est difficile d'espérer que l'apprentissage de l'API progressera à l'avenir et que les caractères de cette image pourront être détectés sans omission. faces-IMG_20190901_094815-200126131521-1387a884261.jpg Quand Akatsuki, dont AWS Rekognition prend en charge le japonais pour la détection des caractères, je pense d'abord évaluer cette image!

Épilogue

Je sais qu'il est important et nécessaire de le rassembler sous forme d'article, mais c'est le plus amusant lorsque je crée quelque chose de nouveau. Avec ce flux, j'ai pu écrire cet article sur l'API Vision en douceur. Ce serait compliqué d'écrire un article plus tard, alors j'ai pensé qu'il serait peut-être important de l'écrire rapidement alors que j'étais nouveau dans ma mémoire et que j'étais en pleine tension.

J'utilise Mosaic, une application Web sans serveur que je crée, essentiellement l'infrastructure AWS, mais j'aimerais finalement créer la même chose avec GCP. D'ici la fin de 2020. Je pense qu'il serait préférable de construire l'infrastructure de manière unifiée, mais pour les services d'API Web tels que Rekognition et Vision API, soit l'un d'eux convient, soit celui qui peut réaliser ce que vous voulez faire sera sélectionné. Les deux appellent simplement l'API, donc ce n'est pas un gros problème, et cela peut être la même chose pour n'importe quel système après tout, mais cela donne l'impression d'un modèle en plastique fabriqué en combinant des pièces plus fortes. Je ne pense pas que vous ayez besoin de tout savoir, mais je ne pense pas qu'il soit bon de trop s'en tenir à un.

C'est bien d'avoir un service de haute précision appris par machine si facile à utiliser, mais c'est pénible de rester bloqué s'il ne donne pas les résultats escomptés. Cependant, je ne peux rien faire dans mon futur domaine de recherche, donc je ne peux que m'asseoir et attendre les résultats que j'attends de sortir un jour.

Recommended Posts

Détectez les caractères japonais à partir d'images à l'aide de l'API Cloud Vision de Google avec Python
Utiliser l'API Google Cloud Vision de Python
Charger des images à partir d'une URL à l'aide de Pillow dans Python 3
[Rails] Comment détecter des images radicales en analysant des images à l'aide de l'API Cloud Vision
Extraire des caractères d'images à l'aide de l'API de reconnaissance de caractères de docomo
Notification PUSH de Python vers Android à l'aide de l'API de Google
J'ai essayé de collecter automatiquement des images érotiques de Twitter à l'aide de l'API Cloud Vision de GCP
Prédire le sexe à partir du nom à l'aide de l'API Gender et de Pykakasi en Python
Utiliser Cloud Storage depuis Python3 (Introduction)
Exécutez Ansible à partir de Python à l'aide de l'API
Touchons l'API Vision de Google de Python pour le moment
Fonctionnement de la souris à l'aide de l'API Windows en Python
Essayez d'utiliser l'API Wunderlist en Python
Tweet à l'aide de l'API Twitter en Python
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Télécharger des images à partir de la liste d'URL en Python
Python appelant l'API Google Cloud Vision depuis LINE BOT via AWS Lambda
J'ai essayé d'extraire des caractères des sous-titres (OpenCV: API Google Cloud Vision)
Problèmes avec les résultats de sortie avec l'API Cloud Vision de Google
Extraction de texte avec l'API GCP Cloud Vision (Python3.6)
Essayez d'utiliser l'API BitFlyer Ligntning en Python
Obtenir l'URL de l'image à l'aide de l'API Flickr en Python
[WP REST API v2] Télécharger des images avec Python
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
Essayez d'utiliser l'API DropBox Core avec Python
Afficher des images dans OpenCV à partir de Python à l'aide d'une caméra USB externe sur votre MacBook
Importez un fichier JPG à l'aide de l'API Google Drive en Python
Paramètres initiaux lors de l'utilisation de l'API foursquare avec python
Obtenez des données LEAD à l'aide de l'API REST de Marketo en Python
OpenVINO utilisant l'API Python d'Inference Engine dans un environnement PC
Procédure de transcription vocale à l'aide de Python et de l'API Google Cloud Speech
Générez Word Cloud à partir de données de cas d'essai avec python3
API Evernote en Python
Sortie japonaise avec Python
API C en Python 3
Contrôlez la lumière intelligente «Yeelight» de Python sans utiliser le cloud
Flux d'extraction de texte au format PDF avec l'API Cloud Vision
Éliminez les caractères japonais brouillés dans les données JSON acquises par l'API.
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
Obtenez votre fréquence cardiaque à partir de l'API fitbit en Python!
Élimination des caractères japonais brouillés de matplotlib et NetworkX de la bibliothèque Python
Supprimer les commentaires sur une ligne, y compris le japonais du code source en Python
Reconnaissance d'image avec API à partir de zéro connaissance avec AutoML Vision
Essayez de juger des photos de plats à l'aide de l'API Google Cloud Vision
Autoriser l'exécution rapide des scripts Python dans Cloud Run à l'aide du répondeur
Résolvez le problème japonais lors de l'utilisation du module CSV en Python.
Mettez en place le géocodage inversé en japonais avec l'API Python Google Maps
Hit API de Mastodon en Python
Aplatir à l'aide du rendement Python de
Enregistrer des images à l'aide de requêtes python3
J'ai écrit python en japonais
Encodage base64 des images en Python 3
OCR à partir de PDF en Python
API Blender Python dans Houdini (Python 3)
Je comprends Python en japonais!
Traduit à l'aide de googletrans en Python
Détecter les frappes en python (tty)
Utilisation du mode Python dans le traitement
Utilisez l'API e-Stat de Python
Obtenez des synonymes japonais avec Python