Partilhar via


Tutorial: Carregar e analisar um arquivo com o Azure Functions e o Armazenamento de Blob

Neste tutorial, você aprenderá como carregar uma imagem no Armazenamento de Blobs do Azure e processá-la usando o Azure Functions e a Visão do Computador. Você também aprenderá como 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 dela e, em seguida, armazenarão o texto em uma linha de banco de dados para análise posterior ou outros fins.

O Armazenamento de Blobs do Azure é a solução de armazenamento de objetos massivamente escalável da Microsoft para a nuvem. O Blob Storage 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 Blob na página de visão geral.

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

Neste tutorial, vai aprender a:

  • Carregue imagens e arquivos para o 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 Tabela usando associações de saída do Azure Function

Pré-requisitos

Criar a conta de armazenamento e o contêiner

O primeiro passo é 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 Blob e o Armazenamento de Tabelas.

Inicie sessão no portal do 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 e insira um nome de e, em msdocs-storage-functionseguida, escolha OK.
    • Nome da conta de armazenamento: 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 de você.
    • Desempenho: Escolha Padrão.
    • Redundância: deixe o valor padrão selecionado.

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

  4. Selecione Rever + Criar na parte inferior e o Azure validará as informações que introduziu. 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 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). Depois, 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.

Obter a cadeia de ligação

A última etapa é recuperar nossa cadeia de conexã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-o em algum lugar para usar mais tarde. Você também vai querer anotar o nome msdocsstoragefunction da conta de armazenamento para mais tarde.

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

Esses valores serão necessários quando precisarmos conectar nossa Função do Azure a essa conta de armazenamento.

Criar o serviço de Visão por Computador

Em seguida, crie a conta de serviço de Visão Computacional que processará nossos arquivos carregados. O Computer Vision 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 Visão Computacional 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 Criar Visão por Computador, 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 tela mostrando como criar um novo serviço de Visão por Computador.

  4. Selecione Rever + Criar na parte inferior. O Azure levará um momento para validar as informações que você inseriu. Depois que as configurações forem validadas, escolha Criar e o Azure começará a provisionar o serviço de Visão por Computador, o que pode levar um momento.

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

Recuperar as chaves

Em seguida, precisamos encontrar a chave secreta e a URL do ponto de extremidade para o serviço de Visão Computacional usar em nosso aplicativo Azure Function.

  1. Na página de visão geral da Visão 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 de Ponto de Extremidade e cole-os em algum lugar para usar mais tarde.

    Uma captura de tela mostrando como recuperar o ponto de extremidade de chaves e URL para um serviço de visão computacional.

Baixar e configurar o projeto de exemplo

O código para a Função do Azure usada 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 de projeto de exemplo realiza as seguintes tarefas:

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

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

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 Connection parâmetro extrai uma cadeia de conexão de Armazenamento de Tabela das variáveis de ambiente para que nossa função do Azure tenha acesso a ela.

O BlobTrigger atributo é usado para vincular nossa função ao evento de upload no Armazenamento de Blob e fornece o blob carregado para a Run função. O gatilho de blob tem dois parâmetros próprios - um para o nome do contêiner de blob para monitorar 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 Computer Vision. Adicionaremos essas variáveis de ambiente ao nosso ambiente do Azure Function depois que ele for implantado.

A ProcessImage função também utiliza um segundo método chamado AnalyzeImage, visto abaixo. Este código utiliza o URL, o Ponto Final e a Chave da nossa conta Computer Vision para fazer um pedido a esse servidor para processar a nossa imagem. A solicitação retornará todo o texto descoberto na imagem, que será gravado no Armazenamento de Tabela usando a associação 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();
}

Executando localmente

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 ao vivo 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"
    }
}

Implantar o código no Azure Functions

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

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

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

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

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

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

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

  5. Uma nova caixa de diálogo será 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.
    • Armazenamento do Azure: selecione a conta de armazenamento criada anteriormente.

    Uma captura de tela mostrando como criar um novo Aplicativo de Função 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 minutos para ser concluído.

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

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

Ligar os serviços

A Função do Azure foi implantada com êxito, mas ainda não pode se conectar à nossa conta de armazenamento e aos serviços de Visão Computacional. As chaves e cadeias de conexão corretas devem primeiro ser adicionadas às definições de configuração do aplicativo Azure Functions.

  1. Na parte superior do portal do Azure, procure por função e selecione Aplicativo de função nos resultados.

  2. Na tela Aplicativo de Função, selecione o Aplicativo de Função que você criou no Visual Studio.

  3. Na página Visão geral do aplicativo de função, selecione Configuração na navegação à esquerda. Isso 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. A próxima etapa é adicionar configurações para o nome da conta de armazenamento e a cadeia de conexão, a chave secreta do Computer Vision e o ponto de extremidade do Computer Vision.

  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.
    • Valor: Cole a chave Visão do Computador que você salvou anteriormente.
  6. Clique em OK para adicionar essa configuração ao seu aplicativo.

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

  7. Em seguida, vamos repetir esse processo para o endpoint do nosso serviço de Visão por Computador, 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.
    • Valor: Cole na cadeia de conexão salva anteriormente.
  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, você também poderá pressionar Atualizar para garantir que as configurações sejam selecionadas.

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

Carregar uma imagem para o Armazenamento de Blobs

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, na parte superior do portal do Azure, procure Armazenamento e selecione Conta de armazenamento. 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 à direita 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. Em seguida, você pode verificar se o carregamento acionou a Função do Azure e se o texto na imagem foi analisado e salvo no Armazenamento de Tabela corretamente.

  6. Usando a trilha na parte superior da página, navegue até um nível na sua 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. 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. Você pode 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 Tabela do Azure.

Parabéns! Você conseguiu processar uma imagem que foi carregada no Armazenamento de Blob usando o Azure Functions e o Computer Vision.

Clean up resources (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 Eliminar. O processo para excluir o grupo de recursos pode levar alguns minutos para ser concluído.