Automatisches Zuschneiden von Bildern mit Amazon Rekognition

Automatisches Zuschneiden von Bildern mit Amazon Rekognition

Digitale Verlage suchen ständig nach Möglichkeiten, ihre Medien-Workflows zu rationalisieren und zu automatisieren, um neue Inhalte so schnell wie möglich zu generieren und zu veröffentlichen.

Viele Verlage haben eine große Bibliothek mit Stock-Bildern, die sie für ihre Artikel verwenden. Diese Bilder können viele Male für verschiedene Geschichten wiederverwendet werden, insbesondere wenn der Herausgeber Bilder von Prominenten hat. Ziemlich oft muss ein Journalist einen gewünschten Prominenten aus einem Bild herausschneiden, um ihn für seine kommende Geschichte zu verwenden. Dies ist eine manuelle, sich wiederholende Aufgabe, die automatisiert werden sollte. Manchmal möchte ein Autor vielleicht ein Bild eines Prominenten verwenden, aber es enthält zwei Personen und der Hauptstar muss aus dem Bild herausgeschnitten werden. In anderen Fällen müssen Bilder von Prominenten möglicherweise neu formatiert werden, um sie auf einer Vielzahl von Plattformen wie Mobilgeräten, sozialen Medien oder digitalen Nachrichten zu veröffentlichen. Außerdem muss ein Autor möglicherweise das Seitenverhältnis des Bilds ändern oder den Prominenten gestochen scharf in den Fokus rücken.

In diesem Beitrag demonstrieren wir die Verwendung Amazon-Anerkennung Bildanalyse durchzuführen. Amazon Rekognition erleichtert das Hinzufügen dieser Funktion zu Ihren Anwendungen ohne Fachwissen im Bereich maschinelles Lernen (ML) und wird mit verschiedenen APIs geliefert, um Anwendungsfälle wie Objekterkennung, Inhaltsmoderation, Gesichtserkennung und -analyse sowie Text- und Prominentenerkennung zu erfüllen, die wir in diesem Beispiel verwenden.

Das Funktion zur Erkennung von Prominenten in Amazon-Anerkennung erkennt mithilfe von ML automatisch zehntausende bekannte Persönlichkeiten in Bildern und Videos. Die Promi-Erkennung kann nicht nur die Anwesenheit des jeweiligen Prominenten erkennen, sondern auch den Ort innerhalb des Bildes.

Lösungsübersicht

In diesem Beitrag demonstrieren wir, wie wir ein Foto, den Namen eines Prominenten und ein Seitenverhältnis für das ausgegebene Bild übergeben können, um ein zugeschnittenes Bild des jeweiligen Prominenten zu erstellen, das sein Gesicht in der Mitte erfasst.

Bei der Arbeit mit der Amazon Rekognition-Promi-Erkennungs-API, werden viele Elemente in der Antwort zurückgegeben. Im Folgenden sind einige wichtige Antwortelemente aufgeführt:

  • MatchConfidence – Ein Match-Confidence-Score, der zur Steuerung des API-Verhaltens verwendet werden kann. Wir empfehlen, in Ihrer Anwendung einen geeigneten Schwellenwert auf diese Punktzahl anzuwenden, um Ihren bevorzugten Betriebspunkt auszuwählen. Wenn Sie beispielsweise einen Schwellenwert von 99 % festlegen, können Sie Fehlalarme eliminieren, verpassen jedoch möglicherweise einige potenzielle Übereinstimmungen.
  • Name, ID und URLs – Der Name des Prominenten, eine eindeutige Amazon Rekognition ID und eine Liste von URLs wie die IMDb oder der Wikipedia-Link des Prominenten für weitere Informationen.
  • Begrenzungsbox – Koordinaten der Position des rechteckigen Begrenzungsrahmens für jedes erkannte Promi-Gesicht.
  • Bekanntes Geschlecht – Bekannte Geschlechtsidentität für jeden anerkannten Prominenten.
  • Emotionen – Auf dem Gesicht des Prominenten ausgedrückte Emotionen, z. B. glücklich, traurig oder wütend.
  • Pose – Pose des Promi-Gesichts mit drei Roll-, Nick- und Gierachsen.
  • Lächeln – Ob der Promi lächelt oder nicht.

Ein Teil der API-Antwort von Amazon Rekognition enthält den folgenden Code:

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

In dieser Übung demonstrieren wir, wie Sie das Begrenzungsrahmenelement verwenden, um die Position des Gesichts zu identifizieren, wie im folgenden Beispielbild gezeigt. Alle Dimensionen werden als Verhältnisse der gesamten Bildgröße dargestellt, sodass die Zahlen in der Antwort zwischen 0 und 1 liegen. In der Beispiel-API-Antwort beträgt die Breite des Begrenzungsrahmens beispielsweise 0.1, was impliziert, dass die Gesichtsbreite 10 % der Gesamtbreite des Bilds beträgt.

Werner Vogels Bounding-Box

Mit diesem Begrenzungsrahmen können wir jetzt logisch sicherstellen, dass das Gesicht innerhalb der Ränder des neu erstellten Bildes bleibt. Wir können etwas Polsterung um diesen Begrenzungsrahmen herum anwenden, um das Gesicht in der Mitte zu halten.

In den folgenden Abschnitten zeigen wir, wie Sie die folgende beschnittene Bildausgabe mit scharfem Fokus von Werner Vogels erstellen.

Wir starten eine Amazon Sage Maker notebook, das eine Python-Umgebung bereitstellt, in der Sie den Code ausführen können, um ein Bild an Amazon Rekognition zu übergeben, und das Bild dann automatisch mit dem Prominenten im Fokus ändern können.

Werner Vogels abgeschnitten

Der Code führt die folgenden allgemeinen Schritte aus:

  1. Stellen Sie eine Anfrage an die recognize_celebrities API mit dem angegebenen Bild und Namen des Prominenten.
  2. Filtern Sie die Antwort nach den Begrenzungsrahmeninformationen.
  3. Fügen Sie dem Begrenzungsrahmen etwas Polsterung hinzu, sodass wir einen Teil des Hintergrunds erfassen.

Voraussetzungen:

Für diese exemplarische Vorgehensweise sollten Sie die folgenden Voraussetzungen erfüllen:

Laden Sie das Beispielbild hoch

Laden Sie Ihr Beispiel-Promi-Bild in Ihren S3-Bucket hoch.

Führen Sie den Code aus

Um den Code auszuführen, verwenden wir ein SageMaker-Notebook, aber jede IDE würde auch nach der Installation von Python, Pillow und Boto3 funktionieren. Wir erstellen ein SageMaker-Notizbuch sowie die AWS Identity and Access Management and (IAM)-Rolle mit den erforderlichen Berechtigungen. Führen Sie die folgenden Schritte aus:

  1. Erstellen Sie das Notizbuch und nenne es automatic-cropping-celebrity.

Die standardmäßige Ausführungsrichtlinie, die beim Erstellen des SageMaker-Notebooks erstellt wurde, verfügt über eine einfache Richtlinie, die der Rolle Berechtigungen zur Interaktion mit Amazon S3 erteilt.

  1. Aktualisieren Sie die Resource Einschränkung mit dem S3-Bucket-Namen:
{ "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. Erstellen Sie eine weitere Richtlinie, die der SageMaker-Notebook-IAM-Rolle hinzugefügt werden soll, um die aufrufen zu können Erkennen Sie Prominente API:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rekognition:RecognizeCelebrities", "Resource": "*" } ]
}

IAM-Berechtigungen

  1. Wählen Sie in der SageMaker-Konsole Notebook-Instanzen im Navigationsbereich.
  2. Suchen Sie den automatic-cropping-celebrity notizbuch und wählen Öffne Jupyter.
  3. Auswählen Neu und conda_python3 als Kernel für Ihr Notebook.

Jupyter Notizbuch

Kopieren Sie für die folgenden Schritte die Codeblöcke in Ihr Jupyter-Notebook und führen Sie sie aus, indem Sie auswählen Führen Sie.

  1. Zuerst importieren wir Hilfsfunktionen und Bibliotheken:
import boto3
from PIL import Image

  1. Variablen setzen
bucket = '<YOUR_BUCKET_NAME>' file = '<YOUR_FILE_NAME>'
celeb = '<CELEBRITY_NAME>'
aspect_ratio = <ASPECT_RATIO_OF_OUTPUT_IMAGE, e.g. 1 for square>

  1. Erstellen Sie einen Dienstclient
rek = boto3.client('rekognition')
s3 = boto3.client('s3')

  1. Funktion, um die Prominenten zu erkennen
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. Funktion zum Abrufen des Begrenzungsrahmens des angegebenen Prominenten:
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. Funktion, um dem Begrenzungsrahmen etwas Polsterung hinzuzufügen, sodass wir etwas Hintergrund um das Gesicht herum erfassen
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. Funktion zum Speichern des Bildes im Notebook-Speicher und in 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. Verwenden Sie die Python main() Funktion zum Kombinieren der vorhergehenden Funktionen, um den Arbeitsablauf zum Speichern eines neuen zugeschnittenen Bildes unserer Berühmtheit abzuschließen:
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()

Wenn Sie diesen Codeblock ausführen, können Sie sehen, dass wir Werner Vogels gefunden und ein neues Bild mit seinem Gesicht in der Mitte erstellt haben.

Werner Vogels abgeschnitten

Das Bild wird im Notebook gespeichert und auch in den S3-Bucket hochgeladen.

Jupyter-Notebook-Ausgabe

Sie könnten diese Lösung in a aufnehmen größerer Arbeitsablauf; Beispielsweise möchte ein Verlag diese Funktion möglicherweise als Endpunkt veröffentlichen, um Bilder im Handumdrehen neu zu formatieren und zu skalieren, wenn Artikel von Prominenten auf mehreren Plattformen veröffentlicht werden.

Aufräumen

Löschen Sie die Ressourcen, um zukünftige Gebühren zu vermeiden:

  1. Wählen Sie in der SageMaker-Konsole Ihr Notebook und auf der Aktionen Menü, wählen Sie Stoppen.
  2. Nachdem das Notebook gestoppt wurde, auf der Aktionen Menü, wählen Sie Löschen.
  3. Löschen Sie in der IAM-Konsole die von Ihnen erstellte SageMaker-Ausführungsrolle.
  4. Löschen Sie auf der Amazon S3-Konsole das Eingabebild und alle Ausgabedateien aus Ihrem S3-Bucket.

Zusammenfassung

In diesem Beitrag haben wir gezeigt, wie wir Amazon Rekognition verwenden können, um eine ansonsten manuelle Aufgabe der Änderung von Bildern zur Unterstützung von Medien-Workflows zu automatisieren. Dies ist besonders wichtig in der Verlagsbranche, wo es auf Geschwindigkeit ankommt, um neue Inhalte schnell und auf mehreren Plattformen herauszubringen.

Weitere Informationen zum Arbeiten mit Medienobjekten finden Sie unter Medienintelligenz ist mit Media2Cloud 3.0 noch intelligenter geworden


Über den Autor

Automatischer Bildzuschnitt mit Amazon Rekognition PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Mark Watkins ist ein Lösungsarchitekt im Medien- und Unterhaltungsteam. Er hilft Kunden bei der Erstellung von KI/ML-Lösungen, die ihre geschäftlichen Herausforderungen mit AWS lösen. Er hat an mehreren KI/ML-Projekten im Zusammenhang mit Computer Vision, Natural Language Processing, Personalisierung, ML at the Edge und mehr gearbeitet. Abseits des Berufslebens verbringt er am liebsten Zeit mit seiner Familie und sieht seinen beiden Kleinen beim Aufwachsen zu.

Zeitstempel:

Mehr von AWS Maschinelles Lernen