Améliorez l'évolutivité des API sans état Amazon Rekognition à l'aide de plusieurs régions PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Améliorez l'évolutivité des API sans état d'Amazon Rekognition à l'aide de plusieurs régions

Dans précédente blog récents, nous avons décrit une solution de vérification d'identité de bout en bout dans une seule région AWS. La solution utilise le Amazon Reconnaissance Apis Détecter les visages pour la détection de visage et Comparer les visages pour la comparaison de visage. Nous considérons ces API comme des API sans état, car elles ne dépendent pas d'Amazon Rekognition collecte de visage. Ils sont également idempotents, ce qui signifie que des appels répétés avec les mêmes paramètres renverront le même résultat. Ils offrent des options flexibles sur le passage des images, soit via un Service de stockage simple Amazon (Amazon S3) emplacement ou octets bruts.

Dans cet article, nous nous concentrons sur Image de reconnaissance Amazon API sans état, et discutez de deux options de transmission d'images et du moment où choisir l'une plutôt que l'autre du point de vue de l'architecture du système. Ensuite, nous discutons de la façon de mettre à l'échelle les API sans état pour surmonter certaines limitations régionales. Lorsque nous parlons d'évolutivité, nous faisons souvent référence au nombre maximal de transactions par seconde (TPS) que la solution peut gérer. Par exemple, lors de l'hébergement d'un grand événement qui utilise la vision par ordinateur pour détecter des visages ou des étiquettes d'objets, vous pouvez rencontrer un pic de trafic et vous ne voulez pas que le système se ralentisse. Cela signifie que vous devez parfois augmenter le TPS et même aller au-delà du quota de service régional dont disposent les API Amazon Rekognition. Cet article propose une solution pour augmenter le TPS des API sans état en utilisant plusieurs régions.

API sans état d'Amazon Rekognition

Parmi les API Amazon Rekognition Image disponibles, Comparer les visages, Détecter les visages, Détecter les étiquettes, DétecterModérationÉtiquettes, DétecterÉquipement De Protection, DétecterTexteet Reconnaître les célébrités sont apatrides. Ils fournissent à la fois des options Amazon S3 et des octets bruts pour transmettre des images. Par exemple, dans la syntaxe de requête du DetectFaces API, il y a deux options à passer à l'API Image champ: Bytes or S3Object.

Lorsque vous utilisez le S3Object option, une architecture typique est la suivante.

Cette solution a le flux de travail suivant :

  1. L'application cliente accède à une page Web hébergée avec AWS Amplifier.
  2. L'application cliente est authentifiée et autorisée avec Amazon Cognito.
  3. L'application cliente télécharge une image dans un compartiment S3.
  4. Amazon S3 déclenche une AWS Lambda fonction pour appeler Amazon Rekognition.
  5. La fonction Lambda appelle les API Amazon Rekognition avec l'option S3Object.
  6. La fonction Lambda conserve le résultat dans un Amazon DynamoDB tableau.

Choisissez le S3Object option dans les scénarios suivants :

  • L'image est un fichier au format PNG ou JPEG
  • Vous déployez l'ensemble de la pile dans la même région où Amazon Rekognition est disponible
  • Le quota de service régional de l'API Amazon Rekognition répond aux exigences de votre système

Lorsque vous ne remplissez pas toutes ces conditions, vous devez choisir le Bytes option.

Utiliser les API sans état d'Amazon Rekognition dans une autre région

Un exemple d'utilisation de la Bytes L'option est lorsque vous souhaitez déployer votre cas d'utilisation dans une région où Amazon Rekognition n'est généralement pas disponible, par exemple, si vous avez une présence client en Amérique du Sud (sa-east-1) Région. Pour la résidence des données, le compartiment S3 que vous utilisez pour stocker les images des utilisateurs doit être dans sa-east-1, mais vous souhaitez utiliser Amazon Rekognition pour votre solution même s'il n'est généralement pas disponible dans sa-east-1. Une solution consiste à utiliser le Bytes possibilité d'appeler Amazon Rekognition dans une autre région où Amazon Rekognition est disponible, comme us-east-1. Le schéma suivant illustre cette architecture.

Reconnaissance dans différentes régions

Une fois la fonction Lambda déclenchée (étape 4), au lieu d'appeler directement Amazon Rekognition avec l'emplacement S3 de l'image, la fonction doit récupérer l'image du compartiment S3 (étape 5), puis appeler Amazon Rekognition avec les octets bruts de l'image (étape 6). Voici un extrait de code de la fonction 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))

Notez que l'extrait de code précédent fonctionne directement pour les formats JPEG ou PNG. Pour d'autres formats d'image, comme BMP, un traitement d'image supplémentaire est nécessaire pour le convertir en octets JPEG ou PNG avant de l'envoyer à Amazon Rekognition. Le code suivant convertit les octets BMP en 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'])

Augmentez le TPS des API sans état en répartissant les appels d'API dans plusieurs régions

Un autre cas d'utilisation du Bytes L'option est que vous pouvez augmenter le TPS des API sans état en répartissant les appels d'API dans plusieurs régions. De cette façon, vous n'êtes pas limité par le quota de service régional de l'API, car vous pouvez gagner des TPS supplémentaires à partir d'autres régions.

Dans l'exemple suivant, une fonction Lambda est créée pour appeler Amazon Rekognition DetectLabels API avec le Bytes option. Pour augmenter le TPS maximum, vous pouvez répartir les appels d'API dans plusieurs régions avec des pondérations. Le TPS maximum que vous pouvez atteindre est calculé avec : min(region_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, … region_n_max_tps/region_n_weight). L'exemple suivant utilise us-east-1 ainsi que us-west-2 Régions.

diffuser le trafic Rekognition

L'extrait de code pour appeler le DetectLabels L'API est la suivante :

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)

Parce que us-east-1 ainsi que us-west-2 les deux ont un maximum de 50 TPS pour l'API Amazon Rekognition DetectFaces, vous pouvez répartir uniformément les appels d'API avec un poids de 50/50 en définissant la variable d'environnement REGION_1_TRAFFIC_PERCENTAGE à 50. De cette façon, vous pouvez atteindre min(50/50%, 50/50%) = 100 TPS en théorie.

Pour valider l'idée, la fonction Lambda est exposée en tant qu'API REST avec Passerelle d'API Amazon. alors Jmètre est utilisé pour tester la charge de l'API.

test de charge appels API Rekognition

REGION_1_TRAFFIC_PERCENTAGE est d'abord réglé sur 100, de cette façon tout DetectFaces Les appels API sont envoyés à us-east-1 seulement. En théorie, le TPS maximal pouvant être atteint est limité par le quota de service dans us-east-1, soit 50 TPS. Test de charge sur le point de terminaison d'API personnalisé, en commençant par 50 threads simultanés, en ajoutant progressivement 5 threads jusqu'à ProvisionedThroughputExceededException renvoyé par Amazon Rekognition est observé.

REGION_1_TRAFFIC_PERCENTAGE est alors fixé à 50, de cette façon tout DetectLabels Les appels d'API sont envoyés uniformément à us-east-1 ainsi que us-west-2. En théorie, le TPS maximum pouvant être atteint est le quota de service que les deux Régions cumulent, soit 100 TPS. Relancez le test de charge à partir de 100 threads pour trouver le TPS maximum.

Le tableau suivant résume les résultats des tests de charge.

Pourcentage d'appels d'API DetectLabels vers us-east-1 Pourcentage d'appels d'API DetectLabels vers us-west-2 TPS maximum en théorie Exécutions simultanées maximales sans ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

Conclusion

De nombreux clients utilisent les API sans état Amazon Rekognition Image pour divers cas d'utilisation, notamment la vérification d'identité, la modération de contenu, le traitement multimédia, etc. Cet article a discuté des deux options de transmission d'images et de l'utilisation de l'option d'octets bruts pour les cas d'utilisation suivants :

  • Disponibilité régionale d'Amazon Rekognition
  • Résidence des données client
  • Mise à l'échelle du TPS des API sans état d'Amazon Rekognition

Découvrez comment Amazon Rekognition est utilisé dans différents cas d'utilisation de la vision par ordinateur et commencez votre voyage d'innovation.


À propos des auteurs

Améliorez l'évolutivité des API sans état Amazon Rekognition à l'aide de plusieurs régions PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Sharon Lic est architecte de solutions chez AWS, basé dans la région de Boston, MA. Elle travaille avec des entreprises clientes, les aidant à résoudre des problèmes difficiles et à s'appuyer sur AWS. En dehors du travail, elle aime passer du temps avec sa famille et explorer les restaurants locaux.

Améliorez l'évolutivité des API sans état Amazon Rekognition à l'aide de plusieurs régions PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Vaibhav Shah est un architecte de solutions senior chez AWS et aime aider ses clients avec tout ce qui est cloud et permettre leur parcours d'adoption du cloud. En dehors du travail, il aime voyager, explorer de nouveaux endroits et restaurants, cuisiner, suivre des sports comme le cricket et le football, regarder des films et des séries (fan de Marvel) et des activités aventureuses comme la randonnée, le parachutisme, etc.

Horodatage:

Plus de Apprentissage automatique AWS