Tự động hóa quy trình thay đổi nền ảnh bằng Amazon Bedrock và AWS Step Function 

Bởi Chetan Makvana | 7 tháng 3 năm 2023 | Amazon Bedrock, Amazon Titan, AI, AWS Step Function, Generative AI, Trung cấp (200), Hướng dẫn kĩ thuật | Liên kết cố định | Bình luận | Chia sẻ

Nhiều khách hàng,  bao gồm cả những người làm trong lĩnh vực quảng cáo, sáng tạo, truyền thông và giải trí, thương mại điện tử và thời trang, thường cần nhu cầu thay đổi nền trong một số lượng lớn hình ảnh. Thông thường điều này liên quan đến việc chỉnh sửa thủ công từng hình ảnh và phần mềm ảnh. Tuy nhiên, Amazon BedrockAWS Step Function giúp việc tự động hóa trở nên đơn giản hơn.

Amazon Bedrock thường  cung cấp mô hình AI nền tảng Amazon Titan Image Generator G1, mô hình này có thể tự động thay đổi nền ảnh bằng cách sử dụng công nghệ gọi là outpainting. Step Functions cho phép bạn tạo một quy trình luồng làm việc  tự động kết nối liền mạch với Amazon Bedrock và cách dịch vụ AWS khác. Cùng với nhau, Amazon Bedrock và Step Functions hợp lý hóa toàn bộ quy trình tự động thay đổi nền ảnh trên nhiều hình ảnh.

Bài đăng này giới thiệu một giải pháp đơn giản hóa quy trình thay đổi nền ảnh  trong nhiều hình ảnh. Bằng cách khai thác các khả năng của  Generative AI với Amazon Bedrock và Titan Image Generator G1, kết hợp với Step Functions, giải pháp này tạo ra hình ảnh có nền mong muốn một cách hiệu quả. Bài đăng này cung cấp cái nhìn sâu sắc về hoạt động bên trong của giải pháp và giúp bạn hiểu các lựa chọn thiết kế để xây dựng giải pháp tùy chỉnh của riêng mình.

Xem GitHub repository để biết thêm chi tiết hướng dẫn triển khai giải pháp này.

TỔNG QUAN GIẢI PHÁP

Hãy nhìn cách giải pháp này hoạt động tại cấp độ cao trước khi đi sâu hơn vào các yếu tố cụ thể thành phần và dịch vụ AWS sử dụng. Lược đồ sau đây cung cấp cái nhìn đơn giản về kiến trúc giải pháp và nêu bật các yếu tố chính đánh dấu các thành phần chính.

Quá trình làm việc bao gồm các bước:

  1. Người dùng tải nhiều ảnh lên bucket Amazon Simple Storage Service (Amazon S3) S3 bucket  thông qua ứng dụng web Streamlit.
  2. Ứng dụng Streamlit web gọi Amazon API Gateway REST API endpoint được tích hợp với API Amazon Rekognition DetecLabels để phát hiện nhãn cho từng ảnh.
  3. Sau khi gửi, Streamlit sẽ cập nhập bảng trong DynamoDB với chi tiết ảnh.
  4. DynamoDB cập nhập kích hoạt AWS Lambda function, hàm này sẽ bắt đầu một quy trình làm việc cho của Step Function.
  5. Quy trình Luồng làm việc của Step Functions chạy các bước sau cho mỗi hình ảnh:

5.1 Xây dựng payload trọng tải yêu cầu cho Amazon Bedrock InvokeModel API Amazon Bedrok.

5.2 Gọi hành động API InvokeMode của Amazon Bedrock 

5.3 Phân tích cú pháp hình ảnh từ phản hồi và lưu nó vào S3.

5.4 Cập nhập trạng thái hình ảnh trong bảng DynamoDB.

  1. Luồng làm việc Step Functions gọi một Lambda function để sinh báo cáo trạng thái.
  2. Luồng làm việc gửi một email sử dụng SNS.

Như được hiển thị trong ảnh chụp màn hình sau, ứng dụng web Streamlit cho phép bạn tải lên hình ảnh và nhập lời nhắc văn bản để chỉ định nền mong muốn, lời nhắc phủ định và chế độ outpainting để tạo hình ảnh. Bạn cũng có thể xem và xóa các nhãn không mong muốn được liên kết với từng hình ảnh được tải lên mà bạn không muốn giữ lại trong hình ảnh được tạo cuối cùng. Như đã thấy trong ảnh chụp màn hình, Streamlit cho phép bạn tải ảnh lên và nhận lời nhắc văn bản chỉ định cho nền ảnh mong muốn, lời nhắc phủ định và chế độ vẽ ngoài cho sinh ảnh. Bạn cũng có thể xem và xóa các nhãn không mong muốn liên quan đến từng hình ảnh được tải lên mà bạn không muốn giữ lại các hình ảnh được tạo cuối cùng.

Trong ví dụ này, lời nhắc về nền là “London city background.” Quy trình tự động hoá ảnh mới Quá trình tự động sinh ảnh mới dựa trên hình ảnh được tải lên ban đầu với background là London.

STREAMLIT VÀ TẢI ẢNH LÊN

Streamlit đóng vai trò như là giao diện người dùng cho giải pháp này. Để bảo vệ ứng dụng khỏi những truy cập trái phép, nó tích hợp với một nhóm người dùng Amazon cognito. API Gateway sử dụng Amazon Cognito authorizer để xác thực yêu cầu. Ứng dụng web hoàn thành các bước sau:

  1. Với mỗi ảnh được chọn, nó sẽ truy vấn nhãn dán thông qua Amazon Rekognition bằng cách sử dụng API Gateway  REST API endpoint.
  2. Sau khi gửi, ứng dụng tải ảnh lên S3 bucket.
  3. Ứng dụng cập nhập bảng DynamoDB với tham số liên quan, tên ảnh, và nhãn cho mỗi hình ảnh sử dụng API Gateway REST API endpoint.

QUÁ TRÌNH LUỒNG XỬ LÝ ẢNH

Khi bảng DynamoDB được cập nhập, DynamoDB Streams sẽ kích hoạt Lambda function để bắt đầu một luồng làm việc Step Functions mới. Sau đây là mẫu  yêu cầu cho quy trình làm việc:

{  “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”    }  ]}

Dòng công việc Step Functions sau đó sẽ thực hiện ba bước sau:

  1. Thay nền cho tất cả hình ảnh.
  2. Tạo báo cáo trạng thái.
  3. Gửi email qua Amazon SNS.

Ảnh chụp màn hình sau đây minh họa quy trình làm việc của Step Functions.

Hãy xem xét từng bước chi tiết hơn.

THAY THẾ NỀN CHO TẤT CẢ ẢNH

Step Functions sử dụng Biểuản đồ phân tán phối để xử lý mỗi ảnh theo luồng làm việc song song. Biểu đồ phân tán Bản đồ phân tán cho phép xử lý đồng thời nhiều tác vụ cao.  Mỗi quy trìnhluồng con có lịch sử chạy riêng biệt với lịch sử của quy trình luồng gốc.

Step Functions sử dụng hành động API được tối ưu hóa InvokeModel cho Amazon Bedrock. API chấp nhận yêu cầu và phản hồi có dung lượng lên đến 25MB. Tuy nhiên, Step Function giới hạn có 256 KB với đầu vào và đầu ra payload trong trạng thái. Để hỗ trợ ảnh lớn, giải pháp sử dụng S3 bucket nơi InvokeModel API đọc  dữ liệu từ  đó và ghi kết quả vào. Sau đây là cấu hìnhình cho InvokeModel API để tích hợp Amazon Bedrock:

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

Tham số Input S3Uri chỉ định vị trí nguồn để lấy dữ liệu đầu vào. Tham số Output S3Uri chỉ định đích để ghi phản hồi API.

Hàm Lambda lưu payloadtải trọng yêu cầu dưới dạng tệp JSON ở Input S3Uri vị trí được chỉ định. API InvokeModel sử dụng payloadtải trọng đầu vào này để tạo hình ảnh với nền được chỉ định:

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

Mô hình Titan Image Generator G1 hỗ trợ các thông số sau để tạo ảnh:

  • taskType – chỉ định phương thức outpainting để thay thế nền của ảnh.
  • text – Lời nhắc văn bản để định nghĩa nền. văn bản lời nhắc để định nghĩa nền.
  • NegativeText – Lời nhắc văn bảnvăn bản lời nhắc để xác định nội dung không được đưa vào hình ảnh.
  • MaskPrompt – Lời nhắc văn bảnvăn bản lời nhắc xác định mặt nạ. Nó tương ứng với các nhãn mà bạn muốn giữ lại trong hình ảnh được tạo cuối cùng.
  • MaskImage – ảnh JPEG hoặc PNG được mã hóa ở base64.
  • outPaintingMode – chỉ định liệu có cho phép sửa đổi các pixel bên trong mặt nạ hay không. DEFAULTMẶC ĐỊNH cho phép sửa đổi ảnh bên trong mặt nạ để giữ cho nó phù hợp với nền được xây dựng lại. PRECISE CHÍNH XÁC ngăn chặn việc sửa đổi hình ảnh bên trong mặt nạ.
  • numberOfImages – Số lượng ảnh cần tạo.
  • quality – Chất lượng của ảnh được tạo ra: standard hoặc premium.
  • cfgScale – Chỉ định mức độ hình ảnh được tạo sẽ tuân thủ lời nhắc.
  • height – Chiều cao của hình ảnh tính bằng pixel.
  • width – Chiều rộng của hình ảnh tính bằng pixel.

Amazon Bedrock InvokeModel tạo phản hồi với ảnh được mã hóa tại vị trí Output S3Uri  . Một Lambda function khác phân tích ảnh từ phản hồi, giải mã nó từ base64 và lưu ảnh vào đường dẫn: 

s3://<Image Bucket>/generated-image-file/<year>/<month>/<day>/<timestamp>/.

Cuối cùng một quy trình công việc luồng con cập nhập bảng DynamoDB với trạng thái tạo hình ảnh, đánh dấu bảng đó là Success Thành công hoặc Failed, và bao gồm các chi tiết như ImageName, Cause, Error và Status.

GỬI EMAIL QUA AMAZON SNS

Step Functions gọi hành động API Amazon SNS để gửi email. Email chứa thông tin chi tiết bao gồm vị trí S3 cho báo cáo trạng thái và tệp hình ảnh cuối cùng. Sau đây là email thông báo mẫu.

KẾT LUẬN

Trong bài đăng này, chúng tôi đã cung cấp tổng quan về giải pháp mẫu thể hiện khả năng tự động thay đổi nền ảnh trên quy mô lớn bằng cách sử dụng Amazon Bedrock và Step Functions. Chúng tôi cũng giải thích chi tiết từng yếu tố của giải pháp. Bằng cách sử dụng Step Function được tối ưu hóa với Amazon Bedrock, Distributed Map và mô hình Titan  Image Generator G1, giải pháp này sẽ thay thế song song nền của ảnh một cách hiệu quả, nâng cao năng suất và khả năng mở rộng.

Để triển khai giải pháp, tốt hơn hãy tham khảo trong GitHub repository.

TÀI NGUYÊN

Để tìm hiểu thêm về Amazon Bedrock, hãy xem các tài nguyên sau:

Để tìm hiểu thêm về model Titan Image Generator G1, hãy xem các tài nguyên sau:

Để tìm hiểu thêm về cách sử dụng Amazon Bedrock với Step Functions, xem các tài nguyên sau:

VỀ TÁC GIẢ

Chetan Mkvana là Senior Solution Architect với AWS. Anh làm việc với các đối tác và khách hàng của AWS để cung cấp cho họ các hướng dẫn về kiến trúc nhằm xây dựng các kiến trúc có thể mở rộng và triển khai các chiến lược để áp dụng các dịch vụ AWS. Anh ấy là một người đam mê công nghệ và builder với lĩnh vực quan tâm cốt lõi là generative AI, serverless, và DevOps. Ngoài công việc, anh ấy enjoys với các chương trình, du lịch, và âm nhạc. 

LINK BLOG:

Leave a comment