Détecter du texte dans des fichiers

Le service de reconnaissance optique des caractères (OCR) de Vertex AI sur Google Distributed Cloud (GDC) air-gapped détecte le texte dans les fichiers PDF et TIFF à l'aide des deux méthodes d'API suivantes :

Cette page vous explique comment détecter du texte dans des fichiers à l'aide de l'API OCR sur Distributed Cloud.

Avant de commencer

Pour pouvoir utiliser l'API OCR, vous devez disposer d'un projet pour lequel cette API est activée, ainsi que des identifiants appropriés. Vous pouvez également installer des bibliothèques clientes pour faciliter les appels à l'API. Pour en savoir plus, consultez Configurer un projet de reconnaissance de caractères.

Détecter du texte avec des requêtes intégrées

La méthode BatchAnnotateFiles détecte le texte d'un lot de fichiers PDF ou TIFF. Vous envoyez directement le fichier à partir duquel vous souhaitez détecter du texte en tant que contenu dans la requête API. Le système renvoie le texte détecté au format JSON dans la réponse de l'API.

Vous devez spécifier des valeurs pour les champs du corps JSON de votre requête API. Le tableau suivant décrit les champs du corps de la requête que vous devez fournir lorsque vous utilisez la méthode d'API BatchAnnotateFiles pour vos requêtes de détection de texte :

Champs du corps de la requête Description du champ
content Fichiers contenant le texte à détecter. Vous fournissez la représentation en base64 (chaîne ASCII) du contenu de votre fichier binaire.
mime_type Type de fichier source. Vous devez définir l'une des valeurs suivantes :
  • application/pdf pour les fichiers PDF
  • image/tiff pour les fichiers TIFF
type Type de détection de texte dont vous avez besoin à partir du fichier.

Spécifiez l'une des deux fonctionnalités d'annotation :
  • TEXT_DETECTION détecte et extrait le texte de tout fichier. La réponse JSON inclut la chaîne extraite, les mots individuels et leurs cadres de délimitation.
  • DOCUMENT_TEXT_DETECTION extrait également le texte d'un fichier, mais le service optimise la réponse pour les textes et les documents denses. Le fichier JSON comprend des informations sur les pages, les blocs, les paragraphes, les mots et les blancs.
Pour en savoir plus sur ces fonctionnalités d'annotation, consultez Fonctionnalités de reconnaissance optique de caractères.
language_hints Facultatif. Liste des langues à utiliser pour la détection de texte.

Le système interprète une valeur vide pour ce champ comme une détection automatique de la langue.

Vous n'avez pas besoin de définir le champ language_hints pour les langues basées sur l'alphabet latin.

Si vous connaissez la langue du texte dans le fichier, le réglage de ce paramètre améliore les résultats.
pages Facultatif. Nombre de pages du fichier à traiter pour la détection de texte.

Vous pouvez spécifier un maximum de cinq pages. Si vous ne spécifiez pas le nombre de pages, le service traite les cinq premières pages du fichier.

Pour en savoir plus sur la représentation JSON complète, consultez AnnotateFileRequest.

Envoyer une requête API intégrée

Envoyez une requête à l'API pré-entraînée OCR à l'aide de la méthode de l'API REST. Sinon, interagissez avec l'API pré-entraînée OCR à partir d'un script Python pour détecter le texte des fichiers PDF ou TIFF.

Les exemples suivants montrent comment détecter du texte dans un fichier à l'aide de l'OCR :

REST

Pour détecter du texte dans des fichiers à l'aide de la méthode de l'API REST, procédez comme suit :

  1. Enregistrez le fichier request.json suivant pour le corps de votre requête :

    cat <<- EOF > request.json
    {
      "requests": [
        {
          "input_config": {
            "content": BASE64_ENCODED_FILE,
            "mime_type": "application/pdf"
          },
          "features": [
            {
              "type": "FEATURE_TYPE"
            }
          ],
          "image_context": {
            "language_hints": [
              "LANGUAGE_HINT_1",
              "LANGUAGE_HINT_2",
              ...
            ]
          },
          "pages": []
        }
      ]
    }
    EOF
    

    Remplacez les éléments suivants :

    • BASE64_ENCODED_FILE : représentation en base64 (chaîne ASCII) du contenu de votre fichier binaire. Cette chaîne commence par des caractères qui ressemblent à /9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==.
    • FEATURE_TYPE : type de détection de texte dont vous avez besoin dans le fichier. Les valeurs autorisées sont TEXT_DETECTION ou DOCUMENT_TEXT_DETECTION.
    • LANGUAGE_HINT : balises de langue BCP-47 à utiliser comme indices de langue pour la détection de texte, par exemple en-t-i0-handwrit. Ce champ est facultatif. Si vous ne saisissez aucune valeur, le système interprète cela comme une détection automatique de la langue.
  2. Obtenez un jeton d'authentification.

  3. Envoyez la demande :

    curl

    curl -X POST \
      -H "Authorization: Bearer TOKEN" \
      -H "x-goog-user-project: projects/PROJECT_ID" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
      https://ENDPOINT/v1/files:annotate
    

    Remplacez les éléments suivants :

    PowerShell

    $headers = @{
      "Authorization" = "Bearer TOKEN"
      "x-goog-user-project" = "projects/PROJECT_ID"
    }
    
    Invoke-WebRequest
      -Method POST
      -Headers $headers
      -ContentType: "application/json; charset=utf-8"
      -InFile request.json
      -Uri "ENDPOINT/v1/files:annotate" | Select-Object -Expand Content
    

    Remplacez les éléments suivants :

Python

Pour utiliser le service OCR à partir d'un script Python afin de détecter du texte dans un fichier, procédez comme suit :

  1. Installez la dernière version de la bibliothèque cliente OCR.

  2. Définissez les variables d'environnement requises dans un script Python.

  3. Authentifiez votre requête API.

  4. Ajoutez le code suivant au script Python que vous avez créé :

    from google.cloud import vision
    import google.auth
    from google.auth.transport import requests
    from google.api_core.client_options import ClientOptions
    
    audience = "https://ENDPOINT:443"
    api_endpoint="ENDPOINT:443"
    
    def vision_client(creds):
      opts = ClientOptions(api_endpoint=api_endpoint)
      return vision.ImageAnnotatorClient(credentials=creds, client_options=opts)
    
    def main():
      creds = None
      try:
        creds, project_id = google.auth.default()
        creds = creds.with_gdch_audience(audience)
        req = requests.Request()
        creds.refresh(req)
        print("Got token: ")
        print(creds.token)
      except Exception as e:
        print("Caught exception" + str(e))
        raise e
      return creds
    
    def vision_func(creds):
      vc = vision_client(creds)
      input_config = {"content": "BASE64_ENCODED_FILE"}
      features = [{"type_": vision.Feature.Type.FEATURE_TYPE}]
      # Each requests element corresponds to a single file. To annotate more
      # files, create a request element for each file and add it to
      # the array of requests
      req = {"input_config": input_config, "features": features}
    
      metadata = [("x-goog-user-project", "projects/PROJECT_ID")]
    
      resp = vc.annotate_file(req,metadata=metadata)
    
      print(resp)
    
    if __name__=="__main__":
      creds = main()
      vision_func(creds)
    

    Remplacez les éléments suivants :

    • ENDPOINT : point de terminaison OCR que vous utilisez pour votre organisation. Pour en savoir plus, consultez l'état et les points de terminaison du service.
    • BASE64_ENCODED_FILE : représentation en base64 (chaîne ASCII) du contenu de votre fichier. Cette chaîne commence par des caractères qui ressemblent à /9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q==.
    • FEATURE_TYPE : type de détection de texte dont vous avez besoin dans le fichier. Les valeurs autorisées sont TEXT_DETECTION ou DOCUMENT_TEXT_DETECTION.
    • PROJECT_ID : ID de votre projet.
  5. Enregistrez le script Python.

  6. Exécutez le script Python pour détecter le texte dans le fichier :

    python SCRIPT_NAME
    

    Remplacez SCRIPT_NAME par le nom que vous avez donné à votre script Python, par exemple vision.py.

Détecter du texte avec des requêtes hors connexion

La méthode AsyncBatchAnnotateFiles détecte le texte d'un lot de fichiers PDF ou TIFF en effectuant une requête hors connexion (asynchrone). Les fichiers peuvent contenir plusieurs pages et plusieurs images par page. Les fichiers sources doivent se trouver dans un bucket de stockage de votre projet Distributed Cloud. Le système enregistre le texte détecté au format JSON dans un bucket de stockage.

Le service OCR lance le traitement hors connexion et renvoie l'ID du processus de longue durée qui effectue la détection de texte dans le fichier. Vous pouvez utiliser l'ID renvoyé pour suivre l'état du traitement hors connexion. Si le nombre d'opérations en cours est trop élevé, le traitement hors connexion peut ne pas démarrer immédiatement.

Vous devez spécifier des valeurs pour les champs du corps JSON de votre requête API. Le tableau suivant décrit les champs du corps de la requête que vous devez fournir lorsque vous utilisez la méthode d'API AsyncBatchAnnotateFiles pour vos requêtes de détection de texte :

Champs du corps de la requête Description du champ
s3_source.uri Chemin d'accès URI vers un fichier source valide (PDF ou TIFF) dans un bucket de stockage de votre projet Distributed Cloud.

Ce fichier contient le texte que vous souhaitez détecter.

L'utilisateur ou le compte de service demandeur doit au moins disposer des droits en lecture sur le fichier.
mime_type Type de fichier source. Vous devez définir l'une des valeurs suivantes :
  • application/pdf pour les fichiers PDF
  • image/tiff pour les fichiers TIFF
type Type de détection de texte dont vous avez besoin à partir du fichier.

Spécifiez l'une des deux fonctionnalités d'annotation :
  • TEXT_DETECTION détecte et extrait le texte de tout fichier. La réponse JSON inclut la chaîne extraite, les mots individuels et leurs cadres de délimitation.
  • DOCUMENT_TEXT_DETECTION extrait également le texte d'un fichier, mais le service optimise la réponse pour les textes et les documents denses. Le fichier JSON comprend des informations sur les pages, les blocs, les paragraphes, les mots et les blancs.
Pour en savoir plus sur ces fonctionnalités d'annotation, consultez Fonctionnalités de reconnaissance optique de caractères.
s3_destination.uri Chemin d'accès URI vers un bucket de stockage de votre projet Distributed Cloud pour enregistrer les fichiers de sortie.

Il s'agit de l'emplacement où vous souhaitez stocker les résultats de la détection.

L'utilisateur ou le compte de service à l'origine de la requête doit disposer d'autorisations en écriture sur le bucket.

Stocker le fichier source dans un bucket de stockage

Avant d'envoyer une requête, vous devez vous assurer que le compte de service OCR dispose des autorisations de lecture pour votre bucket d'entrée et d'écriture pour votre bucket de sortie.

Les buckets d'entrée et de sortie peuvent être différents et se trouver dans des espaces de noms de projets différents. Nous vous recommandons d'utiliser les mêmes buckets d'entrée et de sortie pour éviter les erreurs, par exemple en stockant les résultats dans des buckets incorrects.

Pour stocker le fichier à partir duquel vous souhaitez détecter du texte dans un bucket de stockage, procédez comme suit :

  1. Configurez la gcloud CLI pour le stockage d'objets.
  2. Créez un bucket de stockage dans l'espace de noms de votre projet. Utilisez une classe de stockage Standard.

    Vous pouvez créer le bucket de stockage en déployant une ressource Bucket dans l'espace de noms du projet :

    apiVersion: object.gdc.goog/v1
    kind: Bucket
    metadata:
      name: ocr-async-bucket
      namespace: PROJECT_NAMESPACE
    spec:
      description: bucket for async ocr
      storageClass: Standard
      bucketPolicy:
        lockingPolicy:
          defaultObjectRetentionDays: 90
    
  3. Accordez les autorisations read et write sur le bucket au compte de service (g-vai-ocr-sie-sa) utilisé par le service OCR.

    Vous pouvez suivre ces étapes pour créer le rôle et l'association de rôle à l'aide de ressources personnalisées :

    1. Créez le rôle en déployant une ressource Role dans l'espace de noms du projet :

        apiVersion: rbac.authorization.k8s.io/v1
        kind: Role
        metadata:
          name: ocr-async-reader-writer
          namespace: PROJECT_NAMESPACE
        rules:
          -
            apiGroups:
              - object.gdc.goog
            resources:
              - buckets
            verbs:
              - read-object
              - write-object
      
    2. Créez la liaison de rôle en déployant une ressource RoleBinding dans l'espace de noms du projet :

        apiVersion: rbac.authorization.k8s.io/v1
        kind: RoleBinding
      
        metadata:
          name: ocr-async-reader-writer-rolebinding
          namespace: PROJECT_NAMESPACE
        roleRef:
          apiGroup: rbac.authorization.k8s.io
          kind: Role
          name: ocr-async-reader-writer
        subjects:
          -
            kind: ServiceAccount
            name: g-vai-ocr-sie-sa
            namespace: g-vai-ocr-sie
      
  4. Importez votre fichier dans le bucket de stockage que vous avez créé. Pour en savoir plus, consultez Importer et télécharger des objets de stockage dans des projets.

Envoyer une requête API hors connexion

Envoyez une requête à l'API pré-entraînée OCR à l'aide de la méthode de l'API REST. Sinon, interagissez avec l'API pré-entraînée OCR à partir d'un script Python pour détecter le texte des fichiers PDF ou TIFF.

Les exemples suivants montrent comment détecter du texte dans un fichier à l'aide de l'OCR :

REST

Pour détecter du texte dans des fichiers à l'aide de la méthode de l'API REST, procédez comme suit :

  1. Enregistrez le fichier request.json suivant pour le corps de votre requête :

    cat <<- EOF > request.json
    {
      "parent": PROJECT_ID,
      "requests":[
        {
          "input_config": {
            "s3_source": {
              "uri": "SOURCE_FILE"
            },
            "mime_type": "application/pdf"
          },
          "features": [
            {
              "type": "FEATURE_TYPE"
            }
          ],
          "output_config": {
            "s3_destination": {
              "uri": "DESTINATION_BUCKET"
            }
          }
        }
      ]
    }
    EOF
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • SOURCE_FILE : chemin d'accès URI à un fichier source valide (PDF ou TIFF) dans un bucket de stockage de votre projet Distributed Cloud.
    • FEATURE_TYPE : type de détection de texte dont vous avez besoin dans le fichier. Les valeurs autorisées sont TEXT_DETECTION ou DOCUMENT_TEXT_DETECTION.
    • DESTINATION_BUCKET : chemin d'accès URI à un bucket de stockage de votre projet Distributed Cloud pour enregistrer les fichiers de sortie.
  2. Obtenez un jeton d'authentification.

  3. Envoyez la demande :

    curl

    curl -X POST \
      -H "Authorization: Bearer TOKEN" \
      -H "x-goog-user-project: projects/PROJECT_ID" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
      https://ENDPOINT/v1/files:asyncBatchAnnotate
    

    Remplacez les éléments suivants :

    PowerShell

    $headers = @{
      "Authorization" = "Bearer TOKEN"
      "x-goog-user-project" = "projects/PROJECT_ID"
    }
    
    Invoke-WebRequest
      -Method POST
      -Headers $headers
      -ContentType: "application/json; charset=utf-8"
      -InFile request.json
      -Uri "ENDPOINT/v1/files:asyncBatchAnnotate" | Select-Object -Expand Content
    

    Remplacez les éléments suivants :

Python

Pour utiliser le service OCR à partir d'un script Python afin de détecter du texte dans un fichier, procédez comme suit :

  1. Installez la dernière version de la bibliothèque cliente OCR.

  2. Définissez les variables d'environnement requises dans un script Python.

  3. Authentifiez votre requête API.

  4. Ajoutez le code suivant au script Python que vous avez créé :

    from google.cloud import vision
    import google.auth
    from google.auth.transport import requests
    from google.api_core.client_options import ClientOptions
    
    audience = "https://ENDPOINT:443"
    api_endpoint="ENDPOINT:443"
    
    def vision_func_async(creds):
      vc = vision_client(creds)
      features = [{"type_": vision.Feature.Type.FEATURE_TYPE}]
      input_config = {"s3_source":{"uri":SOURCE_FILE},"mime_type": "application/pdf"}
      output_config = {"s3_destination": {"uri": DESTINATION_BUKET}}
      req = {"input_config": input_config, "output_config": output_config, "features":features}
      reqs = {"requests":[req],"parent":PROJECT_ID}
    
      metadata = [("x-goog-user-project", "projects/PROJECT_ID")]
    
      operation = vc.async_batch_annotate_files(request=reqs, metadata=metadata)
      lro = operation.operation
      resp = operation.result()
    
    def main():
      creds = None
      try:
        creds, project_id = google.auth.default()
        creds = creds.with_gdch_audience(audience)
        req = requests.Request()
        creds.refresh(req)
        print("Got token: ")
        print(creds.token)
      except Exception as e:
        print("Caught exception" + str(e))
        raise e
      return creds
    
    if __name__=="__main__":
      creds = main()
      vision_func_async(creds)
    

    Remplacez les éléments suivants :

    • ENDPOINT : point de terminaison OCR que vous utilisez pour votre organisation. Pour en savoir plus, consultez l'état et les points de terminaison du service.
    • FEATURE_TYPE : type de détection de texte dont vous avez besoin dans le fichier. Les valeurs autorisées sont TEXT_DETECTION ou DOCUMENT_TEXT_DETECTION.
    • SOURCE_FILE : chemin d'accès URI à un fichier source valide (PDF ou TIFF) dans un bucket de stockage de votre projet Distributed Cloud.
    • DESTINATION_BUCKET : chemin d'accès URI à un bucket de stockage de votre projet Distributed Cloud pour enregistrer les fichiers de sortie.
    • PROJECT_ID : ID de votre projet.
  5. Enregistrez le script Python.

  6. Exécutez le script Python pour détecter le texte dans le fichier :

    python SCRIPT_NAME
    

    Remplacez SCRIPT_NAME par le nom que vous avez donné à votre script Python, par exemple vision.py.

Vous pouvez utiliser le nom de l'opération renvoyé par la méthode AsyncBatchAnnotateFiles pour vérifier l'état de l'opération.

Obtenir l'état de l'opération

La méthode get renvoie le dernier état d'une opération de longue durée, comme la requête hors connexion pour la détection de texte. Utilisez cette méthode pour vérifier l'état de l'opération, comme dans l'exemple suivant :

curl -X GET "http://ENDPOINT/v1/OPERATION_NAME"

Remplacez OPERATION_NAME par le nom d'opération renvoyé par la méthode AsyncBatchAnnotateFiles lorsque vous avez effectué la requête hors connexion.

Répertorier les opérations

La méthode list renvoie la liste des opérations qui correspondent à un filtre spécifié dans la requête. La méthode peut renvoyer des opérations à partir d'un projet spécifique. Pour appeler la méthode list, spécifiez l'ID de votre projet et le point de terminaison OCR, comme dans l'exemple suivant :

curl -X GET "http://ENDPOINT/v1/PROJECT_ID?page_size=10"