[PYTHON] Flux d'extraction de texte au format PDF avec l'API Cloud Vision

introduction

Faites-vous la reconnaissance optique de caractères (OCR)? Avec la technologie permettant de lire les informations textuelles sur l'image, elles deviennent visibles à divers endroits. De plus, il est de plus en plus facile d'utiliser la technologie OCR dans GCP afin que les gens ordinaires puissent l'utiliser.

J'essayais donc de lire les informations textuelles dans le PDF à l'aide de l'API Cloud Vision de GCP, mais je sentais que le document officiel était un peu difficile à comprendre (?), Alors j'aimerais le résumer ici au lieu d'un mémo.

Détecter le texte dans le fichier (PDF / TIFF)

J'ai senti que divers points importants avaient été omis dans le document ci-dessus, donc c'était un peu difficile pour moi en tant que débutant.

environnement

Mac OS Mojave
Python 3.7

Coût

Je ne connais pas encore la facture d'avril, mais je pense qu'elle est probablement faible. J'utilise également les crédits gratuits que j'obtiens pour la première fois, je vais donc les mettre à jour dès que je les comprendrai.

Activer l'API Cloud Vision

Activez l'API Cloud Vision.

Screen Shot 2020-04-25 at 18.14.17.png

Sélectionnez une bibliothèque parmi les API et les services, recherchez et activez l'API Cloud Vision.

Screen Shot 2020-04-25 at 18.13.40.png

Créer un fichier de clé json

Screen Shot 2020-04-25 at 19.18.08.png

Sélectionnez un compte de service dans IAM et Administration et créez un nouveau compte de service.

Vous pouvez créer un fichier json clé à partir de la commande suivante Create Service Account.

Screen Shot 2020-04-25 at 19.18.18.png

Vous pouvez maintenant créer un fichier de clé contenant la clé publique et ainsi de suite. Vous déplacerez ce fichier clé vers votre fichier de travail ultérieurement.

Préparation au stockage dans le cloud

Screen Shot 2020-04-25 at 18.14.33.png

Sélectionnez un navigateur dans Stockage. Cela vous mènera au navigateur de stockage, cliquez sur Créer un compartiment.

Screen Shot 2020-04-25 at 18.17.32.png

Créez un nouveau bucket et téléchargez le fichier PDF que vous souhaitez OCR. Mon nom de bucket cette fois est ʻenvironment-engineering-pdf-bucket-1 et j'ai téléchargé scan-001.pdf`.

Screen Shot 2020-04-25 at 19.24.23.png

Nous allons également créer un autre bucket pour stocker les informations de texte lu du fichier pdf. Je l'ai nommé «cr-result-bucket-qiita».

Importer les modules requis

Les trois suivants sont obligatoires, alors importons-les. Vous pouvez également utiliser virtualenv.

pip install google-cloud-vision
pip install google-cloud-storage
pip install protobuf

https://pypi.org/project/google-cloud-storage/ https://pypi.org/project/google-cloud-vision/ https://pypi.org/project/protobuf/

Début réel du traitement python

import os
import json
import re
from google.cloud import vision
from google.cloud import storage
from google.protobuf import json_format

#Veuillez changer ici pour votre propre uri ainsi que le vôtre
gcs_source_uri = "gs://environment-engineering-pdf-bucket-1/scan-001.pdf"
gcs_destination_uri = "gs://ocr-result-bucket-qiita"

#Veuillez changer le nom du bucket ici pour le vôtre
bucket_name = "ocr-result-bucket-qiita"

#Veuillez changer le fichier de clé ici pour le vôtre
#N'oubliez pas de mettre le fichier de clé JSON dans le même répertoire!
credential_path = 'engaged-symbol-274611-192d61800d05.json'

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = credential_path

mime_type = 'application/pdf'
batch_size = 2
client = vision.ImageAnnotatorClient()

feature = vision.types.Feature(
    type=vision.enums.Feature.Type.DOCUMENT_TEXT_DETECTION)

gcs_source = vision.types.GcsSource(uri=gcs_source_uri)

input_config = vision.types.InputConfig(
    gcs_source=gcs_source, mime_type=mime_type)

gcs_destination = vision.types.GcsDestination(uri=f"{gcs_destination_uri}/")
output_config = vision.types.OutputConfig(
    gcs_destination=gcs_destination, batch_size=batch_size)

async_request = vision.types.AsyncAnnotateFileRequest(
    features=[feature], input_config=input_config,
    output_config=output_config)

operation = client.async_batch_annotate_files(
    requests=[async_request])

print('Waiting for the operation to finish.')
operation.result(timeout=180)


storage_client = storage.Client()

bucket = storage_client.get_bucket(bucket_name)

output = blob_list[0]

json_string = output.download_as_string()
response = json_format.Parse(
    json_string, vision.types.AnnotateFileResponse())

# The actual response for the first page of the input file.
first_page_response = response.responses[0]
annotation = first_page_response.full_text_annotation

print(u'Full text:\n{}'.format(
    annotation.text))

Enfin un exemple

Exemple réussi

J'ai essayé l'OCR de l'image pdf suivante.

Screen Shot 2020-04-25 at 19.43.40.png

Ensuite, le titre a été affiché dans le terminal comme suit.

Gentosha Bunko
Chinois à Kyoto
Naomi Kang

Exemple d'échec

Cependant, il échoue sur les pages contenant les caractères écrits suivants. «Gourmet» est reconnu comme «Kamako» et «Niniku no» est absent de «Niniku na» et «».

Screen Shot 2020-04-25 at 19.45.09.png

production:

table des matières
《Kamako》
"Danse"
Kashinnosu
C'est de l'ail
Sac enfant 4
Poisson de chapitre(Log Town Seven Pine)|
34
Aile de poisson à trois côtés
Buan(Shimogamo)
De peau de sésame
Mizusako
Nombres(Temple Kodoji)
04
Comme une valve parent-enfant
Phénix
Fuyoen(Kawaramachi Kajo)
La personne

finalement

Si vous pouvez sortir ceci au format ʻepub` etc., vous pouvez également le convertir au format mobi et le lire avec Kindle! Je ne sais pas combien cela coûtera. .. ..

Recommended Posts

Flux d'extraction de texte au format PDF avec l'API Cloud Vision
Extraction de texte avec l'API GCP Cloud Vision (Python3.6)
Transcription d'images avec l'API Vision de GCP
Problèmes avec les résultats de sortie avec l'API Cloud Vision de Google
Extraction de texte (API de lecture) avec l'API Azure Computer Vision (Python3.6)
Une histoire de lecture d'un livre d'images en synthétisant la voix avec l'API COTOHA et l'API Cloud Vision
Reconnaissance vocale des fichiers wav avec Google Cloud Speech API Beta
"AttributeError: module'google.cloud.vision 'n'a pas d'attribut" types "" dans l'API Cloud Vision (GCP vision AI)
L'histoire de la sortie du maître de planétarium au format pdf avec Pycairo
Visualisez la fréquence des occurrences de mots dans les phrases avec Word Cloud. [Python]
Livre de recettes Cloud DevOps, partie 4 - Explorez DevOps DirectMail en Python avec l'API REST
GOTO en Python avec Sublime Text 3
API GraphQL utilisant graphene_django dans Django
Diagnostic Machine Learning x Web App: reconnaissez CAPTCHA avec l'API Cloud Vision
Détectez les caractères japonais à partir d'images à l'aide de l'API Cloud Vision de Google avec Python
Exemple d'API Google Cloud Vision pour python
Reconnaissance vocale en streaming avec l'API Google Cloud Speech
Extraire du texte japonais d'un PDF avec PDFMiner
Utiliser l'API Google Cloud Vision de Python
Sortie PDF en utilisant l'extension Latex avec Sphinx
Text mining avec Python ② Visualisation avec Word Cloud
Comment utiliser l'API Cloud Vision de GCP
Filtrage de texte avec des baies naïves de sklearn
Créer une API pour le thermo-hygromètre Switchbot avec Node-RED
Lire des caractères dans des images avec Python OCR
Transcrire des fichiers WAV avec l'API Cloud Speech
Exécuter l'API de Cloud Pak for Data Analysis Project Job avec des variables d'environnement