Покращте масштабованість API Amazon Rekognition без збереження стану за допомогою кількох регіонів PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Покращте масштабованість API Amazon Rekognition без збереження стану за допомогою кількох регіонів

У попередньому блог, ми описали рішення для наскрізної перевірки особи в одному регіоні AWS. Рішення використовує Amazon Rekognition Інтерфейси DetectFaces для розпізнавання обличчя та CompareFaces для порівняння обличчя. Ми вважаємо ці API API без стану, оскільки вони не залежать від розпізнавання Amazon колекція обличчя. Вони також ідемпотентні, тобто повторні виклики з однаковими параметрами повертатимуть той самий результат. Вони надають гнучкі параметри передачі зображень або через an Служба простого зберігання Amazon (Amazon S3) розташування або необроблені байти.

У цій публікації ми зосередимося на Зображення повторного запалювання Amazon API без стану та обговорити два варіанти передачі зображень і коли вибрати один над іншим з точки зору архітектури системи. Потім ми обговорюємо, як масштабувати API без збереження стану, щоб подолати деякі регіональні обмеження. Говорячи про масштабованість, ми часто маємо на увазі максимальну кількість транзакцій за секунду (TPS), яку може обробляти рішення. Наприклад, під час проведення великої події, яка використовує комп’ютерне бачення для виявлення облич або позначок об’єктів, ви можете зіткнутися зі сплеском трафіку, і ви не хочете, щоб система гальмувала. Це означає, що вам іноді потрібно збільшити TPS і навіть вийти за межі регіональної квоти сервісу Amazon Rekognition API. У цьому дописі пропонується рішення для збільшення TPS API без збереження стану за допомогою кількох регіонів.

API без збереження стану Amazon Rekognition

З доступних API зображень Amazon Rekognition, CompareFaces, DetectFaces, DetectLabels, DetectModerationLabels, DetectProtectiveEquipment, DetectText та RecognizeCelebrities є особами без громадянства. Вони надають параметри Amazon S3 і raw bytes для передачі зображень. Наприклад, у синтаксисі запиту DetectFaces API, є два варіанти переходу до Image поле: Bytes or S3Object.

При використанні S3Object варіант, типова архітектура виглядає наступним чином.

Це рішення має такий робочий процес:

  1. Клієнтська програма отримує доступ до веб-сторінки, розміщеної на AWS Amplify.
  2. Клієнтська програма автентифікована та авторизована за допомогою Амазонка Когніто.
  3. Клієнтська програма завантажує зображення в сегмент S3.
  4. Amazon S3 запускає an AWS Lambda функцію виклику Amazon Rekognition.
  5. Функція Lambda викликає Amazon Rekognition API за допомогою опції S3Object.
  6. Функція Лямбда зберігає результат до an Amazon DynamoDB таблиці.

Виберіть S3Object у таких сценаріях:

  • Зображення є файлом у форматі PNG або JPEG
  • Ви розгортаєте весь стек у тому самому регіоні, де доступне Amazon Rekognition
  • Регіональна квота служби Amazon Rekognition API відповідає вашим системним вимогам

Якщо ви не відповідаєте всім цим вимогам, вам слід вибрати Bytes варіант.

Використовуйте API без збереження стану Amazon Rekognition в іншому регіоні

Один із прикладів використання Bytes варіант, коли ви хочете розгорнути свій варіант використання в регіоні, де Amazon Rekognition не є загальнодоступним, наприклад, якщо ваш клієнт присутній у Південній Америці (sa-east-1) Регіон. Для постійності даних має бути відро S3, яке ви використовуєте для зберігання зображень користувачів sa-east-1, але ви хочете використовувати Amazon Rekognition для свого рішення, навіть якщо воно не є загальнодоступним у sa-east-1. Одним із рішень є використання Bytes можливість викликати Amazon Rekognition в іншому регіоні, де доступна Amazon Rekognition, наприклад us-east-1. Наступна діаграма ілюструє цю архітектуру.

Визнання в різних регіонах

Після запуску функції Lambda (Крок 4) замість того, щоб викликати Amazon Rekognition безпосередньо з розташуванням зображення S3, функція повинна отримати зображення з відра S3 (Крок 5), а потім викликати Amazon Rekognition із необробленими байтами зображення (Крок 6). Нижче наведено фрагмент коду функції лямбда:

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))

Зверніть увагу, що попередній фрагмент коду працює безпосередньо для форматів JPEG або PNG. Для інших форматів зображень, як-от BMP, потрібна додаткова обробка зображення, щоб перетворити його на байти JPEG або PNG перед надсиланням до Amazon Rekognition. Наступний код перетворює байти BMP на 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'])

Розширюйте TPS API без збереження стану, розповсюджуючи виклики API на кілька регіонів

Інший випадок використання Bytes Варіант полягає в тому, що ви можете збільшити TPS API без збереження стану, розподіливши виклики API на кілька регіонів. Таким чином, ви не обмежені регіональною квотою служби API, оскільки ви можете отримати додаткові TPS з інших регіонів.

У наступному прикладі створено функцію Lambda для виклику Amazon Rekognition DetectLabels API з Bytes варіант. Щоб збільшити максимальний TPS, ви можете розподілити виклики API на кілька регіонів за допомогою ваг. Максимальний TPS, якого ви можете досягти, обчислюється за такою формулою: min(region_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, … region_n_max_tps/region_n_weight). У наступному прикладі використовується us-east-1 та us-west-2 регіони.

трафік розпізнавання поширення

Фрагмент коду для виклику DetectLabels API виглядає наступним чином:

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)

Тому що us-east-1 та us-west-2 обидва мають максимум 50 TPS для API Amazon Rekognition DetectFaces, ви можете рівномірно розподілити виклики API з вагою 50/50, встановивши змінну середовища REGION_1_TRAFFIC_PERCENTAGE до 50. Таким чином теоретично можна досягти min(50/50%, 50/50%) = 100 TPS.

Щоб перевірити цю ідею, функція Lambda представлена ​​як REST API з API -шлюз Amazon, тоді JMeter використовується для навантажувального тестування API.

виклики Rekognition API тесту навантаження

REGION_1_TRAFFIC_PERCENTAGE спочатку встановлено на 100, таким чином усе DetectFaces Виклики API надсилаються до us-east-1 тільки. Теоретично максимальний TPS, якого можна досягти, обмежений квотою обслуговування в us-east-1, що становить 50 TPS. Завантажте тест кінцевої точки спеціального API, починаючи з 50 одночасних потоків, поступово додаючи 5 потоків, поки ProvisionedThroughputExceededException повернувся з Amazon Розпізнавання спостерігається.

REGION_1_TRAFFIC_PERCENTAGE потім встановлюється на 50, таким чином усе DetectLabels Виклики API рівномірно надсилаються us-east-1 та us-west-2. Теоретично максимальна кількість TPS, якої можна досягти, — це квота обслуговування, яку об’єднують два Регіони, тобто 100 TPS. Почніть навантажувальний тест знову зі 100 потоків, щоб знайти максимальний TPS.

У наведеній нижче таблиці підсумовуються результати навантажувального тестування.

Відсоток викликів API DetectLabels до us-east-1 Відсоток викликів API DetectLabels до us-west-2 Максимальний TPS в теорії Максимальна кількість одночасних прогонів без ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

Висновок

Багато клієнтів використовують API-інтерфейси Amazon Rekognition Image без збереження даних для різноманітних випадків використання, включаючи перевірку особи, модерацію вмісту, обробку мультимедійних даних тощо. У цьому дописі обговорювалися два варіанти передачі зображень і як використовувати параметр raw bytes для наступних випадків використання:

  • Регіональна доступність Amazon Rekognition
  • Резиденція даних клієнта
  • Масштабування TPS без збереження стану API Amazon Rekognition

Перевірте, як Amazon Rekognition використовується в різні випадки використання комп’ютерного зору і розпочніть свій інноваційний шлях.


Про авторів

Покращте масштабованість API Amazon Rekognition без збереження стану за допомогою кількох регіонів PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Шерон Лі є архітектором рішень в AWS, розташованому в Бостоні, Массачусетс. Вона працює з корпоративними клієнтами, допомагаючи їм вирішувати складні проблеми та створювати AWS. Поза роботою вона любить проводити час із сім’єю та відвідувати місцеві ресторани.

Покращте масштабованість API Amazon Rekognition без збереження стану за допомогою кількох регіонів PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Вайбхав Шах є старшим архітектором рішень в AWS і любить допомагати своїм клієнтам із усією хмарою та сприяти їхньому переходу на хмару. Поза роботою він любить подорожувати, досліджувати нові місця та ресторани, готувати, стежити за такими видами спорту, як крикет і футбол, дивитися фільми та серіали (шанувальник Marvel), а також займатися пригодами, як-от походи, стрибки з парашутом, і список можна продовжувати.

Часова мітка:

Більше від AWS Машинне навчання