moving off AWS Rekognition

Keep your code. Change two lines.

SightRadar speaks the AWS Rekognition API surface you already wrote against. Our official Python shim mirrors Rekognition's methods and response shapes, so a migration is a find-and-replace — not a rewrite.

Before & after

The same workflow — create a collection, index faces, search by selfie. The only lines that change are the import and the client. Method names, arguments, and the response keys you read (FaceMatches, Similarity, ExternalImageId) stay the same.

AWS Rekognition (boto3)

rekognition.py
import boto3

rek = boto3.client("rekognition", region_name="us-east-1")

rek.create_collection(CollectionId="event-2026")

rek.index_faces(
    CollectionId="event-2026",
    Image={"S3Object": {"Bucket": "my-bucket", "Name": "guest.jpg"}},
    ExternalImageId="guest-1",
)

res = rek.search_faces_by_image(
    CollectionId="event-2026",
    Image={"Bytes": open("selfie.jpg", "rb").read()},
    FaceMatchThreshold=90,
    MaxFaces=5,
)
for m in res["FaceMatches"]:
    print(m["Face"]["ExternalImageId"], m["Similarity"])

SightRadar (drop-in shim)

sightradar.py
from sightradar_rekognition_shim import client   # 1. swap import

rek = client(api_key="frs_...")                  # 2. swap constructor

rek.create_collection(CollectionId="event-2026")

rek.index_faces(
    CollectionId="event-2026",
    Image={"URL": "https://cdn.example.com/guest.jpg"},
    ExternalImageId="guest-1",
)

res = rek.search_faces_by_image(
    CollectionId="event-2026",
    Image={"Bytes": open("selfie.jpg", "rb").read()},
    FaceMatchThreshold=90,
    MaxFaces=5,
)
for m in res["FaceMatches"]:
    print(m["Face"]["ExternalImageId"], m["Similarity"])

Install the Python shim

pip install sightradar-rekognition-shim

Prefer no extra dependency? Call the REST API directly:

# Or skip the shim and call the native REST API directly. Same Bearer-key
# auth, but native paths, fields and response shapes — see the method mapping below:
curl https://api.sightradar.com/v1/collections/event-2026/search \
  -H "Authorization: Bearer frs_..." \
  -F file=@selfie.jpg -F threshold=0.9 -F limit=5

⚠️ Score scale: Rekognition is 0–100, SightRadar native is 0–1

AWS Rekognition returns Similarity and takes FaceMatchThreshold on a 0–100 scale. The SightRadar native REST API and SDKs use a 0–1 cosine score — so a Rekognition threshold of 90 becomes 0.9 (divide by 100). The drop-in Rekognition shim above keeps the 0–100 scale for you; only convert when you call the native API or SDK directly.

Method mapping

The Rekognition operations SightRadar supports, and the endpoint each maps to. Two conventions are translated for you: scores convert between Rekognition's 0–100 scale and SightRadar's 0–1, and image inputs accept Bytes, S3Object, or a URL.

AWS RekognitionSightRadar
CreateCollectionPOST /v1/collections
DeleteCollectionDELETE /v1/collections/{id}
ListCollectionsGET /v1/collections
DescribeCollectionGET /v1/collections/{id}
IndexFacesPOST /v1/collections/{id}/index
SearchFacesByImagePOST /v1/collections/{id}/search
SearchFaces (by id)POST /v1/collections/{id}/search-by-id
DetectFacesPOST /v1/detect
CompareFacesPOST /v1/compare

Operations SightRadar doesn't offer (label/text detection, celebrity recognition, async video) raise a clear error in the shim rather than silently doing nothing — so you know exactly what to adjust.

The actual migration, step by step

The code swap is the easy part. This is the order that keeps a migration boring — every step is reversible until the last one.

  1. 1

    Get a key and run one call against a scratch collection

    Before touching your application, create a throwaway collection and index a single photo. That proves credentials, network path and image handling in about a minute, and it costs one photo. Do this first so any later failure is unambiguous.

  2. 2

    Point a copy of your integration at the new endpoint

    On Python/boto3, swap the import for the shim in a branch, not in production — that is the path where your call sites keep their Rekognition shapes and the diff really is two lines plus credentials. Going straight to raw REST is a different job: the native endpoints use their own paths, request fields and response shapes (matches[].photo_id and a 0-1 score, not FaceMatches[].Similarity on 0-100), so budget for mapping each call rather than a base-URL swap.

  3. 3

    Re-index your existing faces

    This is the one step that is genuinely unavoidable. Face embeddings are model-specific vectors and are not portable between engines — no provider can import another's faceprints. You re-run indexing over the source images you still hold, which is a batch job priced at the batch rate.

  4. 4

    Dual-write, then compare results on live traffic

    Index new photos into both systems for a period and send each search to both. Compare the ranked photo IDs rather than the raw scores: the scales differ (Rekognition 0-100, SightRadar 0-1) and the shim converts for you, but ranking agreement is the signal that matters.

  5. 5

    Re-calibrate your threshold on your own data

    Do not carry your Rekognition threshold across as a number. Different models place the same decision at a different cut-off, so pick the operating point from your own matched and unmatched pairs. This is the step teams skip and then blame on accuracy.

  6. 6

    Cut over reads, keep the old collection until you are sure

    Flip searches to SightRadar while the old collection still exists. Rollback is then a config change rather than a re-migration. Delete the old data only once you have run a full cycle you are happy with.

Cost of the one-off re-index at the batch rate: $0.00062 per photo — 100,000 photos is about $62.00. Worked examples are on pricing.

Questions teams ask before switching

Can I import my existing face vectors instead of re-indexing?

No, and neither can anyone else. An embedding is a numeric vector produced by one specific model; another engine's vectors are not meaningful in it. Every face-recognition migration between providers requires re-indexing from the source images. Budget it as a one-off batch job at the batch rate rather than as ongoing cost.

How long does a migration actually take?

The code change is minutes. The honest cost is the re-index and the threshold re-calibration, both of which scale with your library rather than your codebase. A dual-write comparison period is worth more than rushing the cutover.

Do my Rekognition similarity thresholds carry over?

The SCALE is converted for you — the shim maps Rekognition's 0-100 onto SightRadar's 0-1 — but the right operating point is model-specific and must be re-derived from your own data. Treat a carried-over threshold as a starting guess, never as a setting.

What if I use a Rekognition feature SightRadar does not have?

Label detection, text detection, celebrity recognition and async video analysis are out of scope: SightRadar does face recognition only. The shim raises a clear error for those rather than silently returning nothing, so unsupported calls surface during your test run instead of in production.

Can I run both providers side by side?

Yes, and it is the recommended path. Nothing about SightRadar assumes exclusivity — index into both, search both, compare rankings, and cut over when the comparison satisfies you. Plenty of teams also keep a detection-only API for non-identity work.

Do I need an AWS account, IAM role, or a quota increase?

None of the three. Sign-up is email plus an API key, there is no default transactions-per-second ceiling to raise by support ticket, and no approval gate before you can call the recognition operations.

Weighing the two side by side? SightRadar vs AWS Rekognition covers price, access model and console in detail — including where Rekognition is the better fit.

Why teams switch

  • Drop-in compatible

    Keep your Rekognition-shaped code. The shim or a two-line REST swap is the whole migration.

  • Accuracy you can verify

    Run your own selfie against your own collection in the playground before you commit a line of code.

  • No subscription, no minimum usage

    Pay only for what you use, billed per photo processed. Spend nothing until you call the API — no surprise bills.

  • Lower cost than Rekognition

    Real-time recognition runs about 26% below AWS Rekognition Group-1, with batch lower still.