Tworzenie niskokodowej platformy licznika mowy „you know” przy użyciu AWS Step Functions

8 lipca 2022

W wystąpieniach publicznych zdania wypełniające mogą rozpraszać publiczność i umniejszać wartość i wpływ tego, co próbujesz jej przekazać.

Przeglądanie nagrań prezentacji może okazać się pomocne w ustaleniu, czy prezenterzy używają fraz wypełniających. Jednak zamiast ręcznie przeglądać wcześniejsze nagrania, automatyzacja może przetwarzać pliki multimedialne i wykonywać funkcję zamiany mowy na tekst. Tekst ten można następnie przetworzyć w celu zgłoszenia użycia zdań wypełniających.

Poniższy artykuł wyjaśnia, jak używać AWS Step Functions, Amazon EventBridge, Amazon Transcribe i Amazon Athena do zgłaszania użycia popularnego wyrażenia „you know” w plikach multimedialnych. Usługi te mogą zautomatyzować i skrócić czas potrzebny na znalezienie użycia fraz wypełniających.

Step Functions może zautomatyzować i połączyć ze sobą wiele działań i innych usług Amazon. Amazon Transcribe to z kolei usługa zamiany mowy na tekst, która wykorzystuje pliki multimedialne jako dane wejściowe i tworzy z nich transkrypcje tekstowe. Athena jest interaktywną usługą zapytań, która ułatwia analizę danych w Amazon S3 przy użyciu standardowego SQL. Athena umożliwia użycie standardowego SQL do zapytań o dane w S3.

W tym artykule przedstawiono podejście oparte na konfiguracji i platformie niskokodowej, umożliwiające wdrożenie tego rozwiązania. Low-code oznacza pisanie niewielkiej ilości lub brak niestandardowego oprogramowania do wykonywania funkcji. Zamiast tego używasz podejścia z dyskiem konfiguracyjnym przy użyciu integracji usług, w którym zadania maszyny stanów wywołują usługi AWS przy użyciu istniejących zestawów SDK, interfejsów API lub innych interfejsów. Podejście oparte na konfiguracji w tym przykładzie polega na użyciu języka Amazon States Language (ASL) Step Functions do łączenia działań, zamiast pisania tradycyjnego kodu. Wymaga to mniejszej liczby szczegółów dotyczących zarządzania danymi i obsługi błędów w połączeniu z wizualnym interfejsem użytkownika do komponowania przepływu pracy. Ze względu ma to, że akcje i logika są jasno zdefiniowane w wizualnym przepływie pracy, ogranicza to konserwację.

Zarys rozwiązania

Poniższy diagram przedstawia architekturę rozwiązania.

Omówienie rozwiązania

  1. Przesyłasz plik multimedialny do zasobnika Amazon S3 Media.
  2. Przesłanie pliku multimedialnego do S3 uruchamia regułę EventBridge.
  3. Reguła EventBridge uruchamia wykonanie automatu stanu Step Functions.
  4. Automat stanowy wywołuje Amazon Transscribe w celu przetworzenia pliku multimedialnego.
  5. Plik wyjściowy transkrypcji jest przechowywany w zasobniku transkrypcji Amazon S3.
  6. Maszyna stanowa wywołuje Atenę, aby kwestionowała transkrypcję tekstową o frazę wypełniającą. Wykorzystuje tabelę AWS Glue do opisania formatu pliku wyników transkrypcji.
  7. Liczba wypełniających fraz określona przez Athenę jest zwracana i przechowywana w zasobniku Amazon S3 Results.

Wymagania wstępne

  1. Konto AWS i użytkownik lub rola AWS z uprawnieniami wystarczającymi do tworzenia niezbędnych zasobów.
  2. Dostęp do następujących usług AWS: Step Functions, Amazon Transcribe, Athena i Amazon S3.
  3. Najnowsza wersja AWS Serverless Application Model (AWS SAM) CLI, która pomaga programistom tworzyć i zarządzać aplikacjami bezserwerowymi w chmurze AWS.
  4. Przetestowane pliki multimedialne (na przykład oficjalny podcast AWS).

Przykładowy przegląd

1. Sklonuj repozytorium GitHub na swoje urządzenie.

git clone https://github.com/aws-samples/aws-stepfunctions-examples.git

2. Wdróż zasoby za pomocą AWS SAM. Polecenie wdrażania przetwarza plik szablonu AWS SAM w celu utworzenia niezbędnych zasobów w AWS. Jako nazwę stosu i region AWS, w którym chcesz wdrożyć swoje rozwiązanie, wybierz you-know.

cd aws-stepfunctions-examples/sam/app-low-code-you-know-counter/
sam deploy --guided

Użyj parametrów domyślnych lub w razie potrzeby zastąp je innymi wartościami. Na przykład, aby uzyskać kalkulacje innej frazy wypełniającej, zastąp parametrem FillerPhrase.

GlueDatabaseYouKnowP

Nazwa bazy dawnych AWS Glue do utworzenia

AthenaTableName

 

Nazwa tabeli AWS Glue, która jest używana przez Athenę do zapytania o wyniki.

FillerPhrase

Zdanie wypełniające do sprawdzenia

AthenaQueryPreparedStatementName

Nazwa instrukcji przygotowanej przez Athena używanej do uruchamiania zapytań SQL

AthenaWorkgroup

Grupa robocza Athena do użycia

AthenaDataCatalog

Źródło danych do uruchamiania zapytań Athena

SAM Deploy

Uruchamianie licznika fraz wypełniających

1. Przejdź do konsoli Amazon S3 i prześlij nagranie podcastu mp3 lub mp4 do zasobnika o nazwie bucket-{account number}-{Region}-you-know-media.

2. Przejdź do konsoli Step Functions. Wybierz działającą maszynę stanów i monitoruj wykonanie maszyny stanów transkrypcji.

Wykonanie maszyny stanowej

3. Gdy wykonanie zakończy się pomyślnie, wybierz zadanie QueryExecutionSuccess, aby przeanalizować dane wyjściowe i zobaczyć liczbę fraz wypełniających.

Wyjście maszyny stanu

4. Amazon Transscribe tworzy tekst transkrypcji pliku multimedialnego. Możesz sprawdzić dane wyjściowe w zasobniku Wyniki. Korzystając z konsoli S3, przejdź do zasobnika, wybierz plik pasujący do nazwy pliku multimedialnego i użyj opcji „Zapytanie z S3 Select”, aby wyświetlić zawartość.

5. Jeśli zadanie transkrypcji nie zostanie wykonane, automat stanowy zgłosi niepowodzenie i zakończy działanie.

Awaria maszyny stanowej

Eksplorowanie maszyny stanu

Maszyna stanu organizuje przetwarzanie transkrypcji:

Eksploruj maszynę stanową

Zadanie StartTranscriptionJob uruchamia pracę transkrypcji. Stan oczekiwania dodaje 60-sekundowe opóźnienie przed sprawdzeniem stanu zadania transkrypcji. Dopóki status zadania nie zmieni się na FAILED lub COMPLETED, stan wyboru będzie kontynuowany.

Po pomyślnym zakończeniu pracy zadanie AthenaStartQueryExecutionUsingPreparedStatement uruchamia zapytanie Athena i przechowuje wyniki w zasobniku wyników S3. Zadanie AthenaGetQueryResults pobiera liczbę z zestawu wyników.

TranscribeMediaBucket przechowuje pliki multimedialne do przesłania. Konfiguracja wysyła zdarzenie powiadomienia o przesłaniu do EventBridge:

   NotificationConfiguration:
     EventBridgeConfiguration:
       EventBridgeEnabled: true

TranscribeResultsBucket ma powiązaną politykę zapewniającą dostęp do Amazon Transcribe. Athena przechowuje dane wyjściowe z zapytań wykonywanych przez maszynę stanów w AthenaQueryResultsBucket.

Gdy nastąpi przesłanie multimediów, YouKnowTranscribeStateMachine wykorzystuje natywną integrację zdarzeń Step Functions, aby wyzwolić regułę EventBridge. Zawiera obiekt zdarzenia podobny do:

{
  "version": "0",
  "id": "99a0cb40-4b26-7d74-dc59-c837f5346ac6",
  "detail-type": "Object Created",
  "source": "aws.s3",
  "account": "012345678901",
  "time": "2022-05-19T22:21:10Z",
  "region": "us-east-2",
  "resources": [
    "arn:aws:s3:::bucket-012345678901-us-east-2-you-know-media"
  ],
  "detail": {
    "version": "0",
    "bucket": {
      "name": "bucket-012345678901-us-east-2-you-know-media"
    },
    "object": {
      "key": "Podcase_Episode.m4a",
      "size": 202329,
      "etag": "624fce93a981f97d85025e8432e24f48",
      "sequencer": "006286C2D604D7A390"
    },
    "request-id": "B4DA7RD214V1QG3W",
    "requester": "012345678901",
    "source-ip-address": "172.0.0.1",
    "reason": "PutObject"
  }
}

Maszyna stanowa pozwala na przygotowanie parametrów i wykorzystanie bezpośredniej integracji SDK do uruchomienia zadania transkrypcji poprzez wywołanie API usługi Amazon Transcribe. Ta integracja oznacza, że nie musisz pisać niestandardowego kodu, aby wykonać tę funkcję. Zdarzenie wyzwalające wykonanie automatu stanów zawiera lokalizację przesłanego pliku multimedialnego.

StartTranscriptionJob:
	Type: Task
	Comment: Start a transcribe job on the provided media file
	Parameters:
	  Media:
		MediaFileUri.$: States.Format('s3://{}/{}', $.detail.bucket.name, $.detail.object.key)
	  TranscriptionJobName.$: "$.detail.object.key"
	  IdentifyLanguage: true
	  OutputBucketName: !Ref TranscribeResultsBucket
	Resource: !Sub 'arn:${AWS::Partition}:states:${AWS::Region}:${AWS::AccountId}:aws-sdk:transcribe:startTranscriptionJob'

SDK używa aws-sdk:transscribe:getTranscriptionJob, aby uzyskać status zadania.

GetTranscriptionJob:
	Type: Task
	Comment: Retrieve the status of an Amazon Transcribe job
	Parameters:
	  TranscriptionJobName.$: "$.TranscriptionJob.TranscriptionJobName"
	Resource: !Sub 'arn:${AWS::Partition}:states:${AWS::Region}:${AWS::AccountId}:aws-sdk:transcribe:getTranscriptionJob'
	Next: TranscriptionJobStatus

Maszyna stanów używa pętli przeglądania z opóźnieniem, aby sprawdzić status zadania transkrypcji.

TranscriptionJobStatus:
	Type: Choice
	Choices:
	- Variable: "$.TranscriptionJob.TranscriptionJobStatus"
	  StringEquals: COMPLETED
	  Next: AthenaStartQueryExecutionUsingPreparedStatement
	- Variable: "$.TranscriptionJob.TranscriptionJobStatus"
	  StringEquals: FAILED
	  Next: Failed
	Default: Wait

Po pomyślnym zakończeniu zadania transkrypcji rozpoczyna się proces liczenia fraz wypełniających.

Przygotowana instrukcja Athena wykonuje zapytanie z nazwą zadania transkrypcji jako parametrem wykonawczym. AWS SDK uruchamia zapytanie, a realizacja maszyny stanowej zatrzymuje się, czekając na zwrócenie wyników przed przejściem do następnego stanu:

athena:startQueryExecution.sync

Po zakończeniu zapytania Step Functions używa integracji SDK do pobrania wyników za pomocą athena:getQueryResults:

athena:getQueryResults

Tworzy przygotowaną przez Athenę instrukcję, aby przekazać nazwę zadania transkrypcji jako parametr do wykonania zapytania:

 ResultsQueryPreparedStatement:
    Type: AWS::Athena::PreparedStatement
    Properties:
      Description: Create a statement that allows the use of a parameter for specifying an Amazon Transcribe job name in the Athena query
      QueryStatement: !Sub >-
        select cardinality(regexp_extract_all(results.transcripts[1].transcript, '${FillerPhrase}')) AS item_count from "${GlueDatabaseYouKnow}"."${AthenaTableName}" where jobname like ?
      StatementName: !Ref AthenaQueryPreparedStatementName
      WorkGroup: !Ref AthenaWorkgroup

Istnieje kilka możliwości ulepszenia tego narzędzia. Na przykład dodanie obsługi wielu fraz wypełniających. Możesz zbudować większą aplikację do przesyłania multimediów i pobierania wyników. Możesz skorzystać z interfejsu API transkrypcji Amazon Transcribe w czasie rzeczywistym, aby wyświetlać wyniki podczas trwania prezentacji, aby natychmiast przekazać prezenterowi informację zwrotną.

Porządkowanie

1. Przejdź do konsoli Amazon Transscribe. Wybierz Transcription jobs w lewym okienku, wybierz zadania utworzone w tym przykładzie i wybierz opcję Usuń.

Cleanup Delete

2. Przejdź do konsoli S3. Na pasku wyszukiwania Znajdź zasobniki według nazwy wpisz „you know”. To pokazuje listę zasobników utworzonych dla tego przykładu. Wybierz każdy z przycisków opcji obok zasobnika indywidualnie i wybierz Pusty.

Cleanup S3

3. Użyj następującego polecenia, aby usunąć stos i potwierdź usunięcie stosu.

sam delete

Podsumowanie

Aplikacje i platformy niskokodowe mogą zwiększyć wydajność programistów, zmniejszając ilość niestandardowego kodu wymaganego do tworzenia rozwiązań. Mogą również umożliwić rolom nie-deweloperskim tworzenie automatyzacji w celu wykonywania funkcji biznesowych, zapewniając interfejsy użytkownika w stylu „drag-and-drop”.

Ten post pokazuje, jak podejście niskokodowe może zbudować łańcuch narzędzi przy użyciu usług AWS. Przykład przetwarza pliki multimedialne w celu utworzenia transkrypcji tekstowych i zlicza użycie fraz wypełniających w tych transkrypcjach. Pokazuje, jak przetwarzać dane EventBridge i jak wywoływać Amazon Transcribe i Athena za pomocą maszyn stanu Step Functions.

W celu uzyskania większej liczby zasobów do nauki bezserwerowej, odwiedź Severless Land.

źródło: AWS

Case Studies
Referencje

Jesteśmy ogromnie zadowoleni ze współpracy z firmą Hostersi. Ich specjaliści doradzili nam rozwiązanie, które dało nam stabilną, skalowalną infrastrukturę, która umożliwia obsłużenie ciągle rosnącego ruchu związanego z COVID-19

Jakub Sperczyński
Prezes Zarządu EduNect
W skrócie o nas
Specjalizujemy się w dostarczaniu rozwiązań IT w obszarach projektowania infrastruktury serwerowej, wdrażania chmury obliczeniowej, opieki administracyjnej i bezpieczeństwa danych.