قم بتحسين قابلية التوسع لواجهات برمجة التطبيقات عديمة الحالة في Amazon Rekognition باستخدام مناطق متعددة من PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

قم بتحسين قابلية التوسع لـ Amazon Rekognition APIs عديمة الحالة باستخدام مناطق متعددة

في السابق بلوق وظيفة، وصفنا حلًا شاملاً للتحقق من الهوية في منطقة AWS واحدة. الحل يستخدم الأمازون إعادة الاعتراف واجهات برمجة التطبيقات كشف الوجوه لاكتشاف الوجه و قارن الوجوه لمقارنة الوجه. نحن نفكر في واجهات برمجة التطبيقات هذه على أنها واجهات برمجة تطبيقات عديمة الحالة لأنها لا تعتمد على Amazon Rekognition جمع الوجه. إنها أيضًا غير فعالة ، مما يعني أن المكالمات المتكررة مع نفس المعلمات ستؤدي إلى نفس النتيجة. أنها توفر خيارات مرنة لتمرير الصور ، إما من خلال ملف خدمة تخزين أمازون البسيطة (Amazon S3) الموقع أو البايت الخام.

في هذا المنشور ، نركز على صورة Amazon Rekognition واجهات برمجة التطبيقات عديمة الحالة ، وناقش خيارين لتمرير الصور ومتى تختار أحدهما على الآخر من وجهة نظر بنية النظام. ثم نناقش كيفية توسيع نطاق واجهات برمجة التطبيقات عديمة الحالة للتغلب على بعض القيود الإقليمية. عند الحديث عن قابلية التوسع ، غالبًا ما نشير إلى الحد الأقصى للمعاملات في الثانية (TPS) التي يمكن للحل التعامل معها. على سبيل المثال ، عند استضافة حدث كبير يستخدم رؤية الكمبيوتر لاكتشاف الوجوه أو تسميات الكائنات ، قد تواجه ارتفاعًا في حركة المرور ، ولا ترغب في اختناق النظام. هذا يعني أنك تحتاج أحيانًا إلى زيادة TPS وحتى تجاوز حصة الخدمة الإقليمية التي تمتلكها Amazon Rekognition APIs. يقترح هذا المنشور حلاً لزيادة TPS لواجهات برمجة التطبيقات عديمة الحالة باستخدام مناطق متعددة.

Amazon Rekognition APIs عديمة الحالة

من واجهات برمجة تطبيقات Amazon Rekognition Image المتاحة ، قارن الوجوه, كشف الوجوه, DetectLabels, كشف الاعتدال, معدات DetectProtective, DetectTextو التعرف على المشاهير عديمي الجنسية. أنها توفر خيارات Amazon S3 والبايت الخام لتمرير الصور. على سبيل المثال ، في بناء جملة الطلب لملف DetectFaces API ، هناك خياران لتمريرها إلى Image حقل: Bytes or S3Object.

عند استخدام S3Object الخيار ، الهندسة المعمارية النموذجية على النحو التالي.

يحتوي هذا الحل على سير العمل التالي:

  1. يصل تطبيق العميل إلى صفحة ويب مستضافة مع تضخيم AWS.
  2. تطبيق العميل مصدق عليه ومصرح به أمازون كوجنيتو.
  3. يقوم تطبيق العميل بتحميل صورة إلى حاوية S3.
  4. يقوم Amazon S3 بتشغيل ملف AWS لامدا لاستدعاء Amazon Rekognition.
  5. تستدعي وظيفة Lambda واجهات Amazon Rekognition API مع خيار S3Object.
  6. تستمر وظيفة Lambda في النتيجة إلى ملف الأمازون DynamoDB الجدول.

اختيار S3Object الخيار في السيناريوهات التالية:

  • الصورة عبارة عن ملف بتنسيق PNG أو JPEG
  • تقوم بنشر الحزمة بأكملها في نفس المنطقة حيث يتوفر Amazon Rekognition
  • تفي حصة الخدمة الإقليمية لـ Amazon Rekognition API بمتطلبات نظامك

عندما لا تستوفي كل هذه المتطلبات ، يجب عليك اختيار Bytes الخيار.

استخدم Amazon Rekognition Stateless APIs في منطقة مختلفة

مثال واحد على استخدام Bytes الخيار هو عندما تريد نشر حالة الاستخدام الخاصة بك في منطقة لا يتوفر فيها Amazon Rekognition بشكل عام ، على سبيل المثال ، إذا كان لديك وجود عميل في أمريكا الجنوبية (sa-east-1) منطقة. بالنسبة لموقع البيانات ، يجب أن تكون حاوية S3 التي تستخدمها لتخزين صور المستخدمين موجودة sa-east-1، ولكنك تريد استخدام Amazon Rekognition لحلك على الرغم من أنه غير متوفر بشكل عام في sa-east-1. حل واحد هو استخدام Bytes خيار الاتصال بـ Amazon Rekognition في منطقة مختلفة حيث يتوفر Amazon Rekognition ، مثل us-east-1. الرسم البياني التالي يوضح هذه العمارة.

Rekognition في منطقة مختلفة

بعد تشغيل وظيفة Lambda (الخطوة 4) ، بدلاً من استدعاء Amazon Rekognition مباشرةً باستخدام موقع الصورة S3 ، تحتاج الوظيفة إلى استرداد الصورة من حاوية S3 (الخطوة 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 لواجهات برمجة التطبيقات عديمة الحالة عن طريق نشر استدعاءات واجهة برمجة التطبيقات إلى مناطق متعددة

حالة استخدام أخرى لـ Bytes الخيار هو أنه يمكنك توسيع نطاق TPS لواجهات برمجة التطبيقات عديمة الحالة عن طريق نشر استدعاءات واجهة برمجة التطبيقات إلى مناطق متعددة. بهذه الطريقة ، لن تكون مقيدًا بحصة الخدمة الإقليمية لواجهة برمجة التطبيقات لأنه يمكنك الحصول على 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 المناطق.

انتشار Rekognition حركة المرور

مقتطف الشفرة لاستدعاء 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. بهذه الطريقة ، يمكنك تحقيق الحد الأدنى (50/50٪ ، 50/50٪) = 100 TPS نظريًا.

للتحقق من صحة الفكرة ، يتم عرض وظيفة Lambda كواجهة برمجة تطبيقات REST مع بوابة أمازون API. ثم JMeter يستخدم لتحميل اختبار API.

تحميل اختبار Rekognition API المكالمات

REGION_1_TRAFFIC_PERCENTAGE تم ضبطه أولاً على 100 ، وبهذه الطريقة جميعًا DetectFaces يتم إرسال مكالمات API إلى us-east-1 فقط. من الناحية النظرية ، فإن الحد الأقصى لـ TPS الذي يمكن تحقيقه محدود بحصة الخدمة في us-east-1، وهي 50 TPS. اختبار التحميل على نقطة نهاية API المخصصة ، بدءًا من 50 مؤشر ترابط متزامن ، وإضافة 5 مؤشرات ترابط بشكل تدريجي حتى ProvisionedThroughputExceededException عاد من Amazon Rekognition.

REGION_1_TRAFFIC_PERCENTAGE ثم يتم ضبطه على 50 ، بهذه الطريقة جميعًا DetectLabels يتم إرسال مكالمات API إلى us-east-1 و us-west-2. من الناحية النظرية ، فإن الحد الأقصى من TPS الذي يمكن تحقيقه هو حصة الخدمة التي تجمعها المنطقتان ، وهي 100 TPS. ابدأ اختبار الحمل مرة أخرى من 100 موضوع للعثور على الحد الأقصى من TPS.

يلخص الجدول التالي نتائج اختبار الحمل.

النسبة المئوية لاستدعاءات واجهة برمجة تطبيقات DetectLabels لنا-الشرق -1 النسبة المئوية لاستدعاءات واجهة برمجة تطبيقات DetectLabels لنا-الغرب -2 الحد الأقصى من TPS في النظرية الحد الأقصى للتشغيل المتزامن بدون ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

وفي الختام

يستخدم العديد من العملاء واجهات برمجة تطبيقات Amazon Rekognition Image عديمة الحالة لحالات الاستخدام المختلفة ، بما في ذلك التحقق من الهوية ، والإشراف على المحتوى ، ومعالجة الوسائط ، والمزيد. ناقش هذا المنشور الخيارين لتمرير الصور وكيفية استخدام خيار البايت الخام لحالات الاستخدام التالية:

  • توفر Amazon Rekognition الإقليمي
  • موقع بيانات العميل
  • توسيع نطاق TPS لواجهات برمجة تطبيقات Amazon Rekognition عديمة الحالة

تحقق من كيفية استخدام Amazon Rekognition في حالات استخدام رؤية الكمبيوتر المختلفة وابدأ رحلة الابتكار الخاصة بك.


حول المؤلف

قم بتحسين قابلية التوسع لواجهات برمجة التطبيقات عديمة الحالة في Amazon Rekognition باستخدام مناطق متعددة من PlatoBlockchain Data Intelligence. البحث العمودي. عاي.شارون لي مهندس حلول في AWS ، ومقره في منطقة بوسطن ، ماساتشوستس. تعمل مع عملاء المؤسسات ، وتساعدهم في حل المشكلات الصعبة والبناء على AWS. خارج العمل ، تحب قضاء الوقت مع أسرتها واستكشاف المطاعم المحلية.

قم بتحسين قابلية التوسع لواجهات برمجة التطبيقات عديمة الحالة في Amazon Rekognition باستخدام مناطق متعددة من PlatoBlockchain Data Intelligence. البحث العمودي. عاي.فايباه شاه هو مهندس حلول أقدم مع AWS ويرغب في مساعدة عملائه في الحصول على كل شيء سحابة وتمكين رحلة اعتماد السحابة الخاصة بهم. خارج العمل ، يحب السفر ، واستكشاف أماكن ومطاعم جديدة ، والطهي ، ومتابعة الرياضات مثل لعبة الكريكيت وكرة القدم ، ومشاهدة الأفلام والمسلسلات (مشجعي Marvel) ، والأنشطة المغامرة مثل المشي لمسافات طويلة ، والقفز بالمظلات ، والقائمة تطول.

الطابع الزمني:

اكثر من التعلم الآلي من AWS