Application de reconnaissance faciale conçue avec Amazon Rekognition et Java

introduction

Cette fois, j'aimerais créer une application simple utilisant le service de reconnaissance faciale Rekognition d'Amazon. Lorsque vous entendez la reconnaissance faciale, vous pouvez avoir une image difficile, mais si vous utilisez cette Rekoginition, vous pouvez facilement la faire, alors essayez de l'utiliser à travers un échantillon.

Seule la source extraite est publiée dans l'article, donc si vous êtes intéressé, je publierai la source que j'ai créée cette fois dans ici. se il vous plaît se référer.

supposition

Environnement d'exploitation

Écran de l'application

Ceci est l'écran de l'application que j'ai créée cette fois.

スクリーンショット_2019-03-19_10_21_24.png

Flux de développement

  1. Créez une collection pour stocker l'image source de comparaison (métadonnées)
  2. Stockez l'image source de comparaison dans la collection
  3. Prenez une photo avec l'appareil photo au moment de l'authentification et téléchargez
  4. Affichez le résultat de l'authentification

Créer une collection

Création de collection


ListCollectionsResult listCollectionsResult = rekognitionClient.listCollections(new ListCollectionsRequest());
if (!listCollectionsResult.getCollectionIds().contains(COLLECTION_ID)) {
    rekognitionClient.createCollection(new CreateCollectionRequest().withCollectionId(COLLECTION_ID));
}

Au lieu de simplement créer une collection, j'essaie d'en créer une si elle n'existe pas.

Rekognition API Contenu
listCollections La liste des collections sera retournée.
createCollection Créez une collection.

Stocker l'image source de comparaison dans la collection

Stocker l'image source de comparaison


IndexFacesRequest indexFacesRequest = new IndexFacesRequest()
              .withCollectionId(COLLECTION_ID)
              .withExternalImageId(id)
              .withImage(new Image().withBytes(ByteBuffer.wrap(multipartFile.getBytes())));

IndexFacesResult indexFacesResult = rekognitionClient.indexFaces(indexFacesRequest);
Rekognition API Contenu
indexFaces Stockez votre photo de visage dans la collection.
Propriété La description Caractères disponibles
collectionId Nom de la collection créée a-zA-Z0-9_.-
externalImageId Données arbitraires a-zA-Z0-9_.-:
image Image source de comparaison (binaire)

Cette fois, nous allons gérer l'ID qui identifie de manière unique l'utilisateur dans externalImageId.

Pris avec une caméra au moment de l'authentification et téléchargé

SearchFacesByImageRequest searchFacesByImageRequest = new SearchFacesByImageRequest()
          .withCollectionId(COLLECTION_ID)
          .withImage(new Image().withBytes(ByteBuffer.wrap(multipartFile.getBytes())))
          .withFaceMatchThreshold(90F)
          .withMaxFaces(1);

try {
    SearchFacesByImageResult searchFacesByImageResult = rekognitionClient.searchFacesByImage(searchFacesByImageRequest);
} catch (InvalidParameterException e) {
    //La gestion des erreurs
}

Veuillez noter que InvalidParameterException se produira si le visage ne peut pas être reconnu à partir de l'image téléchargée.

Rekognition API Contenu
searchFacesByImage Recherchez dans la collection en fonction des photos de visage à comparer.
Propriété La description Caractères disponibles
collectionId Nom de la collection créée a-zA-Z0-9_.-
image Image source de comparaison (binaire)
faceMatchThreshold Seuil de similarité. 70 par défaut%
maxFaces Nombre de faces correspondantes à acquérir par ordre décroissant de similitude

Dans cet échantillon, nous avons essayé d'obtenir celui avec la plus grande similitude de ceux avec 90% ou plus de similitude.

Afficher le résultat de l'authentification

SearchFacesByImageResult peut être obtenu dans le format suivant, alors récupérez-en externalFaceId.

{
   "FaceMatches": [ 
      { 
         "Face": { 
            "BoundingBox": { 
               "Height": number,
               "Left": number,
               "Top": number,
               "Width": number
            },
            "Confidence": number,
            "ExternalImageId": "string",  <--cette
            "FaceId": "string",
            "ImageId": "string"
         },
         "Similarity": number
      }
   ],
   "FaceModelVersion": "string",
   "SearchedFaceBoundingBox": { 
      "Height": number,
      "Left": number,
      "Top": number,
      "Width": number
   },
   "SearchedFaceConfidence": number
}

S'il correspond à l'ID saisi à l'écran, l'authentification est OK, sinon elle est NG.

Site de référence

Recommended Posts

Application de reconnaissance faciale conçue avec Amazon Rekognition et Java
Application de reconnaissance faciale avec OpenCV + Android Studio
Utiliser java avec MSYS et Cygwin
Traçage distribué avec OpenCensus et Java
J'ai créé une application shopify @java
Utilisez JDBC avec Java et Scala.
Sortie PDF et TIFF avec Java 8
Exécuter des applications écrites en Java8 en Java6
Crypter avec Java et décrypter avec C #
Comment créer une application avec un mécanisme de plug-in [C # et Java]
Surveillez les applications Java avec jolokia et hawtio
Lier le code Java et C ++ avec SWIG
Essayons WebSocket avec Java et javascript!
[Java] Lecture et écriture de fichiers avec OpenCSV
Installez Java8 avec Yum sur Amazon Linux
Distributeur automatique fabriqué avec Java (piloté par domaine)
J'ai créé une application Janken avec Android
Développement Java avec Codenvy: débogage de l'application console
Outil GUI refactorisé réalisé avec Java8 + JavaFX en 2016
Course d'obstacles facile avec traitement pour Java
Créez et testez des applications Java + Gradle avec Wercker
Essayez d'intégrer Ruby et Java avec Dapr
Publiez l'application avec ruby on rails
JSON avec Java et Jackson Part 2 XSS mesures
[Android] Histoire désespérée avec UserId et SharedUserId de l'application
Préparer un environnement de scraping avec Docker et Java
KMS) Chiffrement d'enveloppe avec décryptage openssl et java
Crypter / décrypter avec AES256 en PHP et Java
[Java] Convertir et importer des valeurs de fichier avec OpenCSV
[Review] Lecture et écriture de fichiers avec java (JDK6)