Détecter le texte dans les images

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 images à l'aide de la méthode d'API BatchAnnotateImages. Le service accepte les fichiers JPEG et PNG pour les images.

Cette page vous explique comment détecter du texte dans une image à 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 le texte des fichiers JPEG et PNG

La méthode BatchAnnotateImages détecte le texte d'un lot de fichiers JPEG ou PNG. 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 BatchAnnotateImages pour vos requêtes de détection de texte :

Champs du corps de la requête Description du champ
content Images contenant du texte à détecter. Vous fournissez la représentation en base64 (chaîne ASCII) de vos données d'image binaires.
type Le type de détection de texte dont vous avez besoin à partir de l'image.

Spécifiez l'une des deux fonctionnalités d'annotation :
  • TEXT_DETECTION détecte et extrait le texte de toute image. 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'une image, 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 de l'image, le réglage de ce paramètre améliore les résultats.

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

Envoyer une requête d'API

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 de reconnaissance optique des caractères à partir d'un script Python pour détecter le texte des fichiers JPEG ou PNG.

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

REST

Pour détecter du texte dans des images à 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": [
        {
          "image": {
            "content": BASE64_ENCODED_IMAGE
          },
          "features": [
            {
              "type": "FEATURE_TYPE"
            }
          ],
          "image_context": {
            "language_hints": [
              "LANGUAGE_HINT_1",
              "LANGUAGE_HINT_2",
              ...
            ]
          }
        }
      ]
    }
    EOF
    

    Remplacez les éléments suivants :

    • BASE64_ENCODED_IMAGE : représentation en base64 (chaîne ASCII) de vos données d'image binaires. 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 à partir de l'image. 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/images: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/images: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 une image, 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)
      image = {"content": "BASE64_ENCODED_IMAGE"}
      features = [{"type_": vision.Feature.Type.FEATURE_TYPE}]
      # Each requests element corresponds to a single image. To annotate more
      # images, create a request element for each image and add it to
      # the array of requests
      req = {"image": image, "features": features}
    
      metadata = [("x-goog-user-project", "projects/PROJECT_ID")]
    
      resp = vc.annotate_image(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_IMAGE : représentation en base64 (chaîne ASCII) de vos données d'image binaires. 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 à partir de l'image. 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 l'image :

    python SCRIPT_NAME
    

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