Parandage Amazon Rekognitioni olekuta API-de skaleeritavust, kasutades mitut piirkonda PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Parandage Amazon Rekognitioni olekuta API-de skaleeritavust, kasutades mitut piirkonda

Eelmises blogi postitus, kirjeldasime täielikku identiteedikontrolli lahendust ühes AWS-i piirkonnas. Lahenduses kasutatakse Amazon Rekognitsioon API-liidesed Tuvasta nägu näotuvastuseks ja Võrdle nägusid näo võrdlemiseks. Peame neid API-sid olekuta API-deks, kuna need ei sõltu Amazon Rekognitionist näokollektsioon. Need on ka idempotentsed, mis tähendab, et korduvad kõned samade parameetritega annavad sama tulemuse. Need pakuvad paindlikke valikuid piltide edastamiseks kas läbi Amazoni lihtne salvestusteenus (Amazon S3) asukoht või töötlemata baidid.

Selles postituses keskendume sellele Amazoni tuvastamise pilt olekuta API-sid ja arutage kahte võimalust piltide edastamiseks ja seda, millal süsteemiarhitektuuri vaatenurgast üks teisele valida. Seejärel arutame, kuidas kodakondsuseta API-sid skaleerida, et ületada mõned piirkondlikud piirangud. Skaleeritavusest rääkides viitame sageli maksimaalsele tehingute arvule sekundis (TPS), millega lahendus hakkama saab. Näiteks kui korraldate suurt sündmust, mis kasutab nägude või objektide siltide tuvastamiseks arvutinägemist, võite kohata liikluse hüppeid ja te ei soovi, et süsteem pidurdaks. See tähendab, et mõnikord peate suurendama TPS-i ja ületama isegi Amazon Rekognition API-de piirkondliku teenusekvoodi. See postitus pakub välja lahenduse kodakondsuseta API-de TPS-i suurendamiseks, kasutades mitut piirkonda.

Amazon Rekognitioni olekuta API-d

Saadaolevatest Amazon Rekognition Image API-dest Võrdle nägusid, Tuvasta nägu, Tuvasta sildid, DetectModeration Labels, DetectProtectiveEquipment, Tuvasta tekstja Tunne ära kuulsused on kodakondsuseta. Need pakuvad piltide edastamiseks nii Amazon S3 kui ka töötlemata baitide valikuid. Näiteks päringu süntaksis DetectFaces API, on kaks võimalust edasi minna Image väli: Bytes or S3Object.

Kui kasutate S3Object valiku korral on tüüpiline arhitektuur järgmine.

Sellel lahendusel on järgmine töövoog:

  1. Kliendirakendus pääseb juurde veebilehele, mida hostib AWS võimendus.
  2. Kliendirakendus on autentitud ja volitatud Amazon Cognito.
  3. Kliendirakendus laadib pildi üles S3 ämbrisse.
  4. Amazon S3 käivitab an AWS Lambda funktsioon Amazon Rekognitioni helistamiseks.
  5. Lambda funktsioon kutsub Amazon Rekognition API-sid valikuga S3Object.
  6. Lambda funktsioon säilitab tulemuse kuni an Amazon DynamoDB tabelis.

Vali S3Object valik järgmistel stsenaariumidel:

  • Pilt on kas PNG- või JPEG-vormingus fail
  • Juurutate kogu virna samas piirkonnas, kus Amazon Rekognition on saadaval
  • Amazon Rekognition API piirkondlik teenusekvoot vastab teie süsteeminõuetele

Kui te ei vasta kõigile neile nõuetele, peaksite valima Bytes valik.

Kasutage Amazon Rekognitioni olekuta API-sid teises piirkonnas

Üks näide selle kasutamisest Bytes valik on siis, kui soovite oma kasutusjuhtu juurutada piirkonnas, kus Amazon Rekognition pole üldiselt saadaval, näiteks kui teil on kliente Lõuna-Ameerikas (sa-east-1) Piirkond. Andmeresidentsuse jaoks peab S3-salv, mida kasutate kasutajate piltide salvestamiseks, olema sees sa-east-1, kuid soovite oma lahendusena kasutada Amazon Rekognitioni, kuigi see pole riigis üldiselt saadaval sa-east-1. Üks lahendus on kasutada Bytes võimalus helistada Amazon Rekognitionile teises piirkonnas, kus Amazon Rekognition on saadaval, näiteks us-east-1. Järgmine diagramm illustreerib seda arhitektuuri.

Äratundmine erinevates piirkondades

Pärast Lambda funktsiooni käivitamist (samm 4) peab funktsioon Amazon Rekognitionile otse pildi S3 asukohaga helistamise asemel pildi S3 ämbrist hankima (samm 5), seejärel helistama Amazon Rekognitionile koos pildi töötlemata baitidega (samm 6). Järgmine on Lambda funktsiooni koodilõik:

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

Pange tähele, et eelnev koodilõik töötab otse JPEG- või PNG-vormingus. Teiste pildivormingute (nt BMP) puhul on vaja täiendavat pilditöötlust, et see enne Amazon Rekognitioni saatmist JPEG- või PNG-baitideks teisendada. Järgmine kood teisendab BMP JPEG baitideks:

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

Suurendage olekuta API-de TPS-i, levitades API kutsed mitmesse piirkonda

Teine kasutusjuhtum Bytes võimalus on see, et saate olekuta API-de TPS-i suurendada, levitades API-kutsed mitmesse piirkonda. Nii ei piira teid API piirkondlik teenusekvoot, kuna saate teistest piirkondadest saada täiendavat TPS-i.

Järgmises näites luuakse Lambda funktsioon Amazon Rekognitioni kutsumiseks DetectLabels API koos Bytes valik. Maksimaalse TPS-i suurendamiseks saate API-kutsed jaotada kaaludega mitmesse piirkonda. Maksimaalne saavutatav TPS arvutatakse järgmiselt: min(regioon_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, … region_n_max_tps/region_n_weight). Järgmine näide kasutab us-east-1 ja us-west-2 Piirkonnad.

levitada äratundmisliiklust

Koodilõik helistamiseks DetectLabels API on järgmine:

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)

Sest us-east-1 ja us-west-2 mõlemal on Amazon Rekognition DetectFaces API jaoks maksimaalselt 50 TPS-i, saate keskkonnamuutuja määramisega API-kutseid ühtlaselt jaotada kaaluga 50/50 REGION_1_TRAFFIC_PERCENTAGE 50-ni. Nii saate teoreetiliselt saavutada min(50/50%, 50/50%) = 100 TPS.

Idee kinnitamiseks eksponeeritakse Lambda funktsioon REST API-na koos Amazon API värav. siis JMeter kasutatakse API laadimise testimiseks.

laadimistesti Rekognition API kõned

REGION_1_TRAFFIC_PERCENTAGE on esmalt seatud väärtusele 100, niimoodi kõik DetectFaces API-kõned saadetakse aadressile us-east-1 ainult. Teoreetiliselt on maksimaalne saavutatav TPS piiratud teenusekvootiga us-east-1, mis on 50 TPS. Laadige test kohandatud API lõpp-punktis, alustades 50 samaaegsest lõimest, lisades järk-järgult 5 lõime, kuni ProvisionedThroughputExceededException Amazon Rekognitionist tagastatud on täheldatud.

REGION_1_TRAFFIC_PERCENTAGE on siis seatud väärtusele 50, niimoodi kõik DetectLabels API-kõned saadetakse ühtlaselt aadressile us-east-1 ja us-west-2. Teoreetiliselt on maksimaalne saavutatav TPS kahe piirkonna kombineeritud teenusekvoot, mis on 100 TPS. Alustage koormustesti uuesti 100 keermest, et leida maksimaalne TPS.

Järgmine tabel võtab kokku koormustesti tulemused.

DetectLabelsi API-kõnede protsent aadressile us-east-1 DetectLabelsi API-kõnede protsent aadressile us-west-2 Maksimaalne TPS teoorias Maksimaalne samaaegne töö ilma ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

Järeldus

Paljud kliendid kasutavad Amazon Rekognition Image olekuta API-sid erinevateks kasutusjuhtudeks, sealhulgas identiteedi kinnitamiseks, sisu modereerimiseks, meediumitöötluseks ja muuks. Selles postituses käsitleti kahte piltide edastamise võimalust ja seda, kuidas kasutada töötlemata baitide valikut järgmistel kasutusjuhtudel:

  • Amazon Rekognition Piirkondlik kättesaadavus
  • Kliendiandmete elukoht
  • Amazon Rekognitioni kodakondsuseta API-de TPS-i suurendamine

Vaadake, kuidas Amazon Rekognitionit kasutatakse erinevad arvutinägemise kasutusjuhtumid ja alustage oma innovatsiooniteekonda.


Autoritest

Parandage Amazon Rekognitioni olekuta API-de skaleeritavust, kasutades mitut piirkonda PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.Sharon Li on lahenduste arhitekt AWS-is, mis asub Bostonis, MA piirkonnas. Ta töötab äriklientidega, aidates neil lahendada keerulisi probleeme ja arendada AWS-i. Väljaspool tööd meeldib talle perega aega veeta ja kohalikke restorane uudistada.

Parandage Amazon Rekognitioni olekuta API-de skaleeritavust, kasutades mitut piirkonda PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.Vaibhav Shah on AWS-i vanemlahenduste arhitekt ja talle meeldib aidata oma kliente kõiges pilves ja võimaldada nende pilve kasutuselevõttu. Väljaspool tööd armastab ta reisida, avastada uusi kohti ja restorane, süüa teha, jälgida selliseid spordialasid nagu kriket ja jalgpall, vaadata filme ja sarju (Marveli fänn) ning seikluslikke tegevusi, nagu matkamine, langevarjuhüpped, ja seda loetelu jätkub.

Ajatempel:

Veel alates AWS-i masinõpe