Îmbunătățiți scalabilitatea pentru API-urile fără stat Amazon Rekognition folosind mai multe regiuni PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Îmbunătățiți scalabilitatea pentru API-urile fără stat Amazon Rekognition folosind mai multe regiuni

În precedent blog, am descris o soluție de verificare a identității de la capăt la capăt într-o singură regiune AWS. Soluția folosește Amazon Rekognition API-uri DetectFaces pentru detectarea feței și CompareFaces pentru compararea feței. Considerăm acele API-uri ca API-uri fără stat, deoarece nu depind de Amazon Rekognition colectarea feței. De asemenea, sunt idempotenți, ceea ce înseamnă că apelurile repetate cu aceiași parametri vor returna același rezultat. Ele oferă opțiuni flexibile privind trecerea imaginilor, fie printr-un Serviciul Amazon de stocare simplă (Amazon S3) locație sau octeți bruti.

În această postare ne concentrăm asupra Imagine de recunoaștere Amazon API-uri fără stat și discutați două opțiuni de transmitere a imaginilor și când să alegeți una față de alta din punct de vedere al arhitecturii sistemului. Apoi discutăm cum să scalam API-urile fără stat pentru a depăși unele limitări regionale. Când vorbim despre scalabilitate, ne referim adesea la tranzacțiile maxime pe secundă (TPS) pe care soluția le poate gestiona. De exemplu, atunci când găzduiți un eveniment mare care utilizează viziunea computerizată pentru a detecta fețe sau etichete de obiecte, este posibil să întâmpinați o creștere a traficului și nu doriți ca sistemul să se reducă. Aceasta înseamnă că uneori trebuie să creșteți TPS-ul și chiar să depășiți cota de servicii regionale pe care o au API-urile Amazon Rekognition. Această postare propune o soluție pentru a crește TPS-urile API-urilor fără stat prin utilizarea mai multor regiuni.

API-uri fără stat Amazon Rekognition

Dintre API-urile Amazon Rekognition Image disponibile, CompareFaces, DetectFaces, DetectLabels, DetectModerationLabels, DetectProtectiveEquipment, DetectText, și Recunoaște celebritățile sunt apatrizi. Ele oferă atât opțiuni Amazon S3, cât și octeți bruti pentru a transmite imagini. De exemplu, în sintaxa de solicitare a DetectFaces API, există două opțiuni pentru a trece la Image camp: Bytes or S3Object.

Când utilizați S3Object opțiunea, o arhitectură tipică este următoarea.

Această soluție are următorul flux de lucru:

  1. Aplicația client accesează o pagină web găzduită cu Amplificare AWS.
  2. Aplicația client este autentificată și autorizată cu Amazon Cognito.
  3. Aplicația client încarcă o imagine într-o găleată S3.
  4. Amazon S3 declanșează un AWS Lambdas funcția de a apela Amazon Rekognition.
  5. Funcția Lambda apelează API-urile Amazon Rekognition cu opțiunea S3Object.
  6. Funcția Lambda persistă rezultatul la an Amazon DynamoDB tabel.

Alege S3Object opțiune în următoarele scenarii:

  • Imaginea este fie un fișier formatat PNG sau JPEG
  • Implementați întreaga stivă în aceeași regiune în care este disponibil Amazon Rekognition
  • Cota de servicii regionale a API-ului Amazon Rekognition îndeplinește cerințele dvs. de sistem

Când nu îndepliniți toate aceste cerințe, ar trebui să alegeți Bytes opțiune.

Utilizați API-urile Amazon Rekognition Stateless într-o regiune diferită

Un exemplu de utilizare a Bytes opțiunea este atunci când doriți să vă implementați cazul de utilizare într-o regiune în care Amazon Rekognition nu este disponibil în general, de exemplu, dacă aveți prezență clienți în America de Sud (sa-east-1) Regiunea. Pentru rezidența datelor, compartimentul S3 pe care îl utilizați pentru a stoca imaginile utilizatorilor trebuie să fie în sa-east-1, dar doriți să utilizați Amazon Rekognition pentru soluția dvs., chiar dacă nu este disponibilă în general în sa-east-1. O soluție este folosirea Bytes opțiunea de a apela Amazon Rekognition într-o regiune diferită în care Amazon Rekognition este disponibil, cum ar fi us-east-1. Următoarea diagramă ilustrează această arhitectură.

Recunoaștere în diferite regiuni

După ce funcția Lambda este declanșată (Pasul 4), în loc să apeleze Amazon Rekognition direct cu locația S3 a imaginii, funcția trebuie să recupereze imaginea din compartimentul S3 (Pasul 5), apoi să apeleze Amazon Rekognition cu octeții bruti ai imaginii (Pasul 6). XNUMX). Următorul este un fragment de cod al funcției 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))

Rețineți că fragmentul de cod precedent funcționează direct pentru formatele JPEG sau PNG. Pentru alte formate de imagine, cum ar fi BMP, este necesară o procesare suplimentară a imaginii pentru a le converti în octeți JPEG sau PNG înainte de a fi trimise la Amazon Rekognition. Următorul cod convertește BMP în octeți 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'])

Creșteți TPS-urile API-urilor fără stat prin răspândirea apelurilor API în mai multe regiuni

Un alt caz de utilizare al Bytes opțiunea este că puteți mări TPS-urile API-urilor fără stat prin răspândirea apelurilor API în mai multe regiuni. În acest fel, nu sunteți limitat de cota de servicii regionale a API-ului, deoarece puteți obține TPS suplimentar din alte regiuni.

În exemplul următor, este creată o funcție Lambda pentru a apela Amazon Rekognition DetectLabels API cu Bytes opțiune. Pentru a mări TPS-ul maxim, puteți distribui apelurile API în mai multe regiuni cu ponderi. TPS maxim pe care îl puteți obține este calculat cu: min(region_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, … region_n_max_tps/region_n_weight). Următorul exemplu utilizează us-east-1 și us-west-2 Regiuni.

răspândirea traficului de recunoaștere

Fragmentul de cod pentru a apela DetectLabels API este după cum urmează:

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)

pentru că us-east-1 și us-west-2 ambele au maxim 50 TPS pentru API-ul Amazon Rekognition DetectFaces, puteți distribui uniform apelurile API cu o greutate de 50/50 prin setarea variabilei de mediu REGION_1_TRAFFIC_PERCENTAGE la 50. În acest fel, puteți obține min(50/50%, 50/50%) = 100 TPS în teorie.

Pentru a valida ideea, funcția Lambda este expusă ca un API REST cu Gateway API Amazon. apoi JMeter este folosit pentru a testa API-ul.

test de încărcare apeluri Rekognition API

REGION_1_TRAFFIC_PERCENTAGE este mai întâi setat la 100, în acest fel toate DetectFaces Apelurile API sunt trimise către us-east-1 numai. În teorie, TPS-ul maxim care poate fi atins este limitat de cota de servicii în us-east-1, care este 50 TPS. Test de încărcare pe punctul final API personalizat, începând cu 50 de fire concurente, adăugând treptat 5 fire până ProvisionedThroughputExceededException returnat de la Amazon Rekognition este observat.

REGION_1_TRAFFIC_PERCENTAGE este apoi setat la 50, în acest fel toate DetectLabels Apelurile API sunt trimise uniform către us-east-1 și us-west-2. Teoretic, TPS maxim care poate fi atins este cota de servicii pe care cele două Regiuni o combină, care este de 100 TPS. Porniți din nou testul de încărcare din 100 de fire pentru a găsi TPS-ul maxim.

Următorul tabel rezumă rezultatele testării de sarcină.

Procentul de apeluri API DetectLabels către us-east-1 Procentul de apeluri API DetectLabels către us-west-2 TPS maxim în teorie Numărul maxim de rulări simultane fără ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

Concluzie

Mulți clienți folosesc API-uri fără stat Amazon Rekognition Image pentru diferite cazuri de utilizare, inclusiv verificarea identității, moderarea conținutului, procesarea media și multe altele. Această postare a discutat cele două opțiuni de transmitere a imaginilor și cum să utilizați opțiunea de octeți bruti pentru următoarele cazuri de utilizare:

  • Amazon Rekognition Disponibilitate regională
  • Reședința datelor clienților
  • Creșterea TPS al API-urilor fără stat Amazon Rekognition

Aflați cum este utilizat Amazon Rekognition diferite cazuri de utilizare a vederii computerizate și începeți călătoria dvs. de inovație.


Despre Autori

Îmbunătățiți scalabilitatea pentru API-urile fără stat Amazon Rekognition folosind mai multe regiuni PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Sharon Li este arhitect de soluții la AWS, cu sediul în zona Boston, MA. Ea lucrează cu clienți de întreprindere, ajutându-i să rezolve probleme dificile și să construiască pe AWS. În afara serviciului, îi place să petreacă timp cu familia ei și să exploreze restaurantele locale.

Îmbunătățiți scalabilitatea pentru API-urile fără stat Amazon Rekognition folosind mai multe regiuni PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Vaibhav Shah este un arhitect senior de soluții cu AWS și îi place să-și ajute clienții cu tot ce este în cloud și să le permită călătoria de adoptare a cloud-ului. În afara serviciului, îi place să călătorească, să exploreze locuri și restaurante noi, să gătească, să urmeze sporturi precum cricket și fotbal, să vizioneze filme și seriale (fan Marvel) și activități de aventură precum drumeții, parașutism și lista poate continua.

Timestamp-ul:

Mai mult de la Învățare automată AWS