Détecter une écriture manuscrite (OCR)

Reconnaissance optique des caractères (OCR)

L'API Vision peut détecter et extraire du texte à partir d'images :

  • DOCUMENT_TEXT_DETECTION extrait le texte d'une image. La réponse est optimisée pour les textes et les documents denses. Le JSON comprend des informations sur les pages, les blocs, les paragraphes, les mots et les blancs.

DOCUMENT_TEXT_DETECTION permet spécifiquement de détecter l'écriture manuscrite dans une image.

Exemples de code

Pour des exemples dans plusieurs langages de programmation, reportez-vous aux exemples suivants :

Requêtes de détection de document texte

Configurer votre authentification et votre projet GCP

Détecter une écriture manuscrite

Vous pouvez détecter l'écriture manuscrite d'une image en transmettant le chemin d'accès au fichier ou à l'URL publique de l'image à l'API Cloud Vision.

Commande curl

Pour exécuter une requête de détection d'écriture manuscrite à l'aide de curl à partir d'une ligne de commande Linux ou MacOS, envoyez une requête POST au point de terminaison https://vision.googleapis.com/v1/images:annotate et spécifiez DOCUMENT_TEXT_DETECTION comme valeur de features.type, comme illustré dans l'exemple suivant :

curl -X POST \
     -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
     -H "Content-Type: application/json; charset=utf-8" \
     --data "{
      'requests': [
        {
          'image': {
            'source': {
              'imageUri': 'gs://vision-api-handwriting-ocr-bucket/handwriting_image.png'
            }
          },
          'features': [
            {
              'type': 'DOCUMENT_TEXT_DETECTION'
            }
          ]
        }
      ]
    }" "https://vision.googleapis.com/v1/images:annotate"

Les images peuvent être transmises de trois manières différentes : en tant que chaîne codée en base64 (comme ci-dessus), en tant qu'URI Google Cloud Storage ou en tant qu'URI Web. Consultez la section Envoyer des requêtes pour plus d'informations.

Pour en savoir plus sur la configuration du corps de la requête, consultez la documentation de référence sur AnnotateImageRequest.

COMMANDE GCLOUD

Pour effectuer une analyse des entités, exécutez la commande gcloud ml vision detect-document, comme illustré dans l'exemple suivant :

gcloud ml vision detect-document "gs://vision-api-handwriting-ocr-bucket/handwriting_image.png"

PowerShell

Pour exécuter une requête de détection d'écriture manuscrite à l'aide de Windows PowerShell, envoyez une requête POST au point de terminaison https://vision.googleapis.com/v1/images:annotate et spécifiez DOCUMENT_TEXT_DETECTION comme valeur de features.type, comme illustré dans l'exemple suivant :

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
      'requests': [
        {
          'image': {
            'source': {
              'imageUri': 'gs://vision-api-handwriting-ocr-bucket/handwriting_image.png'
            }
          },
          'features': [
            {
              'type': 'DOCUMENT_TEXT_DETECTION'
            }
          ]
        }
      ]
    }" `
  -Uri "https://vision.googleapis.com/v1/images:annotate" | Select-Object -Expand Content

Les images peuvent être transmises de trois manières différentes : en tant que chaîne codée en base64, en tant qu'URI Google Cloud Storage, ou en tant qu'URL HTTPS ou HTTP accessible au public. Consultez la section Envoyer des requêtes pour plus d'informations.

Pour en savoir plus sur la configuration du corps de la requête, consultez la documentation de référence sur AnnotateImageRequest.

Réponse à la détection de document texte

Une réponse DOCUMENT_TEXT_DETECTION inclut des informations supplémentaires sur la mise en page, telles que des informations concernant les pages, les blocs, les paragraphes, les mots et les blancs, ainsi que des scores de confiance pour chacune d'entre elles. L'exemple ci-dessous est simplifié, la réponse d'un document dense étant trop longue pour être affichée sur cette page.

{
  "responses": [
    {
      "textAnnotations": [
        {
          "locale": "en",
          "description": "Google Cloud\nPlatform\n",
          "boundingPoly": {
            "vertices": [
              {
                "x": 312,
                "y": 95
              },
              {
                "x": 694,
                "y": 95
              },
              {
                "x": 694,
                "y": 253
              },
              {
                "x": 312,
                "y": 253
              }
            ]
          }
        },
        {
          "description": "Google",
          "boundingPoly": {
            "vertices": [
              {
                "x": 312,
                "y": 103
              },
              {
                "x": 530,
                "y": 99
              },
              {
                "x": 531,
                "y": 172
              },
              {
                "x": 313,
                "y": 176
              }
            ]
          }
        },
        {
          "description": "Cloud",
          "boundingPoly": {
            "vertices": [
              {
                "x": 602,
                "y": 97
              },
              {
                "x": 693,
                "y": 95
              },
              {
                "x": 694,
                "y": 168
              },
              {
                "x": 603,
                "y": 170
              }
            ]
          }
        },
        {
          "description": "Platform",
          "boundingPoly": {
            "vertices": [
              {
                "x": 429,
                "y": 190
              },
              {
                "x": 582,
                "y": 190
              },
              {
                "x": 582,
                "y": 253
              },
              {
                "x": 429,
                "y": 253
              }
            ]
          }
        }
      ],
      "fullTextAnnotation": {
        "pages": [
          {
            "property": {
              "detectedLanguages": [
                {
                  "languageCode": "en",
                  "confidence": 1
                }
              ]
            },
            "width": 850,
            "height": 550,
            "blocks": [
              {
                "boundingBox": {
                  "vertices": [
                    {
                      "x": 312,
                      "y": 103
                    },
                    {
                      "x": 693,
                      "y": 95
                    },
                    {
                      "x": 696,
                      "y": 250
                    },
                    {
                      "x": 315,
                      "y": 258
                    }
                  ]
                },
                "paragraphs": [
                  {
                    "boundingBox": {
                      "vertices": [
                        {
                          "x": 312,
                          "y": 103
                        },
                        {
                          "x": 693,
                          "y": 95
                        },
                        {
                          "x": 694,
                          "y": 168
                        },
                        {
                          "x": 313,
                          "y": 176
                        }
                      ]
                    },
                    "words": [
                      {
                        "property": {
                          "detectedLanguages": [
                            {
                              "languageCode": "en"
                            }
                          ]
                        },
                        "boundingBox": {
                          "vertices": [
                            {
                              "x": 312,
                              "y": 103
                            },
                            {
                              "x": 530,
                              "y": 99
                            },
                            {
                              "x": 531,
                              "y": 172
                            },
                            {
                              "x": 313,
                              "y": 176
                            }
                          ]
                        },
                        "symbols": [
                          {
                            "property": {
                              "detectedLanguages": [
                                {
                                  "languageCode": "en"
                                }
                              ]
                            },
                            "boundingBox": {
                              "vertices": [
                                {
                                  "x": 312,
                                  "y": 104
                                },
                                {
                                  "x": 371,
                                  "y": 103
                                },
                                {
                                  "x": 372,
                                  "y": 175
                                },
                                {
                                  "x": 313,
                                  "y": 176
                                }
                              ]
                            },
                            "text": "G",
                            "confidence": 0.99
                          },
                          ...
                        ],
                        "confidence": 0.99
                      },
                      {
                        "property": {
                          "detectedLanguages": [
                            {
                              "languageCode": "en"
                            }
                          ]
                        },
                        "boundingBox": {
                          "vertices": [
                            {
                              "x": 602,
                              "y": 97
                            },
                            {
                              "x": 693,
                              "y": 95
                            },
                            {
                              "x": 694,
                              "y": 168
                            },
                            {
                              "x": 603,
                              "y": 170
                            }
                          ]
                        },
                        "symbols": [
                          {
                            "property": {
                              "detectedLanguages": [
                                {
                                  "languageCode": "en"
                                }
                              ]
                            },
                            "boundingBox": {
                              "vertices": [
                                {
                                  "x": 602,
                                  "y": 98
                                },
                                {
                                  "x": 620,
                                  "y": 98
                                },
                                {
                                  "x": 621,
                                  "y": 170
                                },
                                {
                                  "x": 603,
                                  "y": 170
                                }
                              ]
                            },
                            "text": "C",
                            "confidence": 0.99
                          },
                          ...
                        ],
                        "confidence": 0.99
                      }
                    ],
                    "confidence": 0.99
                  },
                  {
                    "boundingBox": {
                      "vertices": [
                        {
                          "x": 429,
                          "y": 190
                        },
                        {
                          "x": 582,
                          "y": 190
                        },
                        {
                          "x": 582,
                          "y": 253
                        },
                        {
                          "x": 429,
                          "y": 253
                        }
                      ]
                    },
                    "words": [
                      {
                        "property": {
                          "detectedLanguages": [
                            {
                              "languageCode": "en"
                            }
                          ]
                        },
                        "boundingBox": {
                          "vertices": [
                            {
                              "x": 429,
                              "y": 190
                            },
                            {
                              "x": 582,
                              "y": 190
                            },
                            {
                              "x": 582,
                              "y": 253
                            },
                            {
                              "x": 429,
                              "y": 253
                            }
                          ]
                        },
                        "symbols": [
                          {
                            "property": {
                              "detectedLanguages": [
                                {
                                  "languageCode": "en"
                                }
                              ]
                            },
                            "boundingBox": {
                              "vertices": [
                                {
                                  "x": 429,
                                  "y": 190
                                },
                                {
                                  "x": 449,
                                  "y": 190
                                },
                                {
                                  "x": 449,
                                  "y": 253
                                },
                                {
                                  "x": 429,
                                  "y": 253
                                }
                              ]
                            },
                            "text": "P",
                            "confidence": 0.92
                          },
                          ...
                        ],
                        "confidence": 0.97
                      }
                    ],
                    "confidence": 0.97
                  }
                ],
                "blockType": "TEXT",
                "confidence": 0.98
              }
            ]
          }
        ],
        "text": "Google Cloud\nPlatform\n"
      }
    }
  ]
}

Spécifier la langue (facultatif)

Les deux types de requêtes de reconnaissance optique des caractères sont compatibles avec un ou plusieurs paramètres languageHints, qui spécifient la langue de tout texte dans l'image. Cependant, dans la plupart des cas, une valeur vide donne de meilleurs résultats, car elle active la détection automatique de la langue. Pour les langues basées sur l'alphabet latin, il n'est pas nécessaire de définir languageHints. Dans de rares cas, lorsque la langue du texte de l'image est connue, le réglage de ce paramètre aidera à obtenir de meilleurs résultats (bien que cela nuise fortement au fonctionnement du service si sa valeur est erronée). La détection de texte renvoie une erreur si une ou plusieurs des langues spécifiées ne font pas partie des langues compatibles.

Essayer

Essayez la détection de texte et la détection de document texte. Vous pouvez utiliser l'image déjà spécifiée (gs://vision-api-handwriting-ocr-bucket/handwriting_image.png) en cliquant sur Exécuter ou spécifier votre propre image à sa place.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Besoin d'aide ? Consultez notre page d'assistance.