Tutorial: Carregar e analisar um ficheiro com Funções do Azure e Armazenamento de Blobs

Neste tutorial, irá aprender a carregar uma imagem para Armazenamento de Blobs do Azure e processá-la com Funções do Azure e Imagem Digitalizada. Também irá aprender a implementar acionadores e enlaces da Função do Azure como parte deste processo. Em conjunto, estes serviços irão analisar uma imagem carregada que contém texto, extrair o texto do mesmo e, em seguida, armazenar o texto numa linha de base de dados para análise posterior ou outros fins.

Armazenamento de Blobs do Azure é a solução de armazenamento de objetos dimensionável massivamente dimensionável da Microsoft para a cloud. O Armazenamento de Blobs foi concebido para armazenar imagens e documentos, transmitir ficheiros multimédia de transmissão em fluxo, gerir dados de cópia de segurança e arquivo e muito mais. Pode ler mais sobre o Armazenamento de Blobs na página de descrição geral.

Funções do Azure é uma solução de computador sem servidor que lhe permite escrever e executar pequenos blocos de código como funções altamente dimensionáveis, sem servidor e condicionadas por eventos. Pode ler mais sobre Funções do Azure na página de descrição geral.

Neste tutorial, vai aprender a:

  • Carregar imagens e ficheiros para o Armazenamento de Blobs
  • Utilizar um acionador de eventos da Função do Azure para processar dados carregados para o Armazenamento de Blobs
  • Utilizar os serviços de IA do Azure para analisar uma imagem
  • Escrever dados no Armazenamento de Tabelas com enlaces de saída da Função do Azure

Pré-requisitos

Criar a conta de armazenamento e o contentor

O primeiro passo é criar a conta de armazenamento que irá conter os dados de blobs carregados, que neste cenário serão imagens que contêm texto. Uma conta de armazenamento oferece vários serviços diferentes, mas este tutorial utiliza o Armazenamento de Blobs e o Armazenamento de Tabelas.

Inicie sessão no portal do Azure.

  1. Na barra de pesquisa na parte superior do portal, procure Armazenamento e selecione o resultado com o nome Contas de armazenamento.

  2. Na página Contas de armazenamento , selecione + Criar no canto superior esquerdo.

  3. Na página Criar uma conta de armazenamento , introduza os seguintes valores:

    • Subscrição: escolha a subscrição pretendida.
    • Grupo de Recursos: selecione Criar novo , introduza um nome de msdocs-storage-functione, em seguida, selecione OK.
    • Nome da conta de armazenamento: introduza um valor de msdocsstoragefunction. O nome da conta de armazenamento tem de ser exclusivo em todo o Azure, pelo que poderá ter de adicionar números após o nome, como msdocsstoragefunction123.
    • Região: selecione a região mais próxima de si.
    • Desempenho: selecione Standard.
    • Redundância: deixe o valor predefinido selecionado.

    Uma captura de ecrã a mostrar como criar uma conta de armazenamento no Azure.

  4. Selecione Rever + Criar na parte inferior e o Azure validará as informações que introduziu. Assim que as definições forem validadas, selecione Criar e o Azure começará a aprovisionar a conta de armazenamento, o que poderá demorar algum tempo.

Criar o contentor

  1. Depois de a conta de armazenamento ser aprovisionada, selecione Ir para Recurso. O próximo passo é criar um contentor de armazenamento dentro da conta para armazenar imagens carregadas para análise.

  2. No painel de navegação, selecione Contentores.

  3. Na página Contentores , selecione + Contentor na parte superior. No painel de deslize para fora, introduza um Nome da análise de imagens e certifique-se de que o nível de acesso público está definido como Blob (acesso de leitura anónimo apenas para blobs). Em seguida, selecione Criar.

    Uma captura de ecrã a mostrar como criar um novo contentor de armazenamento.

Deverá ver o novo contentor a aparecer na lista de contentores.

Obter a cadeia de ligação

O último passo é obter a nossa cadeia de ligação para a conta de armazenamento.

  1. No painel de navegação esquerdo, selecione Chaves de Acesso.

  2. Na página Chaves de Acesso, selecione Mostrar chaves. Copie o valor da Cadeia de Ligação na secção key1 e cole-o algures para utilizar mais tarde. Também vai querer tomar nota do nome msdocsstoragefunction da conta de armazenamento para mais tarde.

    Uma captura de ecrã a mostrar como aceder ao contentor de armazenamento.

Estes valores serão necessários quando precisarmos de ligar a nossa Função do Azure a esta conta de armazenamento.

Criar o serviço Imagem Digitalizada

Em seguida, crie a conta de serviço Imagem Digitalizada que irá processar os nossos ficheiros carregados. Imagem Digitalizada faz parte dos serviços de IA do Azure e oferece uma variedade de funcionalidades para extrair dados de imagens. Pode saber mais sobre Imagem Digitalizada na página de descrição geral.

  1. Na barra de pesquisa na parte superior do portal, procure Computador e selecione o resultado com o nome Imagem digitalizada.

  2. Na página Imagem digitalizada, selecione + Criar.

  3. Na página Criar Imagem Digitalizada, introduza os seguintes valores:

    • Subscrição: escolha a subscrição pretendida.
    • Grupo de Recursos: utilize o msdocs-storage-function grupo de recursos que criou anteriormente.
    • Região: selecione a região mais próxima de si.
    • Nome: introduza um nome de msdocscomputervision.
    • Escalão de Preço: selecione Gratuito se estiver disponível, caso contrário, selecione Standard S1.
    • Selecione a caixa Aviso de IA Responsável se concordar com os termos

    Uma captura de ecrã a mostrar como criar um novo serviço Imagem Digitalizada.

  4. Selecione Rever + Criar na parte inferior. O Azure irá demorar algum tempo a validar as informações que introduziu. Assim que as definições forem validadas, selecione Criar e o Azure começará a aprovisionar o serviço Imagem Digitalizada, o que poderá demorar algum tempo.

  5. Quando a operação estiver concluída, selecione Ir para Recurso.

Obter as chaves

Em seguida, temos de encontrar a chave secreta e o URL do ponto final para o serviço de Imagem Digitalizada utilizar na nossa aplicação de Funções do Azure.

  1. Na página de descrição geral Imagem Digitalizada, selecione Chaves e Ponto Final.

  2. Na página Chaves e Ponto Final , copie o valor chave 1 e os valores do Ponto Final e cole-os algures para utilizar mais tarde.

    Uma captura de ecrã a mostrar como obter o Ponto Final de Chaves e URL de um serviço Imagem Digitalizada.

Transferir e configurar o projeto de exemplo

O código da Função do Azure utilizado neste tutorial pode ser encontrado neste repositório do GitHub. Também pode clonar o projeto com o comando abaixo.

git clone https://github.com/Azure-Samples/msdocs-storage-bind-function-service.git \
cd msdocs-storage-bind-function-service/dotnet

O código de projeto de exemplo realiza as seguintes tarefas:

  • Obtém variáveis de ambiente para ligar à conta de armazenamento e ao serviço Imagem Digitalizada
  • Aceita o ficheiro carregado como um parâmetro de blob
  • Analisa o blob com o serviço Imagem Digitalizada
  • Envia o texto da imagem analisado para uma nova linha de tabela com enlaces de saída

Depois de transferir e abrir o projeto, existem alguns conceitos essenciais a compreender no método principal Run mostrado abaixo. A função do Azure utiliza enlaces de Acionador e Saída, que são aplicados com atributos na assinatura do Run método.

O Table atributo utiliza dois parâmetros. O primeiro parâmetro especifica o nome da tabela para escrever o valor de texto da imagem analisada devolvido pela função. O segundo Connection parâmetro extrai uma cadeia de ligação do Armazenamento de Tabelas das variáveis de ambiente para que a nossa função do Azure tenha acesso à mesma.

O BlobTrigger atributo é utilizado para vincular a nossa função ao evento de carregamento no Armazenamento de Blobs e fornece o blob carregado para a Run função. O acionador de blobs tem dois parâmetros próprios: um para o nome do contentor de blobs a monitorizar para carregamentos e outro para a cadeia de ligação da nossa conta de armazenamento novamente.

// Azure Function name and output Binding to Table Storage
[FunctionName("ProcessImageUpload")]
[return: Table("ImageText", Connection = "StorageConnection")]
// Trigger binding runs when an image is uploaded to the blob container below
public async Task<ImageContent> Run([BlobTrigger("imageanalysis/{name}", 
        Connection = "StorageConnection")]Stream myBlob, string name, ILogger log)
{
    // Get connection configurations
    string subscriptionKey = Environment.GetEnvironmentVariable("ComputerVisionKey");
    string endpoint = Environment.GetEnvironmentVariable("ComputerVisionEndpoint");
    string imgUrl = $"https://{ Environment.GetEnvironmentVariable("StorageAccountName")}
                        .blob.core.windows.net/imageanalysis/{name}";

    ComputerVisionClient client = new ComputerVisionClient(
        new ApiKeyServiceClientCredentials(subscriptionKey)) { Endpoint = endpoint };

    // Get the analyzed image contents
    var textContext = await AnalyzeImageContent(client, imgUrl);

    return new ImageContent { 
        PartitionKey = "Images",
        RowKey = Guid.NewGuid().ToString(), Text = textContext 
    };
}

public class ImageContent
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Text { get; set; }
}

Este código também obtém valores de configuração essenciais de variáveis de ambiente, como a cadeia de ligação da conta de armazenamento e Imagem Digitalizada chave. Vamos adicionar estas variáveis de ambiente ao nosso ambiente da Função do Azure depois de serem implementadas.

A ProcessImage função também utiliza um segundo método chamado AnalyzeImage, visto abaixo. Este código utiliza o Ponto Final do URL e a Chave da nossa conta de Imagem Digitalizada para fazer um pedido a esse servidor para processar a nossa imagem. O pedido devolverá todo o texto detetado na imagem, que será escrito no Armazenamento de Tabelas com o enlace de saída no Run método.

static async Task<string> ReadFileUrl(ComputerVisionClient client, string urlFile)
{
    // Analyze the file using Computer Vision Client
    var textHeaders = await client.ReadAsync(urlFile);
    string operationLocation = textHeaders.OperationLocation;
    Thread.Sleep(2000);
    
    // Complete code omitted for brevity, view in sample project
    
    return text.ToString();
}

Em execução localmente

Se quiser executar o projeto localmente, pode preencher as variáveis de ambiente com o ficheiro local.settings.json. Dentro deste ficheiro, preencha os valores do marcador de posição com os valores que guardou anteriormente ao criar os recursos do Azure.

Embora o código da Função do Azure seja executado localmente, continuará a ligar-se aos serviços em direto no Azure, em vez de utilizar emuladores locais.

{
    "IsEncrypted": false,
    "Values": {
      "AzureWebJobsStorage": "UseDevelopmentStorage=true",
      "FUNCTIONS_WORKER_RUNTIME": "dotnet",
      "StorageConnection": "your-storage-account-connection-string",
      "StorageAccountName": "your-storage-account-name",
      "ComputerVisionKey": "your-computer-vision-key",
      "ComputerVisionEndPoint":  "your-computer-vision-endpoint"
    }
}

Implementar o código no Funções do Azure

Está agora pronto para implementar a nossa aplicação no Azure com o Visual Studio. Também pode criar a aplicação Funções do Azure no Azure ao mesmo tempo que faz parte do processo de implementação.

  1. Para começar, selecione o nó do projeto ProcessImage e selecione Publicar.

  2. No ecrã De diálogo Publicar , selecione Azure e selecione Seguinte.

    Uma captura de ecrã a mostrar como selecionar o Azure como o destino da implementação.

  3. Selecione Aplicação de Funções do Azure (Windows) ou Aplicação de Funções do Azure (Linux) no ecrã seguinte e, em seguida, selecione Seguinte novamente.

    Uma captura de ecrã a mostrar como escolher Funções do Azure como um destino de implementação específico.

  4. No passo da instância das Funções , certifique-se de que escolhe a subscrição para a qual pretende implementar. Em seguida, selecione o símbolo verde + no lado direito da caixa de diálogo.

  5. Será aberta uma nova caixa de diálogo. Introduza os seguintes valores para a nova Aplicação de Funções.

    • Nome: introduza msdocsprocessimage ou algo semelhante.
    • Nome da Subscrição: escolha a subscrição que pretende utilizar.
    • Grupo de Recursos: escolha o msdocs-storage-function grupo de recursos que criou anteriormente.
    • Tipo de Plano: selecione Consumo.
    • Localização: escolha a região mais próxima de si.
    • Armazenamento do Azure: selecione a conta de armazenamento que criou anteriormente.

    Uma captura de ecrã a mostrar como criar uma nova Aplicação de Funções no Azure.

  6. Depois de preencher todos esses valores, selecione Criar. O Visual Studio e o Azure começarão a aprovisionar os recursos pedidos, o que demorará alguns momentos a concluir.

  7. Assim que o processo estiver concluído, selecione Concluir para fechar o fluxo de trabalho da caixa de diálogo.

  8. O último passo para implementar a Função do Azure é selecionar Publicar no canto superior direito do ecrã. A publicação da função também pode demorar alguns momentos a concluir. Assim que terminar, a sua aplicação será executada no Azure.

Ligar os serviços

A Função do Azure foi implementada com êxito, mas ainda não consegue ligar à nossa conta de armazenamento e Imagem Digitalizada serviços. As chaves e as cadeias de ligação corretas têm primeiro de ser adicionadas às definições de configuração da aplicação Funções do Azure.

  1. Na parte superior do portal do Azure, procure a função e selecione Aplicação de Funções nos resultados.

  2. No ecrã Aplicação de Funções , selecione a Aplicação de Funções que criou no Visual Studio.

  3. Na página Descrição geral da Aplicação de Funções , selecione Configuração no painel de navegação esquerdo. Esta ação irá abrir uma página onde podemos gerir vários tipos de definições de configuração para a nossa aplicação. Por enquanto, estamos interessados na secção Definições da Aplicação .

  4. O próximo passo é adicionar definições para o nome da nossa conta de armazenamento e cadeia de ligação, a chave secreta Imagem Digitalizada e o ponto final Imagem Digitalizada.

  5. No separador Definições da aplicação, selecione + Nova definição da aplicação. Na lista de opções apresentada, introduza os seguintes valores:

    • Nome: introduza um valor de ComputerVisionKey.
    • Valor: cole a chave de Imagem Digitalizada que guardou anteriormente.
  6. Clique em OK para adicionar esta definição à sua aplicação.

    Uma captura de ecrã a mostrar como adicionar uma nova definição de aplicação a uma Função do Azure.

  7. Em seguida, vamos repetir este processo para o ponto final do nosso serviço Imagem Digitalizada, com os seguintes valores:

    • Nome: introduza um valor de ComputerVisionEndpoint.
    • Valor: cole o URL do ponto final que guardou anteriormente.
  8. Repita este passo novamente para a ligação da conta de armazenamento, com os seguintes valores:

    • Nome: introduza um valor de StorageConnection.
    • Valor: cole na cadeia de ligação que guardou anteriormente.
  9. Por fim, repita este processo mais uma vez para o nome da conta de armazenamento, com os seguintes valores:

    • Nome: introduza um valor de StorageAccountName.
    • Valor: introduza o nome da conta de armazenamento que criou.
  10. Depois de adicionar estas definições de aplicação, certifique-se de que seleciona Guardar na parte superior da página de configuração. Quando a gravação estiver concluída, também pode aceder a Atualizar para se certificar de que as definições são recolhidas.

Todas as variáveis de ambiente necessárias para ligar a nossa função do Azure a diferentes serviços estão agora implementadas.

Carregar uma imagem para o Armazenamento de Blobs

Está agora pronto para testar a nossa aplicação! Pode carregar um blob para o contentor e, em seguida, verificar se o texto na imagem foi guardado no Armazenamento de Tabelas.

  1. Primeiro, na parte superior do portal do Azure, procure Armazenamento e selecione conta de armazenamento. Na página da conta de armazenamento , selecione a conta que criou anteriormente.

  2. Em seguida, selecione Contentores na navegação esquerda e, em seguida, navegue para o contentor ImageAnalysis que criou anteriormente. A partir daqui, pode carregar uma imagem de teste diretamente no browser.

    Uma captura de ecrã a mostrar como navegar para um contentor de armazenamento.

  3. Pode encontrar algumas imagens de exemplo incluídas na pasta imagens na raiz do projeto de exemplo transferível ou pode utilizar uma das suas.

  4. Na parte superior da página ImageAnalysis , selecione Carregar. Na lista de opções que é aberta, selecione o ícone de pasta à direita para abrir um browser de ficheiros. Escolha a imagem que pretende carregar e, em seguida, selecione Carregar.

    Uma captura de ecrã a mostrar como carregar um blob para um contentor de armazenamento.

  5. O ficheiro deve aparecer dentro do contentor de blobs. Em seguida, pode verificar se o carregamento acionou a Função do Azure e se o texto na imagem foi analisado e guardado corretamente no Armazenamento de Tabelas.

  6. Com os trilhos na parte superior da página, navegue até um nível na sua conta de armazenamento. Localize e selecione Browser de armazenamento no painel de navegação esquerdo e, em seguida, selecione Tabelas.

  7. Uma tabela ImageText deve estar agora disponível. Clique na tabela para pré-visualizar as linhas de dados dentro da mesma. Deverá ver uma entrada para o texto de imagem processado do nosso carregamento. Pode verificar esta situação com o Carimbo de Data/Hora ou ao visualizar o conteúdo da coluna Texto .

    Captura de ecrã a mostrar uma entrada de texto no Armazenamento de Tabelas do Azure.

Parabéns! Conseguiu processar uma imagem que foi carregada para o Armazenamento de Blobs com Funções do Azure e Imagem Digitalizada.

Limpar os recursos

Se não pretender continuar a utilizar esta aplicação, pode eliminar os recursos que criou ao remover o grupo de recursos.

  1. Selecione Grupos de recursos na navegação principal
  2. Selecione o msdocs-storage-function grupo de recursos na lista.
  3. Selecione o botão Eliminar grupo de recursos na parte superior da página de descrição geral do grupo de recursos.
  4. Introduza o nome do grupo de recursos msdocs-storage-function na caixa de diálogo de confirmação.
  5. Selecione eliminar. O processo de eliminação do grupo de recursos pode demorar alguns minutos a ser concluído.