Amazon Rekognition ile otomatik görüntü kırpma

Amazon Rekognition ile otomatik görüntü kırpma

Dijital yayıncılar, yeni içeriği olabildiğince hızlı bir şekilde oluşturmak ve yayınlamak için sürekli olarak medya iş akışlarını düzene sokmanın ve otomatikleştirmenin yollarını arıyor.

Birçok yayıncı, makaleleri için kullandıkları geniş bir stok görsel kitaplığına sahiptir. Bu görseller, özellikle yayıncı ünlülerin görsellerine sahip olduğunda, farklı hikayeler için birçok kez tekrar kullanılabilir. Oldukça sık olarak, bir gazetecinin bir sonraki hikayesinde kullanmak üzere arzu ettiği bir ünlüyü bir görüntüden çıkarması gerekebilir. Bu, otomatikleştirilmesi gereken manuel, tekrarlayan bir görevdir. Bazen bir yazar bir ünlünün resmini kullanmak isteyebilir, ancak iki kişiyi içerir ve birincil ünlünün resimden kırpılması gerekir. Diğer zamanlarda, ünlü resimlerinin mobil, sosyal medya veya dijital haberler gibi çeşitli platformlarda yayınlanması için yeniden biçimlendirilmesi gerekebilir. Ek olarak, bir yazarın görüntünün en boy oranını değiştirmesi veya ünlüyü net bir şekilde odaklaması gerekebilir.

Bu yazıda, nasıl kullanılacağını gösteriyoruz Amazon Rekognisyon Görüntü analizi yapmak için. Amazon Rekognition, herhangi bir makine öğrenimi (ML) uzmanlığı olmadan bu yeteneği uygulamalarınıza eklemenizi kolaylaştırır ve nesne algılama, içerik denetimi, yüz algılama ve analizi ve metin ve ünlü tanıma gibi kullanım durumlarını yerine getirmek için çeşitli API'lerle birlikte gelir. bu örnekte kullanın.

The ünlü tanıma özelliği in Amazon Rekognisyon makine öğrenimi kullanarak resimlerdeki ve videolardaki on binlerce tanınmış kişiliği otomatik olarak tanır. Ünlü tanıma, yalnızca söz konusu ünlünün varlığını değil, aynı zamanda görüntü içindeki konumunu da algılayabilir.

Çözüme genel bakış

Bu yazıda, belirli bir ünlünün yüzünü merkezde yakalayan kırpılmış bir görüntüsünü oluşturabilmek için bir fotoğrafı, bir ünlü adını ve çıkan görüntünün en boy oranını nasıl aktarabileceğimizi gösteriyoruz.

İle çalışırken Amazon Rekognition ünlü algılama API'sı, yanıtta birçok öğe döndürülür. Aşağıda bazı temel yanıt öğeleri verilmiştir:

  • MaçGüveni – API davranışını kontrol etmek için kullanılabilecek bir eşleşme güven puanı. Tercih ettiğiniz çalışma noktasını seçmek için uygulamanızda bu puana uygun bir eşik uygulamanızı öneririz. Örneğin, %99'luk bir eşik belirleyerek yanlış pozitifleri ortadan kaldırabilirsiniz ancak bazı potansiyel eşleşmeleri kaçırabilirsiniz.
  • Ad, Kimlik ve URL'ler – Ünlü adı, benzersiz bir Amazon Tanıma Kimliği ve daha fazla bilgi için ünlünün IMDb veya Wikipedia bağlantısı gibi URL'lerin listesi.
  • Sınırlayıcı kutu – Tanınan her ünlü yüzü için dikdörtgen sınırlayıcı kutu konumunun koordinatları.
  • Bilinen Cinsiyet – Tanınan her ünlü için bilinen cinsiyet kimliği.
  • Duygular – Ünlünün yüzünde ifade edilen duygu, örneğin mutlu, üzgün veya kızgın.
  • Poz – Üç eksende yuvarlanma, yunuslama ve yaw kullanarak ünlü yüzünün pozu.
  • Gülüşünüz – Ünlünün gülümseyip gülümsemediği.

Amazon Rekognition'dan gelen API yanıtının bir kısmı aşağıdaki kodu içerir:

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

Bu alıştırmada, aşağıdaki örnek resimde gösterildiği gibi, yüzün konumunu belirlemek için sınırlayıcı kutu öğesinin nasıl kullanılacağını gösteriyoruz. Tüm boyutlar, genel görüntü boyutunun oranları olarak temsil edilir, dolayısıyla yanıttaki sayılar 0-1 arasındadır. Örneğin, örnek API yanıtında sınırlayıcı kutunun genişliği 0.1'dir; bu, yüz genişliğinin görüntünün toplam genişliğinin %10'u olduğu anlamına gelir.

Werner Vogels Sınırlayıcı kutu

Bu sınırlayıcı kutu ile artık yüzün oluşturduğumuz yeni görüntünün kenarları içinde kalmasını sağlamak için mantık kullanabiliyoruz. Yüzü merkezde tutmak için bu sınırlayıcı kutunun etrafına biraz dolgu uygulayabiliriz.

Aşağıdaki bölümlerde, net odakta Werner Vogels ile aşağıdaki kırpılmış görüntü çıktısının nasıl oluşturulacağını gösteriyoruz.

biz bir başlatmak Amazon Adaçayı Yapıcı Bir görüntüyü Amazon Rekognition'a iletmek için kodu çalıştırabileceğiniz ve ardından ünlüye odaklanarak görüntüyü otomatik olarak değiştirebileceğiniz bir Python ortamı sağlayan not defteri.

Werner Vogels kırpılmış

Kod, aşağıdaki üst düzey adımları gerçekleştirir:

  1. Şuraya bir istekte bulunun: recognize_celebrities Verilen resim ve ünlü adıyla API.
  2. Sınırlayıcı kutu bilgileri için yanıtı filtreleyin.
  3. Arka planın bir kısmını yakalayabilmemiz için sınırlayıcı kutuya biraz dolgu ekleyin.

Önkoşullar

Bu izlenecek yol için aşağıdaki ön koşullara sahip olmalısınız:

Örnek resmi yükleyin

Örnek ünlü resminizi S3 klasörünüze yükleyin.

kodu çalıştır

Kodu çalıştırmak için bir SageMaker not defteri kullanıyoruz, ancak Python, pillow ve Boto3 yüklendikten sonra herhangi bir IDE de çalışır. SageMaker not defterinin yanı sıra bir SageMaker not defteri oluşturuyoruz. AWS Kimlik ve Erişim Yönetimi gerekli izinlere sahip (IAM) rolü. Aşağıdaki adımları tamamlayın:

  1. Not defterini oluştur ve adlandır automatic-cropping-celebrity.

SageMaker not defteri oluşturulurken oluşturulan varsayılan yürütme ilkesinin, role Amazon S3 ile etkileşime girmesi için izinler veren basit bir ilkesi vardır.

  1. Güncelleme Resource S3 grup adıyla kısıtlama:
{ "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. çağrı yapabilmek için SageMaker not defteri IAM rolüne eklemek üzere başka bir ilke oluşturun. Ünlüleri Tanıyın API:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rekognition:RecognizeCelebrities", "Resource": "*" } ]
}

IAM izinleri

  1. SageMaker konsolunda, Dizüstü bilgisayar örnekleri Gezinti bölmesinde.
  2. yerleştirmek automatic-cropping-celebrity defter ve seç Jupyter'ı aç.
  3. Klinik yeni ve conda_python3 dizüstü bilgisayarınız için çekirdek olarak.

Jupyter dizüstü bilgisayar

Aşağıdaki adımlar için kod bloklarını Jupyter not defterinize kopyalayın ve seçerek çalıştırın. koşmak.

  1. İlk olarak, yardımcı işlevleri ve kitaplıkları içe aktarıyoruz:
import boto3
from PIL import Image

  1. Değişkenleri ayarla
bucket = '<YOUR_BUCKET_NAME>' file = '<YOUR_FILE_NAME>'
celeb = '<CELEBRITY_NAME>'
aspect_ratio = <ASPECT_RATIO_OF_OUTPUT_IMAGE, e.g. 1 for square>

  1. Bir hizmet istemcisi oluşturun
rek = boto3.client('rekognition')
s3 = boto3.client('s3')

  1. Ünlüleri tanıma işlevi
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. Verilen ünlünün sınırlayıcı kutusunu alma işlevi:
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. Sınırlayıcı kutuya biraz dolgu ekleme işlevi, böylece yüzün etrafında biraz arka plan yakalarız
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. Görüntüyü dizüstü bilgisayar belleğine ve Amazon S3'e kaydetme işlevi
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. Python'u kullanın main() ünlümüzün kırpılmış yeni bir görüntüsünü kaydetme iş akışını tamamlamak için önceki işlevleri birleştirme işlevi:
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()

Bu kod bloğunu çalıştırdığınızda, Werner Vogels'i bulduğumuzu ve yüzü ortada olacak şekilde yeni bir resim oluşturduğumuzu görebilirsiniz.

Werner Vogels kırpılmış

Görüntü not defterine kaydedilecek ve ayrıca S3 klasörüne yüklenecektir.

Jupyter not defteri çıktısı

Bu çözümü bir daha büyük iş akışı; örneğin, bir yayıncılık şirketi, ünlülerin makalelerini birden fazla platformda yayınlarken görüntüleri anında yeniden biçimlendirmek ve yeniden boyutlandırmak için bu özelliği bir uç nokta olarak yayınlamak isteyebilir.

Temizlemek

Gelecekte ücret alınmasını önlemek için kaynakları silin:

  1. SageMaker konsolunda not defterinizi seçin ve İşlemler menü seç dur.
  2. Dizüstü bilgisayar durdurulduktan sonra, İşlemler menü seç Sil.
  3. IAM konsolunda, oluşturduğunuz SageMaker yürütme rolünü silin.
  4. Amazon S3 konsolunda, giriş görüntüsünü ve varsa çıkış dosyalarını S3 klasörünüzden silin.

Sonuç

Bu gönderide, medya iş akışlarını desteklemek için görselleri manuel olarak değiştirme görevini otomatikleştirmek için Amazon Rekognition'ı nasıl kullanabileceğimizi gösterdik. Bu, özellikle yeni içeriği hızla ve birden çok platforma ulaştırmak için hızın önemli olduğu yayıncılık sektöründe önemlidir.

Medya varlıklarıyla çalışma hakkında daha fazla bilgi için bkz. Medya zekası, Media2Cloud 3.0 ile artık daha akıllı


Yazar Hakkında

Amazon Rekognition PlatoBlockchain Data Intelligence ile otomatik görüntü kırpma. Dikey Arama. Ai.

Mark Watkins Medya ve Eğlence ekibinde bir Çözüm Mimarıdır. Müşterilerin AWS kullanarak iş zorluklarını çözen AI/ML çözümleri oluşturmasına yardımcı olur. Bilgisayar görüşü, doğal dil işleme, kişiselleştirme, uçta makine öğrenimi ve daha fazlasıyla ilgili birçok AI/ML projesi üzerinde çalışmaktadır. Profesyonel hayattan uzakta, ailesiyle vakit geçirmeyi ve iki küçüğünün büyümesini izlemeyi seviyor.

Zaman Damgası:

Den fazla AWS Makine Öğrenimi