การครอบตัดรูปภาพอัตโนมัติด้วย Amazon Rekognition

การครอบตัดรูปภาพอัตโนมัติด้วย Amazon Rekognition

ผู้เผยแพร่โฆษณาดิจิทัลมองหาวิธีปรับปรุงประสิทธิภาพและทำให้เวิร์กโฟลว์สื่อของตนเป็นอัตโนมัติอย่างต่อเนื่อง เพื่อสร้างและเผยแพร่เนื้อหาใหม่ให้เร็วที่สุดเท่าที่จะทำได้

ผู้เผยแพร่หลายรายมีคลังรูปภาพสต็อกขนาดใหญ่ที่ใช้สำหรับบทความของตน ภาพเหล่านี้สามารถใช้ซ้ำได้หลายครั้งสำหรับเรื่องราวต่างๆ โดยเฉพาะเมื่อสำนักพิมพ์มีภาพคนดัง บ่อยครั้ง นักข่าวอาจต้องครอบตัดคนดังที่ต้องการออกจากภาพเพื่อใช้สำหรับเรื่องราวที่กำลังจะมาถึง นี่เป็นงานที่ต้องดำเนินการซ้ำๆ ด้วยตนเองซึ่งควรทำให้เป็นไปโดยอัตโนมัติ บางครั้ง ผู้เขียนอาจต้องการใช้รูปภาพของคนดัง แต่มีสองคน และคนดังหลักจำเป็นต้องถูกตัดออกจากรูปภาพ ในบางครั้ง รูปภาพคนดังอาจต้องได้รับการฟอร์แมตใหม่เพื่อเผยแพร่ไปยังแพลตฟอร์มต่างๆ เช่น โทรศัพท์มือถือ โซเชียลมีเดีย หรือข่าวดิจิทัล นอกจากนี้ ผู้เขียนอาจต้องเปลี่ยนอัตราส่วนภาพหรือทำให้คนดังอยู่ในโฟกัสที่คมชัด

ในโพสต์นี้เราจะสาธิตวิธีใช้ ความหมายของ Amazon เพื่อทำการวิเคราะห์ภาพ Amazon Rekognition ทำให้ง่ายต่อการเพิ่มความสามารถนี้ให้กับแอปพลิเคชันของคุณโดยไม่ต้องมีความเชี่ยวชาญด้านแมชชีนเลิร์นนิง (ML) และมาพร้อมกับ API ที่หลากหลายเพื่อตอบสนองกรณีการใช้งาน เช่น การตรวจจับวัตถุ การกลั่นกรองเนื้อหา การตรวจจับและวิเคราะห์ใบหน้า และการจดจำข้อความและคนดัง ซึ่งเรา ใช้ในตัวอย่างนี้

พื้นที่ คุณสมบัติการจดจำคนดัง in ความหมายของ Amazon จดจำบุคคลที่มีชื่อเสียงหลายหมื่นคนในรูปภาพและวิดีโอโดยอัตโนมัติโดยใช้ ML การจดจำคนดังสามารถตรวจจับได้ไม่เพียงแค่การปรากฏตัวของคนดังที่กำหนด แต่ยังรวมถึงตำแหน่งภายในภาพด้วย

ภาพรวมของโซลูชัน

ในโพสต์นี้ เราจะสาธิตวิธีที่เราสามารถส่งภาพถ่าย ชื่อคนดัง และอัตราส่วนกว้างยาวสำหรับภาพที่ส่งออกเพื่อสร้างภาพที่ครอบตัดของคนดังที่จับภาพใบหน้าของพวกเขาไว้ตรงกลาง

เมื่อทำงานกับ API การตรวจจับคนดังของ Amazon Rekognition, องค์ประกอบจำนวนมากจะถูกส่งกลับในการตอบกลับ ต่อไปนี้คือองค์ประกอบการตอบสนองที่สำคัญบางประการ:

  • จับคู่ความมั่นใจ – คะแนนความเชื่อมั่นที่สามารถใช้เพื่อควบคุมพฤติกรรม API เราขอแนะนำให้ใช้เกณฑ์ที่เหมาะสมกับคะแนนนี้ในใบสมัครของคุณเพื่อเลือกจุดปฏิบัติการที่คุณต้องการ ตัวอย่างเช่น โดยการตั้งค่าเกณฑ์เป็น 99% คุณสามารถกำจัดผลบวกปลอม แต่อาจพลาดผลลัพธ์ที่ตรงกันบางรายการ
  • ชื่อ รหัส และ URL – ชื่อคนดัง ID เฉพาะของ Amazon Rekognition และรายการ URL เช่น ลิงก์ IMDb หรือ Wikipedia ของคนดังสำหรับข้อมูลเพิ่มเติม
  • ขอบกล่อง – พิกัดของตำแหน่งกรอบสี่เหลี่ยมสำหรับใบหน้าคนดังที่รู้จักแต่ละคน
  • รู้จักเพศ – อัตลักษณ์ทางเพศที่เป็นที่รู้จักสำหรับคนดังที่รู้จักแต่ละคน
  • อารมณ์ความรู้สึก – อารมณ์ที่แสดงออกมาทางสีหน้า เช่น ดีใจ เสียใจ โกรธ
  • ท่าทาง – โพสท่าใบหน้าคนดังโดยใช้แกนสามแกน ม้วนตัว เอียง และหันเห
  • ยิ้ม – ไม่ว่าคนดังจะยิ้มหรือไม่ก็ตาม

ส่วนหนึ่งของการตอบสนอง API จาก 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 ในโฟกัสที่คมชัด

เราเปิดตัว อเมซอน SageMaker โน้ตบุ๊กซึ่งมีสภาพแวดล้อม Python ที่คุณสามารถเรียกใช้โค้ดเพื่อส่งรูปภาพไปยัง Amazon Rekognition จากนั้นจึงปรับเปลี่ยนรูปภาพโดยที่คนดังอยู่ในโฟกัสโดยอัตโนมัติ

แวร์เนอร์ โวเกลส์ เกรียนแตก

รหัสดำเนินการตามขั้นตอนระดับสูงต่อไปนี้:

  1. แจ้งความประสงค์ได้ที่ recognize_celebrities API พร้อมรูปภาพและชื่อคนดังที่กำหนด
  2. กรองการตอบสนองสำหรับข้อมูลกล่องขอบเขต
  3. เพิ่มช่องว่างภายในกล่องขอบเขตเพื่อให้เราจับภาพพื้นหลังบางส่วน

เบื้องต้น

สำหรับคำแนะนำนี้ คุณควรมีข้อกำหนดเบื้องต้นต่อไปนี้:

อัปโหลดรูปภาพตัวอย่าง

อัปโหลดภาพคนดังตัวอย่างของคุณไปยังบัคเก็ต S3 ของคุณ

เรียกใช้รหัส

ในการเรียกใช้โค้ด เราใช้โน้ตบุ๊ก SageMaker อย่างไรก็ตาม IDE ใดๆ จะทำงานได้เช่นกันหลังจากติดตั้ง Python, pillow และ Boto3 เราสร้างสมุดบันทึก SageMaker รวมถึง AWS Identity และการจัดการการเข้าถึง (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 เพื่อให้สามารถเรียกใช้ รู้จักคนดัง ไฟ:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rekognition:RecognizeCelebrities", "Resource": "*" } ]
}

สิทธิ์ IAM

  1. บนคอนโซล SageMaker ให้เลือก อินสแตนซ์โน้ตบุ๊ก ในบานหน้าต่างนำทาง
  2. ค้นหาตำแหน่ง automatic-cropping-celebrity สมุดบันทึกและเลือก เปิด Jupyter.
  3. Choose ใหม่ และ conda_python3 เป็นเคอร์เนลสำหรับโน้ตบุ๊กของคุณ

สมุดบันทึก Jupyter

สำหรับขั้นตอนต่อไปนี้ ให้คัดลอกบล็อกโค้ดลงในสมุดบันทึก 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()

เมื่อคุณรันบล็อกโค้ดนี้ คุณจะเห็นว่าเราพบแวร์เนอร์ โวเกิลส์ และสร้างภาพใหม่โดยมีใบหน้าของเขาอยู่ตรงกลาง

แวร์เนอร์ โวเกลส์ เกรียนแตก

รูปภาพจะถูกบันทึกลงในสมุดบันทึกและอัปโหลดไปยังบัคเก็ต S3 ด้วย

เอาต์พุตโน้ตบุ๊ก Jupyter

คุณสามารถรวมโซลูชันนี้ไว้ในไฟล์ เวิร์กโฟลว์ที่ใหญ่ขึ้น; ตัวอย่างเช่น บริษัทเผยแพร่อาจต้องการเผยแพร่ความสามารถนี้เป็นจุดสิ้นสุดเพื่อจัดรูปแบบและปรับขนาดรูปภาพได้ทันทีเมื่อเผยแพร่บทความของคนดังไปยังหลายแพลตฟอร์ม

การทำความสะอาด

เพื่อหลีกเลี่ยงค่าใช้จ่ายในอนาคต ให้ลบทรัพยากร:

  1. บนคอนโซล SageMaker เลือกสมุดบันทึกของคุณและบน สถานะ เมนูให้เลือก หยุด.
  2. หลังจากโน้ตบุ๊กหยุดทำงานบน สถานะ เมนูให้เลือก ลบ.
  3. บน IAM Console ให้ลบบทบาทการดำเนินการของ SageMaker ที่คุณสร้างขึ้น
  4. บนคอนโซล Amazon S3 ให้ลบอิมเมจอินพุตและไฟล์เอาต์พุตใดๆ จากบัคเก็ต S3 ของคุณ

สรุป

ในโพสต์นี้ เราได้แสดงวิธีที่เราสามารถใช้ Amazon Rekognition เพื่อทำให้งานแก้ไขรูปภาพเป็นแบบแมนนวลโดยอัตโนมัติเพื่อรองรับเวิร์กโฟลว์สื่อ สิ่งนี้มีความสำคัญอย่างยิ่งในอุตสาหกรรมสื่อสิ่งพิมพ์ ซึ่งความเร็วเป็นสิ่งสำคัญในการเผยแพร่เนื้อหาใหม่ๆ อย่างรวดเร็วและไปยังหลายแพลตฟอร์ม

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการทำงานกับเนื้อหาสื่อ โปรดดูที่ Media intelligence ฉลาดขึ้นด้วย Media2Cloud 3.0


เกี่ยวกับผู้เขียน

การครอบตัดรูปภาพอัตโนมัติด้วย Amazon Rekognition PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

มาร์ค วัตกินส์ เป็น Solutions Architect ภายในทีม Media and Entertainment เขาช่วยลูกค้าสร้างโซลูชัน AI/ML ซึ่งแก้ปัญหาความท้าทายทางธุรกิจโดยใช้ AWS เขาทำงานในโครงการ AI/ML หลายโครงการที่เกี่ยวข้องกับการมองเห็นของคอมพิวเตอร์ การประมวลผลภาษาธรรมชาติ การปรับเปลี่ยนในแบบของคุณ ML at the edge และอื่นๆ ห่างจากอาชีพการงาน เขาชอบใช้เวลากับครอบครัวและเฝ้าดูลูกน้อยทั้งสองเติบโต

ประทับเวลา:

เพิ่มเติมจาก AWS Machine Learning AWS

สร้าง แชร์ ปรับใช้: วิธีที่นักวิเคราะห์ธุรกิจและนักวิทยาศาสตร์ข้อมูลบรรลุเวลาสู่ตลาดได้เร็วขึ้นโดยใช้ ML แบบไม่มีโค้ดและ Amazon SageMaker Canvas

โหนดต้นทาง: 1210859
ประทับเวลา: Mar 10, 2022