Samouczek: przekazywanie i analizowanie pliku za pomocą Azure Functions i usługi Blob Storage

Z tego samouczka dowiesz się, jak przekazać obraz do Azure Blob Storage i przetworzyć go przy użyciu Azure Functions i przetwarzanie obrazów. Dowiesz się również, jak zaimplementować wyzwalacze i powiązania funkcji platformy Azure w ramach tego procesu. Razem te usługi będą analizować przekazany obraz, który zawiera tekst, wyodrębniać z niego tekst, a następnie przechowywać tekst w wierszu bazy danych w celu późniejszej analizy lub innych celów.

Azure Blob Storage to wysoce skalowalne rozwiązanie magazynu obiektów firmy Microsoft dla chmury. Usługa Blob Storage jest przeznaczona do przechowywania obrazów i dokumentów, przesyłania strumieniowego plików multimedialnych, zarządzania danymi kopii zapasowych i archiwizowania oraz wiele innych. Więcej informacji na temat usługi Blob Storage można uzyskać na stronie przeglądu.

Azure Functions to rozwiązanie komputerowe bezserwerowe, które umożliwia pisanie i uruchamianie małych bloków kodu jako wysoce skalowalnych, bezserwerowych, opartych na zdarzeniach funkcji. Więcej informacji na temat Azure Functions można uzyskać na stronie przeglądu.

Niniejszy samouczek zawiera informacje na temat wykonywania następujących czynności:

  • Przekazywanie obrazów i plików do usługi Blob Storage
  • Używanie wyzwalacza zdarzeń funkcji platformy Azure do przetwarzania danych przekazanych do usługi Blob Storage
  • Analizowanie obrazu za pomocą usług Azure AI
  • Zapisywanie danych w usłudze Table Storage przy użyciu powiązań wyjściowych funkcji platformy Azure

Wymagania wstępne

Tworzenie konta magazynu i kontenera

Pierwszym krokiem jest utworzenie konta magazynu, które będzie przechowywać przekazane dane obiektu blob, które w tym scenariuszu będą obrazami zawierającymi tekst. Konto magazynu oferuje kilka różnych usług, ale ten samouczek korzysta z usług Blob Storage i Table Storage.

Zaloguj się w witrynie Azure Portal.

  1. Na pasku wyszukiwania w górnej części portalu wyszukaj pozycję Magazyn i wybierz wynik z etykietą Konta magazynu.

  2. Na stronie Konta magazynu wybierz pozycję + Utwórz w lewym górnym rogu.

  3. Na stronie Tworzenie konta magazynu wprowadź następujące wartości:

    • Subskrypcja: wybierz żądaną subskrypcję.
    • Grupa zasobów: wybierz pozycję Utwórz nową i wprowadź nazwę msdocs-storage-function, a następnie wybierz przycisk OK.
    • Nazwa konta magazynu: wprowadź wartość .msdocsstoragefunction Nazwa konta magazynu musi być unikatowa na platformie Azure, dlatego może być konieczne dodanie liczb po nazwie, takich jak msdocsstoragefunction123.
    • Region: wybierz region, który znajduje się najbliżej Ciebie.
    • Wydajność: wybierz pozycję Standardowa.
    • Nadmiarowość: pozostaw wybraną wartość domyślną.

    Zrzut ekranu przedstawiający sposób tworzenia konta magazynu na platformie Azure.

  4. Wybierz pozycję Przejrzyj i utwórz u dołu, a platforma Azure zweryfikuje wprowadzone informacje. Po zweryfikowaniu ustawień wybierz pozycję Utwórz , a platforma Azure rozpocznie aprowizowanie konta magazynu, co może chwilę potrwać.

Tworzenie kontenera

  1. Po aprowizacji konta magazynu wybierz pozycję Przejdź do zasobu. Następnym krokiem jest utworzenie kontenera magazynu wewnątrz konta do przechowywania przekazanych obrazów na potrzeby analizy.

  2. Na panelu nawigacyjnym wybierz pozycję Kontenery.

  3. Na stronie Kontenery wybierz pozycję + Kontener u góry. Na wysuwanym panelu wprowadź nazwęanalizy obrazów i upewnij się, że poziom dostępu publicznego jest ustawiony na obiekt blob (anonimowy dostęp do odczytu tylko dla obiektów blob). Następnie wybierz pozycję Utwórz.

    Zrzut ekranu przedstawiający sposób tworzenia nowego kontenera magazynu.

Nowy kontener powinien pojawić się na liście kontenerów.

Pobieranie parametrów połączenia

Ostatnim krokiem jest pobranie parametrów połączenia dla konta magazynu.

  1. Na panelu nawigacyjnym po lewej stronie wybierz pozycję Klucze dostępu.

  2. Na stronie Klucze dostępu wybierz pozycję Pokaż klucze. Skopiuj wartość parametrów połączenia w sekcji key1 i wklej ją gdzieś do użycia później. Należy również zanotować nazwę msdocsstoragefunction konta magazynu do późniejszego użycia.

    Zrzut ekranu przedstawiający sposób uzyskiwania dostępu do kontenera magazynu.

Te wartości będą konieczne, gdy będziemy musieli połączyć naszą funkcję platformy Azure z tym kontem magazynu.

Tworzenie usługi przetwarzanie obrazów

Następnie utwórz konto usługi przetwarzanie obrazów, które będzie przetwarzać przekazane pliki. przetwarzanie obrazów jest częścią usług Azure AI i oferuje wiele funkcji wyodrębniania danych z obrazów. Więcej informacji na temat przetwarzanie obrazów można uzyskać na stronie przeglądu.

  1. Na pasku wyszukiwania w górnej części portalu wyszukaj pozycję Komputer i wybierz wynik z etykietą Przetwarzanie obrazów.

  2. Na stronie Przetwarzanie obrazów wybierz pozycję + Utwórz.

  3. Na stronie Tworzenie przetwarzanie obrazów wprowadź następujące wartości:

    • Subskrypcja: wybierz odpowiednią subskrypcję.
    • Grupa zasobów: użyj utworzonej msdocs-storage-function wcześniej grupy zasobów.
    • Region: wybierz region, który znajduje się najbliżej Ciebie.
    • Nazwa: wprowadź nazwę .msdocscomputervision
    • Warstwa cenowa: wybierz pozycję Bezpłatna , jeśli jest dostępna, w przeciwnym razie wybierz pozycję Standardowa S1.
    • Zaznacz pole Powiadomienie o odpowiedzialnej sztucznej inteligencji , jeśli zgadzasz się na warunki

    Zrzut ekranu przedstawiający sposób tworzenia nowej usługi przetwarzanie obrazów.

  4. Wybierz pozycję Przejrzyj i utwórz u dołu. Poświęć chwilę na platformie Azure zweryfikuj wprowadzone informacje. Po zweryfikowaniu ustawień wybierz pozycję Utwórz, a platforma Azure rozpocznie aprowizowanie usługi przetwarzanie obrazów, co może chwilę potrwać.

  5. Po zakończeniu operacji wybierz pozycję Przejdź do zasobu.

Pobieranie kluczy

Następnie musimy znaleźć klucz tajny i adres URL punktu końcowego dla usługi przetwarzanie obrazów do użycia w naszej aplikacji funkcji platformy Azure.

  1. Na stronie przeglądu przetwarzanie obrazów wybierz pozycję Klucze i punkt końcowy.

  2. Na stronie Klucze i punkt końcowy skopiuj wartość Klucz 1 oraz wartości punktu końcowego i wklej je gdzieś, aby użyć ich do późniejszego użycia.

    Zrzut ekranu przedstawiający sposób pobierania kluczy i punktu końcowego adresu URL dla usługi przetwarzanie obrazów.

Pobieranie i konfigurowanie przykładowego projektu

Kod funkcji platformy Azure używany w tym samouczku można znaleźć w tym repozytorium GitHub. Możesz również sklonować projekt przy użyciu poniższego polecenia.

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

Przykładowy kod projektu wykonuje następujące zadania:

  • Pobiera zmienne środowiskowe w celu nawiązania połączenia z kontem magazynu i usługą przetwarzanie obrazów
  • Akceptuje przekazany plik jako parametr obiektu blob
  • Analizuje obiekt blob przy użyciu usługi przetwarzanie obrazów
  • Wysyła przeanalizowany tekst obrazu do nowego wiersza tabeli przy użyciu powiązań wyjściowych

Po pobraniu i otwarciu projektu istnieje kilka podstawowych pojęć, które należy zrozumieć w metodzie głównej Run pokazanej poniżej. Funkcja platformy Azure korzysta z powiązań wyzwalacza i danych wyjściowych, które są stosowane przy użyciu atrybutów w podpisie Run metody.

Atrybut Table używa dwóch parametrów. Pierwszy parametr określa nazwę tabeli do zapisania przeanalizowanej wartości tekstowej obrazu zwróconej przez funkcję. Drugi Connection parametr pobiera parametry połączenia usługi Table Storage ze zmiennych środowiskowych, aby nasza funkcja platformy Azure mogła uzyskać do niego dostęp.

Atrybut BlobTrigger służy do powiązania naszej funkcji ze zdarzeniem przekazywania w usłudze Blob Storage i dostarcza obiekt blob przekazany do Run funkcji. Wyzwalacz obiektu blob ma dwa własne parametry — jeden dla nazwy kontenera obiektów blob do monitorowania przekazywania, a drugi dla parametrów połączenia naszego konta magazynu.

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

Ten kod pobiera również podstawowe wartości konfiguracji ze zmiennych środowiskowych, takich jak parametry połączenia konta magazynu i klucz przetwarzanie obrazów. Po wdrożeniu dodamy te zmienne środowiskowe do środowiska funkcji platformy Azure.

Funkcja ProcessImage wykorzystuje również drugą metodę o nazwie AnalyzeImage, pokazaną poniżej. Ten kod używa punktu końcowego adresu URL i klucza naszego konta przetwarzanie obrazów, aby wysłać żądanie do tego serwera w celu przetworzenia obrazu. Żądanie zwróci cały tekst odnaleziony na obrazie, który następnie zostanie zapisany w usłudze Table Storage przy użyciu powiązania wyjściowego metody 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();
}

Uruchamianie lokalnie

Jeśli chcesz uruchomić projekt lokalnie, możesz wypełnić zmienne środowiskowe przy użyciu pliku local.settings.json. Wewnątrz tego pliku wypełnij wartości zastępcze zapisanymi wcześniej podczas tworzenia zasobów platformy Azure.

Mimo że kod funkcji platformy Azure będzie uruchamiany lokalnie, nadal będzie łączyć się z usługami na żywo na platformie Azure, a nie przy użyciu lokalnych emulatorów.

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

Wdrażanie kodu w Azure Functions

Teraz możesz przystąpić do wdrażania naszej aplikacji na platformie Azure przy użyciu programu Visual Studio. Aplikację Azure Functions można również utworzyć na platformie Azure w tym samym czasie co część procesu wdrażania.

  1. Aby rozpocząć, wybierz prawym przyciskiem polecenia węzeł projektu ProcessImage i wybierz pozycję Publikuj.

  2. Na ekranie dialogowym Publikowanie wybierz pozycję Azure i wybierz pozycję Dalej.

    Zrzut ekranu przedstawiający sposób wybierania platformy Azure jako elementu docelowego wdrożenia.

  3. Wybierz pozycję Aplikacja funkcji platformy Azure (Windows) lub Aplikacja funkcji platformy Azure (Linux) na następnym ekranie, a następnie ponownie wybierz pozycję Dalej .

    Zrzut ekranu przedstawiający sposób wybierania Azure Functions jako określonego celu wdrożenia.

  4. W kroku wystąpienia usługi Functions upewnij się, że wybrano subskrypcję, do której chcesz wdrożyć. Następnie wybierz zielony + symbol po prawej stronie okna dialogowego.

  5. Zostanie otwarte nowe okno dialogowe. Wprowadź następujące wartości dla nowej aplikacji funkcji.

    • Nazwa: wprowadź msdocsprocessimage lub coś podobnego.
    • Nazwa subskrypcji: wybierz dowolną subskrypcję, której chcesz użyć.
    • Grupa zasobów: wybierz utworzoną wcześniej grupę msdocs-storage-function zasobów.
    • Typ planu: wybierz pozycję Zużycie.
    • Lokalizacja: wybierz region najbliżej Ciebie.
    • Azure Storage: wybierz utworzone wcześniej konto magazynu.

    Zrzut ekranu przedstawiający sposób tworzenia nowej aplikacji funkcji na platformie Azure.

  6. Po wypełnieniu wszystkich tych wartości wybierz pozycję Utwórz. Program Visual Studio i platforma Azure rozpoczną aprowizowanie żądanych zasobów, co potrwa kilka chwil.

  7. Po zakończeniu procesu wybierz pozycję Zakończ , aby zamknąć przepływ pracy okna dialogowego.

  8. Ostatnim krokiem wdrażania funkcji platformy Azure jest wybranie pozycji Publikuj w prawym górnym rogu ekranu. Opublikowanie funkcji może potrwać kilka chwil. Po zakończeniu aplikacja będzie działać na platformie Azure.

Łączenie usług

Funkcja platformy Azure została pomyślnie wdrożona, ale nie może jeszcze nawiązać połączenia z naszym kontem magazynu i przetwarzanie obrazów usług. Prawidłowe klucze i parametry połączenia należy najpierw dodać do ustawień konfiguracji aplikacji Azure Functions.

  1. W górnej części Azure Portal wyszukaj funkcję i wybierz pozycję Aplikacja funkcji z wyników.

  2. Na ekranie Aplikacja funkcji wybierz aplikację funkcji utworzoną w programie Visual Studio.

  3. Na stronie Przegląd aplikacji funkcji wybierz pozycję Konfiguracja w obszarze nawigacji po lewej stronie. Spowoduje to otwarcie strony, na której można zarządzać różnymi typami ustawień konfiguracji dla naszej aplikacji. Na razie interesuje nas sekcja Ustawienia aplikacji .

  4. Następnym krokiem jest dodanie ustawień dla nazwy konta magazynu i parametrów połączenia, klucza tajnego przetwarzanie obrazów i punktu końcowego przetwarzanie obrazów.

  5. Na karcie Ustawienia aplikacji wybierz pozycję + Nowe ustawienie aplikacji. W wyświetlonym wysuwaniu wprowadź następujące wartości:

    • Nazwa: wprowadź wartość ComputerVisionKey.
    • Wartość: wklej klucz przetwarzanie obrazów zapisany wcześniej.
  6. Kliknij przycisk OK , aby dodać to ustawienie do aplikacji.

    Zrzut ekranu przedstawiający sposób dodawania nowego ustawienia aplikacji do funkcji platformy Azure.

  7. Następnie powtórzmy ten proces dla punktu końcowego usługi przetwarzanie obrazów przy użyciu następujących wartości:

    • Nazwa: wprowadź wartość parametru ComputerVisionEndpoint.
    • Wartość: wklej zapisany wcześniej adres URL punktu końcowego.
  8. Powtórz ten krok ponownie dla połączenia konta magazynu przy użyciu następujących wartości:

    • Nazwa: wprowadź wartość StorageConnection.
    • Wartość: wklej parametry połączenia zapisane wcześniej.
  9. Na koniec powtórz ten proces jeszcze raz dla nazwy konta magazynu, używając następujących wartości:

    • Nazwa: wprowadź wartość StorageAccountName.
    • Wartość: wprowadź nazwę utworzonego konta magazynu.
  10. Po dodaniu tych ustawień aplikacji upewnij się, że w górnej części strony konfiguracji wybierz pozycję Zapisz . Po zakończeniu zapisywania możesz również nacisnąć pozycję Odśwież , aby upewnić się, że ustawienia zostały odebrane.

Wszystkie wymagane zmienne środowiskowe, aby połączyć naszą funkcję platformy Azure z różnymi usługami, są teraz dostępne.

Przekazywanie obrazu do usługi Blob Storage

Teraz możesz przetestować naszą aplikację! Możesz przekazać obiekt blob do kontenera, a następnie sprawdzić, czy tekst na obrazie został zapisany w usłudze Table Storage.

  1. Najpierw w górnej części Azure Portal wyszukaj pozycję Storage i wybierz pozycję Konto magazynu. Na stronie konta magazynu wybierz utworzone wcześniej konto.

  2. Następnie wybierz pozycję Kontenery na lewym pasku nawigacyjnym, a następnie przejdź do utworzonego wcześniej kontenera ImageAnalysis . W tym miejscu możesz przekazać obraz testowy bezpośrednio w przeglądarce.

    Zrzut ekranu przedstawiający sposób przechodzenia do kontenera magazynu.

  3. W folderze images znajduje się kilka przykładowych obrazów znajdujących się w katalogu głównym przykładowego projektu do pobrania lub możesz użyć jednego z własnych.

  4. W górnej części strony ImageAnalysis wybierz pozycję Przekaż. W otwartym oknie wysuwanym wybierz ikonę folderu po prawej stronie, aby otworzyć przeglądarkę plików. Wybierz obraz, który chcesz przekazać, a następnie wybierz pozycję Przekaż.

    Zrzut ekranu przedstawiający sposób przekazywania obiektu blob do kontenera magazynu.

  5. Plik powinien pojawić się wewnątrz kontenera obiektów blob. Następnie możesz sprawdzić, czy przekazanie wyzwoliło funkcję platformy Azure i czy tekst na obrazie został przeanalizowany i zapisany w usłudze Table Storage prawidłowo.

  6. Korzystając z stron nadrzędnych w górnej części strony, przejdź do jednego poziomu na koncie magazynu. Znajdź i wybierz pozycję Przeglądarka magazynu na lewym pasku nawigacyjnym, a następnie wybierz pozycję Tabele.

  7. Tabela ImageText powinna być teraz dostępna. Kliknij tabelę, aby wyświetlić podgląd wewnątrz wierszy danych. Powinien zostać wyświetlony wpis dla przetworzonego tekstu obrazu przekazywania. Możesz to sprawdzić przy użyciu znacznika czasu lub wyświetlając zawartość kolumny Tekst .

    Zrzut ekranu przedstawiający wpis tekstowy w usłudze Azure Table Storage.

Gratulacje! Udało Ci się przetwarzać obraz przekazany do usługi Blob Storage przy użyciu Azure Functions i przetwarzanie obrazów.

Czyszczenie zasobów

Jeśli nie zamierzasz nadal korzystać z tej aplikacji, możesz usunąć utworzone zasoby, usuwając grupę zasobów.

  1. Wybierz pozycję Grupy zasobów w obszarze nawigacji głównej
  2. Wybierz grupę msdocs-storage-function zasobów z listy.
  3. Wybierz przycisk Usuń grupę zasobów w górnej części strony przeglądu grupy zasobów.
  4. Wprowadź nazwę grupy zasobów msdocs-storage-function w oknie dialogowym potwierdzenia.
  5. Wybierz pozycję Usuń. Proces usuwania grupy zasobów może potrwać kilka minut.