Az Amazon Rekognition állapot nélküli API-k méretezhetőségének javítása több régiós PlatoBlockchain Data Intelligence használatával. Függőleges keresés. Ai.

Javítsa az Amazon Rekognition állapot nélküli API-k méretezhetőségét több régió használatával

Előzőben blogbejegyzés, leírtunk egy végpontok közötti azonosság-ellenőrzési megoldást egyetlen AWS-régióban. A megoldás a Amazon felismerés API-k Arcok észlelése arcfelismeréshez és Arcok összehasonlítása arc-összehasonlításhoz. Ezeket az API-kat állapot nélküli API-knak tekintjük, mivel nem függenek az Amazon Rekognitiontól arcgyűjtemény. Idempotensek is, vagyis az azonos paraméterekkel ismételt hívások ugyanazt az eredményt adják vissza. Rugalmas lehetőségeket biztosítanak a képek átadására, akár egy Amazon egyszerű tárolási szolgáltatás (Amazon S3) helyét vagy nyers bájtjait.

Ebben a bejegyzésben arra koncentrálunk Amazon Rekognition kép állapot nélküli API-kat, és megvitatják a képek átadásának két lehetőségét, valamint azt, hogy rendszerarchitektúra szempontjából mikor válasszuk az egyiket a másikkal szemben. Ezután megvitatjuk, hogyan méretezhetjük az állapot nélküli API-kat néhány regionális korlát leküzdésére. Amikor a méretezhetőségről beszélünk, gyakran hivatkozunk a megoldás által kezelhető maximális tranzakciók másodpercenkénti számára (TPS). Például, ha olyan nagy eseményt rendez, amely számítógépes látást használ az arcok vagy tárgycímkék észlelésére, forgalmi kiugrással találkozhat, és nem akarja, hogy a rendszer lelassuljon. Ez azt jelenti, hogy néha növelnie kell a TPS-t, és túl kell lépnie az Amazon Rekognition API-k regionális szolgáltatási kvótáján. Ez a bejegyzés megoldást javasol az állapot nélküli API-k TPS-jének növelésére több régió használatával.

Amazon Rekognition állapot nélküli API-k

Az elérhető Amazon Rekognition Image API-k közül Arcok összehasonlítása, Arcok észlelése, DetectLabels, DetectModerationLabels, DetectProtectiveEquipment, Szöveg észleléseés Ismerd fel a hírességeket hontalanok. Az Amazon S3 és a nyers bájtok opciókat is biztosítják a képek átadásához. Például a kérés szintaxisában a DetectFaces API, két lehetőség van átadni a Image terület: Bytes or S3Object.

Amikor a S3Object opció esetén egy tipikus architektúra a következő.

Ez a megoldás a következő munkafolyamattal rendelkezik:

  1. Az ügyfélalkalmazás hozzáfér egy weboldalhoz, amelyet a AWS erősítés.
  2. Az ügyfélalkalmazás hitelesítése és engedélyezése megtörtént Amazon Cognito.
  3. Az ügyfélalkalmazás feltölt egy képet egy S3 tárolóba.
  4. Az Amazon S3 elindítja a AWS Lambda függvény az Amazon Rekognition meghívásához.
  5. A Lambda függvény az S3Object opcióval meghívja az Amazon Rekognition API-kat.
  6. A lambda függvény megőrzi az eredményt egy Amazon DynamoDB táblázat.

Válassza a S3Object opció a következő forgatókönyvekben:

  • A kép PNG vagy JPEG formátumú fájl
  • A teljes köteget ugyanabban a régióban telepíti, ahol az Amazon Rekognition elérhető
  • Az Amazon Rekognition API regionális szolgáltatási kvótája megfelel a rendszerkövetelményeknek

Ha nem felel meg ezeknek a követelményeknek, válassza a Bytes opciót.

Használjon Amazon Rekognition Stateless API-kat egy másik régióban

Egy példa a Bytes az az opció, amikor olyan régióban szeretné telepíteni a használati esetet, ahol az Amazon Rekognition általában nem érhető el, például ha Dél-Amerikában van jelen ügyfele (sa-east-1) Vidék. Az adatok tartózkodási helyéhez a felhasználók képeinek tárolására használt S3 tárolónak benne kell lennie sa-east-1, de az Amazon Rekognitiont szeretné használni a megoldáshoz, még akkor is, ha az általában nem érhető el itt sa-east-1. Az egyik megoldás a Bytes lehetőség az Amazon Rekognition meghívására egy másik régióban, ahol az Amazon Rekognition elérhető, például us-east-1. A következő diagram ezt az architektúrát szemlélteti.

Felismerés különböző régiókban

A Lambda funkció aktiválása után (4. lépés) ahelyett, hogy közvetlenül a kép S3 helyével hívná meg az Amazon Rekognitiont, a funkciónak le kell kérnie a képet az S3 tárolóból (5. lépés), majd a kép nyers bájtjaival meg kell hívnia az Amazon Rekognitiont (lépés). 6). A következő egy kódrészlet a Lambda függvényből:

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

Vegye figyelembe, hogy az előző kódrészlet közvetlenül JPEG vagy PNG formátumokhoz működik. Más képformátumok, például a BMP esetében extra képfeldolgozásra van szükség ahhoz, hogy JPEG vagy PNG bájtokká konvertálják, mielőtt elküldenék az Amazon Rekognitionba. A következő kód konvertálja a BMP-t JPEG bájtokká:

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

Növelje az állapot nélküli API-k TPS-jét az API-hívások több régióra való szétosztásával

Egy másik használati eset a Bytes Az a lehetőség, hogy az állapot nélküli API-k TPS-jét növelheti az API-hívások több régióra való szétosztásával. Így nem korlátozza az API regionális szolgáltatási kvótáját, mert további TPS-t szerezhet más régiókból.

A következő példában egy Lambda-függvény jön létre az Amazon Rekognition meghívására DetectLabels API-val a Bytes választási lehetőség. A maximális TPS növeléséhez az API-hívásokat súlyozással több régióra is szétoszthatja. Az elérhető maximális TPS-t a következőképpen számítják ki: min(régió_1_max_tps/régió_1_súly, régió_2_max_tps/régió_2_súly, … régió_n_max_tps/régió_n_súly). A következő példa használja us-east-1 és a us-west-2 Régiók.

elterjedt a Rekognitív forgalom

A kódrészlet a híváshoz DetectLabels Az API a következő:

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)

Mivel us-east-1 és a us-west-2 mindkettő maximum 50 TPS-sel rendelkezik az Amazon Rekognition DetectFaces API-hoz, a környezeti változó beállításával egyenletesen oszthatja el az API-hívásokat 50/50 súllyal. REGION_1_TRAFFIC_PERCENTAGE 50-re. Így elméletileg min(50/50%, 50/50%) = 100 TPS érhető el.

Az ötlet érvényesítéséhez a Lambda függvény REST API-ként jelenik meg Amazon API átjáró. Majd JMeter az API betöltésének tesztelésére szolgál.

terhelési teszt Rekognition API hívások

REGION_1_TRAFFIC_PERCENTAGE először 100-ra van állítva, így minden DetectFaces Az API-hívások a címre kerülnek us-east-1 csak. Elméletileg az elérhető maximális TPS-t a szolgáltatási kvóta korlátozza us-east-1, ami 50 TPS. Betöltési teszt az egyéni API-végponton, 50 párhuzamos száltól kezdve, fokozatosan hozzáadva 5 szálat, amíg ProvisionedThroughputExceededException az Amazon Rekognitionból visszaérkezett.

REGION_1_TRAFFIC_PERCENTAGE ezután 50-re van állítva, így minden DetectLabels Az API-hívások egyenletesen kerülnek elküldésre a címre us-east-1 és a us-west-2. Elméletileg a maximális elérhető TPS a két régió által összevont szolgáltatási kvóta, ami 100 TPS. Indítsa újra a terhelési tesztet 100 száltól, hogy megtalálja a maximális TPS-t.

Az alábbi táblázat a terhelési vizsgálat eredményeit foglalja össze.

A DetectLabels API-hívások százalékos aránya a us-east-1 felé A DetectLabels API-hívások százalékos aránya a us-west-2 felé Maximális TPS elméletben Maximális egyidejű futás nélkül ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

Következtetés

Sok ügyfél használ Amazon Rekognition Image állapotmentes API-kat különféle felhasználási esetekben, beleértve a személyazonosság-ellenőrzést, a tartalom moderálását, a médiafeldolgozást és még sok mást. Ez a bejegyzés a képek átadásának két lehetőségét tárgyalta, és a nyers bájtok beállítását a következő használati esetekben:

  • Amazon Rekognition Regionális elérhetőség
  • Ügyféladatok tartózkodási helye
  • Az Amazon Rekognition állapot nélküli API-k TPS-jének bővítése

Nézze meg, hogyan használják az Amazon Rekognitiont különböző számítógépes látáshasználati esetek és indítsa el innovációs útját.


A szerzőkről

Az Amazon Rekognition állapot nélküli API-k méretezhetőségének javítása több régiós PlatoBlockchain Data Intelligence használatával. Függőleges keresés. Ai.Sharon Li az AWS megoldástervezője, székhelye Boston, MA területen található. Vállalati ügyfelekkel dolgozik, segít nekik megoldani a nehéz problémákat és építeni az AWS-re. A munkán kívül szeret időt tölteni a családjával és felfedezni a helyi éttermeket.

Az Amazon Rekognition állapot nélküli API-k méretezhetőségének javítása több régiós PlatoBlockchain Data Intelligence használatával. Függőleges keresés. Ai.Vaibhav Shah Senior Solutions Architect az AWS-nél, és szeretne minden felhőben segíteni ügyfelei számára, és lehetővé tenni a felhőbe való bevezetésüket. A munkán kívül szeret utazni, új helyeket és éttermeket felfedezni, főzni, olyan sportokat követni, mint a krikett és a foci, filmeket és sorozatokat nézni (Marvel-rajongó), valamint olyan kalandos tevékenységeket, mint a túrázás, az ejtőernyős ugrás, és a lista folytatható.

Időbélyeg:

Még több AWS gépi tanulás