الاقتصاص التلقائي للصور باستخدام Amazon Rekognition

الاقتصاص التلقائي للصور باستخدام Amazon Rekognition

يبحث الناشرون الرقميون باستمرار عن طرق لتبسيط وأتمتة تدفقات عمل الوسائط الخاصة بهم من أجل إنشاء ونشر محتوى جديد بأسرع ما يمكن.

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

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

ميزة التعرف على المشاهير in الأمازون إعادة الاعتراف يتعرف تلقائيًا على عشرات الآلاف من الشخصيات المعروفة في الصور ومقاطع الفيديو باستخدام ML. يمكن أن يكتشف التعرف على المشاهير ليس فقط وجود شخصية مشهورة ولكن أيضًا الموقع داخل الصورة.

نظرة عامة على الحل

في هذا المنشور ، نوضح كيف يمكننا تمرير صورة ، واسم مشهور ، ونسبة عرض إلى ارتفاع للصورة الناتجة حتى نتمكن من إنشاء صورة مقصوصة لشخص مشهور يلتقط وجهه في المنتصف.

عند العمل مع واجهة برمجة تطبيقات Amazon Rekognition للكشف عن المشاهير، يتم إرجاع العديد من العناصر في الاستجابة. فيما يلي بعض عناصر الاستجابة الرئيسية:

  • مطابقة الثقة - نتيجة ثقة مطابقة يمكن استخدامها للتحكم في سلوك واجهة برمجة التطبيقات. نوصي بتطبيق حد مناسب لهذه الدرجة في طلبك لاختيار نقطة التشغيل المفضلة لديك. على سبيل المثال ، من خلال تعيين حد 99٪ ، يمكنك التخلص من الإيجابيات الكاذبة ولكن قد تفقد بعض التطابقات المحتملة.
  • الاسم والمعرف وعناوين URL - اسم المشاهير ومعرف Amazon Rekognition الفريد وقائمة عناوين URL مثل IMDb للمشهور أو رابط Wikipedia لمزيد من المعلومات.
  • BoundingBox - إحداثيات موقع الصندوق المحيط المستطيل لكل وجه مشهور معروف.
  • معروف - هوية جنس معروفة لكل المشاهير المعترف بهم.
  • شئنا ام ابينا - المشاعر المعبر عنها في وجه المشاهير مثلا سعيد أو حزين أو غاضب.
  • تشكل - قم بوضعية وجه المشاهير باستخدام ثلاثة محاور هي اللف والنبرة والانعراج.
  • ابتسامة - ما إذا كان المشهور يبتسم أم لا.

يشتمل جزء من استجابة واجهة برمجة التطبيقات من Amazon Rekognition على الكود التالي:

{ "CelebrityFaces": [ { "Urls": [ "www.wikidata.org/wiki/Q2536951" ], "Name": "Werner Vogels", "Id": "23iZ1oP", "Face": { "BoundingBox": { "Width": 0.10331031680107117, "Height": 0.20054641366004944, "Left": 0.5003396272659302, "Top": 0.07391933351755142 }, "Confidence": 99.99765014648438,
...

في هذا التمرين ، نوضح كيفية استخدام عنصر الصندوق المحيط لتحديد موقع الوجه ، كما هو موضح في المثال التالي للصورة. يتم تمثيل جميع الأبعاد كنسب لحجم الصورة الكلي ، وبالتالي فإن الأرقام في الاستجابة بين 0-1. على سبيل المثال ، في نموذج استجابة API ، يكون عرض المربع المحيط 0.1 ، مما يعني أن عرض الوجه هو 10٪ من إجمالي عرض الصورة.

صندوق Werner Vogels المحيط

باستخدام هذا المربع المحيط ، يمكننا الآن استخدام المنطق للتأكد من بقاء الوجه داخل حواف الصورة الجديدة التي نقوم بإنشائها. يمكننا وضع بعض الحشو حول هذا المربع المحيط لإبقاء الوجه في المنتصف.

في الأقسام التالية ، نوضح كيفية إنشاء إخراج الصورة المقصوصة التالية باستخدام Werner Vogels بتركيز واضح.

نطلق ملف الأمازون SageMaker دفتر الملاحظات ، الذي يوفر بيئة Python حيث يمكنك تشغيل الكود لتمرير صورة إلى Amazon Rekognition ثم تعديل الصورة تلقائيًا مع التركيز على المشاهير.

اقتصاص Werner Vogels

يقوم الكود بتنفيذ الخطوات عالية المستوى التالية:

  1. تقديم طلب إلى recognize_celebrities API مع الصورة المعطاة واسم المشاهير.
  2. قم بتصفية الاستجابة لمعلومات الصندوق المحيط.
  3. أضف بعض الحشو إلى المربع المحيط بحيث نلتقط بعض الخلفية.

المتطلبات الأساسية المسبقة

في هذا الدليل ، يجب أن يكون لديك المتطلبات الأساسية التالية:

تحميل الصورة النموذجية

قم بتحميل عينة صورة المشاهير الخاصة بك إلى حاوية S3 الخاصة بك.

قم بتشغيل الكود

لتشغيل الكود ، نستخدم دفتر ملاحظات SageMaker ، ولكن أي IDE سيعمل أيضًا بعد تثبيت Python و pillow و Boto3. نقوم بإنشاء دفتر ملاحظات SageMaker بالإضافة إلى ملف إدارة الهوية والوصول AWS (IAM) مع الأذونات المطلوبة. أكمل الخطوات التالية:

  1. قم بإنشاء دفتر الملاحظات وتسمية ذلك automatic-cropping-celebrity.

سياسة التنفيذ الافتراضية ، التي تم إنشاؤها عند إنشاء دفتر ملاحظات SageMaker ، لديها سياسة بسيطة تمنح أذونات الدور للتفاعل مع Amazon S3.

  1. تحديث Resource قيد باسم حاوية S3:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3::: # your-s3-bucket-name " ] } ]
}

  1. قم بإنشاء سياسة أخرى لإضافتها إلى دور IAM لدفتر SageMaker لتتمكن من استدعاء التعرف على المشاهير API:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rekognition:RecognizeCelebrities", "Resource": "*" } ]
}

أذونات IAM

  1. في وحدة تحكم SageMaker ، اختر مثيلات دفتر الملاحظات في جزء التنقل.
  2. تحديد موقع automatic-cropping-celebrity دفتر واختيار فتح كوكب المشتري.
  3. اختار جديد و conda_python3 كنواة لجهاز الكمبيوتر المحمول الخاص بك.

دفتر جوبيتر

للخطوات التالية ، انسخ كتل التعليمات البرمجية في دفتر Jupyter الخاص بك وقم بتشغيلها عن طريق الاختيار يجري.

  1. أولاً ، نقوم باستيراد الدوال والمكتبات المساعدة:
import boto3
from PIL import Image

  1. مجموعة المتغيرات
bucket = '<YOUR_BUCKET_NAME>' file = '<YOUR_FILE_NAME>'
celeb = '<CELEBRITY_NAME>'
aspect_ratio = <ASPECT_RATIO_OF_OUTPUT_IMAGE, e.g. 1 for square>

  1. قم بإنشاء عميل خدمة
rek = boto3.client('rekognition')
s3 = boto3.client('s3')

  1. وظيفة للتعرف على المشاهير
def recognize_celebrity(photo): with open(photo, 'rb') as image: response = rek.recognize_celebrities(Image={'Bytes': image.read()}) image=Image.open(photo) file_type=image.format.lower() path, ext=image.filename.rsplit(".", 1) celeb_faces = response['CelebrityFaces'] print(f'Detected {len(celeb_faces)} faces for {photo}') return celeb_faces, image, path, file_type 

  1. وظيفة للحصول على المربع المحيط للمشهور المحدد:
def get_bounding_box(celeb_faces, img_width, img_height, celeb): bbox = None for celebrity in celeb_faces: if celebrity['Name'] == celeb: box = celebrity['Face']['BoundingBox'] left = img_width * box['Left'] top = img_height * box['Top'] width = img_width * box['Width'] height = img_height * box['Height'] print('Left: ' + '{0:.0f}'.format(left)) print('Top: ' + '{0:.0f}'.format(top)) print('Face Width: ' + "{0:.0f}".format(width)) print('Face Height: ' + "{0:.0f}".format(height)) #dimenions of famous face inside the bounding boxes x1=left y1=top x2=left+width y2=top+height bbox = [x1,y1,x2,y2] print(f'Bbox coordinates: {bbox}') if bbox == None: raise ValueError(f"{celeb} not found in results") return bbox

  1. وظيفة لإضافة بعض الحشو إلى المربع المحيط ، لذلك نلتقط بعض الخلفية حول الوجه
def pad_bbox(bbox, pad_width=0.5, pad_height=0.3): x1, y1, x2, y2 = bbox width = x2 - x1 height = y2 - y1 #dimenions of new image with padding x1= max(x1 - (pad_width * width),0) y1= max(y1 - (pad_height * height),0) x2= max(x2 + (pad_width * width),0) y2= max(y2 + (pad_height * height),0) #dimenions of new image with aspect ratio, 1 is square, 1.5 is 6:4, 0.66 is 4:6 x1= max(x1-(max((y2-y1)*max(aspect_ratio,1)-(x2-x1),0)/2),0) y1= max(y1-(max((x2-x1)*1/(min((aspect_ratio),1))-(y2-y1),0)/2),0) x2= max(x2+(max((y2-y1)*max((aspect_ratio),1)-(x2-x1),0)/2),0) y2= max(y2+(max((x2-x1)*1/(min((aspect_ratio),1))-(y2-y1),0)/2),0) print('x1-coordinate after padding: ' + '{0:.0f}'.format(x1)) print('y1-coordinate after padding: ' + '{0:.0f}'.format(y1)) print('x2-coordinate after padding: ' + "{0:.0f}".format(x2)) print('y2-coordinate after padding: ' + "{0:.0f}".format(y2)) return [x1,y1,x2,y2]

  1. وظيفة لحفظ الصورة في تخزين الكمبيوتر الدفتري وفي Amazon S3
def save_image(roi, image, path, file_type): x1, y1, x2, y2 = roi image = image.crop((x1,y1,x2,y2)) image.save(f'{path}-cropped.{file_type}') s3.upload_file(f'{path}-cropped.{file_type}', bucket, f'{path}-cropped.{file_type}') return image

  1. استخدم بايثون main() وظيفة لدمج الوظائف السابقة لإكمال سير العمل لحفظ صورة جديدة مقصوصة من المشاهير لدينا:
def main(): # Download S3 image to local s3.download_file(bucket, file, './'+file) #Load photo and recognize celebrity celeb_faces, img, file_name, file_type = recognize_celebrity(file) width, height = img.size #Get bounding box bbox = get_bounding_box(celeb_faces, width, height, celeb) #Get padded bounding box padded_bbox = pad_bbox(bbox) #Save result and display result = save_image(padded_bbox, img, file_name, file_type) display(result) if __name__ == "__main__": main()

عند تشغيل كتلة التعليمات البرمجية هذه ، يمكنك أن ترى أننا وجدنا Werner Vogels وأنشأنا صورة جديدة مع وجهه في المنتصف.

اقتصاص Werner Vogels

سيتم حفظ الصورة في دفتر الملاحظات وتحميلها أيضًا إلى حاوية S3.

إخراج دفتر Jupyter

يمكنك تضمين هذا الحل في ملف سير عمل أكبر؛ على سبيل المثال ، قد ترغب شركة نشر في نشر هذه الإمكانية كنقطة نهاية لإعادة تنسيق الصور وتغيير حجمها بسرعة عند نشر مقالات المشاهير على منصات متعددة.

تنظيف

لتجنب تكبد رسوم في المستقبل ، احذف الموارد:

  1. في وحدة تحكم SageMaker ، حدد الكمبيوتر الدفتري الخاص بك وعلى ملف الإجراءات القائمة، اختر قلة النوم.
  2. بعد توقف دفتر الملاحظات ، على الإجراءات القائمة، اختر حذف.
  3. في وحدة تحكم IAM ، احذف دور تنفيذ SageMaker الذي أنشأته.
  4. في وحدة التحكم Amazon S3 ، احذف صورة الإدخال وأي ملفات إخراج من حاوية S3.

وفي الختام

في هذا المنشور ، أوضحنا كيف يمكننا استخدام Amazon Rekognition لأتمتة مهمة يدوية أخرى تتمثل في تعديل الصور لدعم سير عمل الوسائط. هذا مهم بشكل خاص في صناعة النشر حيث السرعة مهمة في الحصول على محتوى جديد بسرعة وعلى منصات متعددة.

لمزيد من المعلومات حول العمل مع أصول الوسائط ، يرجى الرجوع إلى أصبحت ذكاء الوسائط أكثر ذكاءً مع Media2Cloud 3.0


عن المؤلف

اقتصاص الصور تلقائيًا باستخدام ذكاء بيانات Amazon Rekognition PlatoBlockchain. البحث العمودي. منظمة العفو الدولية.

مارك واتكينز مهندس حلول ضمن فريق الإعلام والترفيه. يساعد العملاء على إنشاء حلول AI / ML التي تحل تحديات أعمالهم باستخدام AWS. لقد كان يعمل في العديد من مشاريع الذكاء الاصطناعي / التعلم الآلي المتعلقة برؤية الكمبيوتر ومعالجة اللغة الطبيعية والتخصيص و ML على الحافة والمزيد. بعيدًا عن الحياة المهنية ، يحب قضاء الوقت مع أسرته ومشاهدة طفليه يكبران.

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

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