Esercitazione: Caricare e analizzare un file con Funzioni di Azure e Archiviazione BLOB

In questa esercitazione si apprenderà come caricare un'immagine in Archiviazione BLOB di Azure ed elaborarla usando Funzioni di Azure e Visione artificiale. Si apprenderà anche come implementare trigger e associazioni di Funzioni di Azure come parte di questo processo. Insieme, questi servizi analizzeranno un'immagine caricata che contiene testo, lo estrarranno e quindi lo archivieranno in una riga del database per analisi successive o altri scopi.

Archiviazione BLOB di Azure è la soluzione Microsoft per l'archiviazione di oggetti a scalabilità molto elevata per il cloud. Archiviazione BLOB è progettata 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 su Archiviazione BLOB, vedere la pagina di panoramica.

Funzioni di Azure è una soluzione per computer serverless, che consente di scrivere ed eseguire piccoli blocchi di codice come funzioni a scalabilità elevata, serverless e basate su eventi. Per altre informazioni su Funzioni di Azure, vedere la pagina di panoramica.

La presente esercitazione include informazioni su come:

  • Caricare le immagini e i file in Archiviazione BLOB
  • Usare un trigger di evento di Funzione di Azure per elaborare i dati caricati in Archiviazione BLOB
  • Usare Servizi di Azure AI per analizzare un'immagine
  • Scrivere dati in Archiviazione tabelle usando associazioni di output di Funzioni di Azure

Prerequisiti

Creare l'account di archiviazione e il contenitore

Il primo passaggio consiste nel creare l'account di archiviazione che conterrà i dati BLOB caricati, che in questo scenario saranno immagini che contengono testo. Un account di archiviazione offre servizi diversi, ma questa esercitazione utilizza Archiviazione BLOB e Archiviazione tabelle.

Accedere al portale di 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, quindi 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.

    A screenshot showing how create a storage account in Azure.

  4. Selezionare Rivedi e crea nella parte inferiore e Azure convaliderà le informazioni immesse. Una volta convalidate le impostazioni, scegliere Crea e Azure inizierà 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). Selezionare Crea.

    A screenshot showing how to create a new storage container.

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

Recuperare la stringa di connessione

L'ultimo passaggio consiste nel recuperare la stringa di connessione 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 di Stringa di connessione nella sezione key1 e incollarlo da qualche parte per usarlo successivamente. È opportuno annotare anche il nome dell'account di archiviazione msdocsstoragefunction, che servirà ancora in seguito.

    A screenshot showing how to access the storage container.

Questi valori saranno necessari quando si dovrà connettere la funzione di Azure a questo account di archiviazione.

Creare il servizio Visione artificiale

Creare quindi l'account del servizio Visione artificiale per elaborare i file caricati. Visione artificiale fa parte di Servizi di Azure AI e offre un'ampia gamma di funzionalità per estrarre i dati dalle immagini. Per altre informazioni su Visione artificiale, vedere la pagina di 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 Crea Visione artificiale 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.

    A screenshot showing how to create a new Computer Vision service.

  4. Selezionare Rivedi e crea nella parte inferiore. Azure impiegherà qualche minuto per convalidare le informazioni immesse. Una volta convalidate le impostazioni, scegliere Crea e Azure inizierà il provisioning del servizio Visione artificiale, che potrebbe richiedere alcuni minuti.

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

Recuperare le chiavi

Successivamente, è necessario trovare la chiave privata e l'URL dell'endpoint per il servizio Visione artificiale da usare nell'app Funzioni di Azure.

  1. Nella pagina di panoramica Visione artificiale 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.

    A screenshot showing how to retrieve the Keys and URL Endpoint for a Computer Vision service.

Scaricare e configurare il progetto di esempio

Il codice per la funzione di 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 Visione artificiale
  • Accetta il file caricato come parametro BLOB
  • Analizza il BLOB usando il servizio Visione artificiale
  • Invia il testo dell'immagine analizzata a una nuova riga di tabella usando associazioni di output

Dopo aver scaricato e aperto il progetto, è bene comprendere alcuni aspetti essenziali nel metodo principale Run illustrato di seguito. La funzione di Azure utilizza associazioni Trigger e Output, che vengono applicate tramite 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 esegue il pull di una stringa di connessione di Archiviazione tabelle dalle variabili di ambiente in modo che la funzione di Azure possa accedervi.

L'attributo BlobTrigger viene usato per associare la funzione all'evento di caricamento in Archiviazione BLOB e fornisce il BLOB caricato nella funzione Run. Il trigger BLOB ha due parametri, uno per il nome del contenitore BLOB da monitorare per rilevare i caricamenti 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 dalle variabili di ambiente anche i valori di configurazione essenziali, ad esempio la stringa di connessione dell'account di archiviazione e la chiave di Visione artificiale. Queste variabili di ambiente verranno aggiunte all'ambiente della funzione di Azure dopo la distribuzione.

La funzione ProcessImage usa anche un secondo metodo denominato AnalyzeImage, come illustrato di seguito. Questo codice usa l'endpoint dell'URL e la chiave dell'account di Visione artificiale per richiedere a tale server di elaborare l'immagine. La richiesta restituirà tutto il testo individuato nell'immagine, che verrà 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, sostituire i valori dei segnaposto con i valori salvati in precedenza durante la creazione delle risorse di Azure.

Il codice della funzione di Azure, anche se verrà eseguito in locale, si connetterà comunque ai servizi live in Azure, invece di usare un 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 Funzioni di Azure

A questo punto è possibile distribuire l'applicazione in Azure usando Visual Studio. È anche possibile creare l'app per le funzioni di Azure 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 Pubblica selezionare Azure e scegliere Avanti.

    A screenshot showing how to select Azure as the deployment target.

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

    A screenshot showing how to choose Azure Functions as a specific deployment target.

  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. Viene 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.
    • Archiviazione di Azure: selezionare l'account di archiviazione creato in precedenza.

    A screenshot showing how to create a new Function App in Azure.

  6. Dopo aver immesso tutti questi valori, selezionare Crea. Visual Studio e Azure inizieranno il provisioning delle risorse richieste, che richiederà 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 di Azure consiste nel selezionare Pubblica in alto a destra nella schermata. Anche il completamento della pubblicazione della funzione potrebbe richiedere alcuni istanti. Al termine, l'applicazione verrà eseguita in Azure.

Connettere i servizi

La funzione di Azure è stata distribuita correttamente, ma non è ancora possibile connettersi all'account di archiviazione e ai servizi di Visione artificiale. Le chiavi e le stringhe di connessione corrette devono prima essere aggiunte alle impostazioni di configurazione dell'app per le funzioni di Azure.

  1. Nella parte superiore del portale di Azure cercare funzione e selezionare App per le funzioni nei risultati.

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

  3. Nella pagina di panoramica App per le funzioni selezionare Configurazione nel riquadro di spostamento a sinistra. Verrà aperta 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 stringa di connessione dell'account di archiviazione, la chiave privata di Visione artificiale e l'endpoint di Visione artificiale.

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

    • Nome: immettere il valore ComputerVisionKey.
    • Valore: incollare la chiave di Visione artificiale salvata in precedenza.
  6. Fare clic su OK per aggiungere questa impostazione all'app.

    A screenshot showing how to add a new application setting to an Azure Function.

  7. Ripetere quindi questo processo per l'endpoint del servizio Visione artificiale 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.
    • Valore: incollare la stringa di connessione salvata 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 Archiviazione BLOB

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 Archiviazione 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.

    A screenshot showing how to navigate to a storage container.

  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 a destra per aprire un browser di file. Scegliere l'immagine da caricare e quindi selezionare Carica.

    A screenshot showing how to upload a blob to a storage container.

  5. Il file dovrebbe essere visualizzato all'interno del contenitore BLOB. Successivamente, è possibile verificare che il caricamento abbia attivato la funzione di 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. Fare clic sulla 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.

    A screenshot showing a text entry in Azure Table Storage.

Complimenti. È stata eseguita l'elaborazione di un'immagine caricata in Archiviazione BLOB usando Funzioni di Azure e Visione artificiale.

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. Seleziona Elimina. Il completamento del processo per eliminare il gruppo di risorse può richiedere alcuni minuti.