Tutorial: Hochladen und Analysieren einer Datei mit Azure Functions und Blob Storage

In diesem Lernprogramm erfahren Sie, wie Sie ein Bild in Azure Blob Storage hochladen und mithilfe von Azure Functions und maschinellem Sehen verarbeiten. Außerdem erfahren Sie, wie Sie Azure Function-Trigger und -Bindungen als Teil dieses Prozesses implementieren. Zusammen analysieren diese Dienste ein hochgeladenes Bild, das Text enthält, extrahieren den Text aus ihm und speichern ihn dann in einer Datenbankzeile für spätere Analysen oder andere Zwecke.

Azure Blob Storage ist die hochgradig skalierbare Objektspeicherlösung von Microsoft für die Cloud. Blob-Storage wurde für das Speichern von Bildern und Dokumenten, das Streamen von Mediendateien, das Verwalten von Sicherungs- und Archivdaten und vieles mehr konzipiert. Weitere Informationen zu Blob Storage finden Sie auf der Übersichtsseite.

Azure Functions ist eine serverlose Computerlösung, mit der Sie kleine Codeblöcke als hochgradig skalierbare, serverlose, ereignisgesteuerte Funktionen schreiben und ausführen können. Weitere Informationen zu Azure Functions finden Sie auf der Übersichtsseite.

In diesem Tutorial lernen Sie Folgendes:

  • Hochladen von Bildern und Dateien in Blob Storage
  • Verwenden eines Azure Function-Ereignistriggers zum Verarbeiten von Daten, die in Blob Storage hochgeladen wurden
  • Verwenden von Cognitive Services zum Analysieren eines Bilds
  • Schreiben von Daten in Table Storage mithilfe von Azure Functions-Ausgabebindungen

Voraussetzungen

Erstellen des Speicherkontos und Containers

Der erste Schritt besteht darin, das Speicherkonto zu erstellen, das die hochgeladenen Blobdaten enthält, die in diesem Szenario Bilder sind, die Text enthalten. Ein Speicherkonto bietet mehrere verschiedene Dienste, aber dieses Tutorial verwendet Blob Storage und Table Storage.

Melden Sie sich beim Azure-Portal an.

  1. Suchen Sie in der Suchleiste oben im Portal nach Speicher, und wählen Sie das Ergebnis mit der Bezeichnung Speicherkonten aus.

  2. Wählen Sie auf der Seite Speicherkonten oben links die Option + Erstellen aus.

  3. Geben Sie auf der Seite Speicherkonto erstellen die folgenden Werte ein:

  • Abonnement: Wählen Sie das gewünschte Abonnement aus.
  • Ressourcengruppe: Wählen Sie Neu erstellen aus, geben Sie einen Namen msdocs-storage-function ein, und wählen Sie OK aus.
  • Speicherkontoname: Geben Sie den Wert msdocsstoragefunction ein. Der Speicherkontoname muss in Azure eindeutig sein, daher müssen Sie möglicherweise Ziffern nach dem Namen hinzufügen, z. B. msdocsstoragefunction123.
  • Region: Wählen Sie die Region aus, die Ihrem Standort am nächsten liegt.
  • Leistung: Wählen Sie Standard aus.
  • Redundanz: Übernehmen Sie den Standardwert.

Screenshot: Erstellen eines Speicherkontos in Azure

  1. Wählen Sie unten Überprüfen und Erstellen aus, Azure überprüft dann die eingegebenen Informationen. Nachdem die Einstellungen überprüft wurden, wählen Sie Erstellen aus, Azure beginnt dann mit der Bereitstellung des Speicherkontos. Dies kann einen Moment dauern.

Erstellen des Containers

  1. Wählen Sie nach der Bereitstellung des neuen Speicherkontos Zu Ressource wechseln aus. Der nächste Schritt besteht darin, einen Speichercontainer innerhalb des Kontos zu erstellen, um hochgeladene Bilder für die Analyse zu speichern.

  2. Wählen Sie im Navigationsbereich Container aus.

  3. Wählen Sie auf der Seite Container oben + Container aus. Geben Sie den Namenimageanalysis ein, und stellen Sie sicher, dass die Öffentliche Zugriffsebene auf Blob (nur anonymer Lesezugriff für Blobs) festgelegt ist. Klicken Sie anschließend auf Erstellen.

Screenshot: Erstellen eines neuen Speichercontainers

Ihr neuer Container sollte in der Liste der Container angezeigt werden.

Abrufen der Verbindungszeichenfolge

Der letzte Schritt besteht darin, unsere Verbindungszeichenfolge für das Speicherkonto abzurufen.

  1. Wählen Sie im linken Navigationsbereich Zugriffsschlüssel aus.

  2. Wählen Sie auf der Seite Zugriffsschlüssel die Option Schlüssel anzeigen aus. Kopieren Sie den Wert der Verbindungszeichenfolge unter dem Abschnitt Key1, und speichern Sie ihn, um ihn später zu verwenden. Notieren Sie sich auch den Namen msdocsstoragefunction des Speicherkontos zur späteren Verwendung.

Screenshot: Zugreifen auf den Speichercontainer

Diese Werte sind erforderlich, wenn wir unsere Azure-Funktion mit diesem Speicherkonto verbinden müssen.

Erstellen des Diensts für maschinelles Sehen

Erstellen Sie als nun das Konto des Diensts für maschinelles Sehen, das die hochgeladenen Dateien verarbeitet. Maschinelles Sehen ist Teil von Azure Cognitive Services und bietet eine Vielzahl von Features zum Extrahieren von Daten aus Bildern. Weitere Informationen zu maschinellem Sehen finden Sie auf der Übersichtsseite.

  1. Suchen Sie in der Suchleiste oben im Portal nach Computer, und wählen Sie das Ergebnis mit der Bezeichnung Maschinelles Sehen aus.

  2. Wählen Sie auf der Seite Maschinelles Sehen die Option + Erstellen aus.

  3. Geben Sie auf der Seite Maschinelles Sehen erstellen die folgenden Werte ein:

  • Abonnement: Wählen Sie das gewünschte Abonnement aus.
  • Ressourcengruppe: Verwenden Sie die zuvor erstellte Ressourcengruppe msdocs-storage-function.
  • Region: Wählen Sie die Region aus, die Ihrem Standort am nächsten liegt.
  • Name: Geben Sie den Namen msdocscomputervision ein.
  • Tarif: Wählen Sie Kostenlos aus, wenn diese Option verfügbar ist, andernfalls wählen Sie Standard S1 aus.
  • Aktivieren Sie das Kontrollkästchen Hinweis zu verantwortungsvoller KI, wenn Sie den Bedingungen zustimmen.

Screenshot: Erstellen eines neuen Maschinelles Sehen-Diensts

  1. Wählen Sie unten Überprüfen und erstellen aus. Azure benötigt einen Moment, um die von Ihnen eingegebenen Informationen zu überprüfen. Nachdem die Einstellungen überprüft wurden, wählen Sie Erstellen aus. Azure beginnt dann mit der Bereitstellung des Diensts für maschinelles Sehen. Dies kann einen Moment dauern.

  2. Nachdem der Vorgang abgeschlossen wurde, wählen Sie Zur Ressource wechseln aus.

Abrufen der Schlüssel

Nun müssen Sie den geheimen Schlüssel und die Endpunkt-URL für den Dienst für maschinelles Sehen ermitteln, der bzw. die in Ihrer Azure Functions-App verwendet werden soll.

  1. Wählen Sie auf der Übersichtsseite Maschinelles Sehen die Option Schlüssel und Endpunkt aus.

  2. Kopieren Sie auf der Seite Schlüssel und EndPoint die Werte Schlüssel 1 und EndPoint, und speichern Sie sie, um sie später zu verwenden.

Screenshot: Abrufen der Schlüssel und des URL-Endpunkts für einen Maschinelles Sehen-Dienst

Herunterladen und Konfigurieren des Beispielprojekts

Der Code für die in diesem Lernprogramm verwendete Azure-Funktion finden Sie in diesem GitHub Repository. Sie können das Projekt auch mit dem folgenden Befehl klonen.

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

Mit dem Beispielprojektcode werden die folgenden Aufgaben durchgeführt:

  • Abrufen von Umgebungsvariablen zum Herstellen einer Verbindung mit dem Speicherkonto und dem Dienst für maschinelles Sehen
  • Akzeptieren der hochgeladenen Datei als Blobparameter
  • Analysieren des Blobs mithilfe des Diensts für maschinelles Sehen
  • Senden des analysierten Bildtexts mithilfe von Ausgabebindungen an eine neue Tabellenzeile

Nachdem Sie das Projekt heruntergeladen und geöffnet haben, müssen Sie einige wichtige Konzepte in der unten gezeigten main-Methode Run verstehen. Die Azure-Funktion verwendet Trigger und Ausgabebindungen, die mithilfe von Attributen für die Run-Methodensignatur angewendet werden.

Das Table-Attribut verwendet zwei Parameter. Der erste Parameter gibt den Namen der Tabelle an, in die der von der Funktion zurückgegebene analysierte Bildtextwert geschrieben werden soll. Der zweite Connection-Parameter ruft eine Table Storage-Verbindungszeichenfolge aus den Umgebungsvariablen ab, sodass die Azure-Funktion Zugriff darauf besitzt.

Das BlobTrigger-Attribut wird verwendet, um die Funktion an das Uploadereignis in Blob Storage zu binden, und liefert das hochgeladene Blob an die Run-Funktion. Der Blobtrigger verfügt über zwei eigene Parameter: einen für den Namen des Blobcontainers, der für Uploads überwacht werden soll, und einen für die Verbindungszeichenfolge des Speicherkontos.

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

Dieser Code ruft außerdem wichtige Konfigurationswerte aus Umgebungsvariablen ab, z. B. die Verbindungszeichenfolge des Speicherkontos und den Schlüssel für maschinelles Sehen. Wir fügen diese Umgebungsvariablen unserer Azure Functions-Umgebung nach der Bereitstellung hinzu.

Die ProcessImage-Funktion verwendet auch eine zweite Methode namens AnalyzeImage(siehe unten). Dieser Code verwendet den URL-Endpunkt und den Schlüssel unseres Kontos für maschinelles Sehen, um eine Anforderung an diesen Server auszugeben, das Bild zu verarbeiten. Die Anforderung gibt den im Bild ermittelten Text zurück, der dann mithilfe der Ausgabebindung für die Run-Methode in Table Storage geschrieben wird.

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

Lokales Ausführen

Wenn Sie das Projekt lokal ausführen möchten, können Sie die Umgebungsvariablen mithilfe der Datei „local.settings.json“ mit Daten auffüllen. Ersetzen Sie in dieser Datei die Platzhalterwerte durch die Werte, die Sie zuvor beim Erstellen der Azure-Ressourcen gespeichert haben.

Obwohl der Azure-Funktionscode lokal ausgeführt wird, stellt er eine Verbindung mit den Livediensten außerhalb von Azure her, anstatt lokale Emulatoren zu verwenden.

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

Bereitstellen des Codes für Azure Functions

Sie sind jetzt bereit, die Anwendung mithilfe von Visual Studio in Azure bereitzustellen. Sie können auch die Azure Functions-App in Azure gleichzeitig als Teil des Bereitstellungsprozesses erstellen.

  1. Wählen Sie zunächst mit der rechten Maustaste den Projektknoten ProcessImage aus, und wählen Sie dann Veröffentlichen aus.

  2. Wählen Sie im Dialogfeld Veröffentlichen die Option „Azure“ aus, und wählen Sie dann Weiter aus.

Screenshot: Auswahl von Azure als Bereitstellungsziel

  1. Wählen Sie auf dem nächsten Bildschirm Azure-Funktions-App (Windows) oder Azure-Funktions-App (Linux) aus, und wählen Sie dann Weiter aus.

Screenshot: Auswahl von Azure Functions als spezifisches Bereitstellungsziel

  1. Stellen Sie im Schritt Functions-Instanz sicher, dass das Abonnement ausgewählt ist, in dem die Bereitstellung erfolgen soll. Wählen Sie als nun das grüne +-Symbol auf der rechten Seite des Dialogfelds aus.

  2. Ein neues Dialogfeld wird geöffnet. Geben Sie die folgenden Werte für Ihre neue Funktions-App ein.

  • Name: Geben Sie msdocsprocessimage oder einen ähnlichen Namen ein.
  • Abonnementname: Wählen Sie das gewünschte Abonnement aus.
  • Ressourcengruppe: Wählen Sie die zuvor erstellte Ressourcengruppe msdocs-storage-function aus.
  • Plantyp: Wählen Sie Verbrauch aus.
  • Standort: Wählen Sie die Ihnen am nächsten gelegene Region aus.
  • Azure Storage: Wählen Sie das zuvor erstellte Speicherkonto aus.

Screenshot: Erstellen einer neuen Funktions-App in Azure

  1. Nachdem Sie alle diese Werte angegeben haben, wählen Sie Erstellen aus. Visual Studio und Azure beginnen mit der Bereitstellung der angeforderten Ressourcen. Dies dauert einige Zeit.

  2. Nachdem der Vorgang abgeschlossen wurde, wählen Sie Fertig stellen aus, um den Dialogfeldworkflow zu schließen.

  3. Der letzte Schritt zum Bereitstellen der Azure-Funktion besteht darin, Veröffentlichen oben rechts auf dem Bildschirm auszuwählen. Die Veröffentlichung der Funktion kann ebenfalls einige Zeit in Anspruch nehmen. Sobald sie abgeschlossen wurde, wird Ihre Anwendung in Azure ausgeführt.

Verbinden der Dienste

Die Azure-Funktion wurde erfolgreich bereitgestellt, kann jedoch noch keine Verbindung mit dem Speicherkonto und den Diensten für maschinelles Sehen herstellen. Die richtigen Schlüssel und Verbindungszeichenfolgen müssen zunächst den Konfigurationseinstellungen der Azure Functions-App hinzugefügt werden.

  1. Suchen Sie oben im Azure-Portal nach Funktion, und wählen Sie Funktions-App aus den Ergebnissen aus.

  2. Wählen Sie auf dem Bildschirm Funktions-App die Funktions-App aus, die Sie in Visual Studio erstellt haben.

  3. Wählen Sie auf der Übersichtsseite Funktions-App die Option Konfiguration im linken Navigationsbereich aus. Dadurch wird eine Seite geöffnet, auf der verschiedene Arten von Konfigurationseinstellungen für die App verwaltet werden können. Zunächst interessieren wir uns für den Abschnitt Anwendungseinstellungen.

  4. Der nächste Schritt besteht darin, Einstellungen für unseren Speicherkontonamen und die Verbindungszeichenfolge, den geheimen Schlüssel für maschinelles Sehen und den Endpunkt für maschinelles Sehen hinzuzufügen.

  5. Wählen Sie auf der Registerkarte Anwendungseinstellungen die Option + Neue Anwendungseinstellung aus. Geben Sie im angezeigten Flyout die folgenden Werte ein:

  • Name: Geben Sie den Wert ComputerVisionKey ein.
  • Wert: Fügen Sie den zuvor gespeicherten Schlüssel für maschinelles Sehen ein.
  1. Klicken Sie auf OK, um Ihrer App diese Einstellung hinzuzufügen.

Screenshot: Hinzufügen einer neuen Anwendungseinstellung zu einer Azure-Funktion

  1. Nun wiederholen Sie diesen Prozess für den Endpunkt des Diensts für maschinelles Sehen, wobei die folgenden Werte verwendet werden:
  • Name: Geben Sie den Wert ComputerVisionEndpoint ein.
  • Wert: Fügen Sie die Endpunkt-URL ein, die Sie zuvor gespeichert haben.
  1. Wiederholen Sie diesen Schritt für die Verbindung mit dem Speicherkonto, indem Sie die folgenden Werte verwenden:
  • Name: Geben Sie den Wert StorageConnection ein.
  • Wert: Fügen Sie die zuvor gespeicherte Verbindungszeichenfolge ein.
  1. Wiederholen Sie diesen Vorgang ein weiteres Mal für den Namen des Speicherkontos, wobei die folgenden Werte verwendet werden:
  • Name: Geben Sie den Wert StorageAccountName ein.
  • Wert: Geben Sie den Namen des zuvor erstellten Speicherkontos ein.
  1. Nachdem Sie diese Anwendungseinstellungen hinzugefügt haben, müssen Sie oben auf der Konfigurationsseite Speichern auswählen. Wenn der Speichervorgang abgeschlossen ist, können Sie auch auf Aktualisieren klicken, um sicherzustellen, dass die Einstellungen übernommen wurden.

Alle erforderlichen Umgebungsvariablen zum Verbinden der Azure-Funktion mit verschiedenen Diensten sind nun vorhanden.

Hochladen eines Bilds in Blob Storage

Sie sind jetzt bereit, die Anwendung auszuprobieren! Sie können ein Blob in den Container hochladen und dann überprüfen, ob der Text im Bild in Table Storage gespeichert wurde.

  1. Suchen Sie zunächst oben im Azure-Portal nach Speicher, und wählen Sie das Speicherkonto aus. Wählen Sie auf der Seite Speicherkonto das zuvor erstellte Konto aus.

  2. Wählen Sie als dann Container auf der linken Navigationsleiste aus, und navigieren Sie dann zu dem zuvor erstellten Container ImageAnalysis. Von hier aus können Sie ein Testbild direkt im Browser hochladen.

Screenshot: Navigieren zu einem Speichercontainer

  1. Sie finden einige Beispielbilder im Ordner images im Stammverzeichnis des herunterladbaren Beispielprojekts, oder Sie können ein eigenes Bild verwenden.

  2. Wählen Sie oben auf der Seite ImageAnalysis die Option Upload (Hochladen) aus. Wählen Sie im Flyout, das geöffnet wird, das Ordnersymbol auf der rechten Seite aus, um einen Dateibrowser zu öffnen. Wählen Sie das Bild aus, das Sie hochladen möchten, und wählen Sie dann Upload (Hochladen) aus.

Screenshot: Hochladen eines Blobs in einen Speichercontainer

  1. Die Datei sollte innerhalb des Blobcontainers angezeigt werden. Nun können Sie überprüfen, ob der Upload die Azure-Funktion ausgelöst hat und der Text im Bild analysiert und ordnungsgemäß in Table Storage gespeichert wurde.

  2. Navigieren Sie mit den Breadcrumbs oben auf der Seite in Ihrem Speicherkonto eine Ebene nach oben. Suchen Sie in der linken Navigationsleiste nach Speicherbrowser, wählen Sie diesen aus, und wählen Sie dann Tabellen aus.

  3. Eine ImageText-Tabelle sollte jetzt verfügbar sein. Klicken Sie auf die Tabelle, um eine Vorschau der darin enthaltenen Datenzeilen anzuzeigen. Sie sollten einen Eintrag für den verarbeiteten Bildtext unseres Uploads sehen. Sie können dies mithilfe des Zeitstempels überprüfen oder indem Sie den Inhalt der Spalte Text anzeigen.

Screenshot: Texteintrag in Azure Table Storage

Herzlichen Glückwunsch! Sie haben ein Bild, das in Blob Storage hochgeladen wurde, mit Azure Functions und maschinellem Sehen erfolgreich verarbeitet.

Bereinigen von Ressourcen

Wenn Sie diese Anwendung nicht mehr verwenden möchten, können Sie die von Ihnen erstellten Ressourcen löschen, indem Sie die Ressourcengruppe entfernen.

  1. Wählen Sie im Hauptnavigationsbereich die Option Ressourcengruppen aus.
  2. Wählen Sie die Ressourcengruppe msdocs-storage-function aus der Liste aus.
  3. Wählen Sie oben auf der Übersichtsseite der Ressourcengruppe die Schaltfläche Ressourcengruppe löschen aus.
  4. Geben Sie den Ressourcengruppennamen msdocs-storage-function im Bestätigungsdialogfeld ein.
  5. Wählen Sie „Löschen“ aus. Der Vorgang zum Löschen der Ressourcengruppe kann einige Minuten dauern.