Улучшите масштабируемость API-интерфейсов Amazon Rekognition без сохранения состояния с помощью анализа данных PlatoBlockchain в нескольких регионах. Вертикальный поиск. Ай.

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

В предыдущем блоге, мы описали решение сквозной проверки личности в одном регионе AWS. В решении используется Апостол API Обнаружить лица для распознавания лиц и СравнитьЛица для сравнения лиц. Мы рассматриваем эти API как API без сохранения состояния, поскольку они не зависят от Amazon Rekognition. коллекция лиц. Они также идемпотентны, то есть повторные вызовы с одними и теми же параметрами вернут один и тот же результат. Они предоставляют гибкие возможности передачи изображений либо через Простой сервис хранения Amazon (Amazon S3) местоположение или необработанные байты.

В этом посте мы сосредоточимся на Образ распознавания Amazon API без сохранения состояния, а также обсудить два варианта передачи изображений и выбор одного из них с точки зрения архитектуры системы. Затем мы обсудим, как масштабировать API без сохранения состояния, чтобы преодолеть некоторые региональные ограничения. Говоря о масштабируемости, мы часто имеем в виду максимальное количество транзакций в секунду (TPS), которое может обрабатывать решение. Например, при проведении крупного мероприятия, использующего компьютерное зрение для обнаружения лиц или меток объектов, вы можете столкнуться с резким скачком трафика, и вы не хотите, чтобы система регулировала скорость. Это означает, что иногда вам нужно увеличить TPS и даже превысить квоту региональных услуг, которую имеют API Amazon Rekognition. В этом посте предлагается решение для увеличения TPS API без сохранения состояния за счет использования нескольких регионов.

API без сохранения состояния Amazon Rekognition

Из доступных API изображений Amazon Rekognition: СравнитьЛица, Обнаружить лица, Обнаружение меток, детектмодератионлейблс, ОбнаружитьЗащитноеОборудование, Детекттексти ПризнатьЗнаменитости не имеют гражданства. Они предоставляют как Amazon S3, так и необработанные байты для передачи изображений. Например, в синтаксисе запроса DetectFaces API есть два варианта перехода к Image поле: Bytes or S3Object.

При использовании S3Object Вариант, типичная архитектура выглядит следующим образом.

Это решение имеет следующий рабочий процесс:

  1. Клиентское приложение получает доступ к веб-странице, размещенной на АМС Усиление.
  2. Клиентское приложение аутентифицируется и авторизуется с помощью Амазон Когнито.
  3. Клиентское приложение загружает изображение в корзину S3.
  4. Amazon S3 запускает AWS Lambda для вызова Amazon Rekognition.
  5. Функция Lambda вызывает API Amazon Rekognition с параметром S3Object.
  6. Функция Lambda сохраняет результат в Amazon DynamoDB таблице.

Выберите S3Object вариант в следующих случаях:

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

Если вы не соответствуете всем этим требованиям, вам следует выбрать 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). Ниже приведен фрагмент кода функции 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))

Обратите внимание, что предыдущий фрагмент кода работает непосредственно для форматов 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 Регионы.

распространять Rekognition трафик

Фрагмент кода для вызова 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 для Amazon Rekognition DetectFaces API, вы можете равномерно распределить вызовы 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 Rekognition наблюдается.

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 без сохранения состояния для различных вариантов использования, включая проверку личности, модерацию контента, обработку мультимедиа и многое другое. В этом посте обсуждались два варианта передачи изображений и как использовать параметр необработанных байтов для следующих случаев использования:

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

Узнайте, как Amazon Rekognition используется в различные варианты использования компьютерного зрения и начните свое инновационное путешествие.


Об авторах

Улучшите масштабируемость API-интерфейсов Amazon Rekognition без сохранения состояния с помощью анализа данных PlatoBlockchain в нескольких регионах. Вертикальный поиск. Ай.Шарон Ли является архитектором решений в AWS, базирующейся в Бостоне, штат Массачусетс. Она работает с корпоративными клиентами, помогая им решать сложные проблемы и использовать AWS. Вне работы она любит проводить время со своей семьей и посещать местные рестораны.

Улучшите масштабируемость API-интерфейсов Amazon Rekognition без сохранения состояния с помощью анализа данных PlatoBlockchain в нескольких регионах. Вертикальный поиск. Ай.Вайбхав Шах является старшим архитектором решений в AWS и любит помогать своим клиентам во всем, что связано с облачными технологиями, и обеспечивать их переход к облачным технологиям. Вне работы он любит путешествовать, исследовать новые места и рестораны, готовить, заниматься такими видами спорта, как крикет и футбол, смотреть фильмы и сериалы (поклонник Marvel), а также приключения, такие как походы, прыжки с парашютом, и этот список можно продолжить.

Отметка времени:

Больше от Машинное обучение AWS