Forbedre skalerbarheden for Amazon Rekognition statsløse API'er ved hjælp af PlatoBlockchain Data Intelligence i flere regioner. Lodret søgning. Ai.

Forbedre skalerbarheden for Amazon Rekognition statsløse API'er ved hjælp af flere regioner

I tidligere blogindlæg, beskrev vi en end-to-end identitetsbekræftelsesløsning i en enkelt AWS-region. Løsningen bruger Amazon-anerkendelse API'er Opdag ansigter til ansigtsgenkendelse og Sammenlign ansigter til ansigtssammenligning. Vi tænker på disse API'er som statsløse API'er, fordi de ikke er afhængige af en Amazon-genkendelse ansigtssamling. De er også idempotente, hvilket betyder, at gentagne opkald med de samme parametre vil returnere det samme resultat. De giver fleksible muligheder for at sende billeder, enten gennem en Amazon Simple Storage Service (Amazon S3) placering eller rå bytes.

I dette indlæg sætter vi fokus på Amazon-genkendelsesbillede statsløse API'er, og diskutere to muligheder for at sende billeder og hvornår man skal vælge det ene frem for det andet fra et systemarkitektursynspunkt. Derefter diskuterer vi, hvordan man skalerer de statsløse API'er for at overvinde nogle regionale begrænsninger. Når vi taler om skalerbarhed, henviser vi ofte til de maksimale transaktioner per sekund (TPS), som løsningen kan håndtere. For eksempel, når du er vært for en stor begivenhed, der bruger computersyn til at registrere ansigter eller objektetiketter, kan du støde på en trafikstigning, og du ønsker ikke, at systemet skal skrue ned. Det betyder, at du nogle gange skal øge TPS og endda gå ud over den regionale servicekvote, som Amazon Rekognition API'er har. Dette indlæg foreslår en løsning til at øge de statsløse API'ers TPS ved at bruge flere regioner.

Amazon Rekognition statsløse API'er

Af de tilgængelige Amazon Rekognition Image API'er, Sammenlign ansigter, Opdag ansigter, DetectLabels, DetectModerationLabels, DetectProtectiveEquipment, Opdag tekstog Genkend Berømtheder er statsløse. De giver både Amazon S3 og råbytes muligheder for at sende billeder. For eksempel i anmodningssyntaksen for DetectFaces API, er der to muligheder for at overføre til Image Mark: Bytes or S3Object.

Når du bruger S3Object mulighed, er en typisk arkitektur som følger.

Denne løsning har følgende arbejdsgang:

  1. Klientapplikationen får adgang til en webside, der hostes med AWS Amplify.
  2. Klientapplikationen er autentificeret og autoriseret med Amazon Cognito.
  3. Klientapplikationen uploader et billede til en S3-bøtte.
  4. Amazon S3 udløser en AWS Lambda funktion til at kalde Amazon Rekognition.
  5. Lambda-funktionen kalder Amazon Rekognition API'er med muligheden S3Object.
  6. Lambda-funktionen bevarer resultatet til en Amazon DynamoDB tabel.

Vælg den S3Object mulighed i følgende scenarier:

  • Billedet er enten en PNG- eller JPEG-formateret fil
  • Du implementerer hele stakken i den samme region, hvor Amazon Rekognition er tilgængelig
  • Den regionale servicekvote for Amazon Rekognition API opfylder dit systemkrav

Når du ikke opfylder alle disse krav, bør du vælge Bytes valgmulighed.

Brug Amazon Rekognition Stateless API'er i en anden region

Et eksempel på brug af Bytes mulighed er, når du vil implementere din use case i en region, hvor Amazon Rekognition ikke er generelt tilgængelig, for eksempel hvis du har kundetilstedeværelse i Sydamerika (sa-east-1) Region. For dataophold skal S3-bøtten, som du bruger til at gemme brugernes billeder, være i sa-east-1, men du vil bruge Amazon Rekognition til din løsning, selvom den ikke er generelt tilgængelig i sa-east-1. En løsning er at bruge Bytes mulighed for at ringe til Amazon Rekognition i en anden region, hvor Amazon Rekognition er tilgængelig, som f.eks us-east-1. Følgende diagram illustrerer denne arkitektur.

Anerkendelse i forskellige regioner

Efter at Lambda-funktionen er udløst (trin 4), i stedet for at kalde Amazon Rekognition direkte med billedets S3-placering, skal funktionen hente billedet fra S3-bøtten (trin 5), og derefter kalde Amazon Rekognition med billedets rå bytes (trin). 6). Følgende er et kodestykke af Lambda-funktionen:

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

Bemærk, at det foregående kodestykke fungerer direkte til JPEG- eller PNG-formater. For andre billedformater, som BMP, er ekstra billedbehandling nødvendig for at konvertere det til JPEG- eller PNG-bytes, før det sendes til Amazon Rekognition. Følgende kode konverterer BMP til 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'])

Opskaler statsløse API'ers TPS ved at sprede API-kald til flere regioner

Et andet anvendelsestilfælde af Bytes muligheden er, at du kan skalere de statsløse API'ers TPS op ved at sprede API-kaldene til flere regioner. På denne måde er du ikke begrænset af API'ens regionale servicekvote, fordi du kan få yderligere TPS fra andre regioner.

I det følgende eksempel oprettes en Lambda-funktion til at kalde Amazon-genkendelsen DetectLabels API med Bytes mulighed. For at opskalere den maksimale TPS kan du sprede API-kaldene i flere regioner med vægte. Den maksimale TPS, du kan opnå, beregnes med: min(region_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, … region_n_max_tps/region_n_weight). Følgende eksempel bruger us-east-1 , us-west-2 Regioner.

sprede Anerkendelsestrafik

Kodestykket til at kalde DetectLabels API er som følger:

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)

Fordi us-east-1 , us-west-2 begge har maksimalt 50 TPS til Amazon Rekognition DetectFaces API, du kan jævnt fordele API-kaldene med 50/50 vægt ved at indstille miljøvariablen REGION_1_TRAFFIC_PERCENTAGE til 50. På denne måde kan du opnå min(50/50%, 50/50%) = 100 TPS i teorien.

For at validere ideen eksponeres Lambda-funktionen som en REST API med Amazon API Gateway. Derefter JMeter bruges til at indlæse teste API'en.

load test Rekognition API-kald

REGION_1_TRAFFIC_PERCENTAGE er først sat til 100, på denne måde alle DetectFaces API-kald sendes til us-east-1 kun. I teorien er den maksimale TPS, der kan opnås, begrænset af servicekvoten i us-east-1, hvilket er 50 TPS. Indlæs test på det brugerdefinerede API-slutpunkt, startende med 50 samtidige tråde, trinvis tilføjelse af 5 tråde indtil ProvisionedThroughputExceededException returneret fra Amazon Rekognition observeres.

REGION_1_TRAFFIC_PERCENTAGE er så sat til 50, på denne måde alle DetectLabels API-kald sendes jævnt til us-east-1 , us-west-2. I teorien er den maksimale TPS, der kan opnås, den servicekvote, som de to regioner kombinerer, hvilket er 100 TPS. Start belastningstesten igen fra 100 tråde for at finde den maksimale TPS.

Følgende tabel opsummerer resultaterne af belastningstesten.

Procentdel af DetectLabels API-kald til us-east-1 Procentdel af DetectLabels API-kald til us-west-2 Maksimal TPS i teorien Maksimal samtidige kører uden ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

Konklusion

Mange kunder bruger Amazon Rekognition Image statsløse API'er til forskellige brugssager, herunder identitetsbekræftelse, indholdsmoderering, mediebehandling og mere. Dette indlæg diskuterede de to muligheder for at sende billeder og hvordan man bruger råbytes-indstillingen til følgende brugssituationer:

  • Amazon Rekognition Regional tilgængelighed
  • Kundedataophold
  • Opskalering af Amazon Rekognition statsløse API'ers TPS

Se, hvordan Amazon Rekognition bruges i forskellige computersynsbrug og start din innovationsrejse.


Om forfatterne

Forbedre skalerbarheden for Amazon Rekognition statsløse API'er ved hjælp af PlatoBlockchain Data Intelligence i flere regioner. Lodret søgning. Ai.Sharon Lic er en løsningsarkitekt hos AWS, baseret i Boston, MA-området. Hun arbejder med virksomhedskunder, hjælper dem med at løse vanskelige problemer og bygge videre på AWS. Uden for arbejdet kan hun lide at tilbringe tid med sin familie og udforske lokale restauranter.

Forbedre skalerbarheden for Amazon Rekognition statsløse API'er ved hjælp af PlatoBlockchain Data Intelligence i flere regioner. Lodret søgning. Ai.Vaibhav Shah er en Senior Solutions Architect hos AWS og kan lide at hjælpe sine kunder ud med alt cloud og aktivere deres cloud-adoptionsrejse. Uden for arbejdet elsker han at rejse, udforske nye steder og restauranter, lave mad, følge sport som cricket og fodbold, se film og serier (Marvel-fan) og eventyrlige aktiviteter som vandreture, faldskærmsudspring, og listen fortsætter.

Tidsstempel:

Mere fra AWS maskinindlæring