Migliora la scalabilità per le API stateless di Amazon Rekognition utilizzando più regioni PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Migliora la scalabilità per le API senza stato di Amazon Rekognition utilizzando più regioni

In precedenti post sul blog, abbiamo descritto una soluzione di verifica dell'identità end-to-end in una singola regione AWS. La soluzione utilizza il Rekognition di Amazon API Rileva Facce per il rilevamento del volto e ConfrontaFaces per il confronto facciale. Consideriamo queste API come API stateless perché non dipendono da Amazon Rekognition raccolta volti. Sono anche idempotenti, il che significa che chiamate ripetute con gli stessi parametri restituiranno lo stesso risultato. Forniscono opzioni flessibili per il passaggio delle immagini, sia attraverso un file Servizio di archiviazione semplice Amazon (Amazon S3) posizione o byte non elaborati.

In questo post ci concentriamo su Immagine riconoscimento Amazon API senza stato e discutere due opzioni per il passaggio delle immagini e quando sceglierne una rispetto all'altra dal punto di vista dell'architettura del sistema. Quindi discutiamo su come ridimensionare le API stateless per superare alcune limitazioni regionali. Quando si parla di scalabilità, spesso si fa riferimento al numero massimo di transazioni al secondo (TPS) che la soluzione è in grado di gestire. Ad esempio, quando si ospita un evento di grandi dimensioni che utilizza la visione artificiale per rilevare volti o etichette di oggetti, è possibile riscontrare un picco di traffico e non si desidera che il sistema subisca rallentamenti. Ciò significa che a volte è necessario aumentare il TPS e persino andare oltre la quota di servizio regionale delle API di Amazon Rekognition. Questo post propone una soluzione per aumentare il TPS delle API senza stato utilizzando più regioni.

API senza stato di Amazon Rekognition

Delle API di immagini di Amazon Rekognition disponibili, ConfrontaFaces, Rileva Facce, RilevaEtichette, Rileva etichette di moderazione, Rileva dispositivi di protezione, RilevaTestoe Riconosci le celebrità sono apolidi. Forniscono opzioni Amazon S3 e byte non elaborati per passare le immagini. Ad esempio, nella sintassi della richiesta di DetectFaces API, ci sono due opzioni per passare al file Image campo: Bytes or S3Object.

Quando si utilizza la S3Object opzione, un'architettura tipica è la seguente.

Questa soluzione ha il seguente flusso di lavoro:

  1. L'applicazione client accede a una pagina Web ospitata con AWS Amplifica.
  2. L'applicazione client è autenticata e autorizzata con Amazzonia Cognito.
  3. L'applicazione client carica un'immagine in un bucket S3.
  4. Amazon S3 attiva un AWS Lambda funzione per chiamare Amazon Rekognition.
  5. La funzione Lambda chiama le API di Amazon Rekognition con l'opzione S3Object.
  6. La funzione Lambda persiste il risultato in an Amazon DynamoDB tabella.

Scegliere il S3Object opzione nei seguenti scenari:

  • L'immagine è un file in formato PNG o JPEG
  • Distribuisci l'intero stack nella stessa regione in cui è disponibile Amazon Rekognition
  • La quota di servizio regionale dell'API di Amazon Rekognition soddisfa i requisiti di sistema

Quando non soddisfi tutti questi requisiti, dovresti scegliere il Bytes opzione.

Utilizza le API stateless di Amazon Rekognition in una regione diversa

Un esempio di utilizzo di Bytes l'opzione è quando desideri distribuire il tuo caso d'uso in una regione in cui Amazon Rekognition non è generalmente disponibile, ad esempio, se hai una presenza di clienti in Sud America (sa-east-1) Regione. Per la residenza dei dati, deve trovarsi il bucket S3 utilizzato per archiviare le immagini degli utenti sa-east-1, ma desideri utilizzare Amazon Rekognition per la tua soluzione anche se non è generalmente disponibile in sa-east-1. Una soluzione è usare il Bytes opzione per chiamare Amazon Rekognition in una regione diversa in cui Amazon Rekognition è disponibile, ad esempio us-east-1. Il diagramma seguente illustra questa architettura.

Riconoscimento in diverse Regioni

Dopo che la funzione Lambda è stata attivata (Passaggio 4), invece di chiamare Amazon Rekognition direttamente con la posizione S3 dell'immagine, la funzione deve recuperare l'immagine dal bucket S3 (Passaggio 5), quindi chiamare Amazon Rekognition con i byte non elaborati dell'immagine (Passaggio 6). Di seguito è riportato un frammento di codice della funzione 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))

Tieni presente che il frammento di codice precedente funziona direttamente per i formati JPEG o PNG. Per altri formati immagine, come BMP, è necessaria un'ulteriore elaborazione dell'immagine per convertirla in byte JPEG o PNG prima dell'invio ad Amazon Rekognition. Il codice seguente converte BMP in byte 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'])

Aumenta il TPS delle API senza stato distribuendo le chiamate API in più regioni

Un altro caso d'uso del Bytes L'opzione è che puoi aumentare il TPS delle API stateless distribuendo le chiamate API in più regioni. In questo modo, non sei limitato dalla quota di servizio regionale dell'API perché puoi ottenere ulteriori TPS da altre regioni.

Nell'esempio seguente, viene creata una funzione Lambda per chiamare Amazon Rekognition DetectLabels API con il Bytes opzione. Per aumentare il TPS massimo, puoi distribuire le chiamate API in più regioni con pesi. Il TPS massimo che puoi raggiungere è calcolato con: min(region_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, … region_n_max_tps/region_n_weight). L'esempio seguente usa us-east-1 ed us-west-2 Regioni.

diffondere il traffico di Rekognition

Il frammento di codice per chiamare il DetectLabels L'API è la seguente:

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)

Perché us-east-1 ed us-west-2 entrambi hanno un massimo di 50 TPS per l'API Amazon Rekognition DetectFaces, puoi distribuire uniformemente le chiamate API con peso 50/50 impostando la variabile di ambiente REGION_1_TRAFFIC_PERCENTAGE a 50. In questo modo, puoi raggiungere min(50/50%, 50/50%) = 100 TPS in teoria.

Per convalidare l'idea, la funzione Lambda viene esposta come API REST con Gateway API Amazon. Poi JMeter viene utilizzato per testare il carico dell'API.

caricare le chiamate dell'API Rekognition per il test

REGION_1_TRAFFIC_PERCENTAGE è inizialmente impostato su 100, in questo modo all DetectFaces Le chiamate API vengono inviate a us-east-1 solo. In teoria, il TPS massimo che può essere raggiunto è limitato dalla quota di servizio in us-east-1, ovvero 50 TPS. Test di carico sull'endpoint API personalizzato, a partire da 50 thread simultanei, aggiungendo in modo incrementale 5 thread fino a ProvisionedThroughputExceededException restituito da Amazon Rekognition viene rispettato.

REGION_1_TRAFFIC_PERCENTAGE viene quindi impostato su 50, in questo modo all DetectLabels Le chiamate API vengono inviate uniformemente a us-east-1 ed us-west-2. In teoria, il TPS massimo raggiungibile è la quota di servizio che le due Regioni sommano, che è di 100 TPS. Avviare nuovamente il test di carico da 100 thread per trovare il TPS massimo.

La tabella seguente riassume i risultati del test di carico.

Percentuale di chiamate API DetectLabels a us-east-1 Percentuale di chiamate API DetectLabels a us-west-2 TPS massimo in teoria Numero massimo di corse simultanee senza ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

Conclusione

Molti clienti utilizzano le API senza stato di Amazon Rekognition Image per vari casi d'uso, tra cui la verifica dell'identità, la moderazione dei contenuti, l'elaborazione dei contenuti multimediali e altro ancora. Questo post ha discusso le due opzioni di passaggio delle immagini e come utilizzare l'opzione byte non elaborati per i seguenti casi d'uso:

  • Amazon Rekognition Disponibilità regionale
  • Residenza dei dati del cliente
  • Scalare il TPS delle API senza stato di Amazon Rekognition

Scopri come viene utilizzato Amazon Rekognition diversi casi d'uso della visione artificiale e inizia il tuo percorso di innovazione.


Informazioni sugli autori

Migliora la scalabilità per le API stateless di Amazon Rekognition utilizzando più regioni PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Sharon Lic è un architetto di soluzioni presso AWS, con sede nell'area di Boston, MA. Lavora con i clienti aziendali, aiutandoli a risolvere problemi difficili e a costruire su AWS. Al di fuori del lavoro, le piace trascorrere del tempo con la sua famiglia ed esplorare i ristoranti locali.

Migliora la scalabilità per le API stateless di Amazon Rekognition utilizzando più regioni PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Vaibhav Shah è un Senior Solutions Architect con AWS e ama aiutare i suoi clienti con tutto ciò che riguarda il cloud e consentire il loro percorso di adozione del cloud. Al di fuori del lavoro, ama viaggiare, esplorare nuovi posti e ristoranti, cucinare, seguire sport come il cricket e il calcio, guardare film e serie (fan della Marvel) e attività avventurose come l'escursionismo, il paracadutismo e l'elenco potrebbe continuare.

Timestamp:

Di più da Apprendimento automatico di AWS