Samodejno obrezovanje slike z Amazon Rekognition

Samodejno obrezovanje slike z Amazon Rekognition

Digitalni založniki nenehno iščejo načine za racionalizacijo in avtomatizacijo svojih medijskih delovnih tokov, da bi ustvarili in objavili novo vsebino čim hitreje.

Mnogi založniki imajo veliko knjižnico slik, ki jih uporabljajo za svoje članke. Te slike je mogoče večkrat uporabiti za različne zgodbe, zlasti če ima založnik slike slavnih. Precej pogosto mora novinar iz slike izrezati želeno slavno osebnost, da jo uporabi za svojo prihajajočo zgodbo. To je ročno, ponavljajoče se opravilo, ki bi ga bilo treba avtomatizirati. Včasih bo avtor morda želel uporabiti sliko slavne osebe, vendar vsebuje dve osebi in je treba primarno slavno osebo obrezati s slike. Včasih bo morda treba slike slavnih preoblikovati za objavo na različnih platformah, kot so mobilne naprave, družbeni mediji ali digitalne novice. Poleg tega bo avtor morda moral spremeniti razmerje stranic slike ali jasno izostriti slavno osebo.

V tej objavi prikazujemo, kako uporabljati Amazonsko ponovno vžiganje za analizo slike. Amazon Rekognition olajša dodajanje te zmožnosti vašim aplikacijam brez strokovnega znanja o strojnem učenju (ML) in prihaja z različnimi API-ji za izpolnjevanje primerov uporabe, kot so zaznavanje predmetov, moderiranje vsebine, zaznavanje in analiza obrazov ter prepoznavanje besedila in slavnih, ki jih uporabite v tem primeru.

O funkcija prepoznavanja zvezdnikov in Amazonsko ponovno vžiganje samodejno prepozna več deset tisoč znanih osebnosti na slikah in videoposnetkih z uporabo ML. Prepoznavanje znanih oseb lahko zazna ne samo prisotnost dane slavne osebe, temveč tudi lokacijo na sliki.

Pregled rešitve

V tej objavi prikazujemo, kako lahko posredujemo fotografijo, ime slavne osebe in razmerje stranic za izpisano sliko, da lahko ustvarimo obrezano sliko dane slavne osebe, ki zajame njihov obraz v sredini.

Pri delu z API za odkrivanje slavnih Amazon Rekognition, je v odgovoru vrnjenih veliko elementov. Sledi nekaj ključnih elementov odziva:

  • MatchConfidence – Rezultat zaupanja ujemanja, ki se lahko uporablja za nadzor vedenja API-ja. Priporočamo, da za ta rezultat v aplikaciji uporabite ustrezen prag, da izberete želeno delovno točko. Če na primer nastavite prag 99 %, lahko odpravite lažne pozitivne rezultate, vendar lahko zgrešite nekaj potencialnih ujemanj.
  • Ime, ID in URL-ji – Ime slavne osebe, edinstven ID Amazon Rekognition in seznam URL-jev, kot je IMDb slavne osebe ali povezava do Wikipedije za dodatne informacije.
  • BoundingBox – Koordinate lokacije pravokotnega omejevalnega okvirja za vsak prepoznan slavni obraz.
  • ZnanSpol – Znana spolna identiteta za vsako priznano slavno osebnost.
  • Čustva – Čustva, izražena na obrazu slavne osebe, na primer veselje, žalost ali jeza.
  • Pose – Poza obraza slavne osebe z uporabo treh osi zasuka, naklona in odklona.
  • Smile – Ne glede na to, ali je zvezdnik nasmejan ali ne.

Del odgovora API-ja Amazon Rekognition vključuje naslednjo kodo:

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

V tej vaji prikazujemo, kako uporabiti element omejevalne škatle za identifikacijo lokacije obraza, kot je prikazano na naslednji sliki vzorca. Vse dimenzije so predstavljene kot razmerja celotne velikosti slike, tako da so številke v odgovoru med 0–1. Na primer, v vzorčnem odgovoru API-ja je širina omejevalnega polja 0.1, kar pomeni, da je širina obraza 10 % celotne širine slike.

Omejitveni okvir Wernerja Vogelsa

S tem omejevalnim poljem lahko zdaj uporabimo logiko, da zagotovimo, da obraz ostane znotraj robov nove slike, ki jo ustvarimo. Okoli tega omejevalnega polja lahko uporabimo nekaj oblazinjenja, da ostane obraz v sredini.

V naslednjih razdelkih pokažemo, kako ustvariti naslednji izhod obrezane slike z Wernerjem Vogelsom v jasni ostrini.

Zaženemo an Amazon SageMaker notebook, ki ponuja okolje Python, kjer lahko zaženete kodo za prenos slike v Amazon Rekognition in nato samodejno spremenite sliko s slavno osebnostjo v središču.

Werner Vogels obrezan

Koda izvaja naslednje korake na visoki ravni:

  1. Pošljite zahtevo na recognize_celebrities API z dano sliko in imenom slavne osebe.
  2. Filtrirajte odgovor za informacije o omejevalnem polju.
  3. Dodajte nekaj oblazinjenja v omejevalni okvir, da bomo zajeli nekaj ozadja.

Predpogoji

Za ta korak morate imeti naslednje predpogoje:

Naložite vzorčno sliko

Naložite svojo vzorčno sliko zvezdnika v svoje vedro S3.

Zaženite kodo

Za zagon kode uporabljamo prenosni računalnik SageMaker, vendar bi kateri koli IDE deloval tudi po namestitvi Pythona, pillow in Boto3. Ustvarimo prenosni računalnik SageMaker kot tudi AWS upravljanje identitete in dostopa (IAM) z zahtevanimi dovoljenji. Izvedite naslednje korake:

  1. Ustvarite zvezek in ga poimenujte automatic-cropping-celebrity.

Privzeti pravilnik izvajanja, ki je bil ustvarjen pri ustvarjanju prenosnega računalnika SageMaker, ima preprost pravilnik, ki daje vlogi dovoljenja za interakcijo z Amazon S3.

  1. Posodobite Resource omejitev z imenom vedra 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. Ustvarite drug pravilnik, ki ga želite dodati vlogi IAM prenosnika SageMaker, da boste lahko poklicali RecognizeCelebrities API-ji:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rekognition:RecognizeCelebrities", "Resource": "*" } ]
}

IAM dovoljenja

  1. Na konzoli SageMaker izberite Primeri prenosnih računalnikov v podoknu za krmarjenje.
  2. Poiščite automatic-cropping-celebrity zvezek in izberi Odprite Jupyter.
  3. Izberite Novo in conda_python3 kot jedro za vaš prenosni računalnik.

Jupyterjev zvezek

Za naslednje korake kopirajte kodne bloke v svoj Jupyter prenosnik in jih zaženite tako, da izberete Run.

  1. Najprej uvozimo pomožne funkcije in knjižnice:
import boto3
from PIL import Image

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

  1. Ustvari odjemalca storitve
rek = boto3.client('rekognition')
s3 = boto3.client('s3')

  1. Funkcija prepoznavanja slavnih
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. Funkcija za pridobitev omejevalnega polja dane slavne osebe:
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. Funkcija za dodajanje oblazinjenja v omejevalni okvir, tako da zajamemo nekaj ozadja okoli obraza
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. Funkcija za shranjevanje slike v shrambo prenosnega računalnika in 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. Uporabite Python main() funkcijo za združevanje prejšnjih funkcij za dokončanje poteka dela shranjevanja nove obrezane slike naše slavne osebe:
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()

Ko zaženete ta kodni blok, lahko vidite, da smo našli Wernerja Vogelsa in ustvarili novo sliko z njegovim obrazom v sredini.

Werner Vogels obrezan

Slika bo shranjena v prenosni računalnik in tudi naložena v vedro S3.

Izhod za prenosni računalnik Jupyter

To rešitev lahko vključite v a večji potek dela; na primer, založniško podjetje bi morda želelo objaviti to zmožnost kot končno točko za sprotno preoblikovanje in spreminjanje velikosti slik pri objavljanju člankov slavnih na več platformah.

Čiščenje

Če se želite izogniti prihodnjim stroškom, izbrišite vire:

  1. Na konzoli SageMaker izberite svoj prenosni računalnik in na Proces izberite meni stop.
  2. Ko je prenosni računalnik ustavljen, na Proces izberite meni Brisanje.
  3. Na konzoli IAM izbrišite izvršilno vlogo SageMaker, ki ste jo ustvarili.
  4. Na konzoli Amazon S3 izbrišite vhodno sliko in vse izhodne datoteke iz vedra S3.

zaključek

V tej objavi smo pokazali, kako lahko uporabimo Amazon Rekognition za avtomatizacijo sicer ročnega opravila spreminjanja slik za podporo potekom dela medijev. To je še posebej pomembno v založništvu, kjer je hitrost pomembna pri hitrem prenosu sveže vsebine na več platform.

Za več informacij o delu z medijskimi sredstvi glejte Medijska inteligenca je postala pametnejša z Media2Cloud 3.0


O Author

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

Mark Watkins je arhitekt rešitev v skupini za medije in razvedrilo. Strankam pomaga pri ustvarjanju rešitev AI/ML, ki z uporabo AWS rešujejo njihove poslovne izzive. Delal je na več projektih AI/ML, povezanih z računalniškim vidom, obdelavo naravnega jezika, personalizacijo, ML na robu in več. Stran od poklicnega življenja rad preživlja čas s svojo družino in opazuje svoja malčka, kako odraščata.

Časovni žig:

Več od Strojno učenje AWS