Zephyrnet-logo

Automatiseer het proces om afbeeldingsachtergronden te wijzigen met Amazon Bedrock en AWS Step Functions | Amazon-webservices

Datum:

Veel klanten, waaronder klanten in de creatieve reclame-, media- en entertainmentsector, e-commerce en mode, moeten vaak de achtergrond van een groot aantal afbeeldingen veranderen. Normaal gesproken houdt dit in dat elke afbeelding handmatig wordt bewerkt met fotosoftware. Dit kan veel moeite kosten, vooral bij grote hoeveelheden afbeeldingen. Echter, Amazonebodem en AWS Stap Functies maken het eenvoudig om dit proces op grote schaal te automatiseren.

Amazon Bedrock biedt het generatieve AI-basismodel Amazon Titan-beeldgenerator G1, waarmee de achtergrond van een afbeelding automatisch kan worden gewijzigd met behulp van een techniek genaamd overschilderen. Met Step Functions kunt u een geautomatiseerde workflow creëren die naadloos aansluit op Amazon Bedrock en andere AWS-services. Samen stroomlijnen Amazon Bedrock en Step Functions het hele proces van het automatisch veranderen van achtergronden over meerdere afbeeldingen.

Dit bericht introduceert een oplossing die het proces van het veranderen van achtergronden in meerdere afbeeldingen vereenvoudigt. Door gebruik te maken van de mogelijkheden van generatieve AI met Amazon Bedrock en het Titan Image Generator G1-model, gecombineerd met Step Functions, genereert deze oplossing efficiënt afbeeldingen met de gewenste achtergrond. Dit bericht geeft inzicht in de interne werking van de oplossing en helpt u de ontwerpkeuzes te begrijpen die zijn gemaakt om deze eigen oplossing op maat te bouwen.

Zie de GitHub-repository voor gedetailleerde instructies over het implementeren van deze oplossing.

Overzicht oplossingen

Laten we eens kijken hoe de oplossing op een hoog niveau werkt voordat we dieper ingaan op specifieke elementen en de gebruikte AWS-services. Het volgende diagram biedt een vereenvoudigde weergave van de oplossingsarchitectuur en benadrukt de belangrijkste elementen.

Oplossingsarchitectuur

De workflow bestaat uit de volgende stappen:

  1. Een gebruiker uploadt meerdere afbeeldingen naar een Amazon eenvoudige opslagservice (Amazon S3) bucket via een Streamlit-webapplicatie.
  2. De Streamlit-webapplicatie roept een Amazon API-gateway REST API-eindpunt geïntegreerd met de Amazon Rekognition DetectLabels-API, dat labels voor elke afbeelding detecteert.
  3. Na indiening wordt de Streamlit-webapplicatie bijgewerkt Amazon DynamoDB tabel met afbeeldingsdetails.
  4. De DynamoDB-update activeert een AWS Lambda functie, waarmee een Step Functions-workflow wordt gestart.
  5. De workflow Stapfuncties voert voor elke afbeelding de volgende stappen uit:
    5.1 Creëert een verzoekpayload voor de Amazon Bedrock InvokeModel API.
    5.2 Roept de Amazonebodem aan InvokeModel API-actie.
    5.3 Parseert een afbeelding uit het antwoord en slaat deze op een S3-locatie op.
    5.4 Werkt de afbeeldingsstatus bij in een DynamoDB-tabel.
  6. De Step Functions-workflow roept een Lambda-functie aan om een ​​statusrapport te genereren.
  7. De workflow verzendt een e-mail met behulp van Amazon eenvoudige meldingsservice (Amazone SNS).

Zoals u in de volgende schermafbeelding kunt zien, kunt u met de Streamlit-webtoepassing afbeeldingen uploaden en tekstprompts invoeren om de gewenste achtergronden, negatieve prompts en de outpainting-modus voor het genereren van afbeeldingen op te geven. U kunt ook ongewenste labels bekijken en verwijderen die aan elke geüploade afbeelding zijn gekoppeld en die u niet wilt behouden in de uiteindelijk gegenereerde afbeeldingen.

Gestroomlijnde webapplicatie

In dit voorbeeld is de prompt voor de achtergrond 'London city background'. Het automatiseringsproces genereert nieuwe afbeeldingen op basis van de origineel geüploade afbeeldingen met Londen als achtergrond.

Gegenereerde afbeeldingen

Gestroomlijnde webapplicatie en afbeeldingenuploads

Een Streamlit webapplicatie fungeert als frontend voor deze oplossing. Om de applicatie te beschermen tegen ongeoorloofde toegang, kan deze worden geïntegreerd met een Amazon Cognito gebruikerspool. API Gateway maakt gebruik van een Amazon Cognito-autorisatie om verzoeken te authenticeren. De webapplicatie doorloopt de volgende stappen:

  1. Voor elke geselecteerde afbeelding haalt het labels op via Amazon Rekognition met behulp van een API Gateway REST API-eindpunt.
  2. Na indiening uploadt de applicatie afbeeldingen naar een S3-bucket.
  3. De applicatie werkt een DynamoDB-tabel bij met relevante parameters, afbeeldingsnamen en bijbehorende labels voor elke afbeelding met behulp van een ander API Gateway REST API-eindpunt.

Werkstroom voor beeldverwerking

Wanneer de DynamoDB-tabel wordt bijgewerkt, DynamoDB-streams activeert een Lambda-functie om een ​​nieuwe Step Functions-workflow te starten. Het volgende is een voorbeeldverzoek voor de workflow:

{
  "Id": "621fa85a-38bb-4d98-a656-93bbbcf5477f",
  "S3Bucket": "<Image Bucket>",
  "InputS3Prefix": "image-files/<year>/<month>/<day>/<timestamp>",
  "OutputS3Prefix": "generated-image-files/<year>/<month>/<day>/<timestamp>",
  "StatusS3Prefix": "status-report-files/<year>/<month>/<day>/<timestamp>",
  "Prompt": "london city background",
  "NegativePrompt": "low quality, low resolution",
  "Mode": "PRECISE",
  "Images": [
    {
      "ImageName": "bus.png",
      "Labels": "Bus, Person"
    },
    {
      "ImageName": "cop.png",
      "Labels": "Person, Adult, Male, Man, Helmet, Jacket"
    },
    {
      "ImageName": "iguana-2.png",
      "Labels": "Lizard”
    },
    {
      "ImageName": "dog.png",
      "Labels": "Dog"
    }
  ]
}

De Step Functions-workflow voert vervolgens de volgende drie stappen uit:

  1. Vervang de achtergrond voor alle afbeeldingen.
  2. Genereer een statusrapport.
  3. Stuur een e-mail via Amazon SNS.

De volgende schermafbeelding illustreert de workflow voor stapfuncties.

AWS Stap Functies Workflow

Laten we elke stap in meer detail bekijken.

Vervang de achtergrond voor alle afbeeldingen

Stapfuncties gebruiken a Gedistribueerde kaart om elke afbeelding in parallelle onderliggende workflows te verwerken. De gedistribueerde kaart maakt verwerking met hoge gelijktijdigheid mogelijk. Elke onderliggende werkstroom heeft zijn eigen afzonderlijke uitvoeringsgeschiedenis, los van die van de bovenliggende werkstroom.

Stapfuncties gebruiken een InvokeModel geoptimaliseerde API-actie voor Amazon Bedrock. De API accepteert verzoeken en antwoorden die maximaal 25 MB groot zijn. Step Functions heeft echter een limiet van 256 KB voor de invoer en uitvoer van de statuspayload. Om grotere afbeeldingen te ondersteunen, gebruikt de oplossing een S3-bucket waarbij de InvokeModel API leest gegevens uit en schrijft het resultaat naar. Het volgende is de configuratie voor de InvokeModel API voor Amazon Bedrock-integratie:

{
    "ModelId": "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-image-generator-v1",
    "ContentType": "application/json",
    "Input": {  
        "S3Uri": “s3://<Image Bucket>/image-files/<year>/<month>/<day>/<timestamp>/<Image name>.json",
    },  
    "Output": {  
        "S3Uri": “s3://<Image Bucket>/generated-image-files/<year>/<month>/<day>/<timestamp>/<Image name>.json”
    } 
}

De Input S3Uri parameter specificeert de bronlocatie om de invoergegevens op te halen. De Output S3Uri parameter specificeert de bestemming voor het schrijven van het API-antwoord.

Een Lambda-functie slaat de payload van het verzoek op als een JSON-bestand in het opgegeven bestand Input S3Uri plaats. De InvokeModel API gebruikt deze invoerpayload om afbeeldingen met de opgegeven achtergrond te genereren:

{
    "taskType": "OUTPAINTING",
    "outPaintingParams": {
        "text": "london city background",
        "negativeText": "low quality, low resolution",        
        "image": "<base64-encoded string>",                         
        "maskPrompt": "Bus",                      
        "maskImage": "base64-encoded string",                             
        "outPaintingMode": "DEFAULT | PRECISE"                 
    },                                                 
    "imageGenerationConfig": {
        "numberOfImages": 1,
        "quality": "premium",
        "height": 1024,
        "width": 1024,
        "cfgScale": 8.0
    }
}

Het Titan Image Generator G1-model ondersteunt de volgende parameters voor het genereren van afbeeldingen:

  • taakType – Specificeert de outpainting-methode om de achtergrond van de afbeelding te vervangen.
  • tekst – Een tekstprompt om de achtergrond te definiëren.
  • negatieveTekst – Een tekstprompt om te definiëren wat niet in de afbeelding moet worden opgenomen.
  • maskerPrompt – Een tekstprompt die het masker definieert. Het komt overeen met labels die u wilt behouden in de uiteindelijk gegenereerde afbeeldingen.
  • maskerAfbeelding – De JPEG- of PNG-afbeelding gecodeerd in base64.
  • outPaintingMode – Specificeert of wijziging van de pixels binnen het masker al dan niet is toegestaan. DEFAULT maakt wijziging van de afbeelding binnen het masker mogelijk om deze consistent te houden met de gereconstrueerde achtergrond. PRECISE voorkomt wijziging van het beeld in het masker.
  • aantalAfbeeldingen – Het aantal afbeeldingen dat moet worden gegenereerd.
  • kwaliteit – De kwaliteit van de gegenereerde afbeeldingen: standard or premium.
  • cfgSchaal – Specificeert hoe sterk de gegenereerde afbeelding aan de prompt moet voldoen.
  • Hoogte – De hoogte van de afbeelding in pixels.
  • Breedte – De breedte van de afbeelding in pixels.

Het Amazone-gesteente InvokeModel API genereert een antwoord met een gecodeerde afbeelding in het Output S3Uri plaats. Een andere Lambda-functie ontleedt de afbeelding uit het antwoord, decodeert deze vanuit base64 en slaat het afbeeldingsbestand op de volgende locatie op: s3://<Image Bucket>/generated-image-file/<year>/<month>/<day>/<timestamp>/.

Ten slotte werkt een onderliggende werkstroom een ​​DynamoDB-tabel bij met de status voor het genereren van afbeeldingen, waarbij deze als een van beide wordt gemarkeerd Langs or Mislukt, en inclusief details zoals ImageName, Cause, Error en Status.

Genereer een statusrapport

Na het genereren van afbeeldingen haalt een Lambda-functie de statusdetails op uit DynamoDB. Het verzamelt deze details dynamisch in een uitgebreid statusrapport in JSON-formaat. Vervolgens wordt het gegenereerde statusrapport opgeslagen als JSON-bestand op de volgende locatie: s3://<Image Bucket>/status-report-files/<year>/<month>/<day>/<timestamp>/. Het ITOps-team kan dit rapport integreren met hun bestaande meldingssysteem om bij te houden of de beeldverwerking succesvol is voltooid. Voor zakelijke gebruikers kunt u dit verder uitbreiden om een ​​rapport in CSV-formaat te genereren.

Stuur een e-mail via Amazon SNS

Step Functions roept een Amazon SNS API-actie op om een ​​e-mail te verzenden. De e-mail bevat details, waaronder de S3-locatie voor het statusrapport en de definitieve afbeeldingsbestanden. Hieronder volgt een voorbeeld van een e-mailmelding.

Kennisgevings-e-mail

Conclusie

In dit bericht hebben we een overzicht gegeven van een voorbeeldoplossing die de automatisering demonstreert van het op schaal veranderen van afbeeldingsachtergronden met behulp van Amazon Bedrock en Step Functions. We hebben ook elk onderdeel van de oplossing gedetailleerd uitgelegd. Door gebruik te maken van de voor Step Functions geoptimaliseerde integratie met Amazon Bedrock, Distributed Map en het Titan Image Generator G1-model, vervangt de oplossing op efficiënte wijze de achtergronden van afbeeldingen parallel, waardoor de productiviteit en schaalbaarheid worden verbeterd.

Om de oplossing te implementeren, raadpleegt u de instructies in de GitHub-repository.

Resources

Raadpleeg de volgende bronnen voor meer informatie over Amazon Bedrock:

Raadpleeg de volgende bronnen voor meer informatie over het Titan Image Generator G1-model:

Raadpleeg de volgende bronnen voor meer informatie over het gebruik van Amazon Bedrock met stapfuncties:


Over de auteur

Chetan Makvana is een Senior Solutions Architect bij Amazon Web Services. Hij werkt samen met AWS-partners en klanten om hen architectonische begeleiding te bieden voor het bouwen van schaalbare architectuur en het implementeren van strategieën om de adoptie van AWS-services te stimuleren. Hij is een technologieliefhebber en een bouwer met een kerninteressegebied op het gebied van generatieve AI, serverless en DevOps. Buiten zijn werk kijkt hij graag naar shows, reizen en muziek. 

spot_img

Laatste intelligentie

spot_img