You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Rekognition与S3精确图像匹配的API及参数咨询

Hey Gabriel, let's break down how to solve your exact image matching problem with AWS Rekognition, Xamarin Forms, and your existing SQL Server setup. Since you're working with family photos/group shots (no face recognition needed), the perfect tool here is Rekognition's GetImageEmbedding API—it's built to extract unique feature vectors from any image, which we can use to find precise matches.

Step-by-Step Solution

1. Preprocess Your S3 Images & SQL Server Data

First, we need to prep your existing S3 images so we can quickly match against them later:

  • Upload all your target family/group photos to an Amazon S3 bucket.
  • For each image in S3, call the GetImageEmbedding API to extract its unique feature vector (a high-dimensional array that represents the image's visual characteristics).
  • Store these details in your SQL Server table:
    • S3 object key (to identify the image)
    • Corresponding YouTube link
    • The serialized feature vector (save it as a JSON string for easy storage/retrieval)

2. Real-Time Matching in Xamarin Forms (C#)

When your app scans a photo, we'll extract its feature vector, compare it to all stored vectors in SQL Server, and pull the matching YouTube link.

Core API: GetImageEmbedding

This API is ideal for non-face image matching—it works on any image type and generates a unique "fingerprint" (feature vector) that we can compare using cosine similarity. Here's what you need to know about its key parameters:

  • Image: You can pass either:
    • Bytes: Directly feed the scanned image's byte array (perfect for mobile apps avoiding extra S3 uploads)
    • S3Object: Reference an image in your S3 bucket (used during preprocessing)
  • QualityFilter: Set to AUTO to automatically skip low-quality images (blurry, dark, etc.) that would produce unreliable vectors.

Code Examples

First, install the AWS SDK for Rekognition via NuGet: Install-Package AWSSDK.Rekognition

Preprocessing: Extract & Store Vectors

using Amazon.Rekognition;
using Amazon.Rekognition.Model;
using System.Text.Json;

public async Task SaveImageEmbedding(string s3Bucket, string s3Key, string youtubeLink)
{
    // Initialize Rekognition client (use your AWS region)
    var rekClient = new AmazonRekognitionClient(Amazon.RegionEndpoint.UsEast1);

    var embeddingRequest = new GetImageEmbeddingRequest
    {
        Image = new Image
        {
            S3Object = new S3Object { Bucket = s3Bucket, Name = s3Key }
        },
        QualityFilter = QualityFilter.AUTO
    };

    var embeddingResponse = await rekClient.GetImageEmbeddingAsync(embeddingRequest);
    // Serialize the vector to JSON for SQL storage
    var vectorJson = JsonSerializer.Serialize(embeddingResponse.Embedding.Vector);

    // Insert into your SQL Server table (replace with your DB logic)
    await InsertIntoDb(s3Key, youtubeLink, vectorJson);
}

Real-Time Matching: Find the YouTube Link

public async Task<string> FindMatchingYoutubeLink(byte[] scannedImageBytes)
{
    var rekClient = new AmazonRekognitionClient(Amazon.RegionEndpoint.UsEast1);

    // Get feature vector for the scanned image
    var scanRequest = new GetImageEmbeddingRequest
    {
        Image = new Image { Bytes = new MemoryStream(scannedImageBytes) },
        QualityFilter = QualityFilter.AUTO
    };
    var scanResponse = await rekClient.GetImageEmbeddingAsync(scanRequest);
    var scanVector = scanResponse.Embedding.Vector;

    // Fetch all stored embeddings from SQL Server
    var storedEmbeddings = await GetAllStoredEmbeddingsFromDb();

    foreach (var storedItem in storedEmbeddings)
    {
        // Deserialize the stored vector
        var storedVector = JsonSerializer.Deserialize<float[]>(storedItem.EmbeddingJson);
        // Calculate cosine similarity between the two vectors
        var similarity = CalculateCosineSimilarity(scanVector, storedVector);

        // Use a high threshold (99%) to ensure only exact matches are returned
        if (similarity >= 0.99f)
        {
            return storedItem.YoutubeLink;
        }
    }

    // No exact match found
    return null;
}

// Helper: Calculate cosine similarity to measure vector similarity
private float CalculateCosineSimilarity(float[] vecA, float[] vecB)
{
    float dotProduct = 0, magA = 0, magB = 0;
    for (int i = 0; i < vecA.Length; i++)
    {
        dotProduct += vecA[i] * vecB[i];
        magA += vecA[i] * vecA[i];
        magB += vecB[i] * vecB[i];
    }
    return dotProduct / (float)(Math.Sqrt(magA) * Math.Sqrt(magB));
}

Why Not Use Other Rekognition APIs?

You might wonder about CompareImages—but that's designed for content moderation use cases and doesn't give you the flexible similarity scoring you need for precise matching. GetImageEmbedding is far better here because it lets you control the matching threshold and works seamlessly with batch comparisons via your SQL Server.

Key Notes

  • Make sure your AWS IAM role has rekognition:GetImageEmbedding permissions, plus S3 read access if you're pulling images from S3.
  • Store the feature vector in SQL Server using an NVARCHAR(MAX) column (since it's a long array serialized to JSON).
  • Adjust the similarity threshold if needed—99% is strict for exact matches, but you can lower it slightly if you want to account for minor edits (like resizing).

内容的提问来源于stack exchange,提问作者Gabriel Arce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 12:07:27