Découvrez comment effectuer la reconnaissance optique des caractères (OCR) sur Google Cloud Platform. Ce tutoriel explique comment importer des fichiers images sur Cloud Storage, extraire le texte des images à l'aide de Cloud Vision, traduire le texte à l'aide du service API Cloud Translation et enregistrer vos traductions dans Cloud Storage. Pub/Sub permet de mettre différentes tâches en attente et de déclencher les fonctions Cloud nécessaires à leur exécution.
Pour en savoir plus sur l'envoi d'une requête de détection de texte (OCR), consultez la page Détecter du texte dans les images, Détecter l'écriture manuscrite dans les images ou Détecter le texte dans les fichiers (PDF/TIFF).
Objectifs
- Écrire et déployer plusieurs fonctions basées sur des événements
- Importer des images dans Cloud Storage
- Extraire, traduire et enregistrer le texte contenu dans les images importées
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
- Cloud Functions
- Cloud Build
- Pub/Sub
- Artifact Registry
- Eventarc
- Cloud Run
- Cloud Logging
- Cloud Storage
- API Cloud Translation
- Cloud Vision
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
- Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Run, Artifact Registry, Eventarc, Logging, Pub/Sub, Cloud Storage, Cloud Translation, and Cloud Vision APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Run, Artifact Registry, Eventarc, Logging, Pub/Sub, Cloud Storage, Cloud Translation, and Cloud Vision APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Préparez votre environnement de développement.
Si la gcloud CLI est déjà installée, mettez-le à jour en exécutant la commande suivante :
gcloud components update
Visualiser le flux de données
Le flux de données dans l'application du tutoriel OCR comprend plusieurs étapes :
- Une image contenant du texte dans n'importe quelle langue est importée dans Cloud Storage.
- Une fonction Cloud utilisant l'API Vision pour extraire le texte et détecter la langue source est déclenchée.
- Le texte est mis en file d'attente pour traduction en publiant un message dans un sujet Pub/Sub. Une traduction est mise en file d'attente pour chaque langue cible différente de la langue source.
- Si une langue cible correspond à la langue source, la file d'attente de traduction est ignorée et le texte est envoyé à la file d'attente des résultats, autre sujet Pub/Sub.
- Une fonction Cloud utilise l'API Translation pour traduire le texte dans la file d'attente de traduction. Le résultat traduit est envoyé à la file d'attente des résultats.
- Une autre fonction Cloud enregistre le texte traduit depuis la file d'attente des résultats dans Cloud Storage.
- Les résultats s'affichent dans Cloud Storage sous la forme de fichiers texte pour chaque traduction.
Observez le schéma ci-dessous pour visualiser les étapes :
Préparer l'application
Créez un bucket Cloud Storage pour importer des images, où
YOUR_IMAGE_BUCKET_NAME
est un nom de bucket unique :gsutil mb gs://
YOUR_IMAGE_BUCKET_NAME
Créez un bucket Cloud Storage pour enregistrer les traductions de texte, où
YOUR_RESULT_BUCKET_NAME
est un nom de bucket unique :gsutil mb gs://
YOUR_RESULT_BUCKET_NAME
Créez un sujet Cloud Pub/Sub pour publier les requêtes de traduction, où
YOUR_TRANSLATE_TOPIC_NAME
est le nom de votre sujet de requête de traduction :gcloud pubsub topics create
YOUR_TRANSLATE_TOPIC_NAME
Créez un sujet Cloud Pub/Sub pour publier les résultats d'une traduction terminée, où
YOUR_RESULT_TOPIC_NAME
est le nom de votre sujet de résultat de traduction :gcloud pubsub topics create
YOUR_RESULT_TOPIC_NAME
Clonez le dépôt de l'exemple d'application sur votre machine locale :
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.
Accédez au répertoire qui contient l'exemple de code de Cloud Functions :
Node.js
cd nodejs-docs-samples/functions/v2/ocr/app/
Python
cd python-docs-samples/functions/v2/ocr/
Go
cd golang-samples/functions/functionsv2/ocr/app/
Java
cd java-docs-samples/functions/v2/ocr/ocr-process-image/
Comprendre le code
Cette section décrit les dépendances et les fonctions qui composent l'exemple OCR.
Importer des dépendances
L'application doit importer plusieurs dépendances afin de pouvoir communiquer avec les services Google Cloud Platform :
Node.js
Python
Go
Java
Traiter les images
La fonction suivante lit un fichier image importé depuis Cloud Storage et appelle une fonction pour détecter la présence de contenu texte dans l'image :
Node.js
Python
Go
Java
La fonction suivante extrait le texte de l'image à l'aide de l'API Cloud Vision, et met le texte en file d'attente de traduction :
Node.js
Python
Go
Java
Traduire du texte
La fonction suivante traduit le texte extrait et met en file d'attente le texte traduit à renvoyer dans Cloud Storage pour enregistrement :
Node.js
Python
Go
Java
Enregistrer les traductions
Enfin, la fonction suivante reçoit le texte traduit et l'enregistre dans Cloud Storage :
Node.js
Python
Go
Java
Déployer les fonctions
Pour déployer la fonction de traitement d'images avec un déclencheur Cloud Storage, exécutez la commande suivante dans le répertoire contenant l'exemple de code (ou, dans le cas de Java, le fichier
pom.xml
) :// LINT.IfChange(nodejs_version) // LINT.ThenChange(:nodejs_version_console_text) // LINT.IfChange(nodejs_version_console_text) // LINT.ThenChange(:nodejs_version // LINT.IfChange(nodejs_version) // LINT.ThenChange(:nodejs_version_console_text) // LINT.IfChange(nodejs_version_console_text) // LINT.thenChange(:nodejs_version)
Node.js
gcloud functions deploy ocr-extract \ --gen2 \ --runtime=nodejs20 \ --region=
REGION
\ --source=. \ --entry-point=processImage \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"Utilisez l'option
--runtime
pour spécifier l'ID d'exécution d'une version Node.js compatible pour exécuter votre fonction.Python
gcloud functions deploy ocr-extract \ --gen2 \ --runtime=python312 \ --region=
REGION
\ --source=. \ --entry-point=process_image \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"Utilisez l'option
--runtime
pour spécifier l'ID d'exécution d'une version Python compatible pour exécuter votre fonction.Go
gcloud functions deploy ocr-extract \ --gen2 \ --runtime=go121 \ --region=
REGION
\ --source=. \ --entry-point=process-image \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"Utilisez l'option
--runtime
pour spécifier l'ID d'exécution d'une version Go compatible pour exécuter votre fonction.Java
gcloud functions deploy ocr-extract \ --gen2 \ --runtime=java17 \ --region=
REGION
\ --source=. \ --entry-point=functions.OcrProcessImage \ --memory=512MB \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"Utilisez l'option
--runtime
pour spécifier l'ID d'exécution d'une version Java compatible pour exécuter votre fonction.Remplacez les éléments suivants :
- REGION : nom de la région Google Cloud dans laquelle vous souhaitez déployer votre fonction (par exemple,
us-west1
). - YOUR_IMAGE_BUCKET_NAME : nom du bucket Cloud Storage dans lequel vous allez importer des images. Lorsque vous déployez des fonctions de 2e génération, spécifiez seul le nom du bucket, sans le
gs://
initial. Par exemple,--trigger-event-filters="bucket=my-bucket"
.
- REGION : nom de la région Google Cloud dans laquelle vous souhaitez déployer votre fonction (par exemple,
Pour déployer la fonction de traduction de texte avec un déclencheur Cloud Pub/Sub, exécutez la commande suivante dans le répertoire contenant l'exemple de code (ou, dans le cas de Java, le fichier
pom.xml
) :// LINT.IfChange(nodejs_version) // LINT.ThenChange(:nodejs_version_console_text) // LINT.IfChange(nodejs_version_console_text) // LINT.ThenChange(:nodejs_version // LINT.IfChange(nodejs_version) // LINT.ThenChange(:nodejs_version_console_text) // LINT.IfChange(nodejs_version_console_text) // LINT.thenChange(:nodejs_version)
Node.js
gcloud functions deploy ocr-translate \ --gen2 \ --runtime=nodejs20 \ --region=
REGION
\ --source=. \ --entry-point=translateText \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"Utilisez l'option
--runtime
pour spécifier l'ID d'exécution d'une version Node.js compatible pour exécuter votre fonction.Python
gcloud functions deploy ocr-translate \ --gen2 \ --runtime=python312 \ --region=
REGION
\ --source=. \ --entry-point=translate_text \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"Utilisez l'option
--runtime
pour spécifier l'ID d'exécution d'une version Python compatible pour exécuter votre fonction.Go
gcloud functions deploy ocr-translate \ --gen2 \ --runtime=go121 \ --region=
REGION
\ --source=. \ --entry-point=translate-text \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"Utilisez l'option
--runtime
pour spécifier l'ID d'exécution d'une version Go compatible pour exécuter votre fonction.Java
gcloud functions deploy ocr-translate \ --gen2 \ --runtime=java17 \ --region=
REGION
\ --source=. \ --entry-point=functions.OcrTranslateText \ --memory=512MB \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"Utilisez l'option
--runtime
pour spécifier l'ID d'exécution d'une version Java compatible pour exécuter votre fonction.Pour déployer la fonction qui enregistre les résultats dans Cloud Storage avec un déclencheur Cloud Pub/Sub, exécutez la commande suivante dans le répertoire contenant l'exemple de code (ou dans le cas de Java, le fichier
pom.xml
) :// LINT.IfChange(nodejs_version) // LINT.ThenChange(:nodejs_version_console_text) // LINT.IfChange(nodejs_version_console_text) // LINT.ThenChange(:nodejs_version // LINT.IfChange(nodejs_version) // LINT.ThenChange(:nodejs_version_console_text) // LINT.IfChange(nodejs_version_console_text) // LINT.thenChange(:nodejs_version)
Node.js
gcloud functions deploy ocr-save \ --gen2 \ --runtime=nodejs20 \ --region=
REGION
\ --source=. \ --entry-point=saveResult \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"Utilisez l'option
--runtime
pour spécifier l'ID d'exécution d'une version Node.js compatible pour exécuter votre fonction.Python
gcloud functions deploy ocr-save \ --gen2 \ --runtime=python312 \ --region=
REGION
\ --source=. \ --entry-point=save_result \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"Utilisez l'option
--runtime
pour spécifier l'ID d'exécution d'une version Python compatible pour exécuter votre fonction.Go
gcloud functions deploy ocr-save \ --gen2 \ --runtime=go121 \ --region=
REGION
\ --source=. \ --entry-point=save-result \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"Utilisez l'option
--runtime
pour spécifier l'ID d'exécution d'une version Go compatible pour exécuter votre fonction.Java
gcloud functions deploy ocr-save \ --gen2 \ --runtime=java17 \ --region=
REGION
\ --source=. \ --entry-point=functions.OcrSaveResult \ --memory=512MB \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"Utilisez l'option
--runtime
pour spécifier l'ID d'exécution d'une version Java compatible pour exécuter votre fonction.
Importer une image
Importez une image dans le bucket Cloud Storage approprié :
gsutil cp
PATH_TO_IMAGE
gs://YOUR_IMAGE_BUCKET_NAME
Où :
PATH_TO_IMAGE
est un chemin d'accès à un fichier image (contenant du texte) sur votre système local.YOUR_IMAGE_BUCKET_NAME
est le nom du bucket dans lequel vous importez des images.
Vous pouvez télécharger l'une des images de l'exemple de projet.
Consultez les journaux pour vous assurer que les exécutions sont terminées :
gcloud functions logs read --limit 100
Vous pouvez afficher les traductions enregistrées dans le bucket Cloud Storage que vous avez utilisé pour
YOUR_RESULT_BUCKET_NAME
.
Nettoyer
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Supprimer les fonctions Cloud Functions
La suppression de fonctions Cloud Functions ne supprime pas les ressources stockées dans Cloud Storage.
Pour supprimer les fonctions Cloud que vous avez créées dans ce tutoriel, exécutez les commandes suivantes :
gcloud functions delete ocr-extract gcloud functions delete ocr-translate gcloud functions delete ocr-save
Vous pouvez également supprimer des fonctions Cloud Functions à partir de la console Google Cloud.