[PYTHON] [AWS Hands-on] Erstellen wir einen Promi-Identifikationsdienst mit einer serverlosen Architektur!

Über diesen Artikel

Nachtrag: Folienversion veröffentlicht

--Die Slide-Version dieses praktischen Materials ist auf dem Speaker Deck ** verfügbar. ――Ich denke, die Folienversion hat ein besseres Design und ist leichter zu sehen. ――Dieser Artikel von Qiita hat andererseits den Vorteil, dass Sie den Quellcode kopieren und einfügen können. ――Ich denke, es wäre gut, wenn sowohl die Folienversion als auch die Qiita-Version zusammen verwendet würden. - https://speakerdeck.com/hayate_h/awshanzuon-sabaresuakitekutiyade-you-ming-ren-shi-bie-sabisuwozuo-rou -  

Einführung (Übersicht)

Was zu machen

-Verwenden Sie Amazon Rekognition (Image Analysis AI) Und erstellen Sie eine Promi-Identifikations-API.

Operationsbild

―― Bereiten Sie zum Beispiel ein Bild von Ken Watanabe vor, einem berühmten Schauspieler, der stolz auf Japan in der Welt ist, und laden Sie es in die diesmal erstellte KI.

Architekturbeschreibung

  1. Laden Sie über das API-Gateway ein Promi-Image vom Client-PC hoch.
  2. Wenn die Bilddatei empfangen wird, wird die Lambda-Funktion aktiviert.
  3. Senden Sie innerhalb der Lambda-Funktion die Bilddatei an die Funktion Recogn_celebrities von Amazon Rekognition, um die Berühmtheit im Bild zu identifizieren.
  4. Formatieren Sie die abgerufenen Promi-Informationen für die Ausgabe und geben Sie sie über API Gateway zurück.
  5. Das Identifikationsergebnis wird im aufrufenden Browser angezeigt. image.png

Informationen zu AWS-Diensten

Einführung in den zu verwendenden AWS-Service

――Wir stellen kurz die drei diesmal verwendeten Dienste vor. ―― Lassen Sie uns mit der Idee fortfahren, "sich daran zu gewöhnen, anstatt zu lernen". image.png

AWS Glossar: Was ist "Serverlos"?

—— Dienste und Architekturen, bei denen Benutzer den Server nicht kennen müssen. --Hinweis: Dies bedeutet nicht, dass der Server überhaupt nicht vorhanden ist. Der Server wird von AWS verwaltet.

AWS Glossar: Was ist ein "Managed Service"?

――Es ist ein Service, den AWS für (einen Teil) des Betriebsmanagements übernimmt. ――Der Inhalt und Umfang des Betriebsmanagements, für das Sie verantwortlich sind, hängt vom jeweiligen Service ab. In vielen Fällen bieten wir jedoch nicht nur "regelmäßige Backups erstellen", sondern auch "automatisch skalieren, wenn der Zugriff zunimmt". .. ――Wenn der Umfang des Betriebsmanagements breit ist und die Benutzer fast keinen Aufwand betreiben, wird er häufig als „vollständig verwalteter Dienst“ bezeichnet. ――Selbst wenn es "verwaltet" wird, ist es nicht immer "serverlos". image.png

Entwicklungsverfahren

Anmelden

Überprüfen Sie Region und Sprache

[Ergänzung] So ändern Sie die Region

--Drücken Sie auf den Ortsnamen oben rechts auf dem Bildschirm und wählen Sie "Asien-Pazifik (Tokio) ap-nordost-1". image.png

[Ergänzung] So ändern Sie die Sprache

--Drücken Sie die Sprache unten links auf dem Bildschirm und wählen Sie "Japanisch". image.png

Erstellen einer Lambda-Funktion

Erstellen einer neuen Lambda-Funktion

--Wenn der Lambda-Bildschirm geöffnet wird, klicken Sie auf die Schaltfläche "Funktion erstellen". image.png

――Ich schreibe den Code, der von nun an funktioniert.

Verwendung der Lambda-Funktion

―― Schreiben wir zunächst einfachen Python-Code, um zu erfahren, wie Lambda funktioniert. image.png

lambda_function.py


def lambda_handler(event, context):
    a = 'Pen'
    b = 'Pineapple'
    c = 'Apple'
    x = a + b + c + a
    return {
        'statusCode': 200,
        'body': x
    }

--Klicken Sie oben rechts auf "Test".

--Klicken Sie auf Details, um die Ergebnisse der Funktionsausführung zu erweitern. ――Hier ist „body“ „PenPineappleApplePen“, die von Ihnen erwartete Ausgabe. image.png

Lambda-Funktionen bearbeiten

IAM-Rolle ändern (Autorität)

--Wählen Sie oben auf dem Lambda-Bildschirm "Einstellungen" image.png

--Wählen Sie "Bearbeiten" unter "Grundeinstellungen" am unteren Rand des Bildschirms "Einstellungen". image.png

Lambda-Funktionsaktualisierung

Code zum Einfügen

lambda_function.py


import boto3
import base64
import logging
import traceback

#Logger-Einstellungen
logger = logging.getLogger()
logger.setLevel(logging.INFO)

#Erstellen Sie eine Erkennungsinstanz
rekognition = boto3.client('rekognition')

# lambda_Definition der Handlerfunktion (Hauptlogik)
def lambda_handler(event, context):
    logger.info(f'Received event = {event}')
    
    #Da die Binärdaten im Base64-Format codiert empfangen werden, werden sie in den Bytetyp decodiert.
    received_body = base64.b64decode(event['body-json'])
    
    #Schließt von AWS angegebene Dateiinformationen aus (Byte-Zeichenfolge)'\r\n'Körperinformationen der Dateien, die vom 4. und den folgenden hochgeladen wurden)
    images  = received_body.split(b'\r\n',4)
    image   = images[4]
    
    #Übergeben Sie die erfassten Bildinformationen im Blob-Format an Rekognition, um die Berühmtheit zu identifizieren
    response = rekognition.recognize_celebrities(
        Image={'Bytes': image}
    )
    logger.info(f'Rekognition response = {response}')
    
    try:
        #Extrahieren Sie die Zuverlässigkeit des Prominentennamens aus der Erkennungsantwort und antworten Sie dem API-Aufrufer.
        label   = response['CelebrityFaces'][0]
        name    = label['Name']
        conf    = round(label['Face']['Confidence'])
        output  = f'He/She is {name} with {conf}% confidence.'
        logger.info(f'API response = {output}')
        return output
        
    except IndexError as e:
        #Wenn Sie aus der Antwort von Rekognition keine Informationen zu Prominenten erhalten, bitten Sie sie, ein anderes Foto zu verwenden.
        logger.info(f"Coudn't detect celebrities in the Photo. Exception = {e}")
        logger.info(traceback.format_exc())
        return "Couldn't detect celebrities in the uploaded photo. Please upload another photo."

Codebeschreibung (# Teil, der nicht in den Kommentar geschrieben werden konnte)

--Erste Zeile boto3 importieren

Hinzufügen von API Gateway

―― Von hier aus werden wir API Gateway und Lambda verbinden. image.png

--Klicken Sie oben rechts auf dem Bildschirm auf "API erstellen". image.png

--Klicken Sie auf die Schaltfläche "Erstellen" der REST-API. image.png

--API wird mit "Ressourcen" x "Methoden" entwickelt.

--Nächste erstellen Sie eine Methode. Wählen Sie nach Auswahl der Ressource Aktionen → Methode erstellen. image.png

--Wählen Sie "POST" aus dem Pulldown-Menü und drücken Sie die "Check Button". image.png

--Wählen Sie im Integrationstyp "Lambda-Funktion", wählen Sie "<< Name >> -rekognition-handson", das zuvor in der Lambda-Funktion erstellt wurde, und klicken Sie dann auf die Schaltfläche "Speichern". image.png

--Wählen Sie "Integrationsanforderung". image.png

--Wählen Sie "Einstellungen" auf der linken Seite des Bildschirms und klicken Sie auf "Binären Medientyp hinzufügen" im Element "Binylmedientyp" am unteren Rand des Bildschirms "Einstellungen". image.png

--Geben Sie multipart / form-data ein und klicken Sie auf die Schaltfläche" Save Save Changes ". image.png

--Wählen Sie "Ressourcen" im linken Bereich des Bildschirms und wählen Sie dann "API bereitstellen" unter "Aktionen" oben auf dem Bildschirm. image.png

Erstellen einer HTML-Datei

index.html


<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>Promi-Anerkennung KI zum Anfassen</title>
    </head>
    <body>
        <p>Die Erkennung von Prominenten erfolgt mit Amazon Rekognition, einer Bildidentifizierungs-KI!</p>
        <form action="****API-Gateway-URL einfügen****" enctype="multipart/form-data" method="POST">
            <input type="file" name="Wählen Sie eine Fotodatei aus" />
            <input type="submit" name="hochladen"/>
        </form>
    </body>
</html>

--Öffnen Sie die erstellte Index.html in Ihrem Browser. (Wählen Sie eine Datei aus und ziehen Sie sie per Drag & Drop in den Browser, um sie zu öffnen.) image.png

Funktionsprüfung

―― Zum Beispiel versuchen wir es mit "Watabe of the World", einem Komiker (?), Auf den Japan in der Welt stolz ist.

--Wählen Sie eine Datei und klicken Sie auf "Senden" ... --"Er / Sie ist Ken Watabe mit 100% Selbstvertrauen."Wird angezeigt!

Aufräumen

Entfernen Sie das API-Gateway

--Wählen Sie auf dem API-Gateway-Bildschirm den erstellten "<< Name >> - api-handson" aus. image.png

--Wählen Sie auf dem API-Gateway-Bildschirm den erstellten "<< Name >> - api-handson" aus. image.png

--Wählen Sie mit "Ressource" im linken Bereich des Bildschirms "API löschen" aus der Aktion. image.png

CloudWatch-Protokoll löschen

--Wählen Sie auf dem Listenbildschirm "<< Name >> -rekognition-handson". image.png

--Wählen Sie oben auf dem Bildschirm "Überwachung" und klicken Sie auf die Schaltfläche "CloudWatch-Protokoll anzeigen". image.png

IAM-Rolle löschen

Entfernung der Lambda-Funktion

Zusatzinformationen

Gebühr

Serviceklassifizierung Einstufung Gebühr Ergänzung
Gebühren für die Datenkommunikation Inn zu AWS 0.000USD/GB
Raus aus AWS 0.114USD/GB Erste 1GB-10TB
CloudWatch Protokollsammlung 0.760USD/GB
Protokoll speichern 0.033USD/GB
Lambda Rechnungsstellung anfordern 0.20USD/1 Million
Abrechnung der Ausführungszeit 0.0000002083USD
/128MB,100 Millisekunden
API Gateway REST API 4.25USD/1 Million Erste 303,3 Millionen Anrufe eingegangen
Rekognition Image 0.0013USD/1 Bild Erste 1 Million

Referenzmaterialien / Dokumente

Recommended Posts

[AWS Hands-on] Erstellen wir einen Promi-Identifikationsdienst mit einer serverlosen Architektur!
Lassen Sie uns einen Web-Chat mit WebSocket mit AWS serverless (Python) durchführen!
So erstellen Sie mit AWS Lambda eine serverlose API für maschinelles Lernen
Erstellen wir mit Python eine kostenlose Gruppe
Erstellen Sie einen Webdienst mit Docker + Flask
Erstellen Sie ein privates Repository mit AWS CodeArtifact
Erstellen wir eine Chat-Funktion mit Vue.js + AWS Lambda + Dynamo DB [AWS-Einstellungen]
Ich habe versucht, einen URL-Verkürzungsdienst mit AWS CDK serverlos zu machen
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
Lassen Sie uns ein PRML-Diagramm mit Python, Numpy und matplotlib erstellen.
Erstellen Sie eine Homepage mit Django
Erstellen Sie ein Verzeichnis mit Python
Lassen Sie uns mit Pylearn2 eine Drei-Wege-KI erstellen - Modell speichern und laden -
Regelmäßiges Serverless Scraping mit AWS Lambda + Scrapy Teil 1
[AWS] API mit API Gateway + Lambda erstellen
Lassen Sie uns eine GUI mit Python erstellen.
Machen wir einen Spot Sale Service 2
Machen wir einen Blockbruch mit wxPython
Erstellen Sie eine virtuelle Umgebung mit Python!
Machen wir einen Spot Sale Service 1
Erstellen Sie einen SlackBot-Dienst für Pepper
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Machen wir mit xCAT einen Spacon
Erstellen Sie einen Poisson-Stepper mit numpy.random
Machen wir einen Spot Sale Service 3
Erstellen Sie mit Django einen Datei-Uploader
Erstellen Sie einen Twitter-BOT-Dienst mit der GAE / P + Tweepy + RIOT-API! (Teil 1)
Erstellen Sie einen Twitter-BOT-Dienst mit der GAE / P + Tweepy + RIOT-API! (Teil 2)
[AWS] Erstellen Sie mit CodeStar eine Python Lambda-Umgebung und führen Sie Hello World aus