Ich habe versucht, die Detect Labels-API von AWS Rekognition, einem AWS-Dienst für maschinelles Lernen, zu verwenden. Es scheint, dass Sie Objekte und Szenen leicht identifizieren können, daher habe ich eine einfache Bildextraktionsanwendung erstellt und verwendet.
Mit dem von AWS bereitgestellten maschinellen Lernservice können Bilderkennungen wie Bildanalysen und Videoanalysen problemlos durchgeführt werden. Insbesondere werden die folgenden APIs bereitgestellt.
Mit der DetectLabels-API können Sie Tausende von Objekten wie Autos, Haustiere und Möbel kennzeichnen, die anhand von Bildern identifiziert wurden, und eine Vertrauensbewertung erhalten. Die Konfidenzbewertung wird durch einen Wert zwischen 0 und 100 angezeigt, was auf die Möglichkeit hinweist, dass das Identifikationsergebnis korrekt ist. Zitiert aus AWS Rekognitoion Black Belt
Wie oben erwähnt, handelt es sich um eine API, mit der Sie das Eingabebild beschriften und das Beschriftungsergebnis auch über die Verwaltungskonsole überprüfen können, wie unten gezeigt. Sie können sehen, dass die drei Katzen gut identifiziert sind!
Die Anforderung an die DetectLabels-API lautet wie folgt, wobei das obige Katzenbild als Eingabebeispiel verwendet wird.
{
"Image": {
"Bytes": "(Byte-Zeichenfolge des Eingabebildes)"
}
}
Als Antwort wird der folgende JSON zurückgegeben. Die Struktur besteht aus einem Array von Etiketteninformationen, und die Etiketteninformationen enthalten die folgenden Elemente.
{
"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"
}
Die Beschriftung erfolgt aus dem in den S3-Bucket hochgeladenen Bild, der beschriftete Bereich im Bild wird extrahiert und das extrahierte Bild wird in einen anderen S3-Bucket mit dem Tag "label name" = "Zuverlässigkeit" ausgegeben. habe es gerade geschafft.
① Laden Sie die Bilddatei in den Bucket "rekognition-test-20200530" hoch. ② Lambda "Erkennungstest" wird durch das Ereignis zur Erstellung der Bucket-Datei ausgelöst ③ Lambda "Recognition Test" ruft die DetectLabel-API auf, indem die in S3 hochgeladene Bilddatei eingegeben wird ④ Lambda "Erkennungstest" basiert auf der Antwort der Detect Label API.
S3
Eimername | Aufbau |
---|---|
rekognition-test-20200530 | ・ Einen Eimer erstellen -Trigger-Einstellung für Lambda "Erkennungstest" zum Zeitpunkt des Dateierstellungsereignisses in S3 |
rekognition-test-20200530-output | ・ Einen Eimer erstellen - Bucket-Richtlinie hinzugefügt, um der IAM-Rolle des Lambda-Erkennungstests eine Schreibberechtigung zu erteilen. |
Lambda Layer Da Pillow zum Extrahieren von Bildern verwendet wird, habe ich Lambda Layer unter Bezugnahme auf diesen Blog registriert.
Lambda Laufzeit: 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):
#Ereignis S3 und Objekterfassung
s3 = boto3.client('s3')
#Bucket-Name, in dem das Ereignis aufgetreten ist
bucket = event['Records'][0]['s3']['bucket']['name']
#Objektschlüssel, in dem das Ereignis aufgetreten ist
photo = event['Records'][0]['s3']['object']['key']
try:
#Erfassung der Bilddatei, in der das S3-Ereignis aufgetreten ist
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))
#Holen Sie sich die Breite und Höhe der Bilddatei
img_width, img_height = target_img.size
#Erkennungs-Client
rekognition_client=boto3.client('rekognition')
#DetectLabels API-Aufruf und Erfassung der Beschriftungsergebnisse
response = rekognition_client.detect_labels(Image={'S3Object':{'Bucket':bucket,'Name':photo}}, MaxLabels=10)
for label in response['Labels']:
#Extrahiert ein Bild und gibt es für eine Beschriftung mit einem bestimmten Bereich an S3 aus.
for bounds in label['Instances']:
box = bounds['BoundingBox']
#Bestimmen Sie den Bildextraktionsbereich
target_bounds = (box['Left'] * img_width,
box['Top'] * img_height,
(box['Left'] + box['Width']) * img_width,
(box['Top'] + box['Height']) * img_height)
#Bildextraktion
img_crop = target_img.crop(target_bounds)
imgByteArr = BytesIO()
img_crop.save(imgByteArr, format=target_img.format)
#S3-Objekt-Tag-Spezifikation
tag = '{0}={1}'.format(label['Name'], str(label['Confidence']))
#Ausgabe an 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
Versuchen Sie, das obige Eingabebild (Dateiname ist animal5.jpg) in S3 hochzuladen. Der Upload ist abgeschlossen. Nach einer Weile des Wartens wurde das extrahierte Bild an S3 ausgegeben! Lassen Sie uns ein Tag des Bildes überprüfen. Es ist gut markiert. Lassen Sie uns den Inhalt jeder Bildausgabe an S3 überprüfen.
012a3206-a2fe-11ea-a36e-3245b8e10005.jpg
0157da26-a2fe-11ea-a36e-3245b8e10005.jpg
01670c80-a2fe-11ea-a36e-3245b8e10005.jpg
Ich konnte es sicher extrahieren!
AWS Rekognitoion Overview AWS Rekognitoion Black belt
Recommended Posts