שפר את המדרגיות עבור ממשקי API חסרי מדינה של Amazon Rekognition תוך שימוש במספר אזורים של PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

שפר את יכולת ההרחבה עבור ממשקי API חסרי מדינה של Amazon Rekognition תוך שימוש במספר אזורים

בקודם בלוג, תיארנו פתרון לאימות זהות מקצה לקצה באזור AWS יחיד. הפתרון משתמש ב- אמזון ממשקי API DetectFaces לזיהוי פנים ו השווה פרצופים להשוואת פנים. אנו חושבים על ממשקי API אלה כממשקי API חסרי מדינה מכיוון שהם אינם תלויים בהכרה של אמזון אוסף פנים. הם גם אימפוטנטיים, כלומר שיחות חוזרות עם אותם פרמטרים יחזירו את אותה תוצאה. הם מספקים אפשרויות גמישות להעברת תמונות, בין אם דרך א שירות אחסון פשוט של אמזון (Amazon S3) מיקום או בתים גולמיים.

בפוסט זה נתמקד ב תמונת ההכרה באמזון ממשקי API חסרי מדינה, ולדון בשתי אפשרויות של העברת תמונות ומתי לבחור אחת על פני השנייה מנקודת מבט של ארכיטקטורת המערכת. לאחר מכן נדון כיצד להתאים את ממשקי ה-API חסרי המדינה כדי להתגבר על כמה מגבלות אזוריות. כשמדברים על מדרגיות, אנחנו מתייחסים לרוב לטרנזקציות המקסימליות לשנייה (TPS) שהפתרון יכול להתמודד. לדוגמה, בעת אירוח אירוע גדול המשתמש בראייה ממוחשבת כדי לזהות פנים או תוויות של אובייקטים, אתה עלול להיתקל בתנועות תנועה, ואינך רוצה שהמערכת תגרום למצערת. זה אומר שלפעמים צריך להגדיל את ה-TPS ואפילו לחרוג ממכסת השירות האזורית שיש ל-Amazon Rekognition APIs. פוסט זה מציע פתרון להגדלת ה-TPS של ממשקי API חסרי מדינה על ידי שימוש במספר אזורים.

ממשקי API חסרי מדינה של Amazon Rekognition

מבין ממשקי ה-API של Amazon Rekognition Image הזמינים, השווה פרצופים, DetectFaces, DetectLabels, DetectModerationLabels, DetectProtective Equipment, DetectText, ו זיהוי סלבריטאים הם חסרי אזרחות. הם מספקים גם אמזון S3 וגם אפשרויות בתים גולמיים להעברת תמונות. לדוגמה, בתחביר הבקשה של ה DetectFaces API, ישנן שתי אפשרויות להעביר ל- Image שדה: Bytes or S3Object.

בעת שימוש S3Object אפשרות, ארכיטקטורה טיפוסית היא כדלקמן.

לפתרון זה יש את זרימת העבודה הבאה:

  1. יישום הלקוח ניגש לדף אינטרנט שמתארח בו AWS להגביר.
  2. יישום הלקוח מאומת ומאושר עם אמזון קוגניטו.
  3. אפליקציית הלקוח מעלה תמונה לדלי S3.
  4. Amazon S3 מפעיל an AWS למבדה פונקציה להתקשר ל- Amazon Rekognition.
  5. הפונקציה Lambda קוראת ל-Amazon Rekognition APIs עם אפשרות S3Object.
  6. פונקציית Lambda ממשיכה את התוצאה ל- אמזון דינמו השולחן.

בחר את S3Object אפשרות בתרחישים הבאים:

  • התמונה היא קובץ בפורמט PNG או JPEG
  • אתה פורס את כל הערימה באותו אזור שבו אמזון זיהוי זמין
  • מכסת השירות האזורית של ה-Amazon Rekognition API עונה על דרישת המערכת שלך

כאשר אינך עומד בכל הדרישות הללו, עליך לבחור ב Bytes אוֹפְּצִיָה.

השתמש ב-Amazon Rekognition Stateless APIs באזור אחר

דוגמה אחת לשימוש ב- Bytes האפשרות היא כאשר אתה רוצה לפרוס את מקרה השימוש שלך באזור שבו זיהוי אמזון אינו זמין בדרך כלל, לדוגמה, אם יש לך נוכחות של לקוחות בדרום אמריקה (sa-east-1) אזור. עבור תושבות נתונים, דלי S3 שבו אתה משתמש לאחסון תמונות של משתמשים חייב להיות בתוכו sa-east-1, אבל אתה רוצה להשתמש ב-Amazon Rekognition עבור הפתרון שלך למרות שהוא לא זמין בדרך כלל ב sa-east-1. פתרון אחד הוא להשתמש ב- Bytes אפשרות להתקשר ל-Amazon Rekognition באזור אחר שבו Amazon Rekognition זמין, כגון us-east-1. התרשים הבא ממחיש את הארכיטקטורה הזו.

הכרה באזור אחר

לאחר הפעלת פונקציית Lambda (שלב 4), במקום להתקשר ישירות ל-Amazon Rekognition עם מיקום ה-S3 של התמונה, הפונקציה צריכה לאחזר את התמונה מה-S3 bucket (שלב 5), ואז להתקשר ל-Amazon Rekognition עם הבייטים הגולמיים של התמונה (שלב 6). להלן קטע קוד של פונקציית 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))

שים לב שקטע הקוד הקודם פועל ישירות עבור פורמטים JPEG או PNG. עבור פורמטים אחרים של תמונה, כמו BMP, יש צורך בעיבוד תמונה נוסף כדי להמיר אותה ל-JPEG או PNG בתים לפני השליחה ל-Amazon Rekognition. הקוד הבא ממיר BMP ל-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'])

הגדל את ה-TPS של ממשקי API חסרי מדינה על ידי הפצת קריאות API למספר אזורים

מקרה שימוש נוסף של Bytes האפשרות היא שאתה יכול להגדיל את ה-TPS של ממשקי API חסרי מדינה על ידי הפצת קריאות ה-API למספר אזורים. בדרך זו, אינך מוגבל על ידי מכסת השירות האזורי של ה-API מכיוון שאתה יכול להשיג TPS נוסף מאזורים אחרים.

בדוגמה הבאה נוצרת פונקציית Lambda כדי לקרוא ל-Amazon Rekognition DetectLabels API עם ה Bytes אוֹפְּצִיָה. כדי להגדיל את ה-TPS המקסימלי, אתה יכול לפזר את קריאות ה-API למספר אזורים עם משקלים. ה-TPS המקסימלי שאתה יכול להשיג מחושב עם: min(region_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, … region_n_max_tps/region_n_weight). הדוגמה הבאה משתמשת us-east-1 ו us-west-2 אזורים.

הפצת תעבורת ההכרה

קטע הקוד להתקשרות עם DetectLabels API הוא כדלקמן:

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)

כי us-east-1 ו us-west-2 לשניהם יש מקסימום 50 TPS עבור Amazon Rekognition DetectFaces API, אתה יכול לפזר באופן שווה את קריאות ה-API עם משקל של 50/50 על ידי הגדרת משתנה הסביבה REGION_1_TRAFFIC_PERCENTAGE עד 50. בדרך זו, אתה יכול להשיג min(50/50%, 50/50%) = 100 TPS בתיאוריה.

כדי לאמת את הרעיון, פונקציית Lambda נחשפת כ- REST API עם שער API של אמזון. אז JMeter משמש לבדיקת טעינת ה-API.

בדיקת טעינת קריאות לזיהוי API

REGION_1_TRAFFIC_PERCENTAGE מוגדר תחילה ל-100, כך הכל DetectFaces קריאות API נשלחות אל us-east-1 רק. בתיאוריה, ה-TPS המקסימלי שניתן להשיג מוגבל על ידי מכסת השירותים ב us-east-1, שזה 50 TPS. בדיקת טעינה על נקודת הקצה המותאמת של ממשק API, החל מ-50 שרשורים במקביל, הוספת בהדרגה 5 שרשורים עד ProvisionedThroughputExceededException חזר מאמזון זיהוי נצפה.

REGION_1_TRAFFIC_PERCENTAGE לאחר מכן מוגדר ל-50, כך הכל DetectLabels קריאות API נשלחות באופן שווה us-east-1 ו us-west-2. בתיאוריה, ה-TPS המקסימלי שניתן להשיג הוא מכסת השירות ששני האזורים משלבים, שהיא 100 TPS. התחל שוב את בדיקת העומס מ-100 שרשורים כדי למצוא את ה-TPS המקסימלי.

הטבלה הבאה מסכמת את תוצאות בדיקת העומס.

אחוז הקריאות של DetectLabels API ל-us-east-1 אחוז הקריאות של DetectLabels API ל-us-west-2 מקסימום TPS בתיאוריה מקסימום ריצות במקביל ללא ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

סיכום

לקוחות רבים משתמשים בממשקי API חסרי מדינה של Amazon Rekognition Image למקרי שימוש שונים, כולל אימות זהות, ניהול תוכן, עיבוד מדיה ועוד. פוסט זה דן בשתי האפשרויות של העברת תמונות וכיצד להשתמש באפשרות ה-raw bytes עבור מקרי השימוש הבאים:

  • אמזון זיהוי זמינות אזורית
  • תושבות נתוני לקוחות
  • הגדלה של ה-TPS של ממשקי API חסרי מדינה של Amazon Rekognition

בדוק כיצד נעשה שימוש בזיהוי אמזון ב מקרי שימוש שונים בראיית מחשב והתחל את מסע החדשנות שלך.


על הכותבים

שפר את המדרגיות עבור ממשקי API חסרי מדינה של Amazon Rekognition תוך שימוש במספר אזורים של PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.שרון לי הוא אדריכל פתרונות ב-AWS, המבוסס באזור בוסטון, MA. היא עובדת עם לקוחות ארגוניים, עוזרת להם לפתור בעיות קשות ולהתבסס על AWS. מחוץ לעבודה, היא אוהבת לבלות עם משפחתה ולחקור מסעדות מקומיות.

שפר את המדרגיות עבור ממשקי API חסרי מדינה של Amazon Rekognition תוך שימוש במספר אזורים של PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.וייבבה שאה הוא אדריכל פתרונות בכיר עם AWS ואוהב לעזור ללקוחות שלו בכל דבר בענן ולאפשר את מסע האימוץ שלהם בענן. מחוץ לעבודה, הוא אוהב לטייל, לחקור מקומות חדשים ומסעדות, לבשל, ​​לעקוב אחר ספורט כמו קריקט וכדורגל, לצפות בסרטים וסדרות (מעריץ של מארוול), ופעילויות הרפתקניות כמו טיולים רגליים, צניחה חופשית, והרשימה עוד ארוכה.

בול זמן:

עוד מ למידת מכונות AWS