Mejore la escalabilidad de las API sin estado de Amazon Rekognition utilizando PlatoBlockchain Data Intelligence de múltiples regiones. Búsqueda vertical. Ai.

Mejore la escalabilidad de las API sin estado de Amazon Rekognition con varias regiones

En anterior del blog, describimos una solución de verificación de identidad de un extremo a otro en una única región de AWS. La solución utiliza el Reconocimiento de amazonas API Detectar caras para la detección de rostros y Comparar caras para la comparación de rostros. Pensamos en esas API como API sin estado porque no dependen de Amazon Rekognition. coleccion de caras. También son idempotentes, lo que significa que las llamadas repetidas con los mismos parámetros devolverán el mismo resultado. Proporcionan opciones flexibles para pasar imágenes, ya sea a través de un Servicio de almacenamiento simple de Amazon (Amazon S3) ubicación o bytes sin procesar.

En esta publicación, nos enfocamos en Imagen de Amazon Rekognition API sin estado, y analice dos opciones para pasar imágenes y cuándo elegir una sobre la otra desde el punto de vista de la arquitectura del sistema. Luego, analizamos cómo escalar las API sin estado para superar algunas limitaciones regionales. Cuando hablamos de escalabilidad, a menudo nos referimos a las transacciones máximas por segundo (TPS) que puede manejar la solución. Por ejemplo, cuando organiza un gran evento que utiliza la visión por computadora para detectar caras o etiquetas de objetos, puede encontrarse con un pico de tráfico y no desea que el sistema se acelere. Eso significa que a veces necesita aumentar el TPS e incluso ir más allá de la cuota de servicio regional que tienen las API de Amazon Rekognition. Esta publicación propone una solución para aumentar el TPS de las API sin estado mediante el uso de varias regiones.

API sin estado de Amazon Rekognition

De las API de imágenes de Amazon Rekognition disponibles, Comparar caras, Detectar caras, Detectar etiquetas, DetectModerationLabelsDetectModerationLabels, Detectar equipo de protección, Detectar textoy reconocercelebridades son apátridas. Proporcionan opciones de Amazon S3 y bytes sin procesar para pasar imágenes. Por ejemplo, en la sintaxis de solicitud del DetectFaces API, hay dos opciones para pasar a la Image campo: Bytes or S3Object.

Cuando se utiliza el S3Object opción, una arquitectura típica es la siguiente.

Esta solución tiene el siguiente flujo de trabajo:

  1. La aplicación cliente accede a una página web alojada con AWS amplificar.
  2. La aplicación cliente está autenticada y autorizada con Cognito Amazonas.
  3. La aplicación cliente carga una imagen en un depósito de S3.
  4. Amazon S3 desencadena una AWS Lambda función para llamar a Amazon Rekognition.
  5. La función Lambda llama a las API de Amazon Rekognition con la opción S3Object.
  6. La función Lambda persiste el resultado a un Amazon DynamoDB mesa.

Elija el S3Object opción en los siguientes escenarios:

  • La imagen es un archivo con formato PNG o JPEG
  • Implementa toda la pila en la misma región donde está disponible Amazon Rekognition
  • La cuota de servicio regional de la API de Amazon Rekognition cumple con los requisitos de su sistema

Cuando no cumpla con todos estos requisitos, debe elegir el Bytes .

Utilice las API sin estado de Amazon Rekognition en una región diferente

Un ejemplo de uso de la Bytes La opción es cuando desea implementar su caso de uso en una región donde Amazon Rekognition generalmente no está disponible, por ejemplo, si tiene presencia de clientes en América del Sur (sa-east-1) Región. Para la residencia de datos, el depósito S3 que usa para almacenar las imágenes de los usuarios debe estar en sa-east-1, pero desea utilizar Amazon Rekognition para su solución, aunque generalmente no está disponible en sa-east-1. Una solución es utilizar el Bytes opción para llamar a Amazon Rekognition en una región diferente donde Amazon Rekognition está disponible, como us-east-1. El siguiente diagrama ilustra esta arquitectura.

Reconocimiento en diferentes Regiones

Una vez que se activa la función Lambda (Paso 4), en lugar de llamar a Amazon Rekognition directamente con la ubicación de S3 de la imagen, la función necesita recuperar la imagen del depósito de S3 (Paso 5), luego llamar a Amazon Rekognition con los bytes sin procesar de la imagen (Paso 6). El siguiente es un fragmento de código de la función 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))

Tenga en cuenta que el fragmento de código anterior funciona directamente para los formatos JPEG o PNG. Para otros formatos de imagen, como BMP, se necesita un procesamiento de imagen adicional para convertirlo a bytes JPEG o PNG antes de enviarlo a Amazon Rekognition. El siguiente código convierte BMP a bytes 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'])

Escale el TPS de las API sin estado distribuyendo las llamadas API en varias regiones

Otro caso de uso del Bytes La opción es que puede ampliar el TPS de las API sin estado distribuyendo las llamadas API en varias regiones. De esta forma, no está limitado por la cuota de servicio regional de la API porque puede obtener TPS adicionales de otras regiones.

En el siguiente ejemplo, se crea una función Lambda para llamar a Amazon Rekognition DetectLabels API con la Bytes opción. Para escalar el TPS máximo, puede distribuir las llamadas API en varias regiones con pesos. El TPS máximo que puede lograr se calcula con: min(region_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, … region_n_max_tps/region_n_weight). El siguiente ejemplo utiliza us-east-1 y us-west-2 Regiones.

difundir el tráfico de Rekognition

El fragmento de código para llamar al DetectLabels La API es la siguiente:

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)

Gracias us-east-1 y us-west-2 ambos tienen un máximo de 50 TPS para la API DetectFaces de Amazon Rekognition, puede distribuir uniformemente las llamadas API con un peso de 50/50 configurando la variable de entorno REGION_1_TRAFFIC_PERCENTAGE a 50. De esta manera, puede lograr min (50/50%, 50/50%) = 100 TPS en teoría.

Para validar la idea, la función Lambda se expone como una API REST con Puerta de enlace API de Amazon. entonces JMeter se utiliza para cargar la prueba de la API.

prueba de carga de llamadas a la API de Rekognition

REGION_1_TRAFFIC_PERCENTAGE primero se establece en 100, de esta manera todos DetectFaces Las llamadas API se envían a us-east-1 solamente. En teoría, el TPS máximo que se puede lograr está limitado por la cuota de servicio en us-east-1, que es de 50 TPS. Prueba de carga en el punto final de API personalizado, comenzando con 50 subprocesos simultáneos, agregando gradualmente 5 subprocesos hasta ProvisionedThroughputExceededException devuelto por Amazon Rekognition.

REGION_1_TRAFFIC_PERCENTAGE luego se establece en 50, de esta manera todos DetectLabels Las llamadas API se envían uniformemente a us-east-1 y us-west-2. En teoría, el TPS máximo que se puede conseguir es la cuota de servicio que combinan las dos Regiones, que es de 100 TPS. Vuelva a iniciar la prueba de carga desde 100 subprocesos para encontrar el TPS máximo.

La siguiente tabla resume los resultados de las pruebas de carga.

Porcentaje de llamadas API de DetectLabels a us-east-1 Porcentaje de llamadas API de DetectLabels a us-west-2 TPS máximo en teoría Máximo de ejecuciones simultáneas sin Excepción de rendimiento aprovisionado
100 0 50 70
50 50 100 145

Conclusión

Muchos clientes utilizan las API sin estado de imágenes de Amazon Rekognition para varios casos de uso, incluida la verificación de identidad, la moderación de contenido, el procesamiento de medios y más. Esta publicación discutió las dos opciones de pasar imágenes y cómo usar la opción de bytes sin procesar para los siguientes casos de uso:

  • Disponibilidad regional de Amazon Rekognition
  • Residencia de datos del cliente
  • Ampliación del TPS de las API sin estado de Amazon Rekognition

Vea cómo se usa Amazon Rekognition en diferentes casos de uso de visión artificial y comience su viaje de innovación.


Acerca de los autores

Mejore la escalabilidad de las API sin estado de Amazon Rekognition utilizando PlatoBlockchain Data Intelligence de múltiples regiones. Búsqueda vertical. Ai.Sharon Lic es un arquitecto de soluciones en AWS, con sede en el área de Boston, MA. Trabaja con clientes empresariales, ayudándolos a resolver problemas difíciles y construir sobre AWS. Fuera del trabajo, le gusta pasar tiempo con su familia y explorar los restaurantes locales.

Mejore la escalabilidad de las API sin estado de Amazon Rekognition utilizando PlatoBlockchain Data Intelligence de múltiples regiones. Búsqueda vertical. Ai.Vaibhav Shah es un arquitecto de soluciones sénior de AWS y le gusta ayudar a sus clientes con todo lo relacionado con la nube y habilitar su proceso de adopción de la nube. Fuera del trabajo, le encanta viajar, explorar nuevos lugares y restaurantes, cocinar, seguir deportes como el cricket y el fútbol, ​​ver películas y series (fanático de Marvel) y actividades de aventura como el senderismo, el paracaidismo y la lista continúa.

Sello de tiempo:

Mas de Aprendizaje automático de AWS