Verbeter de schaalbaarheid voor staatloze API's van Amazon Rekognition met behulp van PlatoBlockchain Data Intelligence in meerdere regio's. Verticaal zoeken. Ai.

Verbeter de schaalbaarheid voor staatloze API's van Amazon Rekognition met behulp van meerdere regio's

In vorige blogpost, beschreven we een end-to-end oplossing voor identiteitsverificatie in één enkele AWS-regio. De oplossing maakt gebruik van de Amazon Rekognition APIs DetectGezichten voor gezichtsherkenning en VergelijkGezichten voor gezichtsvergelijking. We beschouwen die API's als staatloze API's omdat ze niet afhankelijk zijn van een Amazon-herkenning gezicht collectie. Ze zijn ook idempotent, wat betekent dat herhaalde aanroepen met dezelfde parameters hetzelfde resultaat opleveren. Ze bieden flexibele opties voor het doorgeven van afbeeldingen, hetzij via een Amazon eenvoudige opslagservice (Amazon S3) locatie of onbewerkte bytes.

In dit bericht richten we ons op Amazon-herkenningsafbeelding stateless API's, en bespreek twee opties voor het doorgeven van afbeeldingen en wanneer de ene boven de andere moet worden gekozen vanuit het oogpunt van systeemarchitectuur. Vervolgens bespreken we hoe de staatloze API's kunnen worden geschaald om enkele regionale beperkingen te overwinnen. Wanneer we het hebben over schaalbaarheid, verwijzen we vaak naar het maximale aantal transacties per seconde (TPS) dat de oplossing aankan. Als u bijvoorbeeld een groot evenement organiseert dat computervisie gebruikt om gezichten of objectlabels te detecteren, kunt u een verkeerspiek tegenkomen en wilt u niet dat het systeem afremt. Dat betekent dat je soms de TPS moet verhogen en zelfs verder moet gaan dan de regionale servicequota die Amazon Rekognition API's hebben. Dit bericht stelt een oplossing voor om de TPS van de staatloze API's te vergroten door meerdere regio's te gebruiken.

Staatloze API's van Amazon Rekognition

Van de beschikbare Amazon Rekognition Image API's, VergelijkGezichten, DetectGezichten, Labels detecteren, DetecterenModeratieLabels, Detecteer beschermende apparatuur, Detecteer tekst en Herken Beroemdheden zijn staatloos. Ze bieden zowel Amazon S3- als onbewerkte bytes-opties om afbeeldingen door te geven. Bijvoorbeeld in de verzoeksyntaxis van het DetectFaces API, zijn er twee opties om door te geven aan de Image veld: Bytes or S3Object.

Bij gebruik van het S3Object optie, een typische architectuur is als volgt.

Deze oplossing heeft de volgende workflow:

  1. De clienttoepassing heeft toegang tot een webpagina die wordt gehost met AWS versterken.
  2. De clienttoepassing wordt geverifieerd en geautoriseerd met Amazon Cognito.
  3. De clienttoepassing uploadt een afbeelding naar een S3-bucket.
  4. Amazon S3 activeert een AWS Lambda functie om Amazon Rekognition aan te roepen.
  5. De Lambda-functie roept Amazon Rekognition API's aan met de S3Object-optie.
  6. De Lambda-functie houdt het resultaat vast tot een Amazon DynamoDB tafel.

Kies de S3Object optie in de volgende scenario's:

  • De afbeelding is een PNG- of JPEG-bestand
  • U implementeert de hele stack in dezelfde regio waar Amazon Rekognition beschikbaar is
  • Het regionale servicequotum van de Amazon Rekognition API voldoet aan uw systeemvereisten

Voldoet u niet aan al deze eisen, dan kiest u voor de Bytes optie.

Gebruik staatloze API's van Amazon Rekognition in een andere regio

Een voorbeeld van het gebruik van de Bytes optie is wanneer u uw use case wilt inzetten in een regio waar Amazon Rekognition niet algemeen beschikbaar is, bijvoorbeeld als u klant aanwezig bent in Zuid-Amerika (sa-east-1) Regio. Voor gegevensresidentie moet de S3-bucket die u gebruikt om de afbeeldingen van gebruikers op te slaan, aanwezig zijn sa-east-1, maar u wilt Amazon Rekognition gebruiken voor uw oplossing, ook al is deze niet algemeen beschikbaar in sa-east-1. Een oplossing is om de Bytes optie om Amazon Rekognition te bellen in een andere regio waar Amazon Rekognition beschikbaar is, zoals us-east-1. Het volgende diagram illustreert deze architectuur.

Erkenning in verschillende regio

Nadat de Lambda-functie is geactiveerd (stap 4), in plaats van Amazon Rekognition rechtstreeks aan te roepen met de S3-locatie van de afbeelding, moet de functie de afbeelding ophalen uit de S3-bucket (stap 5) en vervolgens Amazon Rekognition aanroepen met de onbewerkte bytes van de afbeelding (stap 6). Het volgende is een codefragment van de Lambda-functie:

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

Merk op dat het voorgaande codefragment rechtstreeks werkt voor JPEG- of PNG-indelingen. Voor andere afbeeldingsindelingen, zoals BMP, is extra beeldverwerking nodig om het naar JPEG- of PNG-bytes te converteren voordat het naar Amazon Rekognition wordt verzonden. De volgende code converteert BMP naar JPEG-bytes:

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

Schaal de TPS van stateless API's op door API-oproepen te verspreiden over meerdere regio's

Een ander gebruiksvoorbeeld van de Bytes optie is dat u de TPS van de staatloze API's kunt opschalen door de API-aanroepen over meerdere regio's te verspreiden. Op deze manier wordt u niet beperkt door het regionale servicequotum van de API, omdat u extra TPS kunt krijgen van andere regio's.

In het volgende voorbeeld wordt een Lambda-functie gemaakt om de Amazon Rekognition aan te roepen DetectLabels API met de Bytes keuze. Om de maximale TPS op te schalen, kunt u de API-aanroepen spreiden over meerdere regio's met gewichten. De maximale TPS die u kunt behalen, wordt berekend met: min(region_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, … region_n_max_tps/region_n_weight). Het volgende voorbeeld gebruikt us-east-1 en us-west-2 Regio's.

verspreid erkenningsverkeer

Het codefragment om het DetectLabels API is als volgt:

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)

Omdat us-east-1 en us-west-2 beide hebben maximaal 50 TPS voor de Amazon Rekognition DetectFaces API, u kunt de API-aanroepen gelijkmatig verdelen met 50/50 gewicht door de omgevingsvariabele in te stellen REGION_1_TRAFFIC_PERCENTAGE tot 50. Op deze manier kun je in theorie min(50/50%, 50/50%) = 100 TPS behalen.

Om het idee te valideren, wordt de Lambda-functie weergegeven als een REST API met Amazon API-gateway. dan JMeter wordt gebruikt om de API te laden.

load test Herkenning API-aanroepen

REGION_1_TRAFFIC_PERCENTAGE is eerst ingesteld op 100, op deze manier alles DetectFaces API-aanroepen worden verzonden naar us-east-1 enkel en alleen. In theorie wordt de maximaal te behalen TPS beperkt door het servicequotum in us-east-1, dat is 50 TPS. Laadtest op het aangepaste API-eindpunt, beginnend met 50 gelijktijdige threads, stapsgewijs 5 threads toevoegend tot ProvisionedThroughputExceededException geretourneerd van Amazon Erkenning wordt waargenomen.

REGION_1_TRAFFIC_PERCENTAGE wordt dan op 50 gezet, zo allemaal DetectLabels API-oproepen worden gelijkmatig verzonden naar us-east-1 en us-west-2. In theorie is de maximaal te behalen TPS het servicequotum dat de twee Gewesten combineren, namelijk 100 TPS. Start de belastingstest opnieuw vanaf 100 threads om de maximale TPS te vinden.

De volgende tabel vat de resultaten van de belastingstest samen.

Percentage DetectLabels API-oproepen naar us-east-1 Percentage DetectLabels API-oproepen naar us-west-2 Maximale TPS in theorie Maximale gelijktijdige runs zonder ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

Conclusie

Veel klanten gebruiken staatloze API's van Amazon Rekognition Image voor verschillende gebruiksscenario's, waaronder identiteitsverificatie, contentmoderatie, mediaverwerking en meer. Dit bericht besprak de twee opties voor het doorgeven van afbeeldingen en het gebruik van de raw bytes-optie voor de volgende use-cases:

  • Amazon Erkenning Regionale beschikbaarheid
  • Residentie van klantgegevens
  • Opschalen van de staatloze API's van Amazon Rekognition TPS

Bekijk hoe Amazon Rekognition wordt gebruikt verschillende use-cases voor computervisie en start uw innovatiereis.


Over de auteurs

Verbeter de schaalbaarheid voor staatloze API's van Amazon Rekognition met behulp van PlatoBlockchain Data Intelligence in meerdere regio's. Verticaal zoeken. Ai.Sharon Li is een oplossingsarchitect bij AWS, gevestigd in de regio Boston, MA. Ze werkt met zakelijke klanten en helpt hen moeilijke problemen op te lossen en voort te bouwen op AWS. Buiten haar werk brengt ze graag tijd door met haar gezin en verkent ze lokale restaurants.

Verbeter de schaalbaarheid voor staatloze API's van Amazon Rekognition met behulp van PlatoBlockchain Data Intelligence in meerdere regio's. Verticaal zoeken. Ai.Vaibhav Sjah is een Senior Solutions Architect bij AWS en helpt zijn klanten graag met alles wat met de cloud te maken heeft en maakt hun reis naar cloudadoptie mogelijk. Buiten zijn werk houdt hij van reizen, nieuwe plekken en restaurants ontdekken, koken, sporten als cricket en voetbal volgen, films en series kijken (Marvel-fan), en avontuurlijke activiteiten zoals wandelen, parachutespringen, en de lijst gaat maar door.

Tijdstempel:

Meer van AWS-machine learning