Ritaglio automatico delle immagini con Amazon Rekognition

Ritaglio automatico delle immagini con Amazon Rekognition

Gli editori digitali sono continuamente alla ricerca di modi per semplificare e automatizzare i propri flussi di lavoro multimediali al fine di generare e pubblicare nuovi contenuti il ​​più rapidamente possibile.

Molti editori dispongono di una vasta libreria di immagini stock che utilizzano per i propri articoli. Queste immagini possono essere riutilizzate molte volte per storie diverse, specialmente quando l'editore ha immagini di celebrità. Molto spesso, un giornalista potrebbe dover ritagliare una celebrità desiderata da un'immagine da utilizzare per la sua prossima storia. Questa è un'attività manuale e ripetitiva che dovrebbe essere automatizzata. A volte, un autore potrebbe voler utilizzare l'immagine di una celebrità, ma contiene due persone e la celebrità principale deve essere ritagliata dall'immagine. Altre volte, le immagini delle celebrità potrebbero dover essere riformattate per essere pubblicate su una varietà di piattaforme come dispositivi mobili, social media o notizie digitali. Inoltre, un autore potrebbe dover modificare le proporzioni dell'immagine o mettere a fuoco la celebrità.

In questo post, dimostriamo come utilizzare Rekognition di Amazon per eseguire l'analisi delle immagini. Amazon Rekognition semplifica l'aggiunta di questa funzionalità alle tue applicazioni senza alcuna esperienza di machine learning (ML) e viene fornito con varie API per soddisfare casi d'uso come il rilevamento di oggetti, la moderazione dei contenuti, il rilevamento e l'analisi dei volti e il riconoscimento di testo e celebrità, che noi utilizzare in questo esempio.

Il funzione di riconoscimento delle celebrità in Rekognition di Amazon riconosce automaticamente decine di migliaia di personaggi noti in immagini e video utilizzando ML. Il riconoscimento delle celebrità può rilevare non solo la presenza della celebrità in questione, ma anche la posizione all'interno dell'immagine.

Panoramica della soluzione

In questo post, dimostriamo come possiamo passare una foto, il nome di una celebrità e le proporzioni dell'immagine generata per poter generare un'immagine ritagliata della celebrità data catturando il suo volto al centro.

Quando si lavora con API di rilevamento delle celebrità di Amazon Rekognition, molti elementi vengono restituiti nella risposta. Di seguito sono riportati alcuni elementi chiave della risposta:

  • Partita Fiducia – Un punteggio di affidabilità della corrispondenza che può essere utilizzato per controllare il comportamento dell'API. Ti consigliamo di applicare una soglia adeguata a questo punteggio nella tua applicazione per scegliere il tuo punto operativo preferito. Ad esempio, impostando una soglia del 99%, puoi eliminare i falsi positivi ma potresti perdere alcune potenziali corrispondenze.
  • Nome, ID e URL – Il nome della celebrità, un ID Amazon Rekognition univoco e un elenco di URL come il collegamento IMDb o Wikipedia della celebrità per ulteriori informazioni.
  • Rettangolo di selezione – Coordinate della posizione del riquadro di delimitazione rettangolare per ciascun volto di celebrità riconosciuto.
  • Genere conosciuto – Identità di genere nota per ogni celebrità riconosciuta.
  • Emozioni – Emozione espressa sul volto della celebrità, ad esempio felice, triste o arrabbiata.
  • Posa – Posa del volto della celebrità, utilizzando tre assi di rollio, beccheggio e imbardata.
  • Sorriso – Se la celebrità sta sorridendo o meno.

Parte della risposta API di Amazon Rekognition include il seguente codice:

{ "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 questo esercizio dimostriamo come utilizzare l'elemento del riquadro di delimitazione per identificare la posizione del volto, come mostrato nell'immagine di esempio seguente. Tutte le dimensioni sono rappresentate come rapporti della dimensione complessiva dell'immagine, quindi i numeri nella risposta sono compresi tra 0 e 1. Ad esempio, nella risposta API di esempio, la larghezza del riquadro di delimitazione è 0.1, il che implica che la larghezza della faccia è il 10% della larghezza totale dell'immagine.

Scatola di delimitazione di Werner Vogels

Con questo riquadro di delimitazione, ora siamo in grado di usare la logica per assicurarci che il volto rimanga all'interno dei bordi della nuova immagine che creiamo. Possiamo applicare un po' di padding attorno a questo riquadro di delimitazione per mantenere la faccia al centro.

Nelle sezioni seguenti, mostriamo come creare il seguente output di immagine ritagliata con Werner Vogels a fuoco nitido.

Lanciamo un Amazon Sage Maker notebook, che fornisce un ambiente Python in cui è possibile eseguire il codice per passare un'immagine ad Amazon Rekognition e quindi modificare automaticamente l'immagine con la celebrità in primo piano.

Werner Vogels ritagliato

Il codice esegue i seguenti passaggi di alto livello:

  1. Fai una richiesta al recognize_celebrities API con l'immagine e il nome della celebrità specificati.
  2. Filtrare la risposta per le informazioni del riquadro di delimitazione.
  3. Aggiungi un po 'di riempimento al riquadro di delimitazione in modo tale da catturare parte dello sfondo.

Prerequisiti

Per questa procedura dettagliata, è necessario disporre dei seguenti prerequisiti:

Carica l'immagine di esempio

Carica la tua immagine campione di celebrità nel tuo bucket S3.

Esegui il codice

Per eseguire il codice, utilizziamo un notebook SageMaker, tuttavia qualsiasi IDE funzionerebbe anche dopo aver installato Python, pillow e Boto3. Creiamo un taccuino SageMaker così come il Gestione dell'identità e dell'accesso di AWS (IAM) con le autorizzazioni richieste. Completa i seguenti passaggi:

  1. Crea il taccuino e nominalo automatic-cropping-celebrity.

La policy di esecuzione predefinita, che è stata creata durante la creazione del notebook SageMaker, ha una policy semplice che concede al ruolo le autorizzazioni per interagire con Amazon S3.

  1. Aggiorna il Resource vincolo con il nome del bucket 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. Crea un'altra policy da aggiungere al ruolo IAM del notebook SageMaker per poter chiamare il Riconosci le celebrità API:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rekognition:RecognizeCelebrities", "Resource": "*" } ]
}

Autorizzazioni IAM

  1. Sulla console di SageMaker, scegli Istanze di notebook nel pannello di navigazione.
  2. individuare il automatic-cropping-celebrity taccuino e scegli Apri Jupyter.
  3. Scegli New ed conda_python3 come kernel per il tuo notebook.

Notebook Jupyter

Per i passaggi seguenti, copia i blocchi di codice nel notebook Jupyter ed eseguili scegliendo Correre.

  1. Innanzitutto, importiamo le funzioni e le librerie di supporto:
import boto3
from PIL import Image

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

  1. Creare un client di servizio
rek = boto3.client('rekognition')
s3 = boto3.client('s3')

  1. Funzione per riconoscere le celebrità
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. Funzione per ottenere il riquadro di delimitazione della data celebrità:
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. Funzione per aggiungere un po' di riempimento al riquadro di delimitazione, quindi catturiamo uno sfondo attorno al viso
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. Funzione per salvare l'immagine nello storage del notebook e 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. Usa il Python main() funzione per combinare le funzioni precedenti per completare il flusso di lavoro di salvataggio di una nuova immagine ritagliata della nostra celebrità:
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()

Quando esegui questo blocco di codice, puoi vedere che abbiamo trovato Werner Vogels e creato una nuova immagine con la sua faccia al centro.

Werner Vogels ritagliato

L'immagine verrà salvata nel notebook e caricata anche nel bucket S3.

Uscita notebook Jupyter

Potresti includere questa soluzione in un file flusso di lavoro più ampio; ad esempio, una casa editrice potrebbe voler pubblicare questa funzionalità come endpoint per riformattare e ridimensionare le immagini al volo durante la pubblicazione di articoli di celebrità su più piattaforme.

Pulire

Per evitare di incorrere in addebiti futuri, eliminare le risorse:

  1. Sulla console SageMaker, seleziona il tuo notebook e sul Azioni menù, scegliere Fermare.
  2. Dopo che il notebook è stato fermato, sul Azioni menù, scegliere Elimina.
  3. Sulla console IAM, elimina il ruolo di esecuzione SageMaker che hai creato.
  4. Sulla console Amazon S3, elimina l'immagine di input e tutti i file di output dal tuo bucket S3.

Conclusione

In questo post, abbiamo mostrato come utilizzare Amazon Rekognition per automatizzare un'attività altrimenti manuale di modifica delle immagini per supportare i flussi di lavoro multimediali. Ciò è particolarmente importante nel settore dell'editoria, dove la velocità è importante per ottenere nuovi contenuti rapidamente e su più piattaforme.

Per ulteriori informazioni sull'utilizzo delle risorse multimediali, fare riferimento a L'intelligenza multimediale è appena diventata più intelligente con Media2Cloud 3.0


L'autore

Ritaglio automatico delle immagini con Amazon Rekognition PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Marco Watkins è un architetto di soluzioni all'interno del team Media e intrattenimento. Aiuta i clienti a creare soluzioni AI/ML che risolvono le loro sfide aziendali utilizzando AWS. Ha lavorato a diversi progetti AI/ML relativi a visione artificiale, elaborazione del linguaggio naturale, personalizzazione, ML all'edge e altro ancora. Lontano dalla vita professionale, ama passare il tempo con la sua famiglia e guardare crescere i suoi due piccoli.

Timestamp:

Di più da Apprendimento automatico di AWS