Tutorial: carregar e analisar um arquivo com o Azure Functions e o Armazenamento de Blobs

Neste tutorial, você aprenderá a carregar uma imagem para Armazenamento de Blobs do Azure e processá-la com o Azure Functions e o Pesquisa Visual Computacional. Você também aprenderá a implementar gatilhos e associações do Azure Function como parte desse processo. Juntos, esses serviços analisarão uma imagem carregada que contém texto, extrairão o texto dele e armazenarão o texto em uma linha de banco de dados para análise posterior ou outras finalidades.

O Armazenamento de Blobs do Azure é uma solução de armazenamento de objetos massivamente escalável da Microsoft para a nuvem. O Armazenamento de Blobs foi projetado para armazenar imagens e documentos, transmitir arquivos de mídia, gerenciar dados de backup e arquivamento e muito mais. Você pode ler mais sobre o Armazenamento de Blobs na página de visão geral.

O Azure Functions é uma solução de computador sem servidor que permite que você escreva e execute pequenos blocos de código como funções altamente escalonáveis, sem servidor e controladas por eventos. Você pode ler mais sobre o Azure Functions na página de visão geral.

Neste tutorial, você aprenderá a:

  • Carregar imagens e arquivos no Armazenamento de Blobs
  • Usar um gatilho de evento do Azure Function para processar dados carregados no Armazenamento de Blobs
  • Usar os serviços de IA do Azure para analisar uma imagem
  • Gravar dados no Armazenamento de Tabelas usando associações de saída do Azure Function

Pré-requisitos

Crie a conta de armazenamento e o contêiner

A primeira etapa é criar a conta de armazenamento que conterá os dados de blob 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.

Entre no portal do Azure.

  1. Na barra de pesquisa na parte superior do portal, pesquise por Armazenamento e selecione o resultado rotulado como Contas de armazenamento.

  2. Na página Conta 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 e então insira um nome de msdocs-storage-function, em seguida, escolha OK.
    • Armazenamento nome da conta: insira um valor de msdocsstoragefunction. O nome da conta de armazenamento deve ser exclusivo no Azure, portanto, talvez seja necessário adicionar números após o nome, como msdocsstoragefunction123.
    • Região: selecione a região mais próxima a você.
    • Desempenho: escolha Standard.
    • Redundância: deixe o valor padrão selecionado.

    Uma captura de tela mostrando como criar uma conta de armazenamento no Azure.

  4. Selecione Examinar + Criar na parte inferior e o Azure validará as informações inseridas. Depois que as configurações forem validadas, escolha Criar e o Azure começará a provisionar a conta de armazenamento, o que pode levar um momento.

Criar o contêiner

  1. Depois que a conta de armazenamento tiver sido provisionada, selecione Ir para Recursos. A próxima etapa é 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 deslizante, insira um Nome de imageanalysis e certifique-se de que o Nível de acesso público esteja definido como Blob (acesso de leitura anônimo somente para blobs). Em seguida, selecione Criar.

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

Você deverá ver sua nova contêiner aparecer na lista de contêineres.

Recuperar a cadeia de conexão

A última etapa é recuperar nossa cadeia de conexão para a conta de armazenamento.

  1. No painel de navegação à esquerda, selecione Chaves de acesso.

  2. Na página de Chaves de acesso, selecione Mostrar chaves. Copie o valor da Cadeia de Conexão na seção key1 e cole-o em algum lugar para usar posteriormente. Você também vai querer anotar o nome msdocsstoragefunction da conta de armazenamento para mais tarde também.

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

Esses valores serão necessários quando precisarmos conectar nosso Azure Function a essa conta de armazenamento.

Criar o serviço de Pesquisa Visual Computacional

Em seguida, crie a conta de serviço do Pesquisa Visual Computacional que processará nossos arquivos carregados. A Pesquisa Visual Computacional faz parte dos serviços de IA do Azure e oferece uma variedade de recursos para extrair dados de imagens. Você pode saber mais sobre a Pesquisa Visual Computacional na página de visão geral.

  1. Na barra de pesquisa na parte superior do portal, pesquise por Computador e selecione o resultado rotulado como Visual computacional.

  2. Na página Pesquisa visual computacional, selecione + Criar.

  3. Na página Criar a Pesquisa Visual Computacional, insira os seguintes valores:

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

    Uma captura de tela mostrando como criar um novo serviço de Pesquisa Visual Computacional.

  4. Selecione Examinar + Criar na parte inferior. O Azure levará um momento para validar as informações inseridas. Depois que as configurações forem validadas, escolha Criar e o Azure começará a provisionar ao serviço de Pesquisa Visual Computacional, o que pode levar um momento.

  5. Ao concluir a operação, selecione Ir para Recursos.

Recuperar as chaves

Em seguida, precisamos encontrar a chave secreta e o URL do ponto de extremidade para o serviço Pesquisa Visual Computacional a ser usado em nosso aplicativo de Azure Function.

  1. Na página de visão geral Pesquisa Visual Computacional, selecione Chaves e Ponto de Extremidade.

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

    Uma captura de tela mostrando como recuperar o ponto de extremidade de URL e chaves para um serviço de Pesquisa Visual Computacional.

Baixar e configurar o projeto de amostra

O código do Azure Function usado neste tutorial pode ser encontrado neste repositório do GitHub. Você também pode clonar o projeto usando 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 do projeto de amostra realiza as seguintes tarefas:

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

Depois de baixar e abrir o projeto, há alguns conceitos essenciais para saber sobre o método principal Run mostrado abaixo. A função do Azure utiliza associações de Gatilho e Saída, que são aplicadas usando atributos na assinatura do método Run.

O atributo Table 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 efetua pull de uma cadeia de conexão do Armazenamento de Tabelas das variáveis de ambiente para que nossa função do Azure tenha acesso a ela.

O atributo BlobTrigger é usado para associar nossa função ao evento de carregamento no Armazenamento de Blobs e fornece o blob carregado para a função Run. O gatilho de blob tem dois parâmetros próprios: um para o nome do contêiner de blob a ser monitorado para uploads e outro para a cadeia de conexão de 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; }
}

Esse código também recupera valores de configuração essenciais de variáveis de ambiente, como a cadeia de conexão da conta de armazenamento e a chave da Pesquisa Visual Computacional. Adicionaremos essas variáveis de ambiente ao ambiente do Azure Function depois que ele for implantado.

A função ProcessImage também utiliza um segundo método chamado AnalyzeImage, visto abaixo. Esse código usa o ponto de extremidade de URL e a chave de nossa conta de Pesquisa Visual Computacional para fazer uma solicitação a esse servidor para processar nossa imagem. A solicitação retornará todo o texto descoberto na imagem, que será gravado no Armazenamento de Tabelas 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();
}

Execução local

Se você quiser executar o projeto localmente, poderá preencher as variáveis de ambiente usando o arquivo local.settings.json. Dentro desse arquivo, preencha os valores de espaço reservado com os valores salvos anteriormente ao criar os recursos do Azure.

Embora o código da Função do Azure seja executado localmente, ele ainda se conectará aos serviços ativos no Azure, em vez de usar quaisquer 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"
    }
}

Implantar o código no Azure Functions

Agora você está pronto para implantar nosso aplicativo no Azure usando Visual Studio. Você também pode criar o aplicativo do Azure Functions no Azure ao mesmo tempo que parte do processo de implantação.

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

  2. Na tela Publicar caixa de diálogo, selecione o Azure e escolha Avançar.

    Uma captura de tela mostrando como selecionar o Azure como o destino de implantação.

  3. Selecione o Aplicativo do Azure Function (Windows) ou o Aplicativo do Azure Function (Linux) na próxima tela e escolha Avançar novamente.

    Uma captura de tela mostrando como escolher Azure Functions como um destino de implantação específico.

  4. Na etapa da Instância de funções, escolha a assinatura na qual você deseja implantar. Em seguida, selecione o símbolo verde + no lado direito da caixa de diálogo.

  5. Será aberta um novo diálogo. Insira os valores a seguir para o novo Aplicativo de Funções.

    • Nome: insira msdocsprocessimage ou algo semelhante.
    • Nome da assinatura: escolha qualquer assinatura que você gostaria de usar.
    • Grupo de recursos: escolha o grupo de recursos msdocs-storage-function que você criou anteriormente.
    • Tipo de Plano: selecione Consumo.
    • Localização: escolha a região mais próxima a você.
    • Armazenamento do Microsoft Azure: selecione a conta de armazenamento criada anteriormente.

    Uma captura de tela que mostra como criar um aplicativo de funções no Azure.

  6. Depois de preencher todos esses valores, selecione Criar. O Visual Studio e o Azure começarão a provisionar os recursos solicitados, o que levará alguns instantes para ser concluído.

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

  8. A etapa final para implantar o Azure Function é selecionar Publicar no canto superior direito da tela. A publicação da função também pode levar alguns momentos para ser concluída. Quando ele for concluído, seu aplicativo será executado no Azure.

Conectar os serviços

O Azure Function foi implantado com êxito, mas ainda não pode se conectar à nossa conta de armazenamento e aos serviços de Pesquisa Visual Computacional. As chaves corretas e as cadeias de conexão devem primeiro ser adicionadas às configurações do aplicativo do Azure Functions.

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

  2. Na tela Aplicativo de Funções, selecione o Aplicativo de Funções que você criou em Visual Studio.

  3. Na página de visão geral do Aplicativo de Funções, selecione Configuração à esquerda. Isso abrirá uma página em que podemos gerenciar vários tipos de configurações para nosso aplicativo. Por enquanto, estamos interessados na seção Configurações de aplicativo.

  4. A próxima etapa é adicionar configurações para nosso nome de conta de armazenamento e cadeia de conexão, a chave secreta da Pesquisa Visual Computacional e o ponto de extremidade da Pesquisa Visual Computacional.

  5. Na guia Configurações de aplicativo, selecione + Novas configurações de aplicativo. No submenu exibido, insira os seguintes valores:

    • Nome: insira um valor de ComputerVisionKey.
    • Valor: cole na chave de Pesquisa Visual Computacional que você salvou anteriormente.
  6. Clique em OK para adicionar essa configuração ao seu aplicativo.

    Uma captura de tela mostrando como adicionar uma configuração de aplicativo a uma Função do Azure.

  7. Em seguida, vamos repetir esse processo para o ponto de extremidade do nosso serviço de Pesquisa Visual Computacional, usando os seguintes valores:

    • Nome: insira um valor de ComputerVisionEndpoint.
    • Valor: cole na 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.
    • Valor: cole na cadeia de conexão que você salvou anteriormente.
  9. Por fim, repita esse processo mais uma vez para o nome da conta de armazenamento, usando os seguintes valores:

    • Nome: insira um valor de StorageAccountName.
    • Valor: insira o nome da conta de armazenamento criada.
  10. Depois de adicionar essas configurações de aplicativo, selecione Salvar na parte superior da página de configuração. Quando a salvação for concluída, você também poderá acessar Atualizar para verificar se as configurações foram selecionadas.

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

Carregue uma imagem para o Armazenamento de Blobs

Agora você está pronto para testar nosso aplicativo! Você pode carregar um blob no contêiner e verificar se o texto na imagem foi salvo no Armazenamento de Tabelas.

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

  2. Em seguida, selecione Contêineres na navegação à esquerda 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 para o contêiner de armazenamento.

  3. É possível encontrar algumas imagens de exemplo incluídas na pasta de imagens na raiz do projeto de exemplo para download ou pode usar uma das suas.

  4. Na parte superior da página ImageAnalysis, selecione Upload. No submenu que é aberto, selecione o ícone de pasta à direita para abrir um navegador de arquivos. Escolha a imagem que deseja carregar e selecione Upload.

    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. Em seguida, você pode verificar se o upload disparou o Azure Function e se o texto na imagem foi analisado e salvo no Armazenamento de Tabelas corretamente.

  6. Usando as trilhas de navegação na parte superior da página, navegue até um nível em sua conta de armazenamento. Localize e selecione Navegador de armazenamento na navegação à esquerda e selecione Tabelas.

  7. Uma tabela ImageText agora deve estar disponível. Clique na tabela para visualizar as linhas de dados dentro dela. Você deve ver uma entrada para o texto da imagem processada do nosso upload. É possível verificar isso usando o Carimbo de Data/Hora ou exibindo o conteúdo da coluna Texto.

    Uma captura de tela mostrando uma entrada de texto no Armazenamento de Tabelas do Azure.

Parabéns! Você conseguiu processar uma imagem que foi carregada no Armazenamento de Blobs usando o Azure Functions e a Pesquisa Visual Computacional.

Limpar os recursos

Se você não quiser continuar a usar esse aplicativo, poderá excluir os recursos criados removendo o grupo de recursos.

  1. Selecione Grupos de recursos na navegação principal
  2. Selecione o grupo de recursos msdocs-storage-function 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. Insira 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.