Cải thiện khả năng mở rộng cho các API không trạng thái của Amazon Rekognition bằng cách sử dụng nhiều vùng PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Cải thiện khả năng mở rộng cho các API không trạng thái của Amazon Rekognition bằng cách sử dụng nhiều vùng

Ở trước blog đăng bài, chúng tôi đã mô tả giải pháp xác minh danh tính toàn diện trong một Khu vực AWS duy nhất. Giải pháp sử dụng các Nhận thức lại Amazon API Phát hiện không gian để nhận diện khuôn mặt và So sánh khuôn mặt để so sánh khuôn mặt. Chúng tôi coi các API đó là API không trạng thái vì chúng không phụ thuộc vào Amazon Rekognition bộ sưu tập khuôn mặt. Chúng cũng là idempotent, nghĩa là các cuộc gọi lặp đi lặp lại với các tham số giống nhau sẽ trả về cùng một kết quả. Chúng cung cấp các tùy chọn linh hoạt khi truyền hình ảnh, thông qua một Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3) hoặc byte thô.

Trong bài đăng này, chúng tôi tập trung vào Hình ảnh Amazon Rekognition API không trạng thái và thảo luận về hai tùy chọn truyền hình ảnh và thời điểm chọn cái này thay vì cái kia từ quan điểm kiến ​​trúc hệ thống. Sau đó, chúng tôi thảo luận về cách mở rộng quy mô API không trạng thái để khắc phục một số hạn chế của Khu vực. Khi nói về khả năng mở rộng, chúng tôi thường đề cập đến các giao dịch tối đa mỗi giây (TPS) mà giải pháp có thể xử lý. Ví dụ: khi tổ chức một sự kiện lớn sử dụng thị giác máy tính để phát hiện khuôn mặt hoặc nhãn đối tượng, bạn có thể gặp phải lưu lượng truy cập tăng đột biến và bạn không muốn hệ thống tăng tốc. Điều đó có nghĩa là đôi khi bạn cần tăng TPS và thậm chí vượt quá hạn ngạch dịch vụ Khu vực mà API Amazon Rekognition có. Bài đăng này đề xuất một giải pháp để tăng TPS của API không trạng thái bằng cách sử dụng nhiều Khu vực.

Amazon Rekognition API không trạng thái

Trong số các API hình ảnh Amazon Rekognition hiện có, So sánh khuôn mặt, Phát hiện không gian, Phát hiệnLabels, Phát hiện Nhãn kiểm duyệt, Phát HiệnThiết Bị Bảo Vệ, phát hiện văn bảnNhận ra người nổi tiếng là không quốc tịch. Chúng cung cấp cả tùy chọn Amazon S3 và byte thô để truyền hình ảnh. Ví dụ, trong cú pháp yêu cầu của DetectFaces API, có hai tùy chọn để chuyển đến Image cánh đồng: Bytes or S3Object.

Khi sử dụng S3Object tùy chọn, một kiến ​​trúc điển hình như sau.

Giải pháp này có quy trình làm việc như sau:

  1. Ứng dụng khách truy cập một trang web được lưu trữ với Amplify AWS.
  2. Ứng dụng khách được xác thực và ủy quyền với Nhận thức về Amazon.
  3. Ứng dụng khách tải hình ảnh lên bộ chứa S3.
  4. Amazon S3 kích hoạt một AWS Lambda để gọi Amazon Rekognition.
  5. Hàm Lambda gọi các API Amazon Rekognition bằng tùy chọn S3Object.
  6. Hàm Lambda duy trì kết quả thành một Máy phát điện Amazon bảng.

Chọn S3Object tùy chọn trong các trường hợp sau:

  • Hình ảnh là tệp có định dạng PNG hoặc JPEG
  • Bạn triển khai toàn bộ ngăn xếp trong cùng Khu vực có sẵn Amazon Rekognition
  • Định mức dịch vụ khu vực của Amazon Rekognition API đáp ứng yêu cầu hệ thống của bạn

Khi bạn không đáp ứng tất cả các yêu cầu này, bạn nên chọn Bytes tùy chọn.

Sử dụng API không trạng thái của Amazon Rekognition ở một Khu vực khác

Một ví dụ về việc sử dụng Bytes tùy chọn là khi bạn muốn triển khai trường hợp sử dụng của mình ở Khu vực mà Amazon Rekognition thường không khả dụng, chẳng hạn như nếu bạn có khách hàng ở Nam Mỹ (sa-east-1) Vùng đất. Đối với nơi lưu trữ dữ liệu, bộ chứa S3 mà bạn sử dụng để lưu trữ hình ảnh của người dùng phải ở sa-east-1, nhưng bạn muốn sử dụng Amazon Rekognition cho giải pháp của mình mặc dù giải pháp này thường không khả dụng ở sa-east-1. Một giải pháp là sử dụng Bytes tùy chọn gọi Amazon Rekognition ở một Khu vực khác nơi Amazon Rekognition khả dụng, chẳng hạn như us-east-1. Sơ đồ sau minh họa kiến ​​trúc này.

Recognition trong khu vực khác nhau

Sau khi chức năng Lambda được kích hoạt (Bước 4), thay vì gọi trực tiếp Amazon Rekognition bằng vị trí S3 của hình ảnh, hàm cần truy xuất hình ảnh từ bộ chứa S3 (Bước 5), sau đó gọi Amazon Rekognition bằng các byte thô của hình ảnh (Bước 6). Sau đây là đoạn mã của hàm Lambda:

rekognition_region = os.getenv("REKOGNITION_REGION")
s3 = boto3.client('s3')
rekognition = boto3.client('rekognition', region_name=rekognition_region)

def handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(
    event['Records'][0]['s3']['object']['key'], encoding='utf-8')
    s3_res = s3.get_object(Bucket=bucket, Key=key)
    rekognition_res = rekognition.detect_faces(Image={"Bytes": s3_res['Body'].read()}, Attributes=['ALL'])
    print(json.dumps(rekognition_res))

Lưu ý rằng đoạn mã trước hoạt động trực tiếp cho các định dạng JPEG hoặc PNG. Đối với các định dạng hình ảnh khác, chẳng hạn như BMP, cần phải xử lý thêm hình ảnh để chuyển đổi nó thành byte JPEG hoặc PNG trước khi gửi tới Amazon Rekognition. Đoạn mã sau chuyển đổi các byte BMP thành JPEG:

import io
from PIL import Image

s3_res = s3.get_object(Bucket=bucket, Key=key)
bmp_img = Image.open(io.BytesIO(s3_res['Body'].read()))
buffered = io.BytesIO()
rgb_img = bmp_img.convert('RGB')
rgb_img.save(buffered, format="JPEG")
rekognition_res = rekognition.detect_faces(Image={"Bytes": buffered.getvalue()}, Attributes=['ALL'])

Mở rộng quy mô TPS của API không trạng thái bằng cách phân bổ lệnh gọi API thành nhiều Khu vực

Một trường hợp sử dụng khác của Bytes tùy chọn là bạn có thể mở rộng quy mô TPS của API không trạng thái bằng cách phân bổ các lệnh gọi API thành nhiều Khu vực. Bằng cách này, bạn không bị giới hạn bởi hạn ngạch dịch vụ Khu vực của API vì bạn có thể nhận được TPS bổ sung từ các Khu vực khác.

Trong ví dụ sau, một hàm Lambda được tạo để gọi Amazon Rekognition DetectLabels API với Bytes quyền mua. Để mở rộng quy mô TPS tối đa, bạn có thể trải các lệnh gọi API thành nhiều Khu vực có trọng số. TPS tối đa mà bạn có thể đạt được được tính bằng: tối thiểu(vùng_1_max_tps/vùng_1_trọng lượng, vùng_2_max_tps/vùng_2_trọng số, … vùng_n_max_tps/vùng_n_trọng lượng). Ví dụ sau sử dụng us-east-1us-west-2 Vùng.

lan truyền lưu lượng truy cập Rekognition

Đoạn mã để gọi DetectLabels API như sau:

region_1 = os.getenv("REKOGNITION_REGION_1")
region_2 = os.getenv("REKOGNITION_REGION_2")
region_1_traffic_percentage = int(os.getenv("REGION_1_TRAFFIC_PERCENTAGE"))

# randomly generate a number between 1, 100
random_num = random.randint(1, 100)
region = region_1 if random_num <= region_1_traffic_percentage else region_2
rekognition = boto3.client('rekognition', region_name=region)
response = rekognition.detect_labels(Image={"Bytes": image_bytes})
print(response)

Bởi vì us-east-1us-west-2 cả hai đều có tối đa 50 TPS cho API Amazon Rekognition DetectFaces, bạn có thể trải đều các lệnh gọi API với trọng số 50/50 bằng cách đặt biến môi trường REGION_1_TRAFFIC_PERCENTAGE đến 50. Bằng cách này, bạn có thể đạt được tối thiểu(50/50%, 50/50%) = 100 TPS theo lý thuyết.

Để xác thực ý tưởng, hàm Lambda được hiển thị dưới dạng API REST với Cổng API Amazon. Sau đó, JMeter được sử dụng để tải thử nghiệm API.

kiểm tra tải lệnh gọi API Rekognition

REGION_1_TRAFFIC_PERCENTAGE đầu tiên được đặt thành 100, theo cách này tất cả DetectFaces Các cuộc gọi API được gửi đến us-east-1 chỉ có. Về lý thuyết, TPS tối đa có thể đạt được bị giới hạn bởi hạn ngạch dịch vụ trong us-east-1, tức là 50 TPS. Kiểm tra tải trên điểm cuối API tùy chỉnh, bắt đầu với 50 luồng đồng thời, tăng dần 5 luồng cho đến khi ProvisionedThroughputExceededException được trả về từ Amazon Rekognition được quan sát thấy.

REGION_1_TRAFFIC_PERCENTAGE sau đó được đặt thành 50, theo cách này tất cả DetectLabels Các lệnh gọi API được gửi đồng đều đến us-east-1us-west-2. Về lý thuyết, TPS tối đa có thể đạt được là hạn ngạch dịch vụ mà hai Khu vực cộng lại, là 100 TPS. Bắt đầu kiểm tra tải lại từ 100 luồng để tìm TPS tối đa.

Bảng dưới đây tóm tắt các kết quả của thử nghiệm tải.

Tỷ lệ lệnh gọi API DetectLabels tới chúng tôi-đông-1 Tỷ lệ phần trăm lệnh gọi API DetectLabels tới us-west-2 TPS tối đa trên lý thuyết Số lần chạy đồng thời tối đa mà không có Được cung cấpThroughputExceededException
100 0 50 70
50 50 100 145

Kết luận

Nhiều khách hàng đang sử dụng API không trạng thái của Amazon Rekognition Image cho các trường hợp sử dụng khác nhau, bao gồm xác minh danh tính, kiểm duyệt nội dung, xử lý phương tiện, v.v. Bài đăng này đã thảo luận về hai tùy chọn chuyển hình ảnh và cách sử dụng tùy chọn byte thô cho các trường hợp sử dụng sau:

  • Tính khả dụng của Amazon Rekognition theo khu vực
  • Dữ liệu khách hàng cư trú
  • Mở rộng quy mô TPS của API không trạng thái Amazon Rekognition

Kiểm tra cách Amazon Rekognition được sử dụng trong các trường hợp sử dụng thị giác máy tính khác nhau và bắt đầu hành trình đổi mới của bạn.


Về các tác giả

Cải thiện khả năng mở rộng cho các API không trạng thái của Amazon Rekognition bằng cách sử dụng nhiều vùng PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.Sharon Li là kiến ​​trúc sư giải pháp tại AWS, có trụ sở tại khu vực Boston, MA. Cô ấy làm việc với các khách hàng doanh nghiệp, giúp họ giải quyết các vấn đề khó khăn và xây dựng trên AWS. Ngoài công việc, cô thích dành thời gian cho gia đình và khám phá các nhà hàng địa phương.

Cải thiện khả năng mở rộng cho các API không trạng thái của Amazon Rekognition bằng cách sử dụng nhiều vùng PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.Vaibhav Shah là Kiến trúc sư giải pháp cấp cao của AWS và muốn giúp khách hàng của mình giải quyết mọi thứ trên đám mây cũng như hỗ trợ hành trình áp dụng đám mây của họ. Ngoài công việc, anh ấy thích đi du lịch, khám phá những địa điểm và nhà hàng mới, nấu ăn, theo dõi các môn thể thao như cricket và bóng đá, xem phim và phim bộ (người hâm mộ Marvel) và các hoạt động mạo hiểm như đi bộ đường dài, nhảy dù, v.v.

Dấu thời gian:

Thêm từ Học máy AWS