Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Vergleichen von Gesichtern in Bildern
Mit Rekognition können Sie mithilfe der Operation Gesichter zwischen zwei Bildern vergleichen. CompareFaces Diese Funktion ist nützlich für Anwendungen wie die Identitätsprüfung oder den Abgleich von Fotos.
CompareFaces vergleicht ein Gesicht im Quellbild mit jedem Gesicht im Zielbild. Bilder werden entweder CompareFaces wie folgt übergeben:
Vergleich von Gesichtserkennung und Gesichtserkennung
Der Gesichtsvergleich unterscheidet sich von der Gesichtserkennung. Die Gesichtserkennung (die verwendet DetectFaces) identifiziert nur das Vorhandensein und die Position von Gesichtern in einem Bild oder Video. Im Gegensatz dazu wird beim Gesichtsvergleich ein erkanntes Gesicht in einem Quellbild mit Gesichtern in einem Zielbild verglichen, um Übereinstimmungen zu finden.
Schwellenwerte für Ähnlichkeiten
Verwenden Sie den similarityThreshold
Parameter, um das Mindestkonfidenzniveau für Übereinstimmungen zu definieren, die in die Antwort aufgenommen werden sollen. Standardmäßig werden in der Antwort nur Gesichter mit einem Ähnlichkeitswert von mehr als oder gleich 80% zurückgegeben.
CompareFaces
verwendet Algorithmen für maschinelles Lernen, die probabilistisch sind. Ein falsches Negativ ist eine falsche Vorhersage, dass ein Gesicht im Zielbild im Vergleich zum Gesicht im Quellbild einen niedrigen Ähnlichkeitswert aufweist. Um die Wahrscheinlichkeit falsch negativer Bilder zu verringern, empfehlen wir, das Zielbild mit mehreren Quellbildern zu vergleichen. Wenn Sie CompareFaces
nutzen möchten, um eine Entscheidung zu treffen, die sich auf die Rechte, den Datenschutz oder den Zugang zu Diensten einer Person auswirkt, empfehlen wir Ihnen, das Ergebnis zur weiteren Überprüfung und Bestätigung an einen Mitarbeiter weiterzuleiten, bevor Sie Maßnahmen ergreifen.
Die folgenden Codebeispiele zeigen, wie die CompareFaces Operationen für verschiedene verwendet werden. AWS SDKs In dem AWS CLI Beispiel laden Sie zwei JPEG-Bilder in Ihren Amazon S3 S3-Bucket hoch und geben den Objektschlüsselnamen an. In den anderen Beispielen laden Sie zwei Dateien aus dem lokalen Dateisystem hoch und geben sie als Bild-Byte-Arrays ein.
So vergleichen Sie Gesichter
-
Wenn Sie dies noch nicht getan haben:
-
Erstellen oder aktualisieren Sie einen Benutzer mit AmazonRekognitionFullAccess
und AmazonS3ReadOnlyAccess
(nur AWS CLI Beispiel) Berechtigungen. Weitere Informationen finden Sie unter Schritt 1: Richten Sie ein AWS Konto ein und erstellen Sie einen Benutzer.
-
Installieren und konfigurieren Sie die AWS CLI und die AWS SDKs. Weitere Informationen finden Sie unter Schritt 2: Richten Sie das ein AWS CLI and AWS SDKs.
-
Verwenden Sie den folgenden Beispiel-Code zum Aufrufen der CompareFaces
-Operation.
- Java
-
Dieses Beispiel zeigt Informationen über die übereinstimmenden Gesichter in Quell- und Zielbildern an, die aus dem lokalen Dateisystem geladen werden.
Ersetzen Sie die Werte von sourceImage
und targetImage
durch den Pfad und Dateinamen der Quell- und Zielbilder.
//Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.)
package aws.example.rekognition.image;
import com.amazonaws.services.rekognition.AmazonRekognition;
import com.amazonaws.services.rekognition.AmazonRekognitionClientBuilder;
import com.amazonaws.services.rekognition.model.Image;
import com.amazonaws.services.rekognition.model.BoundingBox;
import com.amazonaws.services.rekognition.model.CompareFacesMatch;
import com.amazonaws.services.rekognition.model.CompareFacesRequest;
import com.amazonaws.services.rekognition.model.CompareFacesResult;
import com.amazonaws.services.rekognition.model.ComparedFace;
import java.util.List;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.nio.ByteBuffer;
import com.amazonaws.util.IOUtils;
public class CompareFaces {
public static void main(String[] args) throws Exception{
Float similarityThreshold = 70F;
String sourceImage = "source.jpg";
String targetImage = "target.jpg";
ByteBuffer sourceImageBytes=null;
ByteBuffer targetImageBytes=null;
AmazonRekognition rekognitionClient = AmazonRekognitionClientBuilder.defaultClient();
//Load source and target images and create input parameters
try (InputStream inputStream = new FileInputStream(new File(sourceImage))) {
sourceImageBytes = ByteBuffer.wrap(IOUtils.toByteArray(inputStream));
}
catch(Exception e)
{
System.out.println("Failed to load source image " + sourceImage);
System.exit(1);
}
try (InputStream inputStream = new FileInputStream(new File(targetImage))) {
targetImageBytes = ByteBuffer.wrap(IOUtils.toByteArray(inputStream));
}
catch(Exception e)
{
System.out.println("Failed to load target images: " + targetImage);
System.exit(1);
}
Image source=new Image()
.withBytes(sourceImageBytes);
Image target=new Image()
.withBytes(targetImageBytes);
CompareFacesRequest request = new CompareFacesRequest()
.withSourceImage(source)
.withTargetImage(target)
.withSimilarityThreshold(similarityThreshold);
// Call operation
CompareFacesResult compareFacesResult=rekognitionClient.compareFaces(request);
// Display results
List <CompareFacesMatch> faceDetails = compareFacesResult.getFaceMatches();
for (CompareFacesMatch match: faceDetails){
ComparedFace face= match.getFace();
BoundingBox position = face.getBoundingBox();
System.out.println("Face at " + position.getLeft().toString()
+ " " + position.getTop()
+ " matches with " + match.getSimilarity().toString()
+ "% confidence.");
}
List<ComparedFace> uncompared = compareFacesResult.getUnmatchedFaces();
System.out.println("There was " + uncompared.size()
+ " face(s) that did not match");
}
}
- Java V2
-
Dieser Code stammt aus dem AWS Documentation SDK Examples GitHub Repository. Das vollständige Beispiel finden Sie hier.
import java.util.List;
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.rekognition.RekognitionClient;
import software.amazon.awssdk.services.rekognition.model.RekognitionException;
import software.amazon.awssdk.services.rekognition.model.Image;
import software.amazon.awssdk.services.rekognition.model.BoundingBox;
import software.amazon.awssdk.services.rekognition.model.CompareFacesMatch;
import software.amazon.awssdk.services.rekognition.model.CompareFacesRequest;
import software.amazon.awssdk.services.rekognition.model.CompareFacesResponse;
import software.amazon.awssdk.services.rekognition.model.ComparedFace;
import software.amazon.awssdk.core.SdkBytes;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
// snippet-end:[rekognition.java2.detect_faces.import]
/**
* Before running this Java V2 code example, set up your development environment, including your credentials.
*
* For more information, see the following documentation topic:
*
* https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
*/
public class CompareFaces {
public static void main(String[] args) {
final String usage = "\n" +
"Usage: " +
" <pathSource> <pathTarget>\n\n" +
"Where:\n" +
" pathSource - The path to the source image (for example, C:\\AWS\\pic1.png). \n " +
" pathTarget - The path to the target image (for example, C:\\AWS\\pic2.png). \n\n";
if (args.length != 2) {
System.out.println(usage);
System.exit(1);
}
Float similarityThreshold = 70F;
String sourceImage = args[0];
String targetImage = args[1];
Region region = Region.US_EAST_1;
RekognitionClient rekClient = RekognitionClient.builder()
.region(region)
.credentialsProvider(ProfileCredentialsProvider.create("profile-name"))
.build();
compareTwoFaces(rekClient, similarityThreshold, sourceImage, targetImage);
rekClient.close();
}
// snippet-start:[rekognition.java2.compare_faces.main]
public static void compareTwoFaces(RekognitionClient rekClient, Float similarityThreshold, String sourceImage, String targetImage) {
try {
InputStream sourceStream = new FileInputStream(sourceImage);
InputStream tarStream = new FileInputStream(targetImage);
SdkBytes sourceBytes = SdkBytes.fromInputStream(sourceStream);
SdkBytes targetBytes = SdkBytes.fromInputStream(tarStream);
// Create an Image object for the source image.
Image souImage = Image.builder()
.bytes(sourceBytes)
.build();
Image tarImage = Image.builder()
.bytes(targetBytes)
.build();
CompareFacesRequest facesRequest = CompareFacesRequest.builder()
.sourceImage(souImage)
.targetImage(tarImage)
.similarityThreshold(similarityThreshold)
.build();
// Compare the two images.
CompareFacesResponse compareFacesResult = rekClient.compareFaces(facesRequest);
List<CompareFacesMatch> faceDetails = compareFacesResult.faceMatches();
for (CompareFacesMatch match: faceDetails){
ComparedFace face= match.face();
BoundingBox position = face.boundingBox();
System.out.println("Face at " + position.left().toString()
+ " " + position.top()
+ " matches with " + face.confidence().toString()
+ "% confidence.");
}
List<ComparedFace> uncompared = compareFacesResult.unmatchedFaces();
System.out.println("There was " + uncompared.size() + " face(s) that did not match");
System.out.println("Source image rotation: " + compareFacesResult.sourceImageOrientationCorrection());
System.out.println("target image rotation: " + compareFacesResult.targetImageOrientationCorrection());
} catch(RekognitionException | FileNotFoundException e) {
System.out.println("Failed to load source image " + sourceImage);
System.exit(1);
}
}
// snippet-end:[rekognition.java2.compare_faces.main]
}
- AWS CLI
-
In diesem Beispiel wird die JSON-Ausgabe des compare-faces
AWS CLI Vorgangs angezeigt.
Ersetzen Sie amzn-s3-demo-bucket
durch den Namen des Amazon-S3-Buckets, der die Quell- und Zielbilder enthält. Ersetzen Sie source.jpg
und target.jpg
durch die Dateinamen für die Quell- und Zielbilder.
aws rekognition compare-faces --target-image \
"{"S3Object":{"Bucket":"amzn-s3-demo-bucket","Name":"image-name"}}" \
--source-image "{"S3Object":{"Bucket":"amzn-s3-demo-bucket","Name":"image-name"}}"
--profile profile-name
Wenn Sie auf einem Windows-Gerät auf die CLI zugreifen, verwenden Sie doppelte Anführungszeichen anstelle von einfachen Anführungszeichen und maskieren Sie die inneren doppelten Anführungszeichen durch einen Backslash (d. h. \), um eventuell auftretende Parserfehler zu beheben. Sehen Sie sich zum Beispiel Folgendes an:
aws rekognition compare-faces --target-image "{\"S3Object\":{\"Bucket\":\"amzn-s3-demo-bucket\",\"Name\":\"image-name\"}}" \
--source-image "{\"S3Object\":{\"Bucket\":\"amzn-s3-demo-bucket\",\"Name\":\"image-name\"}}" --profile profile-name
- Python
-
Dieses Beispiel zeigt Informationen über die übereinstimmenden Gesichter in Quell- und Zielbildern an, die aus dem lokalen Dateisystem geladen werden.
Ersetzen Sie die Werte von source_file
und target_file
durch den Pfad und Dateinamen der Quell- und Zielbilder. Ersetzen Sie den Wert von profile_name
in der Zeile, die die Rekognition-Sitzung erstellt, durch den Namen Ihres Entwicklerprofils.
# Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
# PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.)
import boto3
def compare_faces(sourceFile, targetFile):
session = boto3.Session(profile_name='profile-name')
client = session.client('rekognition')
imageSource = open(sourceFile, 'rb')
imageTarget = open(targetFile, 'rb')
response = client.compare_faces(SimilarityThreshold=80,
SourceImage={'Bytes': imageSource.read()},
TargetImage={'Bytes': imageTarget.read()})
for faceMatch in response['FaceMatches']:
position = faceMatch['Face']['BoundingBox']
similarity = str(faceMatch['Similarity'])
print('The face at ' +
str(position['Left']) + ' ' +
str(position['Top']) +
' matches with ' + similarity + '% confidence')
imageSource.close()
imageTarget.close()
return len(response['FaceMatches'])
def main():
source_file = 'source-file-name'
target_file = 'target-file-name'
face_matches = compare_faces(source_file, target_file)
print("Face matches: " + str(face_matches))
if __name__ == "__main__":
main()
- .NET
-
Dieses Beispiel zeigt Informationen über die übereinstimmenden Gesichter in Quell- und Zielbildern an, die aus dem lokalen Dateisystem geladen werden.
Ersetzen Sie die Werte von sourceImage
und targetImage
durch den Pfad und Dateinamen der Quell- und Zielbilder.
//Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.)
using System;
using System.IO;
using Amazon.Rekognition;
using Amazon.Rekognition.Model;
public class CompareFaces
{
public static void Example()
{
float similarityThreshold = 70F;
String sourceImage = "source.jpg";
String targetImage = "target.jpg";
AmazonRekognitionClient rekognitionClient = new AmazonRekognitionClient();
Amazon.Rekognition.Model.Image imageSource = new Amazon.Rekognition.Model.Image();
try
{
using (FileStream fs = new FileStream(sourceImage, FileMode.Open, FileAccess.Read))
{
byte[] data = new byte[fs.Length];
fs.Read(data, 0, (int)fs.Length);
imageSource.Bytes = new MemoryStream(data);
}
}
catch (Exception)
{
Console.WriteLine("Failed to load source image: " + sourceImage);
return;
}
Amazon.Rekognition.Model.Image imageTarget = new Amazon.Rekognition.Model.Image();
try
{
using (FileStream fs = new FileStream(targetImage, FileMode.Open, FileAccess.Read))
{
byte[] data = new byte[fs.Length];
data = new byte[fs.Length];
fs.Read(data, 0, (int)fs.Length);
imageTarget.Bytes = new MemoryStream(data);
}
}
catch (Exception)
{
Console.WriteLine("Failed to load target image: " + targetImage);
return;
}
CompareFacesRequest compareFacesRequest = new CompareFacesRequest()
{
SourceImage = imageSource,
TargetImage = imageTarget,
SimilarityThreshold = similarityThreshold
};
// Call operation
CompareFacesResponse compareFacesResponse = rekognitionClient.CompareFaces(compareFacesRequest);
// Display results
foreach(CompareFacesMatch match in compareFacesResponse.FaceMatches)
{
ComparedFace face = match.Face;
BoundingBox position = face.BoundingBox;
Console.WriteLine("Face at " + position.Left
+ " " + position.Top
+ " matches with " + match.Similarity
+ "% confidence.");
}
Console.WriteLine("There was " + compareFacesResponse.UnmatchedFaces.Count + " face(s) that did not match");
}
}
- Ruby
-
Dieses Beispiel zeigt Informationen über die übereinstimmenden Gesichter in Quell- und Zielbildern an, die aus dem lokalen Dateisystem geladen werden.
Ersetzen Sie die Werte von photo_source
und photo_target
durch den Pfad und Dateinamen der Quell- und Zielbilder.
# Add to your Gemfile
# gem 'aws-sdk-rekognition'
require 'aws-sdk-rekognition'
credentials = Aws::Credentials.new(
ENV['AWS_ACCESS_KEY_ID'],
ENV['AWS_SECRET_ACCESS_KEY']
)
bucket = 'bucket' # the bucketname without s3://
photo_source = 'source.jpg'
photo_target = 'target.jpg'
client = Aws::Rekognition::Client.new credentials: credentials
attrs = {
source_image: {
s3_object: {
bucket: bucket,
name: photo_source
},
},
target_image: {
s3_object: {
bucket: bucket,
name: photo_target
},
},
similarity_threshold: 70
}
response = client.compare_faces attrs
response.face_matches.each do |face_match|
position = face_match.face.bounding_box
similarity = face_match.similarity
puts "The face at: #{position.left}, #{position.top} matches with #{similarity} % confidence"
end
- Node.js
-
Dieses Beispiel zeigt Informationen über die übereinstimmenden Gesichter in Quell- und Zielbildern an, die aus dem lokalen Dateisystem geladen werden.
Ersetzen Sie die Werte von photo_source
und photo_target
durch den Pfad und Dateinamen der Quell- und Zielbilder. Ersetzen Sie den Wert von profile_name
in der Zeile, die die Rekognition-Sitzung erstellt, durch den Namen Ihres Entwicklerprofils.
// Load the SDK
var AWS = require('aws-sdk');
const bucket = 'bucket-name' // the bucket name without s3://
const photo_source = 'photo-source-name' // path and the name of file
const photo_target = 'photo-target-name'
var credentials = new AWS.SharedIniFileCredentials({profile: 'profile-name'});
AWS.config.credentials = credentials;
AWS.config.update({region:'region-name'});
const client = new AWS.Rekognition();
const params = {
SourceImage: {
S3Object: {
Bucket: bucket,
Name: photo_source
},
},
TargetImage: {
S3Object: {
Bucket: bucket,
Name: photo_target
},
},
SimilarityThreshold: 70
}
client.compareFaces(params, function(err, response) {
if (err) {
console.log(err, err.stack); // an error occurred
} else {
response.FaceMatches.forEach(data => {
let position = data.Face.BoundingBox
let similarity = data.Similarity
console.log(`The face at: ${position.Left}, ${position.Top} matches with ${similarity} % confidence`)
}) // for response.faceDetails
} // if
});
CompareFaces Operationsanforderung
Die Eingabe in CompareFaces
ist ein Bild. In diesem Beispiel werden die Quell- und Zielbilder aus dem lokalen Dateisystem geladen. Der SimilarityThreshold
-Eingabeparameter gibt den minimalen Zuverlässigkeitswert an, dem verglichene Gesichter entsprechen müssen, um in die Antwort aufgenommen zu werden. Weitere Informationen finden Sie unter Arbeiten mit Bildern.
{
"SourceImage": {
"Bytes": "/9j/4AAQSk2Q==..."
},
"TargetImage": {
"Bytes": "/9j/4O1Q==..."
},
"SimilarityThreshold": 70
}
CompareFaces Antwort auf die Operation
Die Antwort enthält:
-
Eine Reihe von Übereinstimmungen mit Gesichtern: Eine Liste übereinstimmender Gesichter mit Ähnlichkeitswerten und Metadaten für jedes passende Gesicht. Wenn mehrere Gesichter übereinstimmen, faceMatches
Das Array umfasst alle übereinstimmenden Gesichter.
-
Details zur Übereinstimmung von Gesichtern: Für jedes übereinstimmende Gesicht stehen außerdem ein Begrenzungsrahmen, ein Konfidenzwert, die Position von Wahrzeichen und eine Ähnlichkeitsbewertung zur Verfügung.
-
Eine Liste nicht übereinstimmender Gesichter: Die Antwort umfasst auch Gesichter aus dem Zielbild, die nicht mit dem Gesicht auf dem Quellbild übereinstimmen. Beinhaltet einen Begrenzungsrahmen für jedes Gesicht, das nicht zugeordnet wurde.
-
Informationen zum Quellgesicht: Enthält Informationen über das Gesicht aus dem Quellbild, das für den Vergleich verwendet wurde, einschließlich des Begrenzungsrahmens und des Konfidenzwerts.
Das Beispiel zeigt, dass im Zielbild eine Gesichtsübereinstimmung gefunden wurde. Für diese Gesichtsübereinstimmung liefert sie einen Begrenzungsrahmen und einen Zuverlässigkeitswert (das Maß an Vertrauen, das Amazon Rekognition hat, dass der Begrenzungsrahmen ein Gesicht enthält). Der Ähnlichkeitswert von 99,99 gibt an, wie ähnlich sich die Gesichter sind. Das Beispiel zeigt auch ein Gesicht, das Amazon Rekognition im Zielbild gefunden hat und das nicht mit dem Gesicht übereinstimmt, das im Quellbild analysiert wurde.
{
"FaceMatches": [{
"Face": {
"BoundingBox": {
"Width": 0.5521978139877319,
"Top": 0.1203877404332161,
"Left": 0.23626373708248138,
"Height": 0.3126954436302185
},
"Confidence": 99.98751068115234,
"Pose": {
"Yaw": -82.36799621582031,
"Roll": -62.13221740722656,
"Pitch": 0.8652129173278809
},
"Quality": {
"Sharpness": 99.99880981445312,
"Brightness": 54.49755096435547
},
"Landmarks": [{
"Y": 0.2996366024017334,
"X": 0.41685718297958374,
"Type": "eyeLeft"
},
{
"Y": 0.2658946216106415,
"X": 0.4414493441581726,
"Type": "eyeRight"
},
{
"Y": 0.3465650677680969,
"X": 0.48636093735694885,
"Type": "nose"
},
{
"Y": 0.30935320258140564,
"X": 0.6251809000968933,
"Type": "mouthLeft"
},
{
"Y": 0.26942989230155945,
"X": 0.6454493403434753,
"Type": "mouthRight"
}
]
},
"Similarity": 100.0
}],
"SourceImageOrientationCorrection": "ROTATE_90",
"TargetImageOrientationCorrection": "ROTATE_90",
"UnmatchedFaces": [{
"BoundingBox": {
"Width": 0.4890109896659851,
"Top": 0.6566604375839233,
"Left": 0.10989011079072952,
"Height": 0.278298944234848
},
"Confidence": 99.99992370605469,
"Pose": {
"Yaw": 51.51519012451172,
"Roll": -110.32493591308594,
"Pitch": -2.322134017944336
},
"Quality": {
"Sharpness": 99.99671173095703,
"Brightness": 57.23163986206055
},
"Landmarks": [{
"Y": 0.8288310766220093,
"X": 0.3133862614631653,
"Type": "eyeLeft"
},
{
"Y": 0.7632885575294495,
"X": 0.28091415762901306,
"Type": "eyeRight"
},
{
"Y": 0.7417283654212952,
"X": 0.3631140887737274,
"Type": "nose"
},
{
"Y": 0.8081989884376526,
"X": 0.48565614223480225,
"Type": "mouthLeft"
},
{
"Y": 0.7548204660415649,
"X": 0.46090251207351685,
"Type": "mouthRight"
}
]
}],
"SourceImageFace": {
"BoundingBox": {
"Width": 0.5521978139877319,
"Top": 0.1203877404332161,
"Left": 0.23626373708248138,
"Height": 0.3126954436302185
},
"Confidence": 99.98751068115234
}
}