برش خودکار تصویر با آمازون Rekognition

برش خودکار تصویر با آمازون Rekognition

ناشران دیجیتال به طور مداوم به دنبال راه‌هایی برای ساده‌سازی و خودکارسازی گردش‌های کاری رسانه‌های خود هستند تا محتوای جدید را با بیشترین سرعت تولید و منتشر کنند.

بسیاری از ناشران کتابخانه بزرگی از تصاویر استوک دارند که برای مقالات خود استفاده می کنند. این تصاویر را می توان بارها برای داستان های مختلف مورد استفاده مجدد قرار داد، به خصوص زمانی که ناشر تصاویر افراد مشهور را داشته باشد. اغلب، یک روزنامه نگار ممکن است نیاز داشته باشد که یک سلبریتی مورد نظر را از یک تصویر برای استفاده در داستان آینده خود بیرون بیاورد. این یک کار دستی و تکراری است که باید خودکار شود. گاهی اوقات، ممکن است نویسنده بخواهد از تصویر یک فرد مشهور استفاده کند، اما این تصویر شامل دو نفر است و سلبریتی اصلی باید از تصویر بریده شود. در مواقع دیگر، تصاویر افراد مشهور ممکن است برای انتشار در پلتفرم‌های مختلف مانند موبایل، رسانه‌های اجتماعی یا اخبار دیجیتال نیاز به قالب‌بندی مجدد داشته باشند. علاوه بر این، ممکن است نویسنده نیاز داشته باشد نسبت تصویر را تغییر دهد یا فرد مشهور را در فوکوس واضح قرار دهد.

در این پست نحوه استفاده را نشان می دهیم شناسایی آمازون برای انجام تجزیه و تحلیل تصویر آمازون Rekognition اضافه کردن این قابلیت را به برنامه های شما بدون نیاز به تخصص در یادگیری ماشین (ML) آسان می کند و با API های مختلف برای انجام موارد استفاده مانند تشخیص اشیا، تعدیل محتوا، تشخیص و تجزیه و تحلیل چهره، و تشخیص متن و افراد مشهور ارائه می شود. در این مثال استفاده کنید

La ویژگی تشخیص افراد مشهور in شناسایی آمازون به طور خودکار ده ها هزار شخصیت شناخته شده را در تصاویر و ویدیوها با استفاده از ML شناسایی می کند. تشخیص سلبریتی نه تنها می‌تواند حضور فرد مشهور را تشخیص دهد، بلکه مکان درون تصویر را نیز تشخیص می‌دهد.

بررسی اجمالی راه حل

در این پست، ما نشان می‌دهیم که چگونه می‌توانیم عکس، نام افراد مشهور و نسبت ابعاد را برای تصویر خروجی قرار دهیم تا بتوانیم یک تصویر برش‌خورده از چهره‌های مشهوری که چهره‌شان را در مرکز ثبت می‌کند، تولید کنیم.

هنگام کار با API تشخیص سلبریتی آمازون Rekognition، بسیاری از عناصر در پاسخ برگردانده می شوند. در زیر برخی از عناصر کلیدی پاسخ آورده شده است:

  • MatchConfidence - امتیاز اطمینان مطابقت که می تواند برای کنترل رفتار API استفاده شود. توصیه می کنیم برای انتخاب نقطه عملیاتی مورد نظر خود، یک آستانه مناسب برای این امتیاز در برنامه خود اعمال کنید. به عنوان مثال، با تعیین آستانه 99٪، می توانید موارد مثبت کاذب را حذف کنید، اما ممکن است برخی از مسابقات احتمالی را از دست بدهید.
  • نام، شناسه و آدرس اینترنتی – نام افراد مشهور، شناسه شناسایی منحصربه‌فرد آمازون، و فهرستی از نشانی‌های اینترنتی مانند پیوند IMDb یا ویکی‌پدیای افراد مشهور برای اطلاعات بیشتر.
  • BoundingBox - مختصات محل جعبه مرزی مستطیلی برای هر چهره مشهور شناخته شده.
  • جنسیت شناخته شده - هویت جنسیتی شناخته شده برای هر فرد مشهور شناخته شده.
  • احساسات - احساساتی که در چهره افراد مشهور بیان می شود، به عنوان مثال، خوشحال، غمگین یا عصبانی.
  • ژست - ژست چهره سلبریتی با استفاده از سه محور رول، گام و انحراف.
  • لبخند - چه سلبریتی لبخند بزند یا نه.

بخشی از پاسخ API از آمازون 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٪ از عرض کل تصویر است.

جعبه مرزی ورنر فوگلز

با این کادر محدود، اکنون می‌توانیم از منطق استفاده کنیم تا مطمئن شویم که چهره در لبه‌های تصویر جدیدی که ایجاد می‌کنیم باقی می‌ماند. می‌توانیم مقداری بالشتک در اطراف این جعبه مرزی اعمال کنیم تا صورت در مرکز بماند.

در بخش‌های بعدی، نحوه ایجاد خروجی تصویر برش‌خورده زیر را با ورنر فوگلز در فوکوس واضح نشان می‌دهیم.

ما راه اندازی می کنیم آمازون SageMaker نوت بوک، که یک محیط پایتون را فراهم می کند که در آن می توانید کد را برای ارسال یک تصویر به آمازون Rekognition اجرا کنید و سپس به طور خودکار تصویر را با فوکوس افراد مشهور تغییر دهید.

ورنر فوگلز برش داد

کد مراحل سطح بالا زیر را انجام می دهد:

  1. درخواستی به recognize_celebrities API با تصویر داده شده و نام افراد مشهور.
  2. پاسخ را برای اطلاعات جعبه مرزی فیلتر کنید.
  3. مقداری بالشتک به کادر محدود کننده اضافه کنید تا بتوانیم مقداری از پس زمینه را ثبت کنیم.

پیش نیازها

برای این راهنما، شما باید پیش نیازهای زیر را داشته باشید:

تصویر نمونه را آپلود کنید

نمونه تصویر سلبریتی خود را در سطل S3 خود آپلود کنید.

کد را اجرا کنید

برای اجرای کد، از یک نوت بوک SageMaker استفاده می کنیم، اما هر IDE پس از نصب پایتون، بالش و Boto3 نیز کار می کند. ما یک نوت بوک SageMaker و همچنین ایجاد می کنیم هویت AWS و مدیریت دسترسی نقش (IAM) با مجوزهای لازم. مراحل زیر را کامل کنید:

  1. نوت بوک را ایجاد کنید و نام آن automatic-cropping-celebrity.

خط‌مشی اجرای پیش‌فرض، که هنگام ایجاد نوت‌بوک SageMaker ایجاد شد، دارای یک خط‌مشی ساده است که به نقش اجازه می‌دهد با آمازون 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. عملکرد ذخیره تصویر در حافظه نوت بوک و آمازون 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()

وقتی این بلوک کد را اجرا می کنید، می بینید که ما ورنر فوگلز را پیدا کردیم و تصویر جدیدی با چهره او در مرکز ایجاد کردیم.

ورنر فوگلز برش داد

تصویر در نوت بوک ذخیره می شود و همچنین در سطل S3 آپلود می شود.

خروجی نوت بوک Jupyter

شما می توانید این راه حل را در یک گردش کار بزرگتر; به عنوان مثال، یک شرکت انتشاراتی ممکن است بخواهد این قابلیت را به عنوان نقطه پایانی برای قالب بندی مجدد و تغییر اندازه تصاویر در هنگام انتشار مقالات افراد مشهور در چندین پلتفرم منتشر کند.

تمیز کردن

برای جلوگیری از تحمیل هزینه در آینده، منابع را حذف کنید:

  1. در کنسول SageMaker، نوت بوک خود را انتخاب کنید و روی اعمال منو ، انتخاب کنید توقف.
  2. پس از توقف نوت بوک، روی اعمال منو ، انتخاب کنید حذف.
  3. در کنسول IAM، نقش اجرای SageMaker را که ایجاد کردید حذف کنید.
  4. در کنسول آمازون S3، تصویر ورودی و هر فایل خروجی را از سطل S3 خود حذف کنید.

نتیجه

در این پست، نشان دادیم که چگونه می‌توانیم از شناسایی آمازون برای خودکارسازی یک کار دستی تغییر تصاویر برای پشتیبانی از گردش‌های کاری رسانه استفاده کنیم. این امر به ویژه در صنعت انتشارات مهم است، جایی که سرعت در انتشار سریع محتوای تازه و به چندین پلتفرم مهم است.

برای کسب اطلاعات بیشتر در مورد کار با دارایی های رسانه ای مراجعه کنید هوش رسانه ای با Media2Cloud 3.0 هوشمندتر شده است


درباره نویسنده

برش خودکار تصویر با فناوری اطلاعات PlatoBlockchain Amazon Rekognition. جستجوی عمودی Ai.

مارک واتکینز یک معمار راه حل در تیم رسانه و سرگرمی است. او به مشتریان کمک می کند تا راه حل های AI/ML ایجاد کنند که چالش های تجاری آنها را با استفاده از AWS حل کند. او روی چندین پروژه AI/ML مرتبط با بینایی کامپیوتر، پردازش زبان طبیعی، شخصی سازی، ML در لبه و غیره کار کرده است. او به دور از زندگی حرفه ای، عاشق گذراندن وقت با خانواده و تماشای بزرگ شدن دو فرزند کوچکش است.

تمبر زمان:

بیشتر از آموزش ماشین AWS