Condividi tramite


Esercitazione: Caricare e analizzare un file con Azure Functions e Blob Storage

In questa esercitazione si apprenderà come caricare un'immagine per Azure Blob Storage ed elaborarla usando Azure Functions e Computer Vision. Si apprenderà anche come implementare trigger e associazioni di funzioni Azure come parte di questo processo. Insieme, questi servizi analizzano un'immagine caricata che contiene testo, estraggono il testo e quindi lo archiviano in una riga del database per analisi successive o altri scopi.

Azure Blob Storage è la soluzione di archiviazione a oggetti scalabile di Microsoft per il cloud. Blob Storage è progettato per l'archiviazione di immagini e documenti, lo streaming di file multimediali, la gestione dei dati di backup e archiviazione e molto altro ancora. Per altre informazioni sulle Blob Storage, vedere la pagina panoramica.

Azure Functions è una soluzione di computer serverless che consente di scrivere ed eseguire piccoli blocchi di codice come funzioni altamente scalabili, serverless e basate su eventi. Per altre informazioni sulle Azure Functions, vedere la pagina panoramica.

In questa esercitazione si apprenderà come:

  • Caricare immagini e file in Blob Storage
  • Usare un trigger di evento Azure Function per elaborare i dati caricati in Blob Storage
  • Usare gli Strumenti Foundry per analizzare un'immagine
  • Scrivere dati nella Archiviazione tabelle usando le associazioni di output di Funzione Azure

Prerequisites

Creare l'account di archiviazione e il contenitore

Il primo passaggio consiste nel creare l'account di archiviazione per contenere i dati BLOB caricati, che in questo scenario sono immagini che contengono testo. Un account di archiviazione offre diversi servizi, ma questa esercitazione usa Blob Storage e Archiviazione tabelle.

Accedere al portale Azure.

  1. Nella barra di ricerca nella parte superiore del portale cercare Archiviazione e selezionare il risultato Account di archiviazione.

  2. Nella pagina Account di archiviazione selezionare + Crea in alto a sinistra.

  3. Nella pagina Crea un account di archiviazione immettere i valori seguenti:

    • Sottoscrizione: scegliere la sottoscrizione desiderata.
    • Gruppo di risorse: selezionare Crea nuovo, immettere il nome msdocs-storage-function e quindi scegliere OK.
    • Nome dell'account di archiviazione: immettere il valore msdocsstoragefunction. Il nome dell'account di archiviazione deve essere univoco in Azure, pertanto potrebbe essere necessario aggiungere numeri dopo il nome, ad esempio msdocsstoragefunction123.
    • Area: selezionare l'area più vicina.
    • Prestazioni: scegliere Standard.
    • Ridondanza: lasciare selezionato il valore predefinito.

    Uno screenshot che mostra come creare un account di archiviazione in Azure.

  4. Selezionare Review + Create nella parte inferiore e Azure convalida le informazioni immesse. Dopo aver convalidato le impostazioni, scegliere Crea e Azure inizia il provisioning dell'account di archiviazione, che potrebbe richiedere alcuni minuti.

Creare il contenitore

  1. Una volta effettuato il provisioning dell'account di archiviazione, selezionare Vai alla risorsa. Il passaggio successivo consiste nel creare un contenitore di archiviazione all'interno dell'account per contenere le immagini caricate per l'analisi.

  2. Nel riquadro di spostamento scegliere Contenitori.

  3. Nella pagina Contenitori selezionare + Contenitore in alto. Nel pannello a scorrimento immettere il nomeimageanalysis e assicurarsi che Livello di accesso pubblico sia impostato su BLOB (accesso in lettura anonimo solo per i BLOB). Successivamente, seleziona Crea.

    Screenshot che mostra come creare un nuovo contenitore di archiviazione.

Il nuovo contenitore verrà visualizzato nell'elenco dei contenitori.

Recuperare il connection string

L'ultimo passaggio consiste nel recuperare i connection string per l'account di archiviazione.

  1. Nel riquadro di spostamento a sinistra selezionare Chiavi di accesso.

  2. Nella pagina Chiavi di accesso selezionare Mostra chiavi. Copiare il valore della stringa di connessione nella sezione key1 e incollare la chiave da usare in un secondo momento. Prendere nota anche del nome dell'account di archiviazione msdocsstoragefunction, che servirà in seguito.

    Screenshot che mostra come accedere al contenitore di archiviazione.

Questi valori sono necessari quando è necessario connettere la funzione Azure a questo account di archiviazione.

Creare il servizio Computer Vision

Creare quindi l'account del servizio Computer Vision che elabora i file caricati. Computer Vision fa parte di Foundry Tools e offre diverse funzionalità per estrarre i dati dalle immagini. Per altre informazioni sulle Computer Vision, vedere la pagina panoramica.

  1. Nella barra di ricerca nella parte superiore del portale cercare Computer e selezionare il risultato Visione artificiale.

  2. Nella pagina Visione artificiale selezionare + Crea.

  3. Nella pagina Creare Computer Vision immettere i valori seguenti:

    • Sottoscrizione: scegliere la sottoscrizione desiderata.
    • Gruppo di risorse: usare il gruppo di risorse msdocs-storage-function creato in precedenza.
    • Area: selezionare l'area più vicina.
    • Nome: immettere il nome msdocscomputervision.
    • Piano tariffario: scegliere Gratuito se disponibile. In caso contrario, scegliere S1 Standard.
    • Selezionare la casella in Informativa Intelligenza artificiale responsabile se si accettano le condizioni.

    Uno screenshot che mostra come creare un nuovo servizio di Computer Vision.

  4. Selezionare Rivedi e crea nella parte inferiore. Azure richiede un momento per convalidare le informazioni immesse. Dopo aver convalidato le impostazioni, scegliere Crea e Azure inizia il provisioning del servizio Computer Vision, che potrebbe richiedere qualche istante.

  5. Al termine dell'operazione, selezionare Vai alla risorsa.

Recuperare le chiavi

A questo punto, è necessario trovare la chiave privata e l'URL dell'endpoint per il servizio Computer Vision da usare nell'app per le funzioni Azure.

  1. Nella pagina di panoramica Computer Vision selezionare Chiavi ed Endpoint.

  2. Nella pagina Chiavi ed endpoint copiare il valore di Key 1 e il valore di EndPoint e incollarli da qualche parte per usarli in un secondo momento.

    screenshot A che mostra come recuperare le chiavi e l'endpoint URL per un servizio Computer Vision.

Scaricare e configurare il progetto di esempio

Il codice per la funzione Azure usata in questa esercitazione è disponibile in questo repository GitHub. È anche possibile clonare il progetto usando il comando seguente:

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

Il codice del progetto di esempio esegue le attività seguenti:

  • Recupera le variabili di ambiente per connettersi all'account di archiviazione e al servizio Computer Vision
  • Accetta il file caricato come parametro BLOB
  • Analizza il BLOB usando il servizio Computer Vision
  • Invia il testo dell'immagine analizzata a una nuova riga di tabella usando associazioni di output

Dopo aver scaricato e aperto il progetto, esistono alcuni concetti essenziali da comprendere nel metodo principale Run illustrato di seguito. La funzione Azure utilizza associazioni trigger e output, che vengono applicate usando attributi nella firma del metodo Run.

L'attributo Table utilizza due parametri. Il primo parametro specifica il nome della tabella in cui scrivere il valore del testo dell'immagine analizzata restituito dalla funzione. Il secondo parametro Connection estrae una stringa di connessione di Archiviazione tabelle dalle variabili di ambiente in modo che la nostra funzione Azure possa accedervi.

L'attributo BlobTrigger viene usato per associare la funzione all'evento di caricamento in Blob Storage e fornisce il BLOB caricato nella funzione Run. Il trigger BLOB ha due parametri propri: uno per il nome del contenitore BLOB da monitorare per gli upload e uno per la stringa di connessione dell'account di archiviazione.

// 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; }
}

Questo codice recupera anche i valori di configurazione essenziali dalle variabili di ambiente, ad esempio la stringa di connessione dell'account di archiviazione e la chiave di Computer Vision. Queste variabili di ambiente verranno aggiunte all'ambiente function Azure dopo la distribuzione.

La ProcessImage funzione usa anche un secondo metodo denominato AnalyzeImage. Questo codice usa l'endpoint URL e la chiave dell'account Computer Vision per effettuare una richiesta a tale server per elaborare l'immagine. La richiesta restituisce tutto il testo individuato nell'immagine, che viene quindi scritto in archiviazione tabelle usando l'associazione di output nel metodo 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();
}

Esecuzione in locale

Per eseguire il progetto in locale, è possibile popolare le variabili di ambiente usando il file local.settings.json. All'interno di questo file, compilare i valori segnaposto con i valori salvati in precedenza durante la creazione delle risorse Azure.

Anche se il codice della funzione Azure viene eseguito in locale, si connette comunque ai servizi live in Azure, anziché usare qualsiasi emulatore locale.

{
    "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"
    }
}

Distribuire il codice in Azure Functions

A questo punto è possibile distribuire l'applicazione in Azure usando Visual Studio. È anche possibile creare l'app Azure Functions in Azure contemporaneamente al processo di distribuzione.

  1. Per iniziare, fare clic con il pulsante destro del mouse sul nodo di progetto ProcessImage e selezionare Pubblica.

  2. Nella finestra di dialogo Publish selezionare Azure e scegliere Next.

    Un'istantanea che mostra come selezionare Azure come destinazione di distribuzione.

  3. Selezionare Azure App per le funzioni (Windows) o Azure App per le funzioni (Linux) nella schermata successiva e quindi scegliere di nuovo Next.

    Uno screenshot che mostra come scegliere Azure Functions come destinazione di distribuzione specifica.

  4. Nel passaggio Istanza di Funzioni assicurarsi di scegliere la sottoscrizione in cui si vuole eseguire la distribuzione. Selezionare quindi il simbolo + verde sul lato destro della finestra di dialogo.

  5. Verrà visualizzata una nuova finestra di dialogo. Immettere i valori seguenti per la nuova app per le funzioni.

    • Nome: immettere msdocsprocessimage o un nome simile.
    • Nome sottoscrizione: scegliere la sottoscrizione da usare.
    • Gruppo di risorse: usare il gruppo di risorse msdocs-storage-function creato in precedenza.
    • Tipo di piano: selezionare A consumo.
    • Località: scegliere l'area più vicina.
    • Azure Storage: selezionare l'account di archiviazione creato in precedenza.

    Uno screenshot che mostra come creare una nuova Funzione App in Azure.

  6. Dopo aver compilato tutti questi valori, selezionare Crea. Visual Studio e Azure iniziano il provisioning delle risorse richieste dalle quali, il completamento richiede alcuni istanti.

  7. Al termine del processo, selezionare Fine per chiudere il flusso di lavoro della finestra di dialogo.

  8. Il passaggio finale per distribuire la funzione Azure consiste nel selezionare Publish in alto a destra dello schermo. Anche il completamento della pubblicazione della funzione potrebbe richiedere alcuni istanti. Al termine, l'applicazione viene eseguita in Azure.

Connettere i servizi

La funzione Azure è stata distribuita correttamente, ma non è ancora in grado di connettersi all'account di archiviazione e ai servizi Computer Vision. Le chiavi e le stringhe di connessione corrette devono prima essere aggiunte alle impostazioni di configurazione dell'app Azure Functions.

  1. Nella parte superiore del portale di Azure cercare function e selezionare Appfunction dai risultati.

  2. Nella schermata App per le funzioni selezionare l'app per le funzioni creata in Visual Studio.

  3. Nella pagina panoramica dell'app per le funzioni selezionare Configurazione nel riquadro di spostamento a sinistra per aprire una pagina in cui è possibile gestire vari tipi di impostazioni di configurazione per l'app. Per il momento, verrà usata la sezione Impostazioni applicazione.

  4. Il passaggio successivo consiste nell'aggiungere le impostazioni per il nome e la connection string dell'account di archiviazione, la chiave privata Computer Vision e l'endpoint Computer Vision.

  5. Nella scheda Impostazione applicazione selezionare + Nuova impostazione applicazione. Nel riquadro a comparsa visualizzato immettere i valori seguenti:

    • Nome: immettere il valore ComputerVisionKey.
    • Value: incollare la chiave di Computer Vision salvata in precedenza.
  6. Selezionare OK per aggiungere questa impostazione all'app.

    Uno screenshot che mostra come aggiungere una nuova impostazione dell'applicazione a un'Azure Function.

  7. Ripetere quindi questo processo per l'endpoint del servizio Computer Vision usando i valori seguenti:

    • Nome: immettere il valore ComputerVisionEndpoint.
    • Valore: incollare l'URL dell'endpoint salvato in precedenza.
  8. Ripetere questo passaggio per la connessione all'account di archiviazione usando i valori seguenti:

    • Nome: immettere il valore StorageConnection.
    • Value: incollare il connection string salvato in precedenza.
  9. Ripetere infine questo processo ancora una volta per il nome dell'account di archiviazione, usando i valori seguenti:

    • Nome: immettere il valore StorageAccountName.
    • Valore: immettere il nome dell'account di archiviazione creato.
  10. Dopo aver aggiunto queste impostazioni dell'applicazione, assicurarsi di selezionare Salva nella parte superiore della pagina di configurazione. Al termine del salvataggio, è possibile premere Aggiorna per assicurarsi che le impostazioni vengano selezionate.

Tutte le variabili di ambiente necessarie per connettere la funzione di Azure a servizi diversi sono ora disponibili.

Caricare un'immagine in Blob Storage

A questo punto, è possibile testare l'applicazione. È possibile caricare un BLOB nel contenitore e quindi verificare che il testo nell'immagine sia stato salvato in Archiviazione tabelle.

  1. In primo luogo, nella parte superiore del portale di Azure cercare Storage e selezionare account di archiviazione. Nella pagina dell'account di archiviazione selezionare l'account creato in precedenza.

  2. Selezionare quindi Contenitori nel riquadro di spostamento a sinistra e quindi passare al contenitore ImageAnalysis creato in precedenza. Da qui è possibile caricare un'immagine di test direttamente all'interno del browser.

    Screenshot che mostra come passare a un contenitore di archiviazione.

  3. È possibile trovare alcune immagini di esempio incluse nella cartella images nella radice del progetto di esempio scaricabile oppure è possibile usarne una personalizzata.

  4. Nella parte superiore della pagina ImageAnalysis selezionare Carica. Nel riquadro a comparsa visualizzato selezionare l'icona della cartella per aprire un browser di file. Scegliere l'immagine da caricare e quindi selezionare Carica.

    Screenshot che mostra come caricare un BLOB in un contenitore di archiviazione.

  5. Il file dovrebbe essere visualizzato all'interno del contenitore BLOB. Successivamente, è possibile verificare che il caricamento abbia attivato la funzione Azure e che il testo nell'immagine sia stato analizzato e salvato correttamente in Archiviazione tabelle.

  6. Usando i percorsi di navigazione nella parte superiore della pagina, passare a un livello superiore nell'account di archiviazione. Individuare e selezionare Browser archiviazione nel riquadro di spostamento a sinistra e quindi selezionare Tabelle.

  7. Ora dovrebbe essere disponibile una tabella ImageText. Selezionare la tabella per visualizzare in anteprima le righe di dati al suo interno. Dovrebbe essere visualizzata una voce per il testo dell'immagine elaborata del caricamento. È possibile verificarlo usando il timestamp o visualizzando il contenuto della colonna Text.

    Una screenshot che mostra una voce di testo in Azure Table Storage.

Congratulations! È stata eseguita l'elaborazione di un'immagine caricata in Blob Storage usando Azure Functions e Computer Vision.

Pulire le risorse

Se non si intende continuare a usare questa applicazione, è possibile eliminare le risorse create rimuovendo il gruppo di risorse.

  1. Selezionare Gruppi di risorse nel riquadro di spostamento principale.
  2. Selezionare il gruppo di risorse msdocs-storage-function dall'elenco.
  3. Selezionare il pulsante Elimina gruppo di risorse nella parte superiore della pagina di panoramica del gruppo di risorse.
  4. Immettere il nome del gruppo di risorse msdocs-storage-function nella finestra di dialogo di conferma.
  5. Selezionare elimina. Il completamento del processo di eliminazione del gruppo di risorse potrebbe richiedere alcuni minuti.