Automatisera processen för att ändra bildbakgrund med Amazon Bedrock och AWS Step Functions | Amazon webbtjänster

Automatisera processen för att ändra bildbakgrund med Amazon Bedrock och AWS Step Functions | Amazon webbtjänster

Många kunder, inklusive de inom kreativ reklam, media och underhållning, e-handel och mode, behöver ofta ändra bakgrunden i ett stort antal bilder. Vanligtvis innebär detta manuell redigering av varje bild med fotoprogramvara. Detta kan ta mycket ansträngning, särskilt för stora partier av bilder. Dock, Amazonas berggrund och AWS stegfunktioner gör det enkelt att automatisera denna process i stor skala.

Amazon Bedrock erbjuder den generativa AI-grundmodellen Amazon Titan Image Generator G1, som automatiskt kan ändra bakgrunden för en bild med en teknik som kallas utmålning. Step Functions låter dig skapa ett automatiserat arbetsflöde som sömlöst ansluter till Amazon Bedrock och andra AWS-tjänster. Tillsammans effektiviserar Amazon Bedrock och Step Functions hela processen att automatiskt ändra bakgrunder över flera bilder.

Det här inlägget introducerar en lösning som förenklar processen med att ändra bakgrunder i flera bilder. Genom att utnyttja kapaciteten hos generativ AI med Amazon Bedrock och Titan Image Generator G1-modellen, kombinerat med Step Functions, genererar denna lösning effektivt bilder med önskad bakgrund. Det här inlägget ger insikt i lösningens inre funktion och hjälper dig att förstå designvalen som gjorts för att bygga denna egen anpassade lösning.

se GitHub repository för detaljerade instruktioner om hur du distribuerar den här lösningen.

Lösningsöversikt

Låt oss titta på hur lösningen fungerar på hög nivå innan vi dyker djupare in i specifika element och de AWS-tjänster som används. Följande diagram ger en förenklad bild av lösningsarkitekturen och belyser nyckelelementen.

Lösningsarkitektur

Arbetsflödet består av följande steg:

  1. En användare laddar upp flera bilder till en Amazon enkel lagringstjänst (Amazon S3) hink via en Streamlit webbapplikation.
  2. Streamlit webbapplikation anropar en Amazon API Gateway REST API-slutpunkt integrerad med Amazon-erkännande DetectLabels API, som upptäcker etiketter för varje bild.
  3. Vid inlämning uppdaterar Streamlit webbapplikation en Amazon DynamoDB tabell med bilddetaljer.
  4. DynamoDB-uppdateringen utlöser en AWS Lambda funktion, som startar ett arbetsflöde för Step Functions.
  5. Arbetsflödet Step Functions kör följande steg för varje bild:
    5.1 Konstruerar en nyttolast för begäran för Amazonas berggrund InvokeModel API.
    5.2 Åberopar Amazonas berggrund InvokeModel API-åtgärd.
    5.3 Analyserar en bild från svaret och sparar den på en S3-plats.
    5.4 Uppdaterar bildstatusen i en DynamoDB-tabell.
  6. Arbetsflödet Step Functions anropar en Lambda-funktion för att generera en statusrapport.
  7. Arbetsflödet skickar ett e-postmeddelande med Amazon enkel meddelandetjänst (Amazon SNS).

Som visas i följande skärmdump låter Streamlit-webbapplikationen dig ladda upp bilder och ange textuppmaningar för att ange önskade bakgrunder, negativa uppmaningar och utmålningsläge för bildgenerering. Du kan också visa och ta bort oönskade etiketter som är kopplade till varje uppladdad bild som du inte vill behålla i de slutgiltiga genererade bilderna.

Streamlit webbapplikation

I det här exemplet är uppmaningen för bakgrunden "London city background." Automatiseringsprocessen genererar nya bilder baserat på de ursprungliga uppladdade bilderna med London som bakgrund.

Genererade bilder

Effektiviserad webbapplikation och uppladdning av bilder

En Streamlit webbapplikation fungerar som frontend för denna lösning. För att skydda applikationen från obehörig åtkomst, integreras den med en Amazon Cognito användarpool. API Gateway använder en Amazon Cognito auktoriserare för att autentisera förfrågningar. Webbapplikationen slutför följande steg:

  1. För varje vald bild hämtar den etiketter via Amazon Rekognition med hjälp av en API Gateway REST API-slutpunkt.
  2. Efter inlämning laddar applikationen upp bilder till en S3-hink.
  3. Applikationen uppdaterar en DynamoDB-tabell med relevanta parametrar, bildnamn och associerade etiketter för varje bild med en annan API Gateway REST API-slutpunkt.

Arbetsflöde för bildbehandling

När DynamoDB-tabellen uppdateras, DynamoDB-strömmar triggar en lambdafunktion för att starta ett nytt arbetsflöde för stegfunktioner. Följande är ett exempel på begäran för arbetsflödet:

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

Arbetsflödet Step Functions utför därefter följande tre steg:

  1. Byt ut bakgrunden för alla bilder.
  2. Skapa en statusrapport.
  3. Skicka ett e-postmeddelande via Amazon SNS.

Följande skärmdump illustrerar arbetsflödet för Step Functions.

AWS Step Functions Workflow

Låt oss titta på varje steg mer detaljerat.

Ersätt bakgrund för alla bilder

Step Functions använder en Distribuerad karta att bearbeta varje bild i parallella underordnade arbetsflöden. Den distribuerade kartan tillåter behandling med hög samtidighet. Varje underordnat arbetsflöde har sin egen separata körhistorik från det överordnade arbetsflödet.

Step Functions använder en InvokeModel-optimerad API-åtgärd för Amazon Bedrock. API:et accepterar förfrågningar och svar som är upp till 25 MB. Stegfunktioner har dock en gräns på 256 kB för tillståndsinmatning och utmatning av nyttolast. För att stödja större bilder använder lösningen en S3-hink där InvokeModel API läser data från och skriver resultatet till. Följande är konfigurationen för InvokeModel API för Amazon Bedrock-integration:

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

Smakämnen Input S3Uri parametern anger källplatsen för att hämta indata. De Output S3Uri parametern anger destinationen för att skriva API-svaret.

En Lambda-funktion sparar förfrågans nyttolast som en JSON-fil i det angivna Input S3Uri plats. De InvokeModel API använder denna indatanyttolast för att generera bilder med den angivna bakgrunden:

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

Titan Image Generator G1-modellen stöder följande parametrar för bildgenerering:

  • uppgiftstyp – Anger utmålningsmetoden för att ersätta bildens bakgrund.
  • text – En textuppmaning för att definiera bakgrunden.
  • negativText – En textuppmaning för att definiera vad som inte ska inkluderas i bilden.
  • maskPrompt – En textprompt som definierar masken. Det motsvarar etiketter som du vill behålla i de slutgiltiga genererade bilderna.
  • maskBild – JPEG- eller PNG-bilden kodad i base64.
  • outPaintingMode – Anger om modifiering av pixlarna inuti masken ska tillåtas eller inte. DEFAULT tillåter modifiering av bilden inuti masken för att hålla den i överensstämmelse med den rekonstruerade bakgrunden. PRECISE förhindrar modifiering av bilden inuti masken.
  • numberOfImages – Antalet bilder som ska genereras.
  • kvalitet – Kvaliteten på de genererade bilderna: standard or premium.
  • cfgSkala – Anger hur starkt den genererade bilden ska följa uppmaningen.
  • höjd – Bildens höjd i pixlar.
  • bredd – Bildens bredd i pixlar.

Amazonas berggrund InvokeModel API genererar ett svar med en kodad bild i Output S3Uri plats. En annan Lambda-funktion analyserar bilden från svaret, avkodar den från base64 och sparar bildfilen på följande plats: s3://<Image Bucket>/generated-image-file/<year>/<month>/<day>/<timestamp>/.

Slutligen uppdaterar ett underordnat arbetsflöde en DynamoDB-tabell med bildgenereringsstatus och markerar den som antingen Lyckades or Misslyckades, och inklusive detaljer som t.ex ImageName, Cause, Erroroch Status.

Skapa en statusrapport

Efter bildgenereringsprocessen hämtar en lambdafunktion statusdetaljerna från DynamoDB. Den sammanställer dessa detaljer dynamiskt till en omfattande statusrapport i JSON-format. Den sparar sedan den genererade statusrapporten en JSON-fil på följande plats: s3://<Image Bucket>/status-report-files/<year>/<month>/<day>/<timestamp>/. ITOps-teamet kan integrera denna rapport med sitt befintliga meddelandesystem för att spåra om bildbehandlingen slutförts framgångsrikt. För företagsanvändare kan du utöka detta ytterligare för att generera en rapport i CSV-format.

Skicka ett e-postmeddelande via Amazon SNS

Step Functions anropar en Amazon SNS API-åtgärd för att skicka ett e-postmeddelande. E-postmeddelandet innehåller detaljer inklusive S3-platsen för statusrapporten och slutliga bildfiler. Följande är exempel på e-postmeddelande.

Meddelande-e-post

Slutsats

I det här inlägget gav vi en översikt över en exempellösning som demonstrerar automatiseringen av att ändra bildbakgrunder i skala med hjälp av Amazon Bedrock och Step Functions. Vi förklarade också varje del av lösningen i detalj. Genom att använda Step Functions-optimerade integration med Amazon Bedrock, Distributed Map och Titan Image Generator G1-modellen ersätter lösningen effektivt bakgrunderna för bilder parallellt, vilket ökar produktiviteten och skalbarheten.

För att distribuera lösningen, se instruktionerna i GitHub repository.

Resurser

För att lära dig mer om Amazon Bedrock, se följande resurser:

För att lära dig mer om Titan Image Generator G1-modellen, se följande resurser:

För att lära dig mer om hur du använder Amazon Bedrock med stegfunktioner, se följande resurser:


Om författaren

Automatisera processen för att ändra bildbakgrund med Amazon Bedrock och AWS Step Functions | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Chetan Makvana är en senior lösningsarkitekt med Amazon Web Services. Han arbetar med AWS-partners och kunder för att ge dem arkitektonisk vägledning för att bygga skalbar arkitektur och implementera strategier för att driva introduktionen av AWS-tjänster. Han är en teknikentusiast och en byggare med ett kärnintresseområde för generativ AI, serverlös och DevOps. Utanför jobbet tycker han om att titta på program, resa och musik. 

Tidsstämpel:

Mer från AWS maskininlärning