Zephyrnet-logo

Laat slechtzienden documenten horen met Amazon Textract en Amazon Polly

Datum:

Op de 2021 AWS re:Invent-conferentie in Las Vegas demonstreerden we Lees voor mij op de AWS Builders Fair, een website die slechtzienden helpt bij het horen van documenten.

Voor een betere kwaliteit, bekijk de video hier.

Adaptieve technologie en toegankelijkheidsfuncties zijn vaak duur, als ze al beschikbaar zijn. Audioboeken helpen slechtzienden bij het lezen. Audiodescriptie maakt films toegankelijk. Maar wat doe je als de content nog niet gedigitaliseerd is?

Dit bericht richt zich op de AWS AI-services Amazon T-extract en Amazon Polly, die mensen met een verminderd gezichtsvermogen machtigen. Read For Me is mede ontwikkeld door Jack Marchetti, die slechtziend is.

Overzicht oplossingen

Door een gebeurtenisgestuurde, serverloze architectuur en een combinatie van meerdere AI-services, kunnen we natuurlijk klinkende audiobestanden in meerdere talen maken van een afbeelding van een document of een afbeelding met tekst. Bijvoorbeeld een brief van de belastingdienst, een kerstkaart van familie of zelfs de openingstitels van een film.

De volgende Referentiearchitectuur, gepubliceerd in de AWS Architectuurcentrum toont de workflow van een gebruiker die een foto maakt met zijn telefoon en een MP3 afspeelt van de inhoud die in dat document wordt gevonden.

De workflow omvat de volgende stappen:

  1. Statische inhoud (HTML, CSS, JavaScript) wordt gehost op AWS versterken.
  2. Tijdelijke toegang wordt verleend aan anonieme gebruikers tot backend-services via een Amazon Cognito identiteitspool.
  3. De afbeeldingsbestanden worden opgeslagen in Amazon eenvoudige opslagservice (Amazone S3).
  4. Een gebruiker doet een POST-verzoek via: Amazon API-gateway naar de audioservice, die proxy's naar een express AWS Stap Functies workflow.
  5. De workflow Step Functions omvat de volgende stappen:
    1. Amazon T-extract haalt tekst uit de afbeelding.
    2. Amazon begrijpt het detecteert de taal van de tekst.
    3. Als de doeltaal verschilt van de gedetecteerde taal, Amazon Vertalen vertaalt naar de doeltaal.
    4. Amazon Polly maakt een audiobestand als uitvoer met behulp van de tekst.
  6. De workflow van AWS Step Functions creëert een audiobestand als uitvoer en slaat dit op in Amazon S3 in MP3-formaat.
  7. Een vooraf ondertekende URL met de locatie van het audiobestand dat is opgeslagen in Amazon S3 wordt teruggestuurd naar de browser van de gebruiker via API Gateway. Het mobiele apparaat van de gebruiker speelt het audiobestand af met behulp van de vooraf ondertekende URL.

In de volgende secties bespreken we de redenen waarom we de specifieke services, het architectuurpatroon en de servicefuncties voor deze oplossing hebben gekozen.

AWS AI-services

Verschillende AI-services zijn met elkaar verbonden om Read For Me van stroom te voorzien:

  • Amazon Textract identificeert de tekst in de geüploade afbeelding.
  • Amazon Comprehend bepaalt de taal.
  • Als de gebruiker een andere gesproken taal kiest dan de taal op de afbeelding, dan vertalen we deze met Amazon Translate.
  • Amazon Polly maakt het MP3-bestand. We maken gebruik van de Amazon Polly neurale engine, die zorgt voor een meer natuurlijke, levensechte audio-opname.

Een van de belangrijkste voordelen van het gebruik van deze AI-services is het gemak van adoptie waarbij weinig of geen kernervaring met machine learning vereist is. De services stellen API's bloot die clients kunnen aanroepen met behulp van SDK's die beschikbaar zijn in meerdere programmeertalen, zoals Python en Java.

Met Read For Me schreven we de onderliggende AWS Lambda functies in Python.

AWS SDK voor Python (Boto3)

De AWS SDK voor Python (Boto3) maakt interactie met AWS-services eenvoudig. De volgende regels Python-code retourneren bijvoorbeeld de tekst die wordt gevonden in de afbeelding of het document dat u opgeeft:

import boto3
client = boto3.client('textract')
response = client.detect_document_text(
Document={ 'S3Object': { 'Bucket': 'bucket-name', 'Name': 's3-key'
}
})
#do something with the response

Alle Python-code wordt uitgevoerd binnen individuele Lambda-functies. Er zijn geen servers om te voorzien en geen infrastructuur om te onderhouden.

Architectuur patronen

In deze sectie bespreken we de verschillende architectuurpatronen die in de oplossing worden gebruikt.

Serverless

We hebben een serverloze architectuur geïmplementeerd om twee hoofdredenen: snelheid om te bouwen en kosten. Zonder onderliggende hardware om te onderhouden of infrastructuur om te implementeren, hebben we ons volledig gericht op de bedrijfslogica-code en niets anders. Dit stelde ons in staat om binnen enkele dagen een werkend prototype in gebruik te nemen. Als gebruikers niet actief foto's uploaden en naar opnames luisteren, is er niets actief en zijn er dus geen kosten buiten opslag. Een S3-levenscyclusbeheerregel verwijdert geüploade afbeeldingen en MP3-bestanden na 1 dag, dus de opslagkosten zijn laag.

Synchrone werkstroom

Wanneer u serverloze werkstromen bouwt, is het belangrijk om te begrijpen wanneer een synchrone oproep logischer is vanuit de architectuur en gebruikerservaring dan een asynchroon proces. Met Read For Me gingen we aanvankelijk het asynchrone pad in en waren van plan om WebSockets te gebruiken om bidirectioneel te communiceren met de front-end. Onze workflow zou een stap bevatten om de verbindings-ID te vinden die is gekoppeld aan de Step Functions-workflow en na voltooiing de front-end te waarschuwen. Voor meer informatie over dit proces, zie: Van peiling naar push: Transformeer API's met Amazon API Gateway REST API's en WebSockets.

We kozen er uiteindelijk voor om dit niet te doen en gebruikten express step-functies die synchroon zijn. Gebruikers begrijpen dat het verwerken van een afbeelding niet direct gebeurt, maar weten ook dat het geen 30 seconden of een minuut duurt. We bevonden ons in een ruimte waar een paar seconden bevredigend was voor de eindgebruiker en die het voordeel van WebSockets niet nodig hadden. Dit vereenvoudigde de workflow in het algemeen.

Express Step Functies-workflow

De mogelijkheid om uw code op te splitsen in kleinere, geïsoleerde functies zorgt voor fijnmazige controle, eenvoudiger onderhoud en de mogelijkheid om nauwkeuriger te schalen. Als we bijvoorbeeld zouden vaststellen dat de Lambda-functie die Amazon Polly ertoe aanzette om het audiobestand te maken, langzamer liep dan de functie die de taal bepaalde, zouden we die functie verticaal kunnen schalen en meer geheugen toevoegen, zonder dat we dat voor de anderen hoeven te doen. Op dezelfde manier beperk je de ontploffingsradius van wat je Lambda-functie kan doen of waartoe je toegang hebt als je de reikwijdte en het bereik ervan beperkt.

Een van de voordelen van het orkestreren van uw workflow met Step Functions is de mogelijkheid om logica voor de beslissingsstroom te introduceren zonder code te hoeven schrijven.

Onze Step Functions-workflow is niet ingewikkeld. Het is lineair tot de vertaalstap. Als we geen Lambda-functie voor vertaling hoeven aan te roepen, kost dat ons minder en de gebruiker een snellere ervaring. We kunnen de visuele ontwerper op de Step Functions-console gebruiken om de specifieke sleutel in de invoerlading te vinden en, als deze aanwezig is, de ene functie boven de andere aanroepen met JSONPath. Onze payload bevat bijvoorbeeld een sleutel met de naam translate:

{ 
extracted_text: "hello world",
target_language: "es",
source_language: "en",
translate: true
}

Binnen de visuele ontwerper van Step Functions vinden we de vertaalsleutel en stellen we regels op die overeenkomen.

Hoofdloze architectuur

Amplify host de front-endcode. De front-end is geschreven in React en de broncode is ingecheckt in AWS Codecommit. Amplify lost een aantal problemen op voor gebruikers die statische websites proberen te implementeren en beheren. Als u dit handmatig zou doen (met behulp van een S3-bucket die is ingesteld voor statische website-hosting en daartegenover gaat) Amazon CloudFront), moet u de cache zelf elke keer dat u implementaties uitvoert, laten verlopen. Je zou ook je eigen CI/CD-pijplijn moeten schrijven. Amplify regelt dit voor u.

Dit zorgt voor een headless architectuur, waarbij front-end code is losgekoppeld van de backend en elke laag onafhankelijk van de andere kan worden beheerd en geschaald.

Analyseer ID

In de vorige sectie hebben we de architectuurpatronen besproken voor het verwerken van de geüploade afbeelding en het maken van een MP3-bestand ervan. Een document laten voorlezen is een goede eerste stap, maar wat als je alleen iets specifieks wilt weten zonder dat het hele document aan je wordt voorgelezen? U moet bijvoorbeeld online een formulier invullen en uw staats-ID of paspoortnummer opgeven, of misschien de vervaldatum. U moet dan een foto maken van uw identiteitsbewijs en, terwijl u het laat voorlezen, wachten op dat specifieke onderdeel. Als alternatief kunt u Analyse-ID gebruiken.

Analyse-ID is een functie van Amazon Textract waarmee u documenten kunt opvragen. Read For Me bevat een vervolgkeuzemenu waarin u specifiek kunt vragen naar de vervaldatum, uitgiftedatum of documentnummer. U kunt dezelfde workflow gebruiken om een ​​mp3-bestand te maken dat een antwoord geeft op uw specifieke vraag.

U kunt de functie Analyse-ID demonstreren op: readforme.io/analyseren.

Extra Polly-functies

  • Read For Me biedt meerdere neurale stemmen die gebruikmaken van verschillende talen en dialecten. Let op: er zijn verschillende andere stemmen waaruit u kunt kiezen, die we niet hebben geïmplementeerd. Wanneer een nieuwe stem beschikbaar is, is een update van de front-end code en een lambda-functie voldoende om hiervan te profiteren.
  • De Polly-service biedt ook andere opties die we nog moeten opnemen in Read For Me. Die omvatten het aanpassen van de snelheid van de stemmen en spraaktekens.

Conclusie

In dit bericht hebben we besproken hoe u tal van AWS-services, waaronder AI en serverloos, kunt gebruiken om slechtzienden te helpen. U kunt meer te weten komen over het Read For Me-project en het gebruiken door naar . te gaan leesforme.io. Je kunt Amazon Textract-voorbeelden ook vinden op de: GitHub repo. Voor meer informatie over Analyse-ID, ga naar Aankondiging van ondersteuning voor het extraheren van gegevens uit identiteitsdocumenten met Amazon Textract.

De broncode voor dit project zal open source zijn en binnenkort worden toegevoegd aan de openbare GitHub van AWS.


Over de auteurs

Jack Maretti is Senior Solutions architect bij AWS. Met een achtergrond in software-engineering, richt Jack zich voornamelijk op het helpen van klanten bij het implementeren van serverloze, gebeurtenisgestuurde architecturen. Hij bouwde zijn eerste gedistribueerde, cloudgebaseerde applicatie in 2013 na het bijwonen van de tweede AWS re:Invent-conferentie en is sindsdien verslaafd. Voordat hij bij AWS kwam, bracht Jack het grootste deel van zijn carrière door in het bouwen van ervaringen met reclamebureaus voor enkele van de grootste merken ter wereld. Jack is wettelijk blind en woont in Chicago met zijn vrouw Erin en kat Minou. Hij is ook scenarioschrijver en regisseur met een primaire focus op kerstfilms en horror. Bekijk Jack's filmografie op zijn IMDb pagina.

Alak Eswaradass is Solutions Architect bij AWS in Chicago, Illinois. Ze heeft een passie voor het helpen van klanten bij het ontwerpen van cloud-architecturen met behulp van AWS-services om zakelijke uitdagingen op te lossen. Ze heeft een master in computerwetenschappen. Voordat ze bij AWS kwam, werkte ze voor verschillende zorgorganisaties en heeft ze diepgaande ervaring met het ontwerpen van complexe systemen, technologische innovatie en onderzoek. Ze hangt rond met haar dochters en verkent het buitenleven in haar vrije tijd.

Swagat Kulkarni is Senior Solutions Architect bij AWS en een AI/ML-enthousiasteling. Hij heeft een passie voor het oplossen van echte problemen voor klanten met cloud-native services en machine learning. Buiten het werk houdt Swagat van reizen, lezen en mediteren.

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?