J'ai essayé d'utiliser l'API Detect Labels d'AWS Rekognition, un service d'apprentissage automatique AWS. Il semble que vous puissiez facilement identifier les objets et les scènes, j'ai donc créé et utilisé une simple application d'extraction d'images.
Avec le service d'apprentissage automatique fourni par AWS, la reconnaissance d'image telle que l'analyse d'image et l'analyse vidéo peut être facilement effectuée. Plus précisément, les API suivantes sont fournies.
L'API DetectLabels vous permet d'étiqueter des milliers d'objets, tels que des voitures, des animaux domestiques et des meubles identifiés à partir d'images, et d'obtenir un score de confiance. Le score de confiance est indiqué par une valeur comprise entre 0 et 100, indiquant la possibilité que le résultat de l'identification soit correct. Extrait de AWS Rekognitoion Black belt
Comme indiqué ci-dessus, il s'agit d'une API qui vous permet d'étiqueter à partir de l'image d'entrée, et vous pouvez également vérifier le résultat d'étiquetage à partir de la console de gestion comme indiqué ci-dessous. Vous pouvez voir que les trois chats sont bien identifiés!
La demande à l'API DetectLabels est la suivante, en utilisant l'image de chat ci-dessus comme exemple d'entrée.
{
"Image": {
"Bytes": "(Chaîne d'octets de l'image d'entrée)"
}
}
En réponse, le JSON suivant est renvoyé. La structure est un tableau d'informations d'étiquette, et les informations d'étiquette comportent les éléments suivants.
{
"Labels": [
{
"Name": "Cat",
"Confidence": 99.57831573486328,
"Instances": [
{
"BoundingBox": {
"Width": 0.369978129863739,
"Height": 0.7246906161308289,
"Left": 0.17922087013721466,
"Top": 0.06359343975782394
},
"Confidence": 92.53639221191406
},
{
"BoundingBox": {
"Width": 0.3405080735683441,
"Height": 0.7218159437179565,
"Left": 0.31681257486343384,
"Top": 0.14111439883708954
},
"Confidence": 90.89508056640625
},
{
"BoundingBox": {
"Width": 0.27936506271362305,
"Height": 0.7497209906578064,
"Left": 0.5879912376403809,
"Top": 0.10250711441040039
},
"Confidence": 90.0565414428711
}
],
"Parents": [
{
"Name": "Mammal"
},
{
"Name": "Animal"
},
{
"Name": "Pet"
}
]
},
{
"Name": "Pet",
"Confidence": 99.57831573486328,
"Instances": [],
"Parents": [
{
"Name": "Animal"
}
]
},
{
"Name": "Kitten",
"Confidence": 99.57831573486328,
"Instances": [],
"Parents": [
{
"Name": "Mammal"
},
{
"Name": "Cat"
},
{
"Name": "Animal"
},
{
"Name": "Pet"
}
]
},
{
"Name": "Animal",
"Confidence": 99.57831573486328,
"Instances": [],
"Parents": []
},
{
"Name": "Mammal",
"Confidence": 99.57831573486328,
"Instances": [],
"Parents": [
{
"Name": "Animal"
}
]
}
],
"LabelModelVersion": "2.0"
}
L'étiquetage est effectué à partir de l'image téléchargée dans le compartiment S3, la plage étiquetée dans l'image est extraite et l'image extraite est sortie vers un autre compartiment S3 avec l'étiquette «nom d'étiquette» = «fiabilité». vient de le faire.
①. Téléchargez le fichier image dans le bucket "rekognition-test-20200530" ②. Le "Test de reconnaissance" Lambda démarre déclenché par l'événement de création de fichier de compartiment ③. Lambda "Recognition Test" appelle l'API DetectLabel en saisissant le fichier image téléchargé sur S3 ④ Le «test de reconnaissance» Lambda est basé sur la réponse de l'API Detect Label.
S3
Nom du godet | Réglage |
---|---|
rekognition-test-20200530 | ・ Création d'un seau - Paramètre de déclenchement pour Lambda "Test de reconnaissance" au moment de l'événement de création de fichier dans S3 |
rekognition-test-20200530-output | ・ Création d'un seau -Ajout d'une stratégie de compartiment pour donner l'autorisation d'écriture au rôle IAM de Lambda "Test de reconnaissance" |
Lambda Layer Puisque Pillow est utilisé pour extraire des images, j'ai enregistré Lambda Layer en me référant à ce blog.
Lambda Exécution: python2.7
lambda_function.py
# coding: utf-8
import json
import boto3
from PIL import Image
import uuid
from io import BytesIO
def lambda_handler(event, context):
#Événement S3 et acquisition d'objets
s3 = boto3.client('s3')
#Nom du bucket où l'événement s'est produit
bucket = event['Records'][0]['s3']['bucket']['name']
#Clé d'objet où l'événement s'est produit
photo = event['Records'][0]['s3']['object']['key']
try:
#Acquisition du fichier image où l'événement S3 s'est produit
target_file_byte_string = s3.get_object(Bucket=bucket, Key=event['Records'][0]['s3']['object']['key'])['Body'].read()
target_img = Image.open(BytesIO(target_file_byte_string))
#Obtenir la largeur et la hauteur du fichier image
img_width, img_height = target_img.size
#Client de reconnaissance
rekognition_client=boto3.client('rekognition')
#Appel d'API DetectLabels et acquisition des résultats d'étiquetage
response = rekognition_client.detect_labels(Image={'S3Object':{'Bucket':bucket,'Name':photo}}, MaxLabels=10)
for label in response['Labels']:
#Extrait une image et la renvoie vers S3 pour une étiquette avec une plage spécifiée.
for bounds in label['Instances']:
box = bounds['BoundingBox']
#Déterminez la plage d'extraction d'image
target_bounds = (box['Left'] * img_width,
box['Top'] * img_height,
(box['Left'] + box['Width']) * img_width,
(box['Top'] + box['Height']) * img_height)
#Extraction d'images
img_crop = target_img.crop(target_bounds)
imgByteArr = BytesIO()
img_crop.save(imgByteArr, format=target_img.format)
#Spécification de la balise d'objet S3
tag = '{0}={1}'.format(label['Name'], str(label['Confidence']))
#Sortie vers S3
s3.put_object(Key='{0}.jpg'.format(uuid.uuid1()),
Bucket='rekognition-test-20200530-output',
Body=imgByteArr.getvalue(),
Tagging=tag)
except Exception as e:
print(e)
return True
Essayez de télécharger l'image d'entrée ci-dessus (le nom du fichier est animal5.jpg) vers S3. Le téléchargement est terminé. Après avoir attendu un moment, l'image extraite a été sortie vers S3! Vérifions une balise de l'image. C'est bien étiqueté. Vérifions le contenu de chaque image sortie vers S3.
012a3206-a2fe-11ea-a36e-3245b8e10005.jpg
0157da26-a2fe-11ea-a36e-3245b8e10005.jpg
01670c80-a2fe-11ea-a36e-3245b8e10005.jpg
J'ai pu l'extraire en toute sécurité!
Présentation d'AWS Rekognitoion AWS Rekognitoion Black belt
Recommended Posts