Paranna Amazon Rekognitionin tilattomien sovellusliittymien skaalautuvuutta käyttämällä useita alueita PlatoBlockchain Data Intelligenceä. Pystysuuntainen haku. Ai.

Paranna Amazon Rekognitionin tilattomien API:iden skaalautuvuutta useiden alueiden avulla

Edellisessä blogi, kuvailimme päästä-päähän identiteetin vahvistusratkaisun yhdellä AWS-alueella. Ratkaisu käyttää Amazonin tunnistus API Tunnista kasvot kasvojentunnistukseen ja Vertaa kasvoja kasvojen vertailuun. Pidämme näitä sovellusliittymiä tilattomina sovellusliittyminä, koska ne eivät ole riippuvaisia ​​Amazon Rekognitionista kasvojen kokoelma. Ne ovat myös idempotentteja, mikä tarkoittaa, että toistuvat puhelut samoilla parametreilla palauttavat saman tuloksen. Ne tarjoavat joustavia vaihtoehtoja kuvien välittämiseen joko läpi Amazonin yksinkertainen tallennuspalvelu (Amazon S3) sijainti tai raakatavut.

Tässä viestissä keskitymme Amazonin tunnistuskuva tilattomat sovellusliittymät ja keskustelevat kahdesta vaihtoehdosta kuvien välittämiseksi ja milloin valita toinen toisen sijaan järjestelmäarkkitehtuurin näkökulmasta. Sitten keskustelemme siitä, kuinka skaalata tilattomia API:ita joidenkin alueellisten rajoitusten voittamiseksi. Kun puhutaan skaalautumisesta, viitataan usein maksimitapahtumiin sekunnissa (TPS), jonka ratkaisu pystyy käsittelemään. Esimerkiksi kun isännöidä suurta tapahtumaa, joka käyttää tietokonenäköä kasvojen tai esineiden tunnisteiden havaitsemiseen, saatat kohdata liikennepiikkien, etkä halua järjestelmän kuristavan. Tämä tarkoittaa, että sinun on joskus lisättävä TPS:ää ja jopa ylitettävä Amazon Rekognition API:iden alueellinen palvelukiintiö. Tämä viesti ehdottaa ratkaisua tilattomien API:iden TPS:n lisäämiseen käyttämällä useita alueita.

Amazon Rekognitionin tilattomat sovellusliittymät

Saatavilla olevista Amazon Rekognition Image API:ista Vertaa kasvoja, Tunnista kasvot, Tunnista etiketit, DetectModerationLabels, DetectProtectiveEquipment, TunnistaTextja Tunnista julkkikset ovat valtiottomia. Ne tarjoavat sekä Amazon S3- että raakatavuvaihtoehtoja kuvien välittämiseen. Esimerkiksi pyynnön syntaksissa DetectFaces API, on kaksi vaihtoehtoa siirtyä Image ala: Bytes or S3Object.

Käytettäessä S3Object vaihtoehdon tyypillinen arkkitehtuuri on seuraava.

Tällä ratkaisulla on seuraava työnkulku:

  1. Asiakassovellus käyttää verkkosivua, jota isännöi AWS vahvistaa.
  2. Asiakassovellus on todennettu ja valtuutettu Amazon Cognito.
  3. Asiakassovellus lataa kuvan S3-ämpäriin.
  4. Amazon S3 laukaisee an AWS Lambda toiminto kutsua Amazon Rekognition.
  5. Lambda-toiminto kutsuu Amazon Rekognition API:ita S3Object-vaihtoehdolla.
  6. Lambda-funktio säilyttää tuloksen an Amazon DynamoDB pöytä.

Valitse S3Object vaihtoehto seuraavissa tilanteissa:

  • Kuva on joko PNG- tai JPEG-muotoinen tiedosto
  • Otat koko pinon käyttöön samalla alueella, jossa Amazon Rekognition on saatavilla
  • Amazon Rekognition API:n alueellinen palvelukiintiö täyttää järjestelmävaatimukset

Jos et täytä kaikkia näitä vaatimuksia, sinun tulee valita Bytes vaihtoehto.

Käytä Amazon Rekognition Stateless -sovellusliittymiä toisella alueella

Yksi esimerkki käytöstä Bytes vaihtoehto on, kun haluat ottaa käyttöön käyttötapauksesi alueella, jossa Amazon Rekognition ei ole yleisesti saatavilla, esimerkiksi jos sinulla on asiakkaita Etelä-Amerikassa (sa-east-1) Alue. Tietojen residenssiä varten S3-ämpäri, jota käytät käyttäjien kuvien tallentamiseen, on oltava sisällä sa-east-1, mutta haluat käyttää ratkaisussasi Amazon Rekognitionia, vaikka se ei ole yleisesti saatavilla sa-east-1. Yksi ratkaisu on käyttää Bytes mahdollisuus soittaa Amazon Rekognition toisella alueella, jossa Amazon Rekognition on saatavilla, kuten us-east-1. Seuraava kaavio havainnollistaa tätä arkkitehtuuria.

Tunnistus eri alueilla

Kun Lambda-toiminto on laukaissut (vaihe 4), sen sijaan, että se kutsuisi Amazon Rekognitionia suoraan kuvan S3-sijainnista, toiminnon on noudettava kuva S3-ämpäristä (vaihe 5) ja sitten kutsuttava Amazon Rekognition kuvan raakatavuilla (vaihe) 6). Seuraava on koodinpätkä Lambda-funktiosta:

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

Huomaa, että edellinen koodinpätkä toimii suoraan JPEG- tai PNG-muodoissa. Muissa kuvamuodoissa, kuten BMP, tarvitaan ylimääräistä kuvankäsittelyä sen muuntamiseksi JPEG- tai PNG-tavuiksi ennen lähettämistä Amazon Rekognitioniin. Seuraava koodi muuntaa BMP:n JPEG-tavuiksi:

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

Laajenna tilattomien sovellusliittymien TPS:ää levittämällä API-kutsut useille alueille

Toinen käyttötapaus Bytes Vaihtoehtona on, että voit skaalata tilattomien sovellusliittymien TPS:ää jakamalla API-kutsut useille alueille. Tällä tavalla sovellusliittymän alueellinen palvelukiintiö ei rajoita sinua, koska voit saada lisää TPS:itä muilta alueilta.

Seuraavassa esimerkissä luodaan Lambda-funktio kutsumaan Amazon Rekognition DetectLabels API kanssa Bytes vaihtoehto. Voit skaalata maksimi-TPS:ää jakamalla API-kutsut useille alueille painotusten avulla. Suurin TPS, jonka voit saavuttaa, lasketaan seuraavasti: min(alue_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, … region_n_max_tps/region_n_weight). Seuraava esimerkki käyttää us-east-1 ja us-west-2 Alueet.

levittää tunnistusliikennettä

Koodinpätkä kutsua DetectLabels API on seuraava:

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)

Koska us-east-1 ja us-west-2 molemmilla on enintään 50 TPS Amazon Rekognition DetectFaces API:lle, voit jakaa API-kutsut tasaisesti painolla 50/50 asettamalla ympäristömuuttujan REGION_1_TRAFFIC_PERCENTAGE 50:een. Tällä tavalla voit saavuttaa teoriassa min(50/50%, 50/50%) = 100 TPS.

Idean vahvistamiseksi Lambda-toiminto paljastetaan REST API:na Amazon API -yhdyskäytävä. sitten JMeter käytetään API:n lataustestaukseen.

kuormitustesti Rekognition API -kutsut

REGION_1_TRAFFIC_PERCENTAGE on ensin asetettu arvoon 100, tällä tavalla DetectFaces API-kutsut lähetetään osoitteeseen us-east-1 vain. Teoriassa maksimi TPS, joka voidaan saavuttaa, on rajoitettu palvelukiintiöllä us-east-1, joka on 50 TPS. Lataa testi mukautetussa API-päätepisteessä, alkaen 50 samanaikaisesta säikeestä, lisäämällä asteittain 5 säiettä, kunnes ProvisionedThroughputExceededException palautetaan Amazon Rekognitionista.

REGION_1_TRAFFIC_PERCENTAGE on sitten asetettu arvoon 50, tällä tavalla DetectLabels API-kutsut lähetetään tasaisesti osoitteeseen us-east-1 ja us-west-2. Teoriassa suurin TPS, joka voidaan saavuttaa, on kahden alueen yhdistämä palvelukiintiö, joka on 100 TPS. Aloita kuormitustesti uudelleen 100 kierteestä löytääksesi maksimi-TPS.

Seuraavassa taulukossa on yhteenveto kuormitustestauksen tuloksista.

Prosenttiosuus DetectLabels API -kutsuista us-east-1 Prosenttiosuus DetectLabels API -kutsuista us-west-2 Maksimi TPS teoriassa Suurin samanaikainen ajo ilman ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

Yhteenveto

Monet asiakkaat käyttävät Amazon Rekognition Imagen tilattomia sovellusliittymiä eri käyttötapauksiin, kuten henkilöllisyyden vahvistamiseen, sisällön valvontaan, median käsittelyyn ja muihin. Tässä viestissä käsiteltiin kahta kuvien välitysvaihtoehtoa ja raakatavuvaihtoehtoa seuraavissa käyttötapauksissa:

  • Amazon Rekognition Alueellinen saatavuus
  • Asiakastietojen asuinpaikka
  • Amazon Rekognitionin tilattomien sovellusliittymien TPS:n laajentaminen

Katso, miten Amazon Rekognitionia käytetään erilaisia ​​tietokonenäön käyttötapauksia ja aloita innovaatiomatkasi.


Tietoja Tekijät

Paranna Amazon Rekognitionin tilattomien sovellusliittymien skaalautuvuutta käyttämällä useita alueita PlatoBlockchain Data Intelligenceä. Pystysuuntainen haku. Ai.Sharon Li on ratkaisuarkkitehti AWS:ssä Bostonissa, MA-alueella. Hän työskentelee yritysasiakkaiden kanssa auttaen heitä ratkaisemaan vaikeita ongelmia ja kehittämään AWS:ää. Työn ulkopuolella hän haluaa viettää aikaa perheensä kanssa ja tutustua paikallisiin ravintoloihin.

Paranna Amazon Rekognitionin tilattomien sovellusliittymien skaalautuvuutta käyttämällä useita alueita PlatoBlockchain Data Intelligenceä. Pystysuuntainen haku. Ai.Vaibhav Shah on AWS:n vanhempi ratkaisuarkkitehti ja haluaa auttaa asiakkaitaan kaikessa pilvessä ja mahdollistaa heidän pilvipalveluiden käyttöönottomatkansa. Työn ulkopuolella hän rakastaa matkustamista, uusiin paikkoihin ja ravintoloihin tutustumista, ruoanlaittoa, urheilulajien, kuten kriketin ja jalkapallon, seuraamista, elokuvien ja sarjojen katselemista (Marvel-fani) ja seikkailunhaluisia aktiviteetteja, kuten vaellusta, laskuvarjohypyä, ja lista jatkuu.

Aikaleima:

Lisää aiheesta AWS-koneoppiminen