introduction
Dans cet article, nous allons voir comment identifier des images à l’aide du service de reconnaissance d’images AWS appelé AWS Rekognition sur NodeJS, à la fin du guide, vous aurez un système dans lequel vous téléchargerez un fichier sur S3, et les détails d’identification de cette image sera envoyée à votre adresse e-mail.
Configuration du projet
Nous devrons mettre en place un projet sans serveur de base avec un sans serveur.yml et notre fonction lambda, nous devons également installer aws-sdk pour interagir avec les services AWS,
Fichier sans serveur.yml
service: aws-img-rekognition
provider:
name: aws
runtime: nodejs12.x
iamRoleStatements:
- Effect: Allow
Action:
- rekognition:DetectLabels
- s3:Get*
- s3:List*
- sns:Publish*
Resource: "*"
functions:
identifyImg:
handler: src/index.identifyImg
events:
- s3:
bucket: "dev-img-folder"
event: s3:ObjectCreated:*
existing: true
Explication
Décomposons ce qui se passe dans ce sans serveur.yml déposer
Autorisations – Nous définissons des autorisations pour permettre à notre fonction lambda d’utiliser AWS rekognition pour détecter l’image, des autorisations de lecture s3 pour lire l’image téléchargée à des fins d’identification, et enfin l’autorisation de publier un événement SNS (nous en parlerons plus tard).
Fonctions lambda – Nous n’avons besoin que d’une seule fonction lambda pour ce projet, nous la définissons dans le functions
bloquer.
Événements – La dernière chose est d’attacher un événement S3 à notre fonction lambda afin qu’elle soit appelée dès qu’une nouvelle image est téléchargée dans le compartiment S3, ce bucket
est le nom du bucket où nous allons télécharger les images, nous pouvons créer ce bucket manuellement depuis la console AWS puis mettre le même nom ici, le existing
la propriété est définie sur true
parce que ce bucket est déjà créé, si nous ne passons pas ce drapeau, ce modèle essaiera de créer le bucket.
Sujet SNS et abonnement
Nous publions des données d’identification d’image AWS dans une rubrique SNS, pour ce faire, nous aurons besoin d’ARN pour la rubrique SNS, un e-mail sera abonné à cette rubrique, nous recevrons donc tous les détails liés à l’image sur l’e-mail lui-même, c’est très simple de créer un sujet SNS et un abonnement, il existe une documentation AWS officielle pour cela
Fonction Lambda
const AWS = require("aws-sdk");
const rekognition = new AWS.Rekognition();
const sns = new AWS.SNS();
exports.identifyImg = async (event) => {
const bucket = event.Records[0].s3.bucket.name;
const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/+/g, " "));
const params = {
Image: {
S3Object: {
Bucket: bucket,
Name: key,
},
},
MaxLabels: 123,
MinConfidence: 80,
};
try {
const rekognitionData = await rekognition.detectLabels(params).promise();
const snsParams = {
Message: `This image identifies with these - ${rekognitionData.Labels.map((el) => el.Name).toString()}`,
Subject: "Image details",
TopicArn: "arn:aws:sns:us-east-2:175749735948:img-Topic",
};
await sns.publish(snsParams).promise();
} catch (e) {
console.log(e);
}
};
Explication
Décomposons cette fonction lambda.
La première étape consiste à obtenir le nom du compartiment et la clé de l’objet qui sont téléchargés sur le S3, puis nous les transmettons au params
object qui est la configuration acceptée par AWS rekognition.
MaxÉtiquettes – Il s’agit simplement de définir le nombre maximum d’identifications que nous voulons que la reconnaissance AWS renvoie.
MinConfiance – Il s’agit du niveau de confiance minimum pour que les étiquettes soient renvoyées, la confiance signifie ici à quel point la correspondance doit être proche de l’étiquette qui est renvoyée.
Maintenant nous appelons detectLabels
API de reconnaissance AWS qui nous fournira les données d’identification, après avoir obtenu ces données, nous allons publier ces données dans notre rubrique SNS.
Un message – C’est juste la clé de configuration où nous passons le message à envoyer à notre sujet, ici nous ne faisons que mapper le Labels
tableau par nom d’étiquette et conversion de ce tableau en chaîne.
SujetArn – Il s’agit de l’ARN du sujet que nous avons créé ci-dessus.
Conclusion
Si vous atteignez cette étape, alors félicitations, nous avons maintenant un système où nous pouvons télécharger une image dans le compartiment S3, puis nous recevrons les données d’identification de l’image à une adresse e-mail spécifiée dans l’abonnement créé à l’aide de la console AWS et c’est comment nous utilisons la reconnaissance d’images AWS à l’aide d’un framework sans serveur.
Vous pouvez trouver le code source sur Github