Automatisk billedbeskæring med Amazon Rekognition

Automatisk billedbeskæring med Amazon Rekognition

Digitale udgivere leder løbende efter måder at strømline og automatisere deres mediearbejdsgange for at generere og udgive nyt indhold så hurtigt som de kan.

Mange forlag har et stort bibliotek af stockbilleder, som de bruger til deres artikler. Disse billeder kan genbruges mange gange til forskellige historier, især når udgiveren har billeder af berømtheder. Ganske ofte kan en journalist være nødt til at beskære en ønsket berømthed fra et billede for at bruge til deres kommende historie. Dette er en manuel, gentagne opgave, der bør automatiseres. Nogle gange vil en forfatter måske bruge et billede af en berømthed, men det indeholder to personer, og den primære berømthed skal beskæres fra billedet. Andre gange skal berømthedsbilleder muligvis omformateres til udgivelse til en række forskellige platforme som mobil, sociale medier eller digitale nyheder. Derudover kan en forfatter muligvis ændre billedformatet eller sætte berømtheden i skarpt fokus.

I dette indlæg viser vi, hvordan du bruger Amazon-anerkendelse at udføre billedanalyse. Amazon Rekognition gør det nemt at tilføje denne funktion til dine applikationer uden maskinlæringsekspertise (ML) og leveres med forskellige API'er til at opfylde use cases såsom objektgenkendelse, indholdsmoderering, ansigtsgenkendelse og -analyse og tekst- og berømthedsgenkendelse, som vi brug i dette eksempel.

genkendelse af berømtheder in Amazon-anerkendelse genkender automatisk titusindvis af kendte personligheder i billeder og videoer ved hjælp af ML. Berømthedsgenkendelse kan ikke blot registrere tilstedeværelsen af ​​den givne berømthed, men også placeringen i billedet.

Oversigt over løsning

I dette indlæg demonstrerer vi, hvordan vi kan sende et billede, et berømthedsnavn og et billedformat for det udsendte billede for at kunne generere et beskåret billede af den givne berømthed, der fanger deres ansigt i midten.

Når man arbejder med Amazon Rekognition celebrity detection API, returneres mange elementer i svaret. Følgende er nogle vigtige reaktionselementer:

  • MatchConfidence – En matchkonfidensscore, der kan bruges til at kontrollere API-adfærd. Vi anbefaler at anvende en passende tærskel for denne score i din ansøgning for at vælge dit foretrukne driftspunkt. For eksempel, ved at indstille en tærskel på 99 %, kan du eliminere falske positive, men kan gå glip af nogle potentielle matches.
  • Navn, id og webadresser – Berømthedsnavnet, et unikt Amazon-genkendelses-id og en liste over URL'er, såsom berømthedens IMDb- eller Wikipedia-link for yderligere information.
  • BoundingBox – Koordinater for det rektangulære afgrænsningsfelts placering for hvert genkendt berømthedsansigt.
  • Kendt Køn – Kendt kønsidentitet for hver anerkendt berømthed.
  • Emotions – Følelser udtrykt på berømthedens ansigt, for eksempel glad, trist eller vred.
  • Positur – Position af berømthedens ansigt ved hjælp af tre akser med rulning, pitch og yaw.
  • Smil – Om berømtheden smiler eller ej.

En del af API-svaret fra Amazon Rekognition inkluderer følgende kode:

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

I denne øvelse demonstrerer vi, hvordan man bruger afgrænsningsramme-elementet til at identificere placeringen af ​​ansigtet, som vist i følgende eksempelbillede. Alle dimensionerne er repræsenteret som forhold mellem den samlede billedstørrelse, så tallene i svaret er mellem 0-1. I eksempel-API-svaret er afgrænsningsrammens bredde 0.1, hvilket indebærer, at ansigtsbredden er 10 % af billedets samlede bredde.

Werner Vogels Bounding box

Med denne afgrænsningsramme er vi nu i stand til at bruge logik til at sikre, at ansigtet forbliver inden for kanterne af det nye billede, vi skaber. Vi kan påføre noget polstring omkring denne afgrænsningsboks for at holde ansigtet i midten.

I de følgende afsnit viser vi, hvordan du opretter følgende beskårne billedoutput med Werner Vogels i skarpt fokus.

Vi lancerer en Amazon SageMaker notebook, som giver et Python-miljø, hvor du kan køre koden for at sende et billede til Amazon Rekognition og derefter automatisk ændre billedet med berømtheden i fokus.

Werner Vogels beskåret

Koden udfører følgende trin på højt niveau:

  1. Lav en anmodning til recognize_celebrities API med det givne billede og kendte navn.
  2. Filtrer svaret for information om afgrænsningsrammen.
  3. Tilføj noget polstring til afgrænsningsboksen, så vi fanger noget af baggrunden.

Forudsætninger

For denne gennemgang skal du have følgende forudsætninger:

Upload eksempelbilledet

Upload dit eksempel på en berømthedsbillede til din S3-bøtte.

Kør koden

For at køre koden bruger vi en SageMaker notesbog, men enhver IDE ville også fungere efter installation af Python, pillow og Boto3. Vi laver en SageMaker notesbog samt AWS identitets- og adgangsstyring (IAM) rolle med de nødvendige tilladelser. Udfør følgende trin:

  1. Opret notesbogen og navngiv det automatic-cropping-celebrity.

Standardudførelsespolitikken, som blev oprettet ved oprettelse af SageMaker-notesbogen, har en simpel politik, der giver rollen tilladelse til at interagere med Amazon S3.

  1. Opdatér Resource begrænsning med S3-spandnavnet:
{ "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. Opret en anden politik for at føje til SageMaker notebook IAM-rollen for at kunne kalde Genkend Berømtheder API'er:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rekognition:RecognizeCelebrities", "Resource": "*" } ]
}

IAM-tilladelser

  1. Vælg på SageMaker-konsollen Notebook-forekomster i navigationsruden.
  2. Find den automatic-cropping-celebrity notesbog og vælg Åbn Jupyter.
  3. Vælg Ny , conda_python3 som kernen til din notesbog.

Jupyter notesbog

For de følgende trin skal du kopiere kodeblokkene ind i din Jupyter notesbog og køre dem ved at vælge Kør.

  1. Først importerer vi hjælpefunktioner og biblioteker:
import boto3
from PIL import Image

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

  1. Opret en serviceklient
rek = boto3.client('rekognition')
s3 = boto3.client('s3')

  1. Funktion til at genkende de kendte
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 for at få afgrænsningsrammen for den givne berømthed:
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 til at tilføje noget polstring til afgrænsningsboksen, så vi fanger noget baggrund omkring ansigtet
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 til at gemme billedet til notebook-lageret og til 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. Brug Python main() funktion til at kombinere de foregående funktioner for at fuldende arbejdsgangen med at gemme et nyt beskåret billede af vores berømthed:
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()

Når du kører denne kodeblok, kan du se, at vi fandt Werner Vogels og skabte et nyt billede med hans ansigt i midten.

Werner Vogels beskåret

Billedet gemmes på notesbogen og uploades også til S3-bøtten.

Jupyter notebook output

Du kan inkludere denne løsning i en større arbejdsgang; for eksempel vil et forlag måske udgive denne mulighed som et slutpunkt til at omformatere og ændre størrelsen på billeder i farten, når de udgiver artikler fra berømtheder på flere platforme.

Gøre rent

For at undgå fremtidige gebyrer skal du slette ressourcerne:

  1. På SageMaker-konsollen skal du vælge din notesbog og på handlinger menu, vælg Stands.
  2. Efter at notesbogen er stoppet, på handlinger menu, vælg Slette.
  3. På IAM-konsollen skal du slette den SageMaker-udførelsesrolle, du har oprettet.
  4. På Amazon S3-konsollen skal du slette inputbilledet og eventuelle outputfiler fra din S3-bøtte.

Konklusion

I dette indlæg viste vi, hvordan vi kan bruge Amazon Rekognition til at automatisere en ellers manuel opgave med at ændre billeder for at understøtte mediearbejdsgange. Dette er især vigtigt inden for forlagsbranchen, hvor hastighed betyder noget for at få frisk indhold ud hurtigt og til flere platforme.

For mere information om at arbejde med medieaktiver, se Medieintelligens er lige blevet smartere med Media2Cloud 3.0


Om forfatteren

Automatic image cropping with Amazon Rekognition PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Mark Watkins er en Solutions Architect inden for medie- og underholdningsteamet. Han hjælper kunder med at skabe AI/ML-løsninger, der løser deres forretningsmæssige udfordringer ved hjælp af AWS. Han har arbejdet på adskillige AI/ML-projekter relateret til computersyn, naturlig sprogbehandling, personalisering, ML på kanten og mere. Væk fra det professionelle liv elsker han at tilbringe tid med sin familie og se sine to små vokse op.

Tidsstempel:

Mere fra AWS maskinindlæring