Habilidades cognitivas OCR

A habilidade de reconhecimento óptico de caracteres (OCR) reconhece texto impresso e manuscrito em arquivos de imagem. Este artigo é a documentação de referência para a habilidade do OCR. Confira Extrair texto de imagens para obter as instruções de uso.

Uma habilidade do OCR usa os modelos de machine learning fornecidos pelo API do Azure AI Vision v3.2 nos serviços de IA do Azure. A habilidade OCR é mapeada para a seguinte funcionalidade:

A habilidade OCR extrai o texto de arquivos de imagem. Formatos de arquivo com suporte incluem:

  • .JPEG
  • .JPG
  • .PNG
  • .BMP
  • TIFF

Observação

Essa habilidade está associada aos serviços de IA do Azure e requer um recurso faturável para transações que excedem 20 documentos por indexador por dia. A execução de habilidades internas é cobrada pelo preço pago conforme o uso dos serviços de IA do Azure existentes.

Além disso, a extração de imagens é faturável pelo IA do Azure Search.

Parâmetros de habilidades

Os parâmetros diferenciam maiúsculas de minúsculas.

Nome do parâmetro Descrição
detectOrientation Detecta a orientação da imagem. Os valores válidos são true ou false.

Esse parâmetro só se aplica se a API de OCR versão 3.2 herdada for usada.
defaultLanguageCode Código de idioma do texto de entrada. Os idiomas com suporte incluem todos os idiomas disponíveis em geral da Visão de IA do Azure. Você também pode especificar unk (desconhecido).

Se o código de idioma não for especificado ou for nulo, o idioma será definido como inglês. Se o idioma estiver explicitamente definido como unk, todos os idiomas encontrados serão detectados e retornados automaticamente.
lineEnding O valor a ser usado como separador de linha. Valores possíveis: "Space", "CarriageReturn", "LineFeed". O padrão é "Space".

Nas versões anteriores, havia um parâmetro chamado "textExtractionAlgorithm" para especificar a extração de texto "impresso" ou "manuscrito". Esse parâmetro foi preterido porque o algoritmo atual da API de leitura extrai os dois tipos de texto de uma só vez. Se sua habilidade inclui esse parâmetro, você não precisa removê-lo, mas ele não será usado durante a execução da habilidade.

Entradas de habilidades

Nome de entrada Descrição
image Tipo complexo. Atualmente só funciona com o campo "/document/normalized_images" produzido pelo indexador de blobs do Azure quando imageAction é definido como um valor diferente de none.

Saídas de habilidades

Nome de saída Descrição
text Texto sem formatação extraído da imagem.
layoutText Tipo complexo que descreve o texto extraído e o local em que o texto foi encontrado.

Se você chamar o OCR em imagens inseridas em PDFs ou em outros arquivos de aplicativo, a saída do OCR estará na parte inferior da página, após qualquer texto que tiver sido extraído e processado.

Definição de exemplo

{
  "skills": [
    {
      "description": "Extracts text (plain and structured) from image.",
      "@odata.type": "#Microsoft.Skills.Vision.OcrSkill",
      "context": "/document/normalized_images/*",
      "defaultLanguageCode": null,
      "detectOrientation": true,
      "inputs": [
        {
          "name": "image",
          "source": "/document/normalized_images/*"
        }
      ],
      "outputs": [
        {
          "name": "text",
          "targetName": "myText"
        },
        {
          "name": "layoutText",
          "targetName": "myLayoutText"
        }
      ]
    }
  ]
}

Exemplo de saída de texto e layoutText

{
  "text": "Hello World. -John",
  "layoutText":
  {
    "language" : "en",
    "text" : "Hello World. -John",
    "lines" : [
      {
        "boundingBox":
        [ {"x":10, "y":10}, {"x":50, "y":10}, {"x":50, "y":30},{"x":10, "y":30}],
        "text":"Hello World."
      },
      {
        "boundingBox": [ {"x":110, "y":10}, {"x":150, "y":10}, {"x":150, "y":30},{"x":110, "y":30}],
        "text":"-John"
      }
    ],
    "words": [
      {
        "boundingBox": [ {"x":110, "y":10}, {"x":150, "y":10}, {"x":150, "y":30},{"x":110, "y":30}],
        "text":"Hello"
      },
      {
        "boundingBox": [ {"x":110, "y":10}, {"x":150, "y":10}, {"x":150, "y":30},{"x":110, "y":30}],
        "text":"World."
      },
      {
        "boundingBox": [ {"x":110, "y":10}, {"x":150, "y":10}, {"x":150, "y":30},{"x":110, "y":30}],
        "text":"-John"
      }
    ]
  }
}

Exemplo: mesclar texto extraído de imagens inseridas com o conteúdo do documento

A quebra de documentos, a primeira etapa na execução do conjunto de habilidades, separa o conteúdo de texto e de imagem. Um caso de uso comum para o Text Merger é a mesclagem da representação textual de imagens (texto de uma habilidade do OCR ou a legenda de uma imagem) no campo de conteúdo de um documento. Isso serve para cenários em que o documento de origem é um documento PDF ou Word que combina texto com imagens inseridas.

O conjunto de habilidades de exemplo a seguir cria um campo merged_text. Esse campo traz o conteúdo textual do documento e o texto processado para OCR de cada uma das imagens inseridas nesse documento.

Sintaxe de Corpo da Solicitação

{
  "description": "Extract text from images and merge with content text to produce merged_text",
  "skills":
  [
    {
      "description": "Extract text (plain and structured) from image.",
      "@odata.type": "#Microsoft.Skills.Vision.OcrSkill",
      "context": "/document/normalized_images/*",
      "defaultLanguageCode": "en",
      "detectOrientation": true,
      "inputs": [
        {
          "name": "image",
          "source": "/document/normalized_images/*"
        }
      ],
      "outputs": [
        {
          "name": "text"
        }
      ]
    },
    {
      "@odata.type": "#Microsoft.Skills.Text.MergeSkill",
      "description": "Create merged_text, which includes all the textual representation of each image inserted at the right location in the content field.",
      "context": "/document",
      "insertPreTag": " ",
      "insertPostTag": " ",
      "inputs": [
        {
          "name":"text",
          "source": "/document/content"
        },
        {
          "name": "itemsToInsert", 
          "source": "/document/normalized_images/*/text"
        },
        {
          "name":"offsets", 
          "source": "/document/normalized_images/*/contentOffset"
        }
      ],
      "outputs": [
        {
          "name": "mergedText", 
          "targetName" : "merged_text"
        }
      ]
    }
  ]
}

O exemplo de conjunto de qualificações acima presume que existe um campo de imagens normalizado. Para gerar esse campo, defina a configuração imageAction na definição do indexador para generateNormalizedImages conforme mostrado abaixo:

{
  //...rest of your indexer definition goes here ...
  "parameters": {
    "configuration": {
      "dataToExtract":"contentAndMetadata",
      "imageAction":"generateNormalizedImages"
    }
  }
}

Confira também