Gesichtserkennungs-App mit Amazon Rekognition und Java

Einführung

Dieses Mal möchte ich eine einfache Anwendung mit dem Gesichtserkennungsdienst Rekognition von Amazon erstellen. Wenn Sie die Gesichtserkennung hören, haben Sie möglicherweise ein schwieriges Bild. Wenn Sie diese Rekoginition verwenden, können Sie sie problemlos erstellen. Versuchen Sie daher, sie anhand eines Beispiels zu verwenden.

In dem Artikel wird nur die auszugsweise Quelle veröffentlicht. Wenn Sie also interessiert sind, werde ich die Quelle, die ich dieses Mal erstellt habe, in hier veröffentlichen. siehe.

Annahme

Betriebsumgebung

App-Bildschirm

Dies ist der Bildschirm der App, die ich dieses Mal erstellt habe.

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

Entwicklungsfluss

  1. Erstellen Sie eine Sammlung, um das Vergleichsquellbild (Metadaten) zu speichern.
  2. Speichern Sie das Vergleichsquellbild in der Sammlung
  3. Nehmen Sie zum Zeitpunkt der Authentifizierung ein Bild mit der Kamera auf und laden Sie es hoch
  4. Zeigen Sie das Authentifizierungsergebnis an

Erstellen Sie eine Sammlung

Sammlungserstellung


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

Anstatt einfach eine Sammlung zu erstellen, versuche ich, eine zu erstellen, wenn sie nicht existiert.

Rekognition API Inhalt
listCollections Die Liste der Sammlungen wird zurückgegeben.
createCollection Erstellen Sie eine Sammlung.

Speichern Sie das Vergleichsquellbild in der Sammlung

Speichern Sie das Vergleichsquellbild


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

IndexFacesResult indexFacesResult = rekognitionClient.indexFaces(indexFacesRequest);
Rekognition API Inhalt
indexFaces Speichern Sie Ihr Gesichtsfoto in der Sammlung.
Eigentum Erläuterung Verfügbare Zeichen
collectionId Name der erstellten Sammlung a-zA-Z0-9_.-
externalImageId Beliebige Daten a-zA-Z0-9_.-:
image Vergleichsquellbild (binär)

Dieses Mal verwalten wir die ID, die den Benutzer in `` `externalImageId``` eindeutig identifiziert.

Zum Zeitpunkt der Authentifizierung mit einer Kamera aufgenommen und hochgeladen

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) {
    //Fehlerbehandlung
}

Bitte beachten Sie, dass "InvalidParameterException" auftritt, wenn das Gesicht vom hochgeladenen Bild nicht erkannt werden kann.

Rekognition API Inhalt
searchFacesByImage Suchen Sie aus der Sammlung anhand der zu vergleichenden Gesichtsfotos.
Eigentum Erläuterung Verfügbare Zeichen
collectionId Name der erstellten Sammlung a-zA-Z0-9_.-
image Vergleichsquellbild (binär)
faceMatchThreshold Ähnlichkeitsschwelle. 70 standardmäßig%
maxFaces Anzahl der zu erfassenden übereinstimmenden Gesichter in absteigender Reihenfolge der Ähnlichkeit

In diesem Beispiel haben wir versucht, diejenige mit der höchsten Ähnlichkeit von denjenigen mit 90% oder mehr Ähnlichkeit zu erhalten.

Authentifizierungsergebnis anzeigen

SearchFacesByImageResult kann im folgenden Format abgerufen werden. Holen Sie sich also `` `externalFaceId```.

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

Wenn es mit der auf dem Bildschirm eingegebenen ID übereinstimmt, ist die Authentifizierung in Ordnung, andernfalls ist es NG.

Referenzseite

Recommended Posts

Gesichtserkennungs-App mit Amazon Rekognition und Java
Gesichtserkennungs-App mit OpenCV + Android Studio
Verwenden Sie Java mit MSYS und Cygwin
Verteilte Ablaufverfolgung mit OpenCensus und Java
Ich habe eine shopify App @java erstellt
Verwenden Sie JDBC mit Java und Scala.
PDF und TIFF mit Java 8 ausgeben
Führen Sie in Java8 geschriebene Anwendungen in Java6 aus
Mit Java verschlüsseln und mit C # entschlüsseln
So erstellen Sie eine App mit einem Plug-In-Mechanismus [C # und Java]
Überwachen Sie Java-Anwendungen mit Jolokia und Hawtio
Verknüpfen Sie Java- und C ++ - Code mit SWIG
Probieren wir WebSocket mit Java und Javascript aus!
[Java] Lesen und Schreiben von Dateien mit OpenCSV
Installieren Sie Java8 mit Yum unter Amazon Linux
Verkaufsautomat mit Java (domänengesteuert)
Ich habe eine Janken App mit Android gemacht
Java-Entwicklung mit Codenvy: Konsolen-App-Debug
Überarbeitetes GUI-Tool, das 2016 mit Java8 + JavaFX erstellt wurde
Einfaches Hindernisrennen mit Java-Verarbeitung
Erstellen und testen Sie Java + Gradle-Anwendungen mit Wercker
Versuchen Sie, Ruby und Java in Dapr zu integrieren
Veröffentlichen Sie die mit Ruby on Rails erstellte App
JSON mit Java und Jackson Teil 2 XSS-Maßnahmen
[Android] Verzweifelte Geschichte mit UserId und SharedUserId der App
Bereiten Sie eine Scraping-Umgebung mit Docker und Java vor
KMS) Umschlagverschlüsselung mit OpenSL- und Java-Entschlüsselung
Verschlüsseln / Entschlüsseln mit AES256 in PHP und Java
[Java] Konvertieren und Importieren von Dateiwerten mit OpenCSV
[Review] Lesen und Schreiben von Dateien mit Java (JDK6)