Partilhar via


Tutorial: Carregar e analisar um ficheiro com Azure Functions e Blob Storage

Neste tutorial, aprende como carregar uma imagem para o Azure Blob Storage e processá-la usando Azure Functions e Computer Vision. Também aprende a implementar triggers e bindings do Azure Function como parte deste processo. Juntos, esses serviços analisam uma imagem carregada que contém texto, extraem o texto dela e, em seguida, armazenam o texto em uma linha de banco de dados para análise posterior ou outros fins.

Azure Blob Storage é a solução de armazenamento de objetos massivamente escalável da Microsoft para a cloud. O Blob Storage foi concebido para armazenar imagens e documentos, transmitir ficheiros multimédia, gerir backup e arquivamento de dados, entre outros. Pode ler mais sobre Blob Storage na página de visão geral .

Azure Functions é uma solução de computador serverless que permite escrever e executar pequenos blocos de código como funções altamente escaláveis, serverless e orientadas a eventos. Pode ler mais sobre Azure Functions na página visão geral.

Neste tutorial, aprenderás como:

  • Carregar imagens e ficheiros para o Blob Storage
  • Use um disparador de evento Azure Function para processar dados carregados para o Blob Storage
  • Use Foundry Tools para analisar uma imagem
  • Escrever dados no Armazenamento de Tabelas usando ligações de saída do Azure Function

Prerequisites

Criar a conta de armazenamento e o contêiner

A primeira etapa é criar a conta de armazenamento para armazenar os dados de blob carregados, que neste cenário são imagens que contêm texto. Uma conta de armazenamento oferece vários serviços diferentes, mas este tutorial utiliza o Blob Storage e o Table Storage.

Inicie sessão no portal Azure.

  1. Na barra de pesquisa na parte superior do portal, procure por Armazenamento e selecione o resultado rotulado 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, insira os seguintes valores:

    • Assinatura: escolha a assinatura desejada.
    • Grupo de Recursos: Selecione Criar novo, insira um nome em msdocs-storage-function, e em seguida, escolha OK.
    • Nome da conta de armazenamento: insira um valor de msdocsstoragefunction. O nome da conta de Armazenamento deve ser único em Azure, por isso pode ser necessário adicionar números após o nome, como msdocsstoragefunction123.
    • Região: selecione a região mais próxima de você.
    • Desempenho: Escolha Padrão.
    • Redundância: deixe o valor padrão selecionado.

    Uma captura de ecrã que mostra como criar uma conta de armazenamento em Azure.

  4. Selecione Review + Criar no final e Azure valida a informação que introduziu. Depois de validadas as definições, escolha Criar e Azure começa a provisionar a conta de armazenamento, o que pode demorar algum tempo.

Criar o contentor

  1. Depois que a conta de armazenamento for provisionada, selecione Ir para Recurso. O próximo passo é criar um contêiner de armazenamento dentro da conta para armazenar imagens carregadas para análise.

  2. No painel de navegação, escolha Contêineres.

  3. Na página Contêineres, selecione + Contêiner na parte superior. No painel de deslizamento, insira um Nome da análise de imagem e verifique se o nível de acesso público está definido como Blob (acesso de leitura anônimo somente para blobs). Em seguida, selecione Criar.

    Uma captura de tela mostrando como criar um novo contêiner de armazenamento.

Você verá seu novo contêiner aparecer na lista de contêineres.

Recuperar a string de conexão

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

  1. No painel de navegação esquerdo, selecione Teclas de acesso.

  2. Na página Teclas de Acesso, selecione Mostrar chaves. Copie o valor da Cadeia de Conexão na seção key1 e cole a chave em algum lugar para usar mais tarde. Anote o nome msdocsstoragefunction da conta de armazenamento para mais tarde também.

    Uma captura de tela mostrando como acessar o contêiner de armazenamento.

Estes valores são necessários quando precisamos de ligar a nossa Função Azure a esta conta de armazenamento.

Criar o serviço de Computer Vision

De seguida, crie a conta do serviço Computer Vision que processa os nossos ficheiros carregados. Computer Vision faz parte da Foundry Tools e oferece várias funcionalidades para extrair dados de imagens. Pode saber mais sobre Computer Vision na página de visão geral .

  1. Na barra de pesquisa na parte superior do portal, procure por Computador e selecione o resultado rotulado Visão computacional.

  2. Na página Visão computacional, selecione + Criar.

  3. Na página Create Computer Vision, insira os seguintes valores:

    • Subscrição: Escolha a Subscrição pretendida.
    • Grupo de Recursos: use o grupo de msdocs-storage-function recursos criado anteriormente.
    • Região: selecione a região mais próxima de você.
    • Nome: insira um nome de msdocscomputervision.
    • Nível de preço: Escolha Gratuito se estiver disponível, caso contrário, escolha Standard S1.
    • Marque a caixa Aviso de IA Responsável se concordar com os termos

    Uma captura de ecrã que mostra como criar um novo serviço Computer Vision.

  4. Selecione Rever + Criar na parte inferior. O Azure demora um momento a validar a informação que introduziu. Depois de validadas as definições, escolha Create e Azure começa a provisionar o serviço de Computer Vision, o que pode demorar algum tempo.

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

Recuperar as chaves

De seguida, precisamos de encontrar a chave secreta e a URL do endpoint para o serviço Computer Vision usar na nossa aplicação Azure Function.

  1. Na página de visão geral Computer Vision, selecione Keys e Endpoint.

  2. Na página Chaves e Ponto de Extremidade, copie o valor da Chave 1 e os valores de Ponto de Extremidade e cole-os em algum lugar para usar mais tarde.

    Uma captura de ecrã que mostra como recuperar as Chaves e o Endpoint URL de um serviço Computer Vision.

Baixar e configurar o projeto de exemplo

O código da Função Azure usado neste tutorial pode ser encontrado em this GitHub repositório. Você também pode clonar o projeto usando o seguinte comando:

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:

  • Recupera variáveis de ambiente para se ligar à conta de armazenamento e ao serviço de Computer Vision
  • Aceita o arquivo carregado como um parâmetro de blob
  • Analisa o blob usando o serviço Computer Vision
  • Envia o texto da imagem analisada para uma nova linha da tabela usando associações de saída

Depois de baixar e abrir o projeto, existem alguns conceitos essenciais para entender no método principal Run mostrado abaixo. A função Azure utiliza ligações de Trigger e Output, que são aplicadas usando atributos na assinatura do método Run.

O Table atributo usa dois parâmetros. O primeiro parâmetro especifica o nome da tabela para gravar o valor de texto da imagem analisada retornado pela função. O segundo parâmetro Connection obtém uma cadeia de ligação da Tabela de Armazenamento das variáveis de ambiente de forma a que a nossa função Azure possa aceder a esta.

O atributo BlobTrigger é usado para vincular a nossa função ao evento de upload em Blob Storage, e fornece esse blob carregado à função Run. O disparador do blob tem dois parâmetros próprios – um para o nome do contentor do blob a monitorizar para uploads, e outro para a connection string da nossa conta de armazenamento.

// 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 recupera valores de configuração essenciais de variáveis de ambiente, como a connection string da conta de armazenamento e a chave Computer Vision. Vamos adicionar estas variáveis de ambiente ao nosso ambiente Azure Function depois de implementado.

A ProcessImage função também utiliza um segundo método chamado AnalyzeImage. Este código utiliza o URL Endpoint e a Chave da nossa conta Computer Vision para fazer um pedido a esse servidor para processar a nossa imagem. A solicitação retorna todo o texto descoberto na imagem, que é gravado no Armazenamento de Tabela usando a associação de saída no método Run.

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();
}

Executando localmente

Se você quiser executar o projeto localmente, poderá preencher as variáveis de ambiente usando o arquivo local.settings.json. Dentro deste ficheiro, preencha os valores provisórios com os valores que guardou anteriormente ao criar os recursos do Azure.

Embora o código da Função Azure seja executado localmente, ainda se liga aos serviços em tempo real no Azure, em vez de usar 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 para o Azure Functions

Agora está pronto para implementar a nossa aplicação no Azure usando o Visual Studio. Também pode criar a aplicação Azure Functions no Azure ao mesmo tempo como parte do processo de implementação.

  1. Para começar, selecione com o botão direito do mouse o nó do projeto ProcessImage e selecione Publicar.

  2. No ecrã de diálogo Publicar, selecione Azure e selecione Próximo.

    Uma captura de ecrã que mostra como selecionar Azure como destino de implantação.

  3. Selecione Azure Function App (Windows) ou Azure Function App (Linux) no ecrã seguinte, e depois escolha novamente Next novamente.

    Uma captura de ecrã que mostra como escolher Azure Functions como um alvo de implementação específico.

  4. Na etapa Instância de Functions, certifique-se de escolher a assinatura em que deseja implantar. Em seguida, selecione o símbolo verde + no lado direito da caixa de diálogo.

  5. Uma nova caixa de diálogo é aberta. Insira os seguintes valores para seu novo aplicativo de função.

    • Nome: Digite msdocsprocessimage ou algo semelhante.
    • Nome da assinatura: escolha a assinatura que você gostaria de usar.
    • Grupo de recursos: escolha o grupo de msdocs-storage-function recursos criado anteriormente.
    • Tipo de plano: Selecione Consumo.
    • Localização: Escolha a região mais próxima de si.
    • Azure Storage: Selecione a conta de armazenamento que criou anteriormente.

    Uma captura de ecrã que mostra como criar uma nova Function App em Azure.

  6. Depois de preencher todos esses valores, selecione Criar. O Visual Studio e o Azure começam a provisionar os recursos solicitados, o que demora alguns momentos a concluir.

  7. Quando o processo terminar, selecione Concluir para fechar o fluxo de trabalho da caixa de diálogo.

  8. O passo final para implementar a Função Azure é selecionar Publicar no canto superior direito do ecrã. A publicação da função também pode levar alguns minutos para ser concluída. Quando terminar, a sua aplicação está a correr no Azure.

Ligar os serviços

A Função Azure foi implementada com sucesso, mas ainda não consegue ligar-se à nossa conta de armazenamento e aos serviços de Computer Vision. As chaves e strings de ligação corretas devem primeiro ser adicionadas às definições de configuração da aplicação Azure Functions.

  1. No topo do portal Azure, procure por função e selecione Function App nos resultados.

  2. No ecrã Function App, selecione a Function App que criou no Visual Studio.

  3. Na página Visão geral do aplicativo de função , selecione Configuração na navegação à esquerda para abrir uma página onde podemos gerenciar vários tipos de definições de configuração para nosso aplicativo. Por enquanto, estamos interessados na seção Configurações do aplicativo.

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

  5. Na guia Configurações do aplicativo, selecione + Nova configuração do aplicativo. No submenu que aparece, insira os seguintes valores:

    • Nome: insira um valor de ComputerVisionKey.
    • Value: Colar a chave do Computer Vision que guardaste antes.
  6. Selecione OK para adicionar essa configuração ao seu aplicativo.

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

  7. De seguida, vamos repetir este processo para o endpoint do nosso serviço de Computer Vision, usando os seguintes valores:

    • Nome: insira um valor de ComputerVisionEndpoint.
    • Valor: Cole no URL do ponto de extremidade que você salvou anteriormente.
  8. Repita esta etapa novamente para a conexão da conta de armazenamento, usando os seguintes valores:

    • Nome: insira um valor de StorageConnection.
    • Value: Cola a connection string que guardaste antes.
  9. Finalmente, repita esse processo mais uma vez para o nome da conta de armazenamento, usando os seguintes valores:

    • Name: insira um valor de StorageAccountName.
    • Valor: insira o nome da conta de armazenamento que você criou.
  10. Depois de adicionar essas configurações do aplicativo, selecione Salvar na parte superior da página de configuração. Quando a gravação for concluída, tu também poderás pressionar Atualizar para garantir que as configurações sejam aplicadas.

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

Carregar uma imagem para o Blob Storage

Agora está pronto para testar a nossa aplicação! Você pode carregar um blob para o contêiner e, em seguida, verificar se o texto na imagem foi salvo no Armazenamento de Tabela.

  1. Primeiro, no topo do portal Azure, procure por Storage e selecione storage account. Na página conta de armazenamento , selecione a conta criada anteriormente.

  2. Em seguida, selecione Contêineres no painel de navegação esquerdo e navegue até o contêiner ImageAnalysis criado anteriormente. A partir daqui, você pode carregar uma imagem de teste diretamente dentro do navegador.

    Uma captura de tela mostrando como navegar até um contêiner de armazenamento.

  3. Você pode encontrar algumas imagens de exemplo incluídas na pasta de imagens na raiz do projeto de exemplo para download, ou você pode usar uma de sua própria.

  4. Na parte superior da página ImageAnalysis , selecione Upload. No submenu que se abre, selecione o ícone de pasta para abrir um navegador de arquivos. Escolha a imagem que pretende carregar e, em seguida, selecione Carregar.

    Uma captura de tela mostrando como carregar um blob para um contêiner de armazenamento.

  5. O arquivo deve aparecer dentro do contêiner de blob. De seguida, pode verificar se o upload ativou a Função Azure e que o texto na imagem foi analisado e guardado corretamente no Table Storage.

  6. Usando o caminho de navegação no topo da página, suba um nível na conta de armazenamento. Localize e selecione Navegador de armazenamento no painel de navegação esquerdo e, em seguida, selecione Tabelas.

  7. Uma tabela ImageText agora deve estar disponível. Selecione na tabela para visualizar as linhas de dados dentro dela. Você deve ver uma entrada para o texto da imagem processada do nosso upload. Você pode verificar isso usando o carimbo de data/hora ou exibindo o conteúdo da coluna Texto .

    Uma captura de ecrã a mostrar uma entrada de texto em Azure Table Storage.

Congratulations! Conseguiu processar uma imagem que foi carregada para o Blob Storage usando Azure Functions e Computer Vision.

Limpar recursos

Se não pretender continuar a utilizar esta aplicação, pode eliminar os recursos que criou removendo 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 Excluir grupo de recursos na parte superior da página de visão geral do grupo de recursos.
  4. Digite o nome do grupo de recursos msdocs-storage-function na caixa de diálogo de confirmação.
  5. Selecione excluir. O processo para excluir o grupo de recursos pode levar alguns minutos para ser concluído.