Cắt ảnh tự động với Amazon Rekognition

Cắt ảnh tự động với Amazon Rekognition

Các nhà xuất bản kỹ thuật số liên tục tìm cách hợp lý hóa và tự động hóa quy trình truyền thông của họ để tạo và xuất bản nội dung mới nhanh nhất có thể.

Nhiều nhà xuất bản có một thư viện hình ảnh lớn mà họ sử dụng cho các bài viết của mình. Những hình ảnh này có thể được sử dụng lại nhiều lần cho các câu chuyện khác nhau, đặc biệt khi nhà xuất bản có hình ảnh của những người nổi tiếng. Rất thường xuyên, một nhà báo có thể cần cắt bỏ một người nổi tiếng mong muốn từ một hình ảnh để sử dụng cho câu chuyện sắp tới của họ. Đây là một nhiệm vụ thủ công, lặp đi lặp lại nên được tự động hóa. Đôi khi, một tác giả có thể muốn sử dụng hình ảnh của một người nổi tiếng, nhưng hình ảnh đó có hai người và người nổi tiếng chính cần được cắt khỏi hình ảnh. Những lần khác, hình ảnh của người nổi tiếng có thể cần được định dạng lại để xuất bản lên nhiều nền tảng khác nhau như di động, mạng xã hội hoặc tin tức kỹ thuật số. Ngoài ra, tác giả có thể cần thay đổi tỷ lệ khung hình của hình ảnh hoặc đặt người nổi tiếng vào tiêu điểm rõ nét.

Trong bài đăng này, chúng tôi trình bày cách sử dụng Nhận thức lại Amazon để thực hiện phân tích hình ảnh. Amazon Rekognition giúp bạn dễ dàng thêm khả năng này vào các ứng dụng của mình mà không cần bất kỳ kiến ​​thức chuyên môn về máy học (ML) nào và đi kèm với nhiều API khác nhau để đáp ứng các trường hợp sử dụng như phát hiện đối tượng, kiểm duyệt nội dung, nhận diện và phân tích khuôn mặt cũng như nhận dạng văn bản và người nổi tiếng, mà chúng tôi sử dụng trong ví dụ này.

Sản phẩm tính năng nhận dạng người nổi tiếng in Nhận thức lại Amazon tự động nhận dạng hàng chục nghìn nhân vật nổi tiếng trong hình ảnh và video bằng ML. Nhận dạng người nổi tiếng có thể phát hiện không chỉ sự hiện diện của người nổi tiếng nhất định mà còn cả vị trí trong ảnh.

Tổng quan về giải pháp

Trong bài đăng này, chúng tôi trình bày cách chúng tôi có thể chuyển ảnh, tên người nổi tiếng và tỷ lệ khung hình cho hình ảnh xuất ra để có thể tạo ra hình ảnh đã cắt của người nổi tiếng nhất định chụp khuôn mặt của họ ở giữa.

Khi làm việc với API phát hiện người nổi tiếng của Amazon Rekognition, nhiều phần tử được trả về trong phản hồi. Sau đây là một số yếu tố phản hồi chính:

  • trận đấu tự tin – Điểm tin cậy khớp có thể được sử dụng để kiểm soát hành vi của API. Chúng tôi khuyên bạn nên áp dụng ngưỡng phù hợp cho điểm số này trong ứng dụng của mình để chọn điểm vận hành ưa thích của bạn. Ví dụ: bằng cách đặt ngưỡng 99%, bạn có thể loại bỏ các kết quả dương tính giả nhưng có thể bỏ lỡ một số kết quả khớp tiềm năng.
  • Tên, Id và Url – Tên người nổi tiếng, ID Amazon Rekognition duy nhất và danh sách các URL như liên kết IMDb hoặc Wikipedia của người nổi tiếng để biết thêm thông tin.
  • Giới hạnHộp – Tọa độ của vị trí hộp giới hạn hình chữ nhật cho từng khuôn mặt người nổi tiếng được công nhận.
  • Giới tính đã biết – Bản sắc giới tính đã biết cho từng người nổi tiếng được công nhận.
  • Cảm xúc – Cảm xúc thể hiện trên khuôn mặt của người nổi tiếng, chẳng hạn như vui, buồn hay tức giận.
  • pose – Tạo dáng khuôn mặt người nổi tiếng, sử dụng ba trục lăn, cao độ và nghiêng.
  • Nụ cười – Người nổi tiếng có cười hay không.

Một phần của phản hồi API từ Amazon Rekognition bao gồm mã sau:

{ "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,
...

Trong bài tập này, chúng tôi trình bày cách sử dụng phần tử hộp giới hạn để xác định vị trí của khuôn mặt, như thể hiện trong hình ảnh ví dụ sau. Tất cả các kích thước được biểu thị dưới dạng tỷ lệ của kích thước hình ảnh tổng thể, vì vậy các số trong phản hồi nằm trong khoảng từ 0–1. Ví dụ: trong phản hồi API mẫu, chiều rộng của hộp giới hạn là 0.1, có nghĩa là chiều rộng khuôn mặt là 10% tổng chiều rộng của hình ảnh.

Hộp giới hạn Werner Vogels

Với hộp giới hạn này, giờ đây chúng tôi có thể sử dụng logic để đảm bảo rằng khuôn mặt vẫn nằm trong các cạnh của hình ảnh mới mà chúng tôi tạo. Chúng ta có thể áp dụng một số phần đệm xung quanh hộp giới hạn này để giữ khuôn mặt ở giữa.

Trong các phần tiếp theo, chúng tôi trình bày cách tạo đầu ra hình ảnh được cắt xén sau với Werner Vogels ở tiêu điểm sắc nét.

Chúng tôi khởi động một Amazon SageMaker notebook, cung cấp môi trường Python nơi bạn có thể chạy mã để chuyển hình ảnh tới Amazon Rekognition, sau đó tự động sửa đổi hình ảnh có tiêu điểm là người nổi tiếng.

Werner Vogels cắt

Mã thực hiện các bước cấp cao sau:

  1. Đưa ra yêu cầu đối với recognize_celebrities API với hình ảnh và tên người nổi tiếng đã cho.
  2. Lọc phản hồi cho thông tin hộp giới hạn.
  3. Thêm một số phần đệm vào hộp giới hạn để chúng tôi chụp một số nền.

Điều kiện tiên quyết

Đối với hướng dẫn này, bạn nên có các điều kiện tiên quyết sau:

Tải lên hình ảnh mẫu

Tải hình ảnh mẫu về người nổi tiếng lên bộ chứa S3 của bạn.

Chạy mã

Để chạy mã, chúng tôi sử dụng sổ ghi chép SageMaker, tuy nhiên, bất kỳ IDE nào cũng sẽ hoạt động sau khi cài đặt Python, gối và Boto3. Chúng tôi tạo sổ ghi chép SageMaker cũng như Quản lý truy cập và nhận dạng AWS (IAM) với các quyền cần thiết. Hoàn thành các bước sau:

  1. Tạo sổ tay và tên nó automatic-cropping-celebrity.

Chính sách thực thi mặc định, được tạo khi tạo sổ ghi chép SageMaker, có một chính sách đơn giản cấp cho vai trò quyền tương tác với Amazon S3.

  1. Cập nhật Resource ràng buộc với tên bộ chứa 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. Tạo một chính sách khác để thêm vào vai trò IAM của sổ ghi chép SageMaker để có thể gọi Nhận ra người nổi tiếng API:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rekognition:RecognizeCelebrities", "Resource": "*" } ]
}

Quyền IAM

  1. Trên bảng điều khiển SageMaker, chọn Trường hợp máy tính xách tay trong khung điều hướng.
  2. Định vị automatic-cropping-celebrity sổ tay và chọn Mở Jupyter.
  3. Chọn Mớiconda_python3 làm hạt nhân cho sổ ghi chép của bạn.

Máy tính xách tay Jupyter

Đối với các bước sau, hãy sao chép các khối mã vào sổ ghi chép Jupyter của bạn và chạy chúng bằng cách chọn chạy.

  1. Đầu tiên, chúng tôi nhập các chức năng và thư viện của trình trợ giúp:
import boto3
from PIL import Image

  1. Đặt biến
bucket = '<YOUR_BUCKET_NAME>' file = '<YOUR_FILE_NAME>'
celeb = '<CELEBRITY_NAME>'
aspect_ratio = <ASPECT_RATIO_OF_OUTPUT_IMAGE, e.g. 1 for square>

  1. Tạo một khách hàng dịch vụ
rek = boto3.client('rekognition')
s3 = boto3.client('s3')

  1. Chức năng nhận diện người nổi tiếng
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. Chức năng lấy hộp giới hạn của người nổi tiếng đã cho:
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. Chức năng thêm một số phần đệm vào hộp giới hạn, vì vậy chúng tôi chụp một số nền xung quanh khuôn mặt
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. Chức năng lưu hình ảnh vào bộ nhớ máy tính xách tay và 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. Sử dụng Python main() chức năng kết hợp các chức năng trước đó để hoàn thành quy trình lưu hình ảnh đã cắt mới của người nổi tiếng của chúng tôi:
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()

Khi bạn chạy khối mã này, bạn có thể thấy rằng chúng tôi đã tìm thấy Werner Vogels và tạo một hình ảnh mới với khuôn mặt của anh ấy ở giữa.

Werner Vogels cắt

Hình ảnh sẽ được lưu vào sổ ghi chép và cũng được tải lên bộ chứa S3.

Đầu ra máy tính xách tay Jupyter

Bạn có thể đưa giải pháp này vào một quy trình làm việc lớn hơn; ví dụ: một công ty xuất bản có thể muốn xuất bản khả năng này như một điểm cuối để định dạng lại và thay đổi kích thước hình ảnh một cách nhanh chóng khi xuất bản các bài báo về người nổi tiếng lên nhiều nền tảng.

Dọn dẹp

Để tránh phát sinh phí trong tương lai, hãy xóa các tài nguyên:

  1. Trên bảng điều khiển SageMaker, hãy chọn sổ ghi chép của bạn và trên Hoạt động menu, chọn Dừng.
  2. Sau khi dừng sổ ghi chép, trên Hoạt động menu, chọn Xóa bỏ.
  3. Trên bảng điều khiển IAM, hãy xóa vai trò thực thi SageMaker mà bạn đã tạo.
  4. Trên bảng điều khiển Amazon S3, xóa hình ảnh đầu vào và mọi tệp đầu ra khỏi bộ chứa S3 của bạn.

Kết luận

Trong bài đăng này, chúng tôi đã trình bày cách chúng tôi có thể sử dụng Amazon Rekognition để tự động hóa tác vụ sửa đổi hình ảnh thủ công để hỗ trợ quy trình công việc truyền thông. Điều này đặc biệt quan trọng trong ngành xuất bản, nơi tốc độ đóng vai trò quan trọng trong việc đưa nội dung mới ra một cách nhanh chóng và trên nhiều nền tảng.

Để biết thêm thông tin về cách làm việc với nội dung phương tiện, hãy tham khảo Media Intelligence trở nên thông minh hơn với Media2Cloud 3.0


Lưu ý

Tự động cắt ảnh với Amazon Rekognition PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Đánh dấu Watkins là một Kiến trúc sư giải pháp trong nhóm Truyền thông và Giải trí. Anh ấy giúp khách hàng tạo ra các giải pháp AI/ML để giải quyết các thách thức kinh doanh của họ bằng cách sử dụng AWS. Anh ấy đã làm việc trên một số dự án AI/ML liên quan đến thị giác máy tính, xử lý ngôn ngữ tự nhiên, cá nhân hóa, ML biên, v.v. Rời xa cuộc sống chuyên nghiệp, anh ấy thích dành thời gian cho gia đình và nhìn hai đứa con nhỏ của mình lớn lên.

Dấu thời gian:

Thêm từ Học máy AWS