Automatikus képkivágás az Amazon Rekognition segítségével

Automatikus képkivágás az Amazon Rekognition segítségével

A digitális kiadók folyamatosan keresik a módokat médiamunkafolyamataik egyszerűsítésére és automatizálására annak érdekében, hogy a lehető leggyorsabban hozzanak létre és tegyenek közzé új tartalmat.

Sok kiadónak nagy könyvtára van a cikkeiben felhasznált stock képekből. Ezeket a képeket többször is fel lehet használni különböző történetekhez, különösen akkor, ha a kiadónak vannak hírességek képei. Gyakran előfordulhat, hogy egy újságírónak ki kell vágnia a kívánt hírességet egy képből, hogy felhasználja a következő történetéhez. Ez egy manuális, ismétlődő feladat, amelyet automatizálni kell. Előfordulhat, hogy a szerző egy híresség képét szeretné használni, de az két személyt tartalmaz, és az elsődleges hírességet ki kell vágni a képből. Más esetekben előfordulhat, hogy a hírességek képeit újra kell formázni, hogy különféle platformokon, például mobilon, közösségi médián vagy digitális híreken közzétegyék őket. Ezenkívül előfordulhat, hogy a szerzőnek módosítania kell a kép méretarányát, vagy éles fókuszba kell helyeznie a hírességet.

Ebben a bejegyzésben bemutatjuk, hogyan kell használni Amazon felismerés képelemzés elvégzésére. Az Amazon Rekognition segítségével könnyedén hozzáadhatja ezt a képességet az alkalmazásaihoz gépi tanulási (ML) szakértelem nélkül, és különféle API-kkal rendelkezik, amelyek olyan használati esetek kielégítésére szolgálnak, mint például az objektumészlelés, a tartalom moderálása, az arcfelismerés és -elemzés, valamint a szöveg- és hírességfelismerés. használja ebben a példában.

A híresség felismerő funkció in Amazon felismerés az ML segítségével automatikusan felismer több tízezer jól ismert személyiséget a képeken és videókon. A celebfelismerés nemcsak az adott híresség jelenlétét, hanem a képen belüli helyét is képes felismerni.

A megoldás áttekintése

Ebben a posztban bemutatjuk, hogyan adhatunk át egy fotót, egy híresség nevét és egy képarányt a kimenő képhez, hogy az adott hírességről vágott képet tudjunk generálni, a középpontban megörökítve az arcukat.

Amikor a Amazon Rekognition hírességészlelési API, sok elemet ad vissza a válasz. Íme néhány kulcsfontosságú válaszelem:

  • MatchConfidence – Egyezési megbízhatósági pontszám, amely az API viselkedésének szabályozására használható. Javasoljuk, hogy alkalmazzon egy megfelelő küszöbértéket erre a pontszámra az alkalmazásában, hogy kiválaszthassa a kívánt működési pontot. Például egy 99%-os küszöb beállításával kiküszöbölheti a hamis pozitívakat, de kihagyhat néhány lehetséges egyezést.
  • Név, Id és URL-ek – A híresség neve, egyedi Amazon Rekognition azonosítója és URL-ek listája, például a híresség IMDb- vagy Wikipédia-hivatkozása további információkért.
  • BoundingBox – A téglalap alakú határolódoboz helyének koordinátái minden felismert híresség arcához.
  • KnownGender – Ismert nemi identitás minden elismert híresség számára.
  • Érzelmek – A híresség arcán kifejezett érzelem, például boldog, szomorú vagy dühös.
  • Póz – A híresség arcának pózolása, három tengely (gurulás, dőlésszög és elhajlás) használatával.
  • Mosolyog – Akár mosolyog a híresség, akár nem.

Az Amazon Rekognition API-válaszának egy része a következő kódot tartalmazza:

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

Ebben a gyakorlatban bemutatjuk, hogyan lehet a határoló doboz elemet használni az arc helyének azonosítására, amint az a következő példaképen látható. Az összes méret a teljes képméret arányaként jelenik meg, így a válaszban szereplő számok 0 és 1 között vannak. Például a minta API-válaszban a határolókeret szélessége 0.1, ami azt jelenti, hogy az arcszélesség a kép teljes szélességének 10%-a.

Werner Vogels Határoló doboz

Ezzel a határolókerettel most már logikát is használhatunk annak biztosítására, hogy az arc az általunk létrehozott új kép szélein belül maradjon. A határolódoboz köré párnázhatunk, hogy az arc a közepén maradjon.

A következő részekben bemutatjuk, hogyan hozható létre a következő, kivágott képkimenet Werner Vogels éles fókuszban.

Elindítunk egy Amazon SageMaker notebook, amely egy Python-környezetet biztosít, ahol futtathatja a kódot, hogy egy képet továbbítson az Amazon Rekognition számára, majd automatikusan módosítsa a képet a hírességgel a fókuszban.

Werner Vogels vágott

A kód a következő magas szintű lépéseket hajtja végre:

  1. Kérjen a recognize_celebrities API a megadott képpel és híresség nevével.
  2. Szűrje le a választ a határolókeret információira.
  3. Adjon hozzá néhány kitöltést a határoló dobozhoz, hogy a háttér egy részét rögzítsük.

Előfeltételek

Ehhez az áttekintéshez a következő előfeltételekkel kell rendelkeznie:

Töltse fel a mintaképet

Töltsd fel a híresség mintaképét az S3 tárolóedbe.

Futtassa a kódot

A kód futtatásához SageMaker notebookot használunk, de bármelyik IDE működne a Python, a pillow és a Boto3 telepítése után is. Készítünk egy SageMaker notebookot, valamint a AWS Identity and Access Management (IAM) szerepkört a szükséges engedélyekkel. Hajtsa végre a következő lépéseket:

  1. Készítse el a jegyzetfüzetet és nevezd el automatic-cropping-celebrity.

Az alapértelmezett végrehajtási házirend, amelyet a SageMaker notebook létrehozásakor hoztak létre, egy egyszerű szabályzattal rendelkezik, amely engedélyeket ad a szerepkörnek az Amazon S3-mal való interakcióhoz.

  1. Frissítse a Resource megszorítás az S3 csoport nevével:
{ "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. Hozzon létre egy másik házirendet, amelyet hozzáadhat a SageMaker jegyzetfüzet IAM szerepköréhez, hogy meghívhassa a Ismerd fel a hírességeket API-k:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rekognition:RecognizeCelebrities", "Resource": "*" } ]
}

IAM engedélyek

  1. A SageMaker konzolon válassza a lehetőséget Notebook példányok a navigációs ablaktáblában.
  2. Keresse meg a automatic-cropping-celebrity notebook és válassza ki Nyissa meg a Jupytert.
  3. A pop-art design, négy időzóna kijelzése egyszerre és méretének arányai azok az érvek, amelyek a NeXtime Time Zones-t kiváló választássá teszik. Válassza a Új és a conda_python3 mint a notebook kernelje.

Jupyter jegyzetfüzet

A következő lépésekhez másolja a kódblokkokat a Jupyter notebookba, és futtassa őket a kiválasztással futás.

  1. Először is segédfunkciókat és könyvtárakat importálunk:
import boto3
from PIL import Image

  1. Állítsa be a változókat
bucket = '<YOUR_BUCKET_NAME>' file = '<YOUR_FILE_NAME>'
celeb = '<CELEBRITY_NAME>'
aspect_ratio = <ASPECT_RATIO_OF_OUTPUT_IMAGE, e.g. 1 for square>

  1. Hozzon létre egy szolgáltatási klienst
rek = boto3.client('rekognition')
s3 = boto3.client('s3')

  1. Funkció a hírességek felismerésére
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. Funkció az adott híresség határolódobozának lekéréséhez:
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. Funkció, amellyel némi párnázást ad a határoló dobozhoz, így rögzítünk egy kis hátteret az arc körül
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. Funkció, amellyel a képet mentheti a notebook tárhelyére és az Amazon S3-ra
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. Használja a Python-t main() funkció az előző funkciók kombinálásához, hogy befejezze a munkafolyamatot a hírességünkről készült új vágott kép mentéséhez:
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()

Amikor futtatja ezt a kódblokkot, láthatja, hogy megtaláltuk Werner Vogelst, és létrehoztunk egy új képet az arcával a közepén.

Werner Vogels vágott

A kép mentésre kerül a notebookba, és feltöltődik az S3 vödörbe is.

Jupyter notebook kimenet

Ezt a megoldást a nagyobb munkafolyamat; Például egy kiadó cég ezt a képességet végpontként szeretné közzétenni a képek menet közbeni újraformázásához és átméretezéséhez, amikor hírességekről szóló cikkeket tesz közzé több platformon.

Takarítás

A jövőbeni költségek elkerülése érdekében törölje a forrásokat:

  1. A SageMaker konzolon válassza ki a notebookját, majd a Hozzászólások menüben válasszon megáll.
  2. Miután a notebook leállt, a Hozzászólások menüben válasszon töröl.
  3. Az IAM-konzolon törölje a létrehozott SageMaker végrehajtási szerepkört.
  4. Az Amazon S3 konzolon törölje a bemeneti képet és a kimeneti fájlokat az S3 tárolóból.

Következtetés

Ebben a bejegyzésben megmutattuk, hogyan tudjuk az Amazon Rekognition segítségével automatizálni egy egyébként manuálisan végrehajtott képmódosítási feladatot a média munkafolyamatainak támogatása érdekében. Ez különösen fontos a kiadói ágazatban, ahol a sebesség számít a friss tartalom gyors és több platformra való eljuttatásában.

A médiaeszközökkel kapcsolatos további információkért lásd: A Media2Cloud 3.0 segítségével a média intelligencia még okosabb lett


A szerzőről

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

Mark Watkins megoldástervező a Média és Szórakoztatás csapaton belül. Segít az ügyfeleknek olyan AI/ML megoldások létrehozásában, amelyek az AWS segítségével megoldják üzleti kihívásaikat. Számos AI/ML projekten dolgozott, amelyek a számítógépes látással, a természetes nyelvi feldolgozással, a személyre szabással, az ML szélén és még sok mással kapcsolatosak. A szakmai élettől távol szeret a családjával tölteni az időt, és nézni, ahogy két kicsike felnő.

Időbélyeg:

Még több AWS gépi tanulás