[PYTHON] Essayez d'utiliser la reconnaissance de caractères manuscrits (OCR) de GCP

Aperçu

Nous avons résumé comment reconnaître les caractères manuscrits à l'aide de la fonction de reconnaissance optique de caractères (OCR) qui peut être utilisée avec GCP (plateforme Google Cloud). Pour les débutants de GCP et ceux qui souhaitent utiliser GCP à partir de maintenant.

introduction

Cible

L'objectif est de reconnaître les caractères manuscrits de l'image à l'aide de la fonction OCR de GCP.

Environnement d'exécution

macOS Catalina 10.15.6 Python 3.8.1

table des matières

--Avant de commencer

Avant de commencer

Pour utiliser chaque service GCP, vous devez créer un compte Google. Si vous ne possédez pas de compte Google, veuillez consulter ici pour créer un compte Google.

Après avoir créé un compte Google, accédez à la Console GCP et [ici](https://cloud.google.com/vision/docs/before-you- Veuillez vous reporter au début) pour définir le projet Cloud et les informations d'authentification.

Préparons les données d'entrée

Avant de commencer l'implémentation, préparez d'abord l'image manuscrite que vous souhaitez reconnaître. J'ai préparé une telle image.

Maintenant, la mise en œuvre

[Tutoriel](https://cloud.google.com/vision/docs/handwriting?apix_params=%7B%22alt%22%3A%22json%22%2C%22%24.xgafv%22%3A%221%22 % 2C% 22prettyPrint% 22% 3Atrue% 2C% 22resource% 22% 3A% 7B% 7D% 7D # vision-document-text-detection-python) pour créer le code. Le code créé est le suivant. Le nom du fichier est detect.py.

import os
import io

from google.cloud import vision

def detect_document(path):
    client = vision.ImageAnnotatorClient()
    with io.open(path, 'rb') as image_file:
        content = image_file.read()

    image = vision.types.Image(content=content)

    response = client.document_text_detection(image=image)

    for page in response.full_text_annotation.pages:
        for block in page.blocks:
            print('\nBlock confidence: {}\n'.format(block.confidence))

            for paragraph in block.paragraphs:
                print('Paragraph confidence: {}'.format(
                    paragraph.confidence))

                for word in paragraph.words:
                    word_text = ''.join([
                        symbol.text for symbol in word.symbols
                    ])
                    print('Word text: {} (confidence: {})'.format(
                        word_text, word.confidence))

                    for symbol in word.symbols:
                        print('\tSymbol: {} (confidence: {})'.format(
                            symbol.text, symbol.confidence))

    if response.error.message:
        raise Exception(
            '{}\nFor more info on error messages, check: '
            'https://cloud.google.com/apis/design/errors'.format(
                response.error.message))


if __name__ == "__main__":
    path = 'sample.png'
    detect_document(os.path.abspath(path))

Courir

La commande d'exécution est la suivante.

python3 detect.py

Résultat d'exécution


Block confidence: 0.8999999761581421

Paragraph confidence: 0.8999999761581421
Word text:je(confidence: 0.9800000190734863)
	Symbol:je(confidence: 0.9800000190734863)
Word text:de(confidence: 0.9900000095367432)
	Symbol:de(confidence: 0.9900000095367432)
Word text:Nom(confidence: 0.9300000071525574)
	Symbol:Nom(confidence: 0.8600000143051147)
	Symbol:Avant(confidence: 1.0)
Word text:Est(confidence: 0.9900000095367432)
	Symbol:Est(confidence: 0.9900000095367432)
Word text: KOTARO (confidence: 0.8299999833106995)
	Symbol: K (confidence: 0.4099999964237213)
	Symbol: O (confidence: 0.8299999833106995)
	Symbol: T (confidence: 0.8600000143051147)
	Symbol: A (confidence: 0.9900000095367432)
	Symbol: R (confidence: 0.9900000095367432)
	Symbol: O (confidence: 0.949999988079071)
Word text:est(confidence: 0.9399999976158142)
	Symbol:alors(confidence: 0.9399999976158142)
	Symbol:Su(confidence: 0.949999988079071)
Word text: 。 (confidence: 0.9900000095367432)
	Symbol: 。 (confidence: 0.9900000095367432)

Block confidence: 0.9200000166893005

Paragraph confidence: 0.9200000166893005
Word text:de(confidence: 0.9200000166893005)
	Symbol:de(confidence: 0.9200000166893005)

Block confidence: 0.9300000071525574

Paragraph confidence: 0.9300000071525574
Word text: Python (confidence: 0.9700000286102295)
	Symbol: P (confidence: 0.9800000190734863)
	Symbol: y (confidence: 0.9800000190734863)
	Symbol: t (confidence: 0.9100000262260437)
	Symbol: h (confidence: 0.9900000095367432)
	Symbol: o (confidence: 0.9900000095367432)
	Symbol: n (confidence: 0.9900000095367432)
Word text:Mais(confidence: 0.9700000286102295)
	Symbol:Mais(confidence: 0.9700000286102295)
Word text:Comme(confidence: 0.8999999761581421)
	Symbol:Bien(confidence: 0.9399999976158142)
	Symbol:Ki(confidence: 0.8600000143051147)
Word text:est(confidence: 0.8500000238418579)
	Symbol:alors(confidence: 0.7799999713897705)
	Symbol:Su(confidence: 0.9300000071525574)
Word text: 。 (confidence: 0.8799999952316284)
	Symbol: 。 (confidence: 0.8799999952316284)

Block confidence: 0.949999988079071

Paragraph confidence: 0.949999988079071
Word text:Toutes les personnes(confidence: 0.9900000095367432)
	Symbol:Seulement(confidence: 0.9900000095367432)
	Symbol:Hmm(confidence: 1.0)
	Symbol:Nana(confidence: 1.0)
Word text: 、 (confidence: 0.699999988079071)
	Symbol: 、 (confidence: 0.699999988079071)
Word text:Suivre(confidence: 0.9300000071525574)
	Symbol:Fu(confidence: 0.8899999856948853)
	Symbol:Oh(confidence: 0.9200000166893005)
	Symbol:B(confidence: 0.9399999976158142)
	Symbol:-(confidence: 1.0)
Word text:Shi(confidence: 1.0)
	Symbol:Shi(confidence: 1.0)
Word text:main(confidence: 1.0)
	Symbol:main(confidence: 1.0)
Word text:Hey(confidence: 0.9900000095367432)
	Symbol:Hey(confidence: 0.9900000095367432)
Word text: 。 (confidence: 0.9900000095367432)
	Symbol: 。 (confidence: 0.9900000095367432)
python3 detect.py  0.82s user 0.42s system 2% cpu 57.861 total

La taille du fichier image était de 8,7 Mo et le temps d'exécution était de 0,82 s. J'ai trouvé qu'il était considérablement plus précis que le modèle que j'ai formé. Comme prévu, Google dans le monde. .. ..

Commentaire de code

Jetons un bref coup d'œil au code de la méthode detect_document.

    client = vision.ImageAnnotatorClient()
    with io.open(path, 'rb') as image_file:
        content = image_file.read()

    image = vision.types.Image(content=content)

L'authentification et l'acquisition d'images sont effectuées dans cette partie. Si les paramètres d'authentification ne sont pas définis correctement, une erreur se produira sur la première ligne. Vient ensuite la partie reconnaissance.

response = client.document_text_detection(image=image)

C'est la seule ligne qui reconnaît réellement. Le résultat de l'application de l'image spécifiée dans l'image à la reconnaissance du modèle entraîné par Google au préalable est renvoyé en réponse.

for page in response.full_text_annotation.pages:
        for block in page.blocks:
            print('\nBlock confidence: {}\n'.format(block.confidence))

            for paragraph in block.paragraphs:
                print('Paragraph confidence: {}'.format(
                    paragraph.confidence))

                for word in paragraph.words:
                    word_text = ''.join([
                        symbol.text for symbol in word.symbols
                    ])
                    print('Word text: {} (confidence: {})'.format(
                        word_text, word.confidence))

Le résultat est affiché dans cette partie. Un bloc est une collection de mots et vous pouvez accéder à la confiance du bloc entier dans block.confidence. Block. Paragraphs pour ce qui est reconnu comme une phrase (paragraphe) dans un bloc, block.words pour ce qui est reconnu comme un mot dans un paragraphe et block.symbols pour chaque caractère (symboles) dans un mot. Vous pouvez y accéder.

Si vous voulez faire quelque chose avec les résultats de la reconnaissance, vous devriez obtenir un moyen d'accéder à chaque résultat de reconnaissance de cette partie.

Impressions

Comme prévu, il s'agissait de précision et de vitesse de traitement. Je voulais aussi toucher à diverses autres choses.

Merci d'avoir regardé jusqu'à la fin. Je suis toujours une personne inexpérimentée, alors n'hésitez pas à me contacter si vous avez des suggestions ou des questions concernant l'article.

Recommended Posts

Essayez d'utiliser la reconnaissance de caractères manuscrits (OCR) de GCP
Effectuer la reconnaissance de caractères manuscrits à l'aide de Pylearn 2
Application de reconnaissance de caractères manuscrite interactive utilisant pygame
Reconnaissance de caractères manuscrits à l'aide de KNN en Python
Essayez la reconnaissance d'objets en temps réel avec YOLOv2 (TensorFlow)
Essayez d'utiliser Tkinter
Essayez d'utiliser docker-py
Essayez d'utiliser PDFMiner
Essayez d'utiliser des géopandas
Essayez d'utiliser Selenium
Essayez d'utiliser scipy
Essayez d'utiliser django-swiftbrowser
Essayez d'utiliser matplotlib
Essayez d'utiliser tf.metrics
Essayez d'utiliser PyODE
Essayez d'utiliser virtualenv (virtualenvwrapper)
[Azure] Essayez d'utiliser Azure Functions
Essayez d'utiliser virtualenv maintenant
Essayez d'utiliser W & B
Essayez d'utiliser Django templates.html
[Kaggle] Essayez d'utiliser LGBM
Essayez d'utiliser l'analyseur de flux de Python.
Essayez d'utiliser Tkinter de Python
Essayez d'utiliser Tweepy [Python2.7]
Essayez d'utiliser collate_fn de Pytorch
J'ai essayé la reconnaissance de caractères manuscrits des caractères runiques avec CNN en utilisant Keras
Essayez d'utiliser PythonTex avec Texpad.
[Python] Essayez d'utiliser le canevas de Tkinter
Essayez d'utiliser l'image Docker de Jupyter
Essayez d'utiliser scikit-learn (1) - Clustering K par méthode moyenne
Essayez l'optimisation des fonctions à l'aide d'Hyperopt
Essayez d'utiliser Azure Logic Apps
Reconnaissance de l'âge à l'aide de l'API de Pepper
J'ai essayé la reconnaissance faciale avec Face ++
[Kaggle] Essayez d'utiliser xg boost
Essayez d'utiliser l'API Twitter
Essayez d'utiliser OpenCV sur Windows
Essayez d'utiliser Jupyter Notebook de manière dynamique
Essayez de tweeter automatiquement en utilisant Selenium.
Essayez d'utiliser l'API Twitter
Essayez d'utiliser SQLAlchemy + MySQL (partie 2)
Essayez d'utiliser la fonction de modèle de Django
Essayez d'utiliser l'API PeeringDB 2.0
Essayez d'utiliser la fonction de brouillon de Pelican
Essayez d'utiliser pytest-Overview and Samples-
Essayez la reconnaissance faciale avec Python
Essayez d'utiliser le folium avec anaconda