Detecta escritura a mano (OCR)

Reconocimiento óptico de caracteres (OCR)

La API de Vision permite detectar y extraer texto de las imágenes:

  • DOCUMENT_TEXT_DETECTION extrae el texto de una imagen; la respuesta se optimiza para textos densos y documentos. JSON incluye la información de la página, del bloque, del párrafo, la palabra y la ruptura.

Un uso específico de DOCUMENT_TEXT_DETECTION es detectar escritura a mano en una imagen.

Muestras de código

Para obtener muestras en varios lenguajes de programación, consulta:

Solicitudes de detección de texto en documentos

Configura tu proyecto de GCP y la autenticación

Detecta escritura a mano

Puedes detectar escritura a mano en una imagen si pasas la ruta de acceso de archivo de la imagen o la URL pública a la API de Cloud Vision.

Comando curl

Para realizar una solicitud de detección de escritura a mano con curl desde la línea de comandos Linux o MacOS, envía una solicitud POST al extremo https://vision.googleapis.com/v1/images:annotate y especifica DOCUMENT_TEXT_DETECTION como el valor de features.type, como se muestra en el siguiente ejemplo:

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"

Las imágenes se pueden pasar en una de tres maneras: como una string codificada en base64 (como se mostró antes); como un URI web o de Google Cloud Storage. Consulta Realiza solicitudes para obtener más información.

Consulta la documentación de referencia de AnnotateImageRequest para obtener más información sobre cómo configurar el cuerpo de la solicitud.

COMANDO DE GCLOUD

Para realizar el análisis de entidades, usa el comando gcloud ml vision detect-document como se muestra en el siguiente ejemplo:

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

PowerShell

Para realizar una solicitud de detección de escritura a mano con Windows PowerShell, envía una solicitud de POST al extremo https://vision.googleapis.com/v1/images:annotate y especifica DOCUMENT_TEXT_DETECTION como el valor de features.type, como se muestra en el siguiente ejemplo:

$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

Las imágenes se pueden pasar en una de tres maneras: como una string codificada en base64; como un URI de Google Cloud Storage o como una URL HTTP o HTTPS de acceso público. Consulta Realiza solicitudes para obtener más información.

Consulta la documentación de referencia de AnnotateImageRequest para obtener más información sobre cómo configurar el cuerpo de la solicitud.

Respuesta de detección de texto en documentos

Una respuesta DOCUMENT_TEXT_DETECTION incluye la información de diseño adicional, como la información de la página, del bloque, del párrafo, la palabra y la ruptura. (En la muestra a continuación, se usa un ejemplo simplificado; la respuesta de un documento denso es demasiado extensa para mostrar en esta página).

{
  "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"
      }
    }
  ]
}

Especifica el idioma (opcional)

Ambos tipos de solicitudes OCR son compatibles con uno o más languageHints que especifican el idioma de cualquier texto en la imagen. Sin embargo, en la mayoría de los casos, un valor vacío obtiene mejores resultados, ya que permite la detección automática del idioma. Para los idiomas que se basan en el alfabeto latino, no es necesario configurar languageHints. En casos excepcionales, cuando se conoce el idioma del texto en la imagen, establecer una sugerencia ayudará a obtener mejores resultados (aunque será un impedimento importante si la sugerencia no es correcta). La detección de texto muestra un error si uno o más de los idiomas especificados no es uno de los idiomas compatibles.

Pruébala

Prueba la detección de texto y la detección de texto en documentos continuación. Puedes usar la imagen ya especificada (gs://vision-api-handwriting-ocr-bucket/handwriting_image.png) si haces clic en Ejecutar o puedes especificar tu propia imagen en su lugar.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

API de Cloud Vision
Si necesitas ayuda, visita nuestra página de asistencia.