[PYTHON] [AWS Hands-on] Créons un service d'identification des célébrités avec une architecture sans serveur!

À propos de cet article

Postscript: sortie de la version Slide

Introduction (vue d'ensemble)

Quoi faire

-Utiliser Amazon Rekognition (Image Analysis AI) Et créez une API d'identification des célébrités.

Image d'opération

――Par exemple, préparez une image du célèbre acteur "Ken Watanabe" qui est fier du Japon dans le monde, et chargez-la dans l'IA créée cette fois.

Description de l'architecture

  1. Téléchargez une image de célébrité à partir du PC client via API Gateway.
  2. Lorsque le fichier image est reçu, la fonction Lambda est activée.
  3. Dans la fonction Lambda, envoyez le fichier image à la fonction Recogn_celebrities d'Amazon Rekognition pour identifier la célébrité dans l'image.
  4. Formatez les informations de célébrités récupérées pour la sortie et renvoyez-les via API Gateway.
  5. Le résultat de l'identification s'affiche sur le navigateur appelant. image.png

À propos des services AWS

Présentation du service AWS à utiliser

«Nous présenterons brièvement les trois services utilisés cette fois. «Continuons avec l'idée de« s'y habituer plutôt que d'apprendre ». image.png

Glossaire AWS: Qu'est-ce que «sans serveur»?

—— Services et architectures dont les utilisateurs n'ont pas besoin de connaître le serveur. --Remarque: cela ne signifie pas que le serveur n'existe pas du tout. Le serveur est géré par AWS.

Glossaire AWS: Qu'est-ce qu'un "service géré"?

C'est un service qu'AWS prend en charge (en partie) de la gestion des opérations. ―― Le contenu et l'étendue de la gestion des opérations que vous prenez en charge varient en fonction du service, mais dans de nombreux cas, nous fournissons non seulement des «sauvegardes régulières», mais aussi «une mise à l'échelle automatique lorsque l'accès augmente». .. ――Lorsque le périmètre de la gestion des opérations est large et que les utilisateurs ne font presque aucun effort, on parle souvent de «service entièrement géré». ――Même s'il est "géré", il n'est pas toujours "sans serveur". image.png

Procédure de développement

se connecter

Vérifiez la région et la langue

--Confirmez que le coin supérieur droit de l'écran est "Tokyo (Région)" et que le coin inférieur gauche de l'écran est "Japonais". --Si vous devez le changer, reportez-vous à la page suivante et effectuez le travail de commutation. image.png

[Supplément] Comment changer de région

--Appuyez sur le nom du lieu en haut à droite de l'écran et sélectionnez "Asie Pacifique (Tokyo) ap-nord-est-1". image.png

[Supplément] Comment changer la langue

Créer une fonction Lambda

Créer une nouvelle fonction Lambda

--Sur l'écran de la console de gestion, entrez "Lambda" dans la fenêtre de recherche et sélectionnez le "Lambda" affiché. image.png

--Lorsque l'écran Lambda s'ouvre, cliquez sur le bouton "Créer une fonction". image.png

--Sur l'écran de création de fonction, sélectionnez et entrez ce qui suit. --Sélectionnez "Créer à partir de zéro" --Entrez "<< Nom >> -rekognition-handson" dans "Nom de la fonction"

«J'écrirai le code qui fonctionne désormais. --Faites défiler jusqu'à "Code de fonction". C'est l'éditeur qui décrit la logique. image.png

Comment utiliser la fonction Lambda

―― Tout d'abord, écrivons du code Python simple pour apprendre comment fonctionne Lambda. 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
    }

--L'écran "Paramètres des événements de test" s'affiche. Après avoir défini les paramètres suivants, cliquez sur le bouton "Créer". --Sélectionnez "Créer un nouvel événement de test". --Entrez "SimpleEvent" pour le nom de l'événement image.png

--Cliquez sur "Test" en haut à droite.

--Lambda a été testé.

--Cliquez sur Détails pour développer les résultats de l'exécution de la fonction. ―― Ici, «body» est «PenPineappleApplePen», qui est le résultat attendu. image.png

Modification des fonctions Lambda

Modifier le rôle IAM (autorité)

--Sélectionnez «Paramètres» en haut de l'écran Lambda image.png

--Sélectionnez "Modifier" dans "Paramètres de base" au bas de l'écran "Paramètres". image.png

--Entrez «Rekognition» dans la fenêtre de recherche, vérifiez la politique «Amazon RekognitionReadOnlyAccess» et cliquez sur le bouton «Joindre la politique». image.png

--Sur l'écran de la console IAM, assurez-vous que «AmazonRekognitionReadOnlyAccess» est associé.

Mise à jour de la fonction Lambda

Code à coller

lambda_function.py


import boto3
import base64
import logging
import traceback

#paramètres de l'enregistreur
logger = logging.getLogger()
logger.setLevel(logging.INFO)

#Créer une instance de reconnaissance
rekognition = boto3.client('rekognition')

# lambda_définition de la fonction de gestionnaire (logique principale)
def lambda_handler(event, context):
    logger.info(f'Received event = {event}')
    
    #Étant donné que les données binaires sont reçues au format codé Base64, elles sont décodées en octets de type.
    received_body = base64.b64decode(event['body-json'])
    
    #Exclut les informations de fichier fournies par AWS (chaîne de caractères d'octets)'\r\n'Informations sur le corps des fichiers téléchargés par le 4e et les suivants)
    images  = received_body.split(b'\r\n',4)
    image   = images[4]
    
    #Transmettez les informations d'image au format Blob acquises à Rekognition pour identifier la célébrité
    response = rekognition.recognize_celebrities(
        Image={'Bytes': image}
    )
    logger.info(f'Rekognition response = {response}')
    
    try:
        #Extrayez la fiabilité du nom de la célébrité de la réponse Rekognition et répondez à l'appelant de l'API.
        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:
        #Si vous ne pouvez pas obtenir d'informations sur les célébrités grâce à la réponse de Rekognition, dites-leur d'utiliser une autre photo.
        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."

Description du code (# partie qui n'a pas pu être écrite dans le commentaire)

--Première ligne ʻimport boto3`

Ajout d'API Gateway

À partir de là, nous allons lier API Gateway et Lambda. image.png

--Entrez "API" dans la fenêtre de recherche à partir de "Services" en haut de l'écran, et sélectionnez "API Gateway" comme candidat. image.png

--Cliquez sur le bouton "Construire" de l'API REST. image.png

--API sera développé par "ressources" x "méthodes".

--Entrez "Rekognition" dans le nom de la ressource et cliquez sur le bouton "Créer une ressource". image.png

--Sélectionnez "POST" dans le menu déroulant et appuyez sur le bouton "Vérifier". image.png

--Sélectionnez "Fonction Lambda" dans le type d'intégration, sélectionnez "<< Nom >> -rekognition-handson" créé précédemment dans la fonction Lambda, puis cliquez sur le bouton "Enregistrer". image.png

--L'écran de confirmation "Ajout d'autorisations à la fonction Lambda" s'affiche. Cliquez sur le bouton "OK". image.png

--Sélectionnez "Demande d'intégration". image.png

--Dans l'élément "Content-Type", entrez multipart / form-data et appuyez sur le bouton de contrôle. image.png

--Sélectionnez "Paramètres" sur le côté gauche de l'écran, puis cliquez sur "Ajouter un type de média binaire" dans l'élément "Type de média Binyl" au bas de l'écran "Paramètres". image.png

--Entrez multipart / form-data et appuyez sur le bouton" Enregistrer les modifications ". image.png

--Sélectionnez «Ressources» dans le volet gauche de l'écran, puis sélectionnez «Déployer l'API» dans «Actions» en haut de l'écran. image.png

--Sur l'écran de déploiement de l'API, définissez les paramètres suivants et cliquez sur le bouton «Déployer».

--Dans le volet gauche de l'écran, sélectionnez "Stage" puis sélectionnez "dev" - "rekognition" - "POST". --L'URL de l'API créée comme "URL d'appel" s'affiche sur le côté droit de l'écran. Copiez-la. image.png

Créer un fichier HTML

index.html


<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>Reconnaissance des célébrités IA pratique</title>
    </head>
    <body>
        <p>La reconnaissance des célébrités est effectuée à l'aide d'Amazon Rekognition, une IA d'identification d'image!</p>
        <form action="****Coller l'URL de la passerelle API****" enctype="multipart/form-data" method="POST">
            <input type="file" name="Sélectionnez un fichier photo" />
            <input type="submit" name="télécharger"/>
        </form>
    </body>
</html>

--Ouvrez le fichier Index.html créé dans votre navigateur. (Sélectionnez un fichier et faites-le glisser et déposez-le sur le navigateur pour l'ouvrir) image.png

Contrôle de fonctionnement

«Par exemple, essayons avec" Watabe of the World ", un comédien (?) Dont le Japon est fier dans le monde.

--Sélectionnez un fichier et appuyez sur le bouton "Envoyer" ... --` "Il / Elle est Ken Watabe avec une confiance à 100%." ʻEst affiché!

Nettoyer

Supprimer la passerelle API

--Depuis l'écran API Gateway, sélectionnez le "<< Nom >> - api-handson" créé. image.png

--Depuis l'écran API Gateway, sélectionnez le "<< Nom >> - api-handson" créé. image.png

--Avec "Ressource" sélectionné dans le volet gauche de l'écran, sélectionnez "Supprimer l'API" dans l'action. image.png

--L'écran de confirmation avant la suppression s'affiche. Après avoir saisi le nom de l'API, cliquez sur "Supprimer l'API". image.png

Supprimer le journal CloudWatch

--Sur l'écran de liste, sélectionnez "<< Nom >> -rekognition-handson". image.png

--Sélectionnez «Surveillance» en haut de l'écran et appuyez sur le bouton «Afficher le journal CloudWatch». image.png

Supprimer le rôle IAM

Suppression de la fonction Lambda

--Revenez à l'écran Lambda et sélectionnez «Supprimer la fonction» dans «Actions» en haut de l'écran. image.png

--Le message "Il a été supprimé avec succès." S'affiche. image.png

Information supplémentaire

Frais

Classification des services Classification Frais Supplément
Frais de communication de données Inn à AWS 0.000USD/GB
Hors d'AWS 0.114USD/GB Premier 1 Go à 10 To
CloudWatch Collecte de journaux 0.760USD/GB
Enregistrer le journal 0.033USD/GB
Lambda Demander la facturation 0.20USD/1 million
Facturation du temps d'exécution 0.0000002083USD
/128MB,100 millisecondes
API Gateway REST API 4.25USD/1 million 303 premiers,3 millions d'appels reçus
Rekognition Image 0.0013USD/1 image Premier 1 million

Matériaux / documents de référence

Recommended Posts

[AWS Hands-on] Créons un service d'identification des célébrités avec une architecture sans serveur!
Faisons une discussion WEB en utilisant WebSocket avec AWS sans serveur (Python)!
Comment créer une API de machine learning sans serveur avec AWS Lambda
Créons un groupe gratuit avec Python
Créer un service Web avec Docker + Flask
Créer un référentiel privé avec AWS CodeArtifact
Créons une fonction de chat avec Vue.js + AWS Lambda + dynamo DB [Paramètres AWS]
J'ai essayé de créer un service de raccourcissement d'url sans serveur avec AWS CDK
Créer une couche pour AWS Lambda Python dans Docker
Créons un script qui s'enregistre avec Ideone.com en Python.
Créons un diagramme PRML avec Python, Numpy et matplotlib.
Créer une page d'accueil avec django
Créer un répertoire avec python
Créons une IA à trois voies avec Pylearn2 --Save and load model -
Grattage sans serveur régulier avec AWS lambda + scrapy, partie 1
[AWS] Créer une API avec API Gateway + Lambda
Faisons une interface graphique avec python.
Faisons un service de vente au comptant 2
Faisons une rupture de bloc avec wxPython
Créez un environnement virtuel avec Python!
Faisons un service de vente au comptant 1
Créer un service SlackBot sur Pepper
Faisons un graphe avec python! !!
Faisons un spacon avec xCAT
Créez un stepper de poisson avec numpy.random
Faisons un service de vente au comptant 3
Créer un téléchargeur de fichiers avec Django
Créez un service Twitter BOT avec GAE / P + Tweepy + RIOT API! (Partie 1)
Créez un service Twitter BOT avec GAE / P + Tweepy + RIOT API! (Partie 2)
[AWS] Créez un environnement Python Lambda avec CodeStar et faites Hello World