Automaattinen kuvien rajaus Amazon Rekognitionin avulla

Automaattinen kuvien rajaus Amazon Rekognitionin avulla

Digitaaliset julkaisijat etsivät jatkuvasti tapoja virtaviivaistaa ja automatisoida mediatyönkulkuaan luodakseen ja julkaistakseen uutta sisältöä mahdollisimman nopeasti.

Monilla kustantajilla on suuri kirjasto arkistokuvia, joita he käyttävät artikkeleissaan. Näitä kuvia voidaan käyttää useita kertoja eri tarinoihin, varsinkin kun kustantajalla on kuvia julkkiksista. Usein toimittajan on ehkä leikattava kuvasta haluttu julkkis käyttääkseen tulevaa tarinaansa. Tämä on manuaalinen, toistuva tehtävä, joka tulisi automatisoida. Joskus kirjoittaja saattaa haluta käyttää julkkiksen kuvaa, mutta se sisältää kaksi henkilöä ja ensisijainen julkkis on rajattava kuvasta. Toisinaan julkkiskuvat on ehkä muotoiltava uudelleen, jotta ne voidaan julkaista useilla alustoilla, kuten mobiilissa, sosiaalisessa mediassa tai digitaalisissa uutisissa. Lisäksi kirjoittajan on ehkä muutettava kuvan kuvasuhdetta tai tarkennettava julkkis.

Tässä viestissä esittelemme, miten sitä käytetään Amazonin tunnistus tehdä kuva-analyysiä. Amazon Rekognitionin avulla on helppo lisätä tämä ominaisuus sovelluksiisi ilman koneoppimisen (ML) asiantuntemusta, ja sen mukana tulee erilaisia ​​sovellusliittymiä, jotka täyttävät käyttötapaukset, kuten kohteen havaitseminen, sisällön valvonta, kasvojen havaitseminen ja analysointi sekä tekstin ja julkkisten tunnistus. käytä tässä esimerkissä.

- julkkisten tunnistusominaisuus in Amazonin tunnistus tunnistaa automaattisesti kymmeniä tuhansia tunnettuja henkilöitä kuvista ja videoista ML:n avulla. Julkkiksen tunnistus voi havaita paitsi tietyn julkkiksen läsnäolon myös sijainnin kuvassa.

Katsaus ratkaisuun

Tässä viestissä näytämme, kuinka voimme välittää kuvan, julkkiksen nimen ja kuvasuhteen tulostetulle kuvalle, jotta voimme luoda rajatun kuvan tietystä julkkissta, joka vangitsee heidän kasvonsa keskelle.

Kun työskentelet Amazon Rekognition julkkistunnistussovellusliittymä, monet elementit palautetaan vastauksessa. Seuraavassa on joitain keskeisiä vastauselementtejä:

  • MatchConfidence – Ottelun luotettavuuspisteet, joita voidaan käyttää API-käyttäytymisen ohjaamiseen. Suosittelemme käyttämään sopivaa kynnystä tälle pistemäärälle hakemuksessasi valitaksesi haluamasi toimintapisteen. Esimerkiksi asettamalla kynnysarvoksi 99 %, voit poistaa vääriä positiivisia tuloksia, mutta voit jättää huomiotta jotkin mahdolliset osumat.
  • Nimi, tunnus ja URL-osoitteet – Julkkiksen nimi, ainutlaatuinen Amazon Rekognition ID ja URL-osoitteiden luettelo, kuten julkkiksen IMDb- tai Wikipedia-linkki lisätietoja varten.
  • BoundingBox – Suorakaiteen muotoisen rajoituslaatikon sijainnin koordinaatit jokaiselle tunnistetulle julkkiskasvolle.
  • KnownGender – Jokaisen tunnetun julkkiksen tunnettu sukupuoli-identiteetti.
  • Tunteet – Tunnelma julkkiksen kasvoilla, esimerkiksi iloinen, surullinen tai vihainen.
  • Aiheuttaa – Julkkiksen kasvojen asento käyttämällä kolmea akselia: kallistus, nousu ja kierto.
  • Hymyillä – Hymyileekö julkkis vai ei.

Osa Amazon Rekognitionin API-vastauksesta sisältää seuraavan koodin:

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

Tässä harjoituksessa näytämme, kuinka rajauslaatikkoelementtiä käytetään kasvojen sijainnin tunnistamiseen, kuten seuraavassa esimerkkikuvassa näkyy. Kaikki mitat esitetään kuvan kokonaiskoon suhteina, joten vastauksen numerot ovat välillä 0-1. Esimerkiksi esimerkki API-vastauksessa rajoituslaatikon leveys on 0.1, mikä tarkoittaa, että kasvojen leveys on 10 % kuvan kokonaisleveydestä.

Werner Vogels Rajauslaatikko

Tämän rajoituslaatikon avulla voimme nyt käyttää logiikkaa varmistaaksemme, että kasvot pysyvät luomamme uuden kuvan reunojen sisällä. Voimme lisätä pehmusteita tämän rajoituslaatikon ympärille, jotta kasvot pysyvät keskellä.

Seuraavissa osissa näytämme, kuinka luodaan seuraava rajattu kuvatulostus Werner Vogelsin avulla terävästi.

Käynnistämme an Amazon Sage Maker muistikirja, joka tarjoaa Python-ympäristön, jossa voit suorittaa koodin kuvan välittämiseksi Amazon Rekognitionille ja muokata kuvaa sitten automaattisesti julkkiksen keskittyessä.

Werner Vogels rajattu

Koodi suorittaa seuraavat korkean tason vaiheet:

  1. Tee pyyntö osoitteeseen recognize_celebrities API, jossa on annettu kuva ja julkkisnimi.
  2. Suodata vastaus rajauslaatikon tiedoille.
  3. Lisää täyttöä rajoitusruutuun siten, että kaappaamme osan taustasta.

Edellytykset

Tätä kävelyä varten sinulla tulisi olla seuraavat edellytykset:

Lataa mallikuva

Lataa näytejulkkiskuvasi S3-ämpäriisi.

Suorita koodi

Käytämme koodin suorittamiseen SageMaker-muistikirjaa, mutta mikä tahansa IDE toimisi myös Pythonin, tyynyn ja Boto3:n asennuksen jälkeen. Luomme SageMaker-muistikirjan sekä AWS-henkilöllisyyden ja käyttöoikeuksien hallinta (IAM) rooli vaadituilla käyttöoikeuksilla. Suorita seuraavat vaiheet:

  1. Luo muistikirja ja nimeä se automatic-cropping-celebrity.

Oletussuorituskäytännössä, joka luotiin SageMaker-muistikirjaa luotaessa, on yksinkertainen käytäntö, joka antaa roolille oikeudet olla vuorovaikutuksessa Amazon S3:n kanssa.

  1. Päivitä Resource rajoitus S3-alueen nimellä:
{ "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. Luo toinen käytäntö lisätäksesi SageMaker-muistikirjan IAM-rooliin, jotta voit kutsua Tunnista julkkikset API:t:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rekognition:RecognizeCelebrities", "Resource": "*" } ]
}

IAM-oikeudet

  1. Valitse SageMaker-konsolissa Notebook-esiintymät navigointipaneelissa.
  2. Etsi automatic-cropping-celebrity muistikirja ja valitse Avaa Jupyter.
  3. Valita Uusi ja conda_python3 muistikirjasi ytimenä.

Jupyter-muistikirja

Seuraavia vaiheita varten kopioi koodilohkot Jupyter-muistikirjaan ja suorita ne valitsemalla ajaa.

  1. Ensin tuomme aputoimintoja ja kirjastoja:
import boto3
from PIL import Image

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

  1. Luo palveluasiakas
rek = boto3.client('rekognition')
s3 = boto3.client('s3')

  1. Toiminto julkkisten tunnistamiseen
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. Toiminto tietyn julkkiksen rajaruudun saamiseksi:
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. Toiminto lisätä pehmustetta rajoitusruutuun, jotta voimme tallentaa taustaa kasvojen ympäriltä
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. Toiminto tallentaa kuvan kannettavan tietokoneen tallennustilaan ja Amazon S3:een
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. Käytä Pythonia main() toiminto yhdistää edelliset toiminnot ja viimeistellä työnkulun, jossa tallennetaan uusi rajattu kuva julkkistamme:
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()

Kun suoritat tämän koodilohkon, voit nähdä, että löysimme Werner Vogelsin ja loimme uuden kuvan hänen kasvonsa keskellä.

Werner Vogels rajattu

Kuva tallennetaan muistikirjaan ja ladataan myös S3-ämpäriin.

Jupyter kannettavan tietokoneen lähtö

Voit sisällyttää tämän ratkaisun kohtaan a suurempi työnkulku; Kustannusyritys saattaa esimerkiksi haluta julkaista tämän ominaisuuden päätepisteenä kuvien uudelleenmuotoiluun ja koon muuttamiseen lennossa, kun julkkisartikkeleita julkaistaan ​​useille alustoille.

Puhdistaa

Poista resurssit seuraavien maksujen välttämiseksi:

  1. Valitse SageMaker-konsolissa muistikirjasi ja Toiminnot valikosta, valitse stop.
  2. Kun muistikirja on pysäytetty, Toiminnot valikosta, valitse Poista.
  3. Poista IAM-konsolissa luomasi SageMaker-suoritusrooli.
  4. Poista Amazon S3 -konsolissa syöttökuva ja mahdolliset tulostustiedostot S3-alueeltasi.

Yhteenveto

Tässä viestissä näytimme, kuinka voimme käyttää Amazon Rekognitionia automatisoidaksemme muuten manuaalisen kuvan muokkaamisen mediatyönkulkujen tukemiseksi. Tämä on erityisen tärkeää julkaisuteollisuudessa, jossa nopeus on tärkeä, kun tuoretta sisältöä saadaan nopeasti ja useille alustoille.

Lisätietoja mediaresurssien käsittelystä on kohdassa Mediaäly on juuri älykkäämpi Media2Cloud 3.0:n avulla


kirjailijasta

Automaattinen kuvien rajaus Amazon Rekognition PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.

Mark Watkins on Media and Entertainment -tiimin ratkaisuarkkitehti. Hän auttaa asiakkaita luomaan AI/ML-ratkaisuja, jotka ratkaisevat heidän liiketoiminnan haasteensa AWS:n avulla. Hän on työskennellyt useiden AI/ML-projektien parissa, jotka liittyvät tietokonenäköön, luonnollisen kielen käsittelyyn, personointiin, ML reunaan ja muihin. Ammattielämän ulkopuolella hän rakastaa viettää aikaa perheensä kanssa ja katsella kahden pienen lapsensa kasvamista.

Aikaleima:

Lisää aiheesta AWS-koneoppiminen