rekognition

package
v1.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 6, 2026 License: MIT Imports: 26 Imported by: 0

README

Rekognition

Parity grade: A · SDK aws-sdk-go-v2/service/rekognition@v1.58.0 · last audited 2026-08-29 (903d74b67)

Coverage

Metric Value
PARITY entries audited 50 (47 ok, 3 partial)
Feature families 3 (3 ok)
Known gaps 3
Deferred items 3
Resource leaks clean
Known gaps
  • CreateProjectVersion still drops TrainingData/TestingData contents (Custom Labels external-manifest structures: TrainingData/TestingData -> []Asset -> GroundTruthManifest -> S3Object, 3-4 levels, no unions, structurally simple but pointless to store -- the only place they'd resurface is TrainingDataResult/TestingDataResult, which requires a training-completion lifecycle this backend never reaches; both-or-neither presence is still cross-validated) — see Notes #6
  • Needs real video/image ML (2026-10-04): GetPersonTracking.SortBy ordering (Persons always empty), IndexFaces.DetectionAttributes detail output and QualityFilter/MaxFaces filtering (no FaceDetail or per-face quality is ever produced; one synthetic face per call), DetectLabels IMAGE_PROPERTIES (dominant colors/quality would be fabricated). The request values are now validated (enums, MaxFaces >= 1) but cannot change results.
  • Unmodeled subsystems (2026-10-05): Start* job notification channels (no SNS completion publish from the job state machine), GetCelebrityRecognition/GetFaceSearch SortBy (result arrays always empty), StartLabelDetection Features/Settings and DetectLabels Settings (no ML to filter on), CreateFaceLivenessSession KmsKeyId/Settings (no audit-image output to encrypt or limit), DetectModerationLabels HumanLoopConfig/ProjectVersion (no A2I or custom-model inference), StartStreamProcessor StartSelector/StopSelector (no Kinesis Video fragment source).
Deferred
  • ProjectVersionDescription's BaseModelVersion (needs data this emulator cannot have: an AWS-internal base-model-catalog string, not derivable or user-supplied) and BillableTrainingTimeInSeconds/TrainingEndTimestamp/EvaluationResult/ManifestSummary/TestingDataResult/TrainingDataResult (needs a lifecycle that does not exist: all are documented as populated only once training completes, and this backend's Status never advances past TRAINING_IN_PROGRESS; EvaluationResult additionally requires a fabricated F1 score, which the no-fabrication rule forbids outright) — see Notes #6
  • SegmentTypeInfo.ModelVersion (needs data this emulator cannot have: AWS-internal segment-detection model build string) — Type is modeled, ModelVersion is not, see Notes #6
  • Detection-result arrays (Celebrities/ModerationLabels/Faces/Labels/Persons/Segments/TextDetections) stay synthesized-empty; acceptable per the ML-mock exemption, not individually wire-diffed field-by-field this sweep (this sweep's scope was CreateProjectVersion/ProjectVersionDescription/async-video envelope fields, not the ML detection payloads themselves)

More

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrNameInUse is a sentinel for Create* operations whose Name/Arn is
	// already taken by a resource type that the real AWS API reports as
	// ResourceInUseException -- stream processors, projects, and project
	// versions -- as opposed to ResourceAlreadyExistsException (collections,
	// datasets) or ConflictException (users). Verified against
	// aws-sdk-go-v2/service/rekognition's per-operation deserializers.go
	// error switches (each generated Create* op only recognizes a specific
	// exception type; anything else deserializes as an untyped
	// smithy.GenericAPIError, breaking SDK-side `errors.As` typed matching).
	//
	// Also reused (via the ErrProjectHasVersions/ErrProjectVersionInUse/
	// ErrDatasetInUse sentinels below) for Delete* preconditions that the
	// same operations' deserializers.go error switches model as
	// ResourceInUseException.
	ErrNameInUse = errors.New("resource name already in use")
	// ErrIdempotentParameterMismatch is a ClientRequestToken reused with different parameters.
	ErrIdempotentParameterMismatch = errors.New("idempotency token reused with different parameters")
	// ErrUserConflict is returned when CreateUser is called with a UserId
	// that already exists; AWS reports this as ConflictException (not
	// ResourceAlreadyExistsException).
	ErrUserConflict = errors.New("user already exists")

	// ErrCollectionNotFound is returned when a collection does not exist.
	ErrCollectionNotFound = awserr.New(errResourceNotFound, awserr.ErrNotFound)
	// ErrCollectionAlreadyExists is returned when a collection already exists.
	ErrCollectionAlreadyExists = awserr.New(errConflictException, awserr.ErrAlreadyExists)
	// ErrStreamProcessorNotFound is returned when a stream processor does not exist.
	ErrStreamProcessorNotFound = awserr.New(errResourceNotFound, awserr.ErrNotFound)
	// ErrStreamProcessorAlreadyExists is returned when a stream processor already
	// exists. Maps to ResourceInUseException, not ResourceAlreadyExistsException.
	ErrStreamProcessorAlreadyExists = awserr.New(errResourceInUse, ErrNameInUse)
	// ErrFaceNotFound is returned when a face does not exist in a collection.
	ErrFaceNotFound = awserr.New(errResourceNotFound, awserr.ErrNotFound)
	// ErrValidation is returned on invalid input.
	ErrValidation = awserr.New(errValidation, awserr.ErrInvalidParameter)
	// ErrUnknownOperation is returned when the requested operation is not implemented.
	ErrUnknownOperation = errors.New("unknown operation")

	// ErrProjectNotFound is returned when a project does not exist.
	ErrProjectNotFound = awserr.New(errResourceNotFound, awserr.ErrNotFound)
	// ErrProjectAlreadyExists is returned when a project name is already in
	// use. Maps to ResourceInUseException (not ResourceAlreadyExistsException
	// -- see ErrNameInUse).
	ErrProjectAlreadyExists = awserr.New(errResourceInUse, ErrNameInUse)
	// ErrProjectVersionNotFound is returned when a project version does not exist.
	ErrProjectVersionNotFound = awserr.New(errResourceNotFound, awserr.ErrNotFound)
	// ErrProjectVersionAlreadyExists is returned when a project version name
	// is already in use. Maps to ResourceInUseException (see ErrNameInUse).
	ErrProjectVersionAlreadyExists = awserr.New(errResourceInUse, ErrNameInUse)
	// ErrDatasetNotFound is returned when a dataset does not exist.
	ErrDatasetNotFound = awserr.New(errResourceNotFound, awserr.ErrNotFound)
	// ErrDatasetAlreadyExists is returned when CreateDataset is called for a
	// project that already has a dataset of the requested DatasetType.
	// Maps to ResourceAlreadyExistsException, same exception type as
	// CreateCollection (verified against aws-sdk-go-v2/service/rekognition's
	// CreateDataset error deserializer switch -- see ErrNameInUse's doc
	// comment for why this varies per Create* op).
	ErrDatasetAlreadyExists = awserr.New(errResourceAlreadyExists, awserr.ErrAlreadyExists)
	// ErrUserNotFound is returned when a user does not exist.
	ErrUserNotFound = awserr.New(errResourceNotFound, awserr.ErrNotFound)
	// ErrUserAlreadyExists is returned when a UserId is already registered
	// in the collection. Maps to ConflictException (not
	// ResourceAlreadyExistsException -- see ErrUserConflict).
	ErrUserAlreadyExists = awserr.New(errConflictException, ErrUserConflict)
	// ErrLivenessSessionNotFound is returned when a liveness session does not exist.
	ErrLivenessSessionNotFound = awserr.New(errResourceNotFound, awserr.ErrNotFound)
	// ErrAsyncJobNotFound is returned when an async job does not exist.
	ErrAsyncJobNotFound = awserr.New(errResourceNotFound, awserr.ErrNotFound)
	// ErrMediaAnalysisJobNotFound is returned when a media analysis job does not exist.
	ErrMediaAnalysisJobNotFound = awserr.New(errResourceNotFound, awserr.ErrNotFound)
	// ErrInvalidS3Object is returned when an Image/Video/Input references an
	// S3Object the wired S3 backend cannot find. Real AWS reports this as
	// InvalidS3ObjectException (rekognition@v1.54.4 types/errors.go:344):
	// "Amazon Rekognition is unable to access the S3 object specified in the
	// request".
	ErrInvalidS3Object = errors.New("s3 object is not accessible")

	// ErrProjectHasVersions is returned when DeleteProject is called on a
	// project that still has project versions. DeleteProject's own doc
	// comment (api_op_DeleteProject.go): "To delete a project you must
	// first delete all models or adapters associated with the project.".
	ErrProjectHasVersions = awserr.New(errResourceInUse, ErrNameInUse)
	// ErrProjectVersionInUse is returned when DeleteProjectVersion is called
	// on a version that is running or training. DeleteProjectVersion's own
	// doc comment (api_op_DeleteProjectVersion.go): "You can't delete a
	// project version if it is running or if it is training.".
	ErrProjectVersionInUse = awserr.New(errResourceInUse, ErrNameInUse)
	// ErrDatasetInUse is returned when DeleteDataset is called on a dataset
	// that is creating or updating. DeleteDataset's own doc comment
	// (api_op_DeleteDataset.go): "You can't delete a dataset while it is
	// creating (Status = CREATE_IN_PROGRESS) or if the dataset is updating
	// (Status = UPDATE_IN_PROGRESS).".
	ErrDatasetInUse = awserr.New(errResourceInUse, ErrNameInUse)
)
View Source
var ErrNilAppContext = errors.New("rekognition: nil app context")

ErrNilAppContext is returned when Init is called with a nil AppContext.

Functions

This section is empty.

Types

type AssociatedFace

type AssociatedFace struct {
	FaceID string
}

AssociatedFace is a face successfully associated to a user.

type AsyncJob

type AsyncJob struct {
	JobID          string
	JobStatus      string
	NextToken      string
	JobTag         string
	VideoS3Bucket  string
	VideoS3Name    string
	VideoS3Version string
	SegmentTypes   []string
}

AsyncJob represents a Rekognition async video analysis job.

type BoundingBox added in v1.2.0

type BoundingBox struct {
	Height *float32
	Left   *float32
	Top    *float32
	Width  *float32
}

BoundingBox mirrors AWS's types.BoundingBox: a rectangular region of interest.

type Collection

type Collection struct {
	CreationTimestamp time.Time
	Tags              map[string]string
	CollectionID      string
	CollectionARN     string
	FaceModelVersion  string
	UserCount         int64
}

Collection represents an Amazon Rekognition face collection. CreationTimestamp is first so its non-pointer prefix reduces GC pointer bytes.

type CopyProjectVersionParams added in v1.3.1

type CopyProjectVersionParams struct {
	Tags                    map[string]string
	KmsKeyID                string
	SourceProjectARN        string
	OutputConfigS3Bucket    string
	OutputConfigS3KeyPrefix string
}

CopyProjectVersionParams groups CopyProjectVersionInput's fields beyond SourceProjectVersionArn/DestinationProjectArn/VersionName: SourceProjectArn (the source project the copied version must belong to) and OutputConfig (where the copied training results are stored in the destination account).

type CreateProjectParams added in v1.3.1

type CreateProjectParams struct {
	Tags       map[string]string
	AutoUpdate string
	Feature    string
}

CreateProjectParams groups CreateProjectInput's fields beyond ProjectName/Tags. Feature defaults to CUSTOM_LABELS when empty per api_op_CreateProject.go's documented "If no value is provided CUSTOM_LABELS is used as a default." AutoUpdate has no documented default, so an empty value is stored and echoed back as empty rather than guessed.

type CreateProjectVersionParams added in v1.2.0

type CreateProjectVersionParams struct {
	FeatureConfigContentModConfidenceThresh *float32
	OutputConfigS3Bucket                    string
	OutputConfigS3KeyPrefix                 string
	KmsKeyID                                string
	VersionDescription                      string
}

CreateProjectVersionParams groups CreateProjectVersionInput's fields beyond ProjectArn/VersionName/Tags (OutputConfig/KmsKeyId/ VersionDescription), so the CreateProjectVersion backend method signature stays manageable as fields are added. FeatureConfigContentModConfidenceThresh is CustomizationFeatureConfig.ContentModeration.ConfidenceThreshold, a 2-level struct with no unions (types.go:486,495) -- shallow enough to model verbatim. TrainingData/TestingData are intentionally NOT modeled: both reference an external Custom Labels S3 manifest that this in-memory backend never trains against, so there is nowhere downstream (TrainingDataResult/ TestingDataResult require a training-completion lifecycle this backend doesn't have) to surface a stored copy -- see PARITY.md deferred. Their presence is still cross-validated (see handleCreateProjectVersion).

type CreateStreamProcessorParams added in v1.2.0

type CreateStreamProcessorParams struct {
	Input                 *StreamProcessorInput
	Output                *StreamProcessorOutput
	Settings              *StreamProcessorSettings
	NotificationChannel   *StreamProcessorNotificationChannel
	DataSharingPreference *StreamProcessorDataSharingPreference
	KmsKeyID              string
	RegionsOfInterest     []RegionOfInterest
}

CreateStreamProcessorParams groups CreateStreamProcessorInput's AWS-modeled fields beyond Name/RoleArn/Tags (Input/Output/Settings/ NotificationChannel/DataSharingPreference/RegionsOfInterest/KmsKeyId), so the CreateStreamProcessor backend method signature doesn't grow an unbounded positional parameter list as fields are added.

type Dataset

type Dataset struct {
	CreationTimestamp    time.Time
	LastUpdatedTimestamp time.Time
	DatasetARN           string
	ProjectARN           string
	DatasetType          string
	Status               string
	StatusMessage        string
	Stats                DatasetStats
}

Dataset represents a Rekognition Custom Labels dataset.

type DatasetDistribution

type DatasetDistribution struct {
	DatasetARN string
}

DatasetDistribution is a dataset reference for DistributeDatasetEntries.

type DatasetLabel

type DatasetLabel struct {
	LabelName  string
	EntryCount int64
}

DatasetLabel represents a label entry in a dataset.

type DatasetStats added in v1.3.1

type DatasetStats struct {
	TotalEntries   int64
	LabeledEntries int64
	TotalLabels    int64
	ErrorEntries   int64
}

DatasetStats mirrors types.DatasetStats (TotalEntries/LabeledEntries/ TotalLabels, computed from the dataset's stored manifest entries; ErrorEntries is always 0 -- this backend has no entry-level error concept, so 0 is the accurate value, not a fabrication).

type DisassociatedFace

type DisassociatedFace struct {
	FaceID string
}

DisassociatedFace is a face successfully disassociated from a user.

type Face

type Face struct {
	FaceID          string
	ImageID         string
	ExternalImageID string
	CollectionID    string
	Confidence      float64
}

Face represents an indexed face.

type FaceMatch

type FaceMatch struct {
	Face       *Face
	Similarity float64
}

FaceMatch represents a face match result.

type Handler

type Handler struct {
	Backend StorageBackend
	// contains filtered or unexported fields
}

Handler handles Rekognition HTTP requests using X-Amz-Target routing.

func NewHandler

func NewHandler(b StorageBackend) *Handler

NewHandler constructs a new Handler.

func (*Handler) BackendFor

func (h *Handler) BackendFor(region string) StorageBackend

BackendFor returns the backend serving region: the home backend, or the sibling built on first use.

func (*Handler) EnableRegions

func (h *Handler) EnableRegions()

EnableRegions makes h serve every other region through lazily built per-region siblings.

func (*Handler) ExtractOperation

func (h *Handler) ExtractOperation(c *echo.Context) string

ExtractOperation extracts the operation name from the X-Amz-Target header.

func (*Handler) ExtractResource

func (h *Handler) ExtractResource(_ *echo.Context) string

ExtractResource extracts the resource identifier from the request body.

func (*Handler) GetSupportedOperations

func (h *Handler) GetSupportedOperations() []string

GetSupportedOperations returns the list of supported operations.

func (*Handler) Handler

func (h *Handler) Handler() echo.HandlerFunc

Handler serves each request from the handler of its region.

func (*Handler) MatchPriority

func (h *Handler) MatchPriority() int

MatchPriority returns routing priority.

func (*Handler) Name

func (h *Handler) Name() string

Name returns the service name.

func (*Handler) RegionBackends

func (h *Handler) RegionBackends() []StorageBackend

RegionBackends returns the home backend followed by every sibling built so far.

func (*Handler) RegionHandler

func (h *Handler) RegionHandler(region string) *Handler

RegionHandler returns the handler serving region: h itself for the home region, else its sibling.

func (*Handler) Reset

func (h *Handler) Reset()

Reset clears every region.

func (*Handler) Restore

func (h *Handler) Restore(ctx context.Context, data []byte) error

Restore implements persistence.Persistable.

func (*Handler) RouteMatcher

func (h *Handler) RouteMatcher() service.Matcher

RouteMatcher returns a matcher that accepts Rekognition X-Amz-Target headers.

func (*Handler) Snapshot

func (h *Handler) Snapshot(ctx context.Context) []byte

Snapshot implements persistence.Persistable; other regions ride in an additive "regions" key.

type InMemoryBackend

type InMemoryBackend struct {
	// contains filtered or unexported fields
}

InMemoryBackend is an in-memory implementation of StorageBackend.

func NewInMemoryBackend

func NewInMemoryBackend(accountID, region string) *InMemoryBackend

NewInMemoryBackend creates a new in-memory backend.

func (*InMemoryBackend) AccountID

func (b *InMemoryBackend) AccountID() string

AccountID returns the account ID.

func (*InMemoryBackend) AssociateFaces

func (b *InMemoryBackend) AssociateFaces(
	collectionID, userID string, faceIDs []string, userMatchThreshold float64,
) ([]*AssociatedFace, []*UnsuccessfulFaceAssociation, error)

func (*InMemoryBackend) CopyProjectVersion

func (b *InMemoryBackend) CopyProjectVersion(
	sourceProjectVersionARN, destinationProjectARN, versionName string,
	params CopyProjectVersionParams,
) (*ProjectVersion, error)

CopyProjectVersion copies a project version to another project. The source version must belong to params.SourceProjectARN -- AWS reports a mismatch the same way it reports any other missing source, ResourceNotFoundException (verified against CopyProjectVersion's deserializeOpError switch, which declares ResourceNotFoundException but no ValidationException).

func (*InMemoryBackend) CreateCollection

func (b *InMemoryBackend) CreateCollection(collectionID string, tags map[string]string) (*Collection, error)

CreateCollection creates a new face collection.

func (*InMemoryBackend) CreateDataset

func (b *InMemoryBackend) CreateDataset(
	projectARN, datasetType string, tags map[string]string,
) (*Dataset, error)

CreateDataset creates a new dataset. Real AWS rejects a second dataset of the same DatasetType for a project with ResourceAlreadyExistsException; datasetARN is always uuid-suffixed (so two datasets of the same type never collide on table key), so that check must be done explicitly here via a scan for an existing (ProjectARN, DatasetType) pair.

func (*InMemoryBackend) CreateFaceLivenessSession

func (b *InMemoryBackend) CreateFaceLivenessSession(clientRequestToken string) (string, error)

CreateFaceLivenessSession creates a new face liveness session.

func (*InMemoryBackend) CreateProject

func (b *InMemoryBackend) CreateProject(name string, params CreateProjectParams) (*Project, error)

CreateProject creates a new Rekognition Custom Labels project; params.Tags are applied to its ARN.

func (*InMemoryBackend) CreateProjectVersion

func (b *InMemoryBackend) CreateProjectVersion(
	projectARN, versionName string,
	params CreateProjectVersionParams,
	tags map[string]string,
) (*ProjectVersion, error)

CreateProjectVersion creates a new model version within a project. params carries CreateProjectVersionInput's fields beyond ProjectArn/VersionName/ Tags (OutputConfig/KmsKeyId/VersionDescription) -- all stored verbatim and returned unchanged by DescribeProjectVersions. tags are applied the same way CreateStreamProcessor applies its initial tags (b.tags keyed by ARN); ProjectVersion ARNs are taggable per TagResource's doc (see resourceExists in tags.go).

func (*InMemoryBackend) CreateStreamProcessor

func (b *InMemoryBackend) CreateStreamProcessor(
	name, roleARN string,
	params CreateStreamProcessorParams,
	tags map[string]string,
) (*StreamProcessor, error)

CreateStreamProcessor creates a new stream processor. params carries the AWS-modeled fields beyond Name/RoleArn/Tags (Input/Output/Settings/ NotificationChannel/DataSharingPreference/RegionsOfInterest/KmsKeyId) — all stored verbatim and returned unchanged by DescribeStreamProcessor.

func (*InMemoryBackend) CreateUser

func (b *InMemoryBackend) CreateUser(collectionID, userID string) error

CreateUser creates a user in a collection.

func (*InMemoryBackend) DeleteCollection

func (b *InMemoryBackend) DeleteCollection(collectionID string) error

DeleteCollection deletes a face collection.

func (*InMemoryBackend) DeleteDataset

func (b *InMemoryBackend) DeleteDataset(datasetARN string) error

DeleteDataset deletes a dataset. DeleteDatasetInput's own doc comment (api_op_DeleteDataset.go): "You can't delete a dataset while it is creating (Status = CREATE_IN_PROGRESS) or if the dataset is updating (Status = UPDATE_IN_PROGRESS).".

func (*InMemoryBackend) DeleteFaces

func (b *InMemoryBackend) DeleteFaces(collectionID string, faceIDs []string) ([]string, error)

DeleteFaces removes faces from a collection.

func (*InMemoryBackend) DeleteProject

func (b *InMemoryBackend) DeleteProject(projectARN string) error

DeleteProject deletes a project. DeleteProjectInput's own doc comment (api_op_DeleteProject.go): "To delete a project you must first delete all models or adapters associated with the project." and "deleting a given project will also delete any ProjectPolicies associated with that project" -- so ProjectPolicies cascade while ProjectVersions block.

func (*InMemoryBackend) DeleteProjectPolicy

func (b *InMemoryBackend) DeleteProjectPolicy(
	projectARN, policyName, policyRevisionID string,
) error

DeleteProjectPolicy deletes a project policy.

func (*InMemoryBackend) DeleteProjectVersion

func (b *InMemoryBackend) DeleteProjectVersion(projectVersionARN string) error

DeleteProjectVersion deletes a project version. DeleteProjectVersionInput's own doc comment (api_op_DeleteProjectVersion.go): "You can't delete a project version if it is running or if it is training.".

func (*InMemoryBackend) DeleteStreamProcessor

func (b *InMemoryBackend) DeleteStreamProcessor(name string) error

DeleteStreamProcessor deletes a stream processor.

func (*InMemoryBackend) DeleteUser

func (b *InMemoryBackend) DeleteUser(collectionID, userID string) error

DeleteUser removes a user from a collection.

func (*InMemoryBackend) DescribeCollection

func (b *InMemoryBackend) DescribeCollection(collectionID string) (*Collection, error)

DescribeCollection returns details about a collection.

func (*InMemoryBackend) DescribeDataset

func (b *InMemoryBackend) DescribeDataset(datasetARN string) (*Dataset, error)

DescribeDataset returns details about a dataset.

func (*InMemoryBackend) DescribeProjectVersions

func (b *InMemoryBackend) DescribeProjectVersions(
	projectARN string, versionNames []string, maxResults int32, nextToken string,
) ([]*ProjectVersion, string, error)

DescribeProjectVersions lists versions for a project, optionally filtered by version names.

func (*InMemoryBackend) DescribeProjects

func (b *InMemoryBackend) DescribeProjects(
	projectNames, features []string, maxResults int32, nextToken string,
) ([]*Project, string, error)

DescribeProjects lists projects, optionally filtered by name and/or customization feature. DescribeProjectsInput.ProjectNames filters by name (see storedProject's doc comment), not by ARN -- there is no ProjectArns filter member on the real input at all. An absent/empty features filter defaults to CUSTOM_LABELS only (own doc comment, api_op_DescribeProjects.go).

func (*InMemoryBackend) DescribeStreamProcessor

func (b *InMemoryBackend) DescribeStreamProcessor(name string) (*StreamProcessor, error)

DescribeStreamProcessor returns details about a stream processor.

func (*InMemoryBackend) DisassociateFaces

func (b *InMemoryBackend) DisassociateFaces(
	collectionID, userID string, faceIDs []string,
) ([]*DisassociatedFace, []*UnsuccessfulFaceDisassociation, error)

DisassociateFaces removes faces from a user.

func (*InMemoryBackend) DistributeDatasetEntries

func (b *InMemoryBackend) DistributeDatasetEntries(datasets []DatasetDistribution) error

DistributeDatasetEntries validates datasets and marks them as UPDATE_IN_PROGRESS.

func (*InMemoryBackend) GetAsyncJob

func (b *InMemoryBackend) GetAsyncJob(jobID string) (*AsyncJob, error)

GetAsyncJob returns an async job by ID, simulating state progression on each poll.

func (*InMemoryBackend) GetFaceLivenessSessionResults

func (b *InMemoryBackend) GetFaceLivenessSessionResults(sessionID string) (*LivenessSessionResult, error)

GetFaceLivenessSessionResults returns the result of a liveness session.

func (*InMemoryBackend) GetMediaAnalysisJob

func (b *InMemoryBackend) GetMediaAnalysisJob(jobID string) (*MediaAnalysisJob, error)

GetMediaAnalysisJob returns a media analysis job by ID.

func (*InMemoryBackend) Idempotency

func (b *InMemoryBackend) Idempotency() *idempotency.Memo

Idempotency returns the bounded ClientRequestToken memo.

func (*InMemoryBackend) IndexFaces

func (b *InMemoryBackend) IndexFaces(collectionID, externalImageID string) ([]*Face, error)

IndexFaces indexes faces into a collection (simulated — no real image processing).

func (*InMemoryBackend) ListCollections

func (b *InMemoryBackend) ListCollections(maxResults int32, nextToken string) ([]*Collection, string, error)

ListCollections returns a paginated list of collections.

func (*InMemoryBackend) ListDatasetEntries

func (b *InMemoryBackend) ListDatasetEntries(
	datasetARN string, filter ListDatasetEntriesFilter, maxResults int32, nextToken string,
) ([]string, string, error)

ListDatasetEntries returns a paginated list of dataset entries, optionally constrained by filter.

func (*InMemoryBackend) ListDatasetLabels

func (b *InMemoryBackend) ListDatasetLabels(
	datasetARN string, maxResults int32, nextToken string,
) ([]*DatasetLabel, string, error)

ListDatasetLabels parses stored dataset entries and returns labels with occurrence counts.

func (*InMemoryBackend) ListFaces

func (b *InMemoryBackend) ListFaces(
	collectionID string, faceIDs []string, userID string, maxResults int32, nextToken string,
) ([]*Face, string, error)

ListFaces returns a paginated list of faces in a collection, optionally constrained to faceIDs and/or the faces associated with userID (own doc comments, api_op_ListFaces.go).

func (*InMemoryBackend) ListMediaAnalysisJobs

func (b *InMemoryBackend) ListMediaAnalysisJobs(
	maxResults int32, nextToken string,
) ([]*MediaAnalysisJob, string, error)

ListMediaAnalysisJobs returns a paginated list of media analysis jobs.

func (*InMemoryBackend) ListProjectPolicies

func (b *InMemoryBackend) ListProjectPolicies(
	projectARN string, maxResults int32, nextToken string,
) ([]*ProjectPolicy, string, error)

ListProjectPolicies lists policies for a project.

func (*InMemoryBackend) ListStreamProcessors

func (b *InMemoryBackend) ListStreamProcessors(maxResults int32, nextToken string) ([]*StreamProcessor, string, error)

ListStreamProcessors returns a paginated list of stream processors.

func (*InMemoryBackend) ListTagsForResource

func (b *InMemoryBackend) ListTagsForResource(resourceARN string) (map[string]string, error)

ListTagsForResource returns tags for a resource.

func (*InMemoryBackend) ListUsers

func (b *InMemoryBackend) ListUsers(
	collectionID string, maxResults int32, nextToken string,
) ([]*User, string, error)

ListUsers returns a paginated list of users in a collection.

func (*InMemoryBackend) PutProjectPolicy

func (b *InMemoryBackend) PutProjectPolicy(
	projectARN, policyName, policyDocument, policyRevisionID string,
) (string, error)

PutProjectPolicy creates or updates a project policy.

func (*InMemoryBackend) Region

func (b *InMemoryBackend) Region() string

Region returns the region.

func (*InMemoryBackend) Reset

func (b *InMemoryBackend) Reset()

Reset clears all stored state.

func (*InMemoryBackend) Restore

func (b *InMemoryBackend) Restore(ctx context.Context, data []byte) error

Restore deserializes backend state from JSON. It implements persistence.Persistable.

func (*InMemoryBackend) SearchFaces

func (b *InMemoryBackend) SearchFaces(
	collectionID, faceID string, maxFaces int32, faceMatchThreshold float64,
) ([]*FaceMatch, error)

SearchFaces searches for faces that match a given face ID.

func (*InMemoryBackend) SearchFacesByImage

func (b *InMemoryBackend) SearchFacesByImage(
	collectionID string,
	maxFaces int32,
	imageKey string,
	faceMatchThreshold float64,
) ([]*FaceMatch, error)

SearchFacesByImage searches for faces matching an image (simulated). imageKey is a stable string derived from the image reference (S3 path or byte length) and is used to vary similarity scores per image rather than returning a fixed value.

func (*InMemoryBackend) SearchUsers

func (b *InMemoryBackend) SearchUsers(
	collectionID, userID string, maxUsers int32, userMatchThreshold float64,
) ([]*UserMatch, error)

SearchUsers returns up to maxUsers users with a simulated similarity score.

func (*InMemoryBackend) SearchUsersByFace added in v1.5.0

func (b *InMemoryBackend) SearchUsersByFace(collectionID, faceID string, maxUsers int32) ([]*UserMatch, error)

SearchUsersByFace returns up to maxUsers users with a simulated similarity score, searching by FaceId rather than UserId. Real SearchUsersInput (rekognition@v1.54.4 api_op_SearchUsers.go) documents that "If a FaceId is provided, UserId isn't required to be present in the Collection" -- so this only requires the face itself to exist, not that it be associated with any User, and reuses the same facesByCollection index SearchFaces does (faces.go) rather than adding a new one -- gopherstack-2wvq.

func (*InMemoryBackend) SearchUsersByImage

func (b *InMemoryBackend) SearchUsersByImage(
	collectionID string,
	maxUsers int32,
	imageKey string,
	userMatchThreshold float64,
) ([]*UserMatch, error)

SearchUsersByImage returns up to maxUsers users with a deterministic similarity score derived from the image reference and each candidate user's identity.

func (*InMemoryBackend) SetS3Backend

func (b *InMemoryBackend) SetS3Backend(s3 S3Backend)

SetS3Backend wires S3 so an Image/Video/Input S3Object is validated against real S3 state instead of only being stored/echoed.

func (*InMemoryBackend) Snapshot

func (b *InMemoryBackend) Snapshot(ctx context.Context) []byte

Snapshot serializes the backend state to JSON. It implements persistence.Persistable.

func (*InMemoryBackend) StartAsyncJob

func (b *InMemoryBackend) StartAsyncJob(params StartAsyncJobParams) (string, error)

StartAsyncJob creates a new async video analysis job.

func (*InMemoryBackend) StartMediaAnalysisJob

func (b *InMemoryBackend) StartMediaAnalysisJob(jobName string, params StartMediaAnalysisJobParams) (string, error)

StartMediaAnalysisJob creates a new media analysis job.

func (*InMemoryBackend) StartProjectVersion

func (b *InMemoryBackend) StartProjectVersion(
	projectVersionARN string, minInferenceUnits, maxInferenceUnits int32,
) error

StartProjectVersion sets a project version status to RUNNING.

func (*InMemoryBackend) StartStreamProcessor

func (b *InMemoryBackend) StartStreamProcessor(name string) error

StartStreamProcessor starts a stream processor.

func (*InMemoryBackend) StopProjectVersion

func (b *InMemoryBackend) StopProjectVersion(projectVersionARN string) error

StopProjectVersion sets a project version status to STOPPED.

func (*InMemoryBackend) StopStreamProcessor

func (b *InMemoryBackend) StopStreamProcessor(name string) error

StopStreamProcessor stops a stream processor.

func (*InMemoryBackend) TagResource

func (b *InMemoryBackend) TagResource(resourceARN string, tags map[string]string) error

TagResource adds or updates tags on a resource.

func (*InMemoryBackend) TaggedResources added in v1.3.1

func (b *InMemoryBackend) TaggedResources() []TaggedEntry

TaggedResources returns every collection, stream processor, and project version ARN that currently has at least one tag applied via TagResource.

func (*InMemoryBackend) UntagResource

func (b *InMemoryBackend) UntagResource(resourceARN string, tagKeys []string) error

UntagResource removes tags from a resource.

func (*InMemoryBackend) UpdateDatasetEntries

func (b *InMemoryBackend) UpdateDatasetEntries(datasetARN string, changes []byte) error

UpdateDatasetEntries appends changes to dataset entries.

func (*InMemoryBackend) UpdateStreamProcessor

func (b *InMemoryBackend) UpdateStreamProcessor(name string, params UpdateStreamProcessorParams) error

UpdateStreamProcessor applies UpdateStreamProcessorInput's update-only fields (DataSharingPreferenceForUpdate, ParametersToDelete, RegionsOfInterestForUpdate, SettingsForUpdate.ConnectedHomeForUpdate) to a stored stream processor. ParametersToDelete is applied last, so a delete always wins over a same-request set (matching AWS's documented behavior).

type ListDatasetEntriesFilter

type ListDatasetEntriesFilter struct {
	HasErrors         *bool
	Labeled           *bool
	SourceRefContains string
	ContainsLabels    []string
}

ListDatasetEntriesFilter groups ListDatasetEntriesInput's optional filter members (own doc comments, api_op_ListDatasetEntries.go). HasErrors has no effect beyond excluding everything when true: this backend has no entry-level error concept (see computeDatasetStats' ErrorEntries note), so no entry can ever satisfy it.

type LivenessSessionResult

type LivenessSessionResult struct {
	SessionID  string
	Status     string
	Confidence float32
}

LivenessSessionResult holds the result of a face liveness session.

type MediaAnalysisJob

type MediaAnalysisJob struct {
	CreationTimestamp                    time.Time
	DetectModerationLabelsMinConfidence  *float32
	JobID                                string
	JobName                              string
	Status                               string
	InputS3Bucket                        string
	InputS3Name                          string
	InputS3Version                       string
	OutputConfigS3Bucket                 string
	OutputConfigS3KeyPrefix              string
	DetectModerationLabelsProjectVersion string
	KmsKeyID                             string
	HasDetectModerationLabels            bool
}

MediaAnalysisJob represents a Rekognition media analysis job.

type Point added in v1.2.0

type Point struct {
	X *float32
	Y *float32
}

Point mirrors AWS's types.Point: a single vertex of a RegionOfInterest polygon.

type Project

type Project struct {
	CreationTimestamp time.Time
	ProjectARN        string
	Status            string
	AutoUpdate        string
	Feature           string
}

Project represents a Rekognition Custom Labels project.

type ProjectPolicy

type ProjectPolicy struct {
	CreationTimestamp    time.Time
	LastUpdatedTimestamp time.Time
	ProjectARN           string
	PolicyName           string
	PolicyRevisionID     string
	PolicyDocument       string
}

ProjectPolicy represents a project policy.

type ProjectVersion

type ProjectVersion struct {
	CreationTimestamp                       time.Time
	Feature                                 string
	Tags                                    map[string]string
	FeatureConfigContentModConfidenceThresh *float32
	StatusMessage                           string
	VersionName                             string
	Status                                  string
	ProjectARN                              string
	OutputConfigS3Bucket                    string
	OutputConfigS3KeyPrefix                 string
	KmsKeyID                                string
	VersionDescription                      string
	SourceProjectVersionARN                 string
	ProjectVersionARN                       string
	MinInferenceUnits                       int32
	MaxInferenceUnits                       int32
}

ProjectVersion represents a model version within a project.

type Provider

type Provider struct{}

Provider implements service.Provider for Amazon Rekognition.

func (*Provider) Init

Init initializes the Rekognition service backend and handler.

func (*Provider) Name

func (p *Provider) Name() string

Name returns the provider name.

type RegionOfInterest added in v1.2.0

type RegionOfInterest struct {
	BoundingBox *BoundingBox
	Polygon     []Point
}

RegionOfInterest mirrors AWS's types.RegionOfInterest: a box or polygon area a stream processor checks for objects/people.

type S3Backend

type S3Backend interface {
	HeadObject(ctx context.Context, input *sdk_s3.HeadObjectInput) (*sdk_s3.HeadObjectOutput, error)
}

S3Backend is the subset of S3 operations Rekognition needs to validate that an Image/Video/Input S3Object exists, wired via SetS3Backend. When unset, S3Object references are stored/echoed but never validated.

type StartAsyncJobParams added in v1.3.1

type StartAsyncJobParams struct {
	JobType            string
	ClientRequestToken string
	CollectionID       string
	JobTag             string
	VideoS3Bucket      string
	VideoS3Name        string
	VideoS3Version     string
	SegmentTypes       []string
}

StartAsyncJobParams groups the StartXxx request fields common to every async video job family (Video/JobTag are echoed back verbatim by the matching GetXxx response; SegmentTypes only applies to StartSegmentDetection but is harmless zero-valued for the others).

type StartMediaAnalysisJobParams added in v1.3.1

type StartMediaAnalysisJobParams struct {
	DetectModerationLabelsMinConfidence  *float32
	ClientRequestToken                   string
	KmsKeyID                             string
	InputS3Bucket                        string
	InputS3Name                          string
	InputS3Version                       string
	OutputConfigS3Bucket                 string
	OutputConfigS3KeyPrefix              string
	DetectModerationLabelsProjectVersion string
	HasDetectModerationLabels            bool
}

StartMediaAnalysisJobParams groups StartMediaAnalysisJobInput's required Input/OperationsConfig/OutputConfig members beyond JobName, so the StartMediaAnalysisJob backend method signature stays manageable.

type StorageBackend

type StorageBackend interface {
	CreateCollection(collectionID string, tags map[string]string) (*Collection, error)
	DeleteCollection(collectionID string) error
	DescribeCollection(collectionID string) (*Collection, error)
	ListCollections(maxResults int32, nextToken string) ([]*Collection, string, error)

	IndexFaces(collectionID, externalImageID string) ([]*Face, error)
	DeleteFaces(collectionID string, faceIDs []string) ([]string, error)
	ListFaces(
		collectionID string, faceIDs []string, userID string, maxResults int32, nextToken string,
	) ([]*Face, string, error)
	SearchFaces(collectionID, faceID string, maxFaces int32, faceMatchThreshold float64) ([]*FaceMatch, error)
	SearchFacesByImage(
		collectionID string, maxFaces int32, imageKey string, faceMatchThreshold float64,
	) ([]*FaceMatch, error)

	CreateStreamProcessor(
		name, roleARN string,
		params CreateStreamProcessorParams,
		tags map[string]string,
	) (*StreamProcessor, error)
	DeleteStreamProcessor(name string) error
	DescribeStreamProcessor(name string) (*StreamProcessor, error)
	ListStreamProcessors(maxResults int32, nextToken string) ([]*StreamProcessor, string, error)
	StartStreamProcessor(name string) error
	StopStreamProcessor(name string) error
	UpdateStreamProcessor(name string, params UpdateStreamProcessorParams) error

	TagResource(resourceARN string, tags map[string]string) error
	UntagResource(resourceARN string, tagKeys []string) error
	ListTagsForResource(resourceARN string) (map[string]string, error)

	// Projects and Project Versions
	CreateProject(name string, params CreateProjectParams) (*Project, error)
	DeleteProject(projectARN string) error
	DescribeProjects(projectARNs, features []string, maxResults int32, nextToken string) ([]*Project, string, error)
	CreateProjectVersion(
		projectARN, versionName string,
		params CreateProjectVersionParams,
		tags map[string]string,
	) (*ProjectVersion, error)
	DeleteProjectVersion(projectVersionARN string) error
	DescribeProjectVersions(projectARN string, versionNames []string, maxResults int32, nextToken string) (
		[]*ProjectVersion, string, error)
	CopyProjectVersion(
		sourceProjectVersionARN, destinationProjectARN, versionName string,
		params CopyProjectVersionParams,
	) (*ProjectVersion, error)
	StartProjectVersion(projectVersionARN string, minInferenceUnits, maxInferenceUnits int32) error
	StopProjectVersion(projectVersionARN string) error
	ListProjectPolicies(projectARN string, maxResults int32, nextToken string) ([]*ProjectPolicy, string, error)
	PutProjectPolicy(projectARN, policyName, policyDocument, policyRevisionID string) (string, error)
	DeleteProjectPolicy(projectARN, policyName, policyRevisionID string) error

	// Datasets
	CreateDataset(projectARN, datasetType string, tags map[string]string) (*Dataset, error)
	DeleteDataset(datasetARN string) error
	DescribeDataset(datasetARN string) (*Dataset, error)
	ListDatasetEntries(
		datasetARN string, filter ListDatasetEntriesFilter, maxResults int32, nextToken string,
	) ([]string, string, error)
	ListDatasetLabels(datasetARN string, maxResults int32, nextToken string) ([]*DatasetLabel, string, error)
	UpdateDatasetEntries(datasetARN string, changes []byte) error
	DistributeDatasetEntries(datasets []DatasetDistribution) error

	// Users
	CreateUser(collectionID, userID string) error
	DeleteUser(collectionID, userID string) error
	ListUsers(collectionID string, maxResults int32, nextToken string) ([]*User, string, error)
	AssociateFaces(
		collectionID, userID string,
		faceIDs []string,
		userMatchThreshold float64,
	) ([]*AssociatedFace, []*UnsuccessfulFaceAssociation, error)
	DisassociateFaces(
		collectionID, userID string,
		faceIDs []string,
	) ([]*DisassociatedFace, []*UnsuccessfulFaceDisassociation, error)
	SearchUsers(collectionID, userID string, maxUsers int32, userMatchThreshold float64) ([]*UserMatch, error)
	SearchUsersByFace(collectionID, faceID string, maxUsers int32) ([]*UserMatch, error)
	SearchUsersByImage(
		collectionID string, maxUsers int32, imageKey string, userMatchThreshold float64,
	) ([]*UserMatch, error)

	// Face Liveness
	CreateFaceLivenessSession(clientRequestToken string) (string, error)
	GetFaceLivenessSessionResults(sessionID string) (*LivenessSessionResult, error)

	// Async video jobs
	StartAsyncJob(params StartAsyncJobParams) (string, error)
	GetAsyncJob(jobID string) (*AsyncJob, error)
	StartMediaAnalysisJob(jobName string, params StartMediaAnalysisJobParams) (string, error)
	GetMediaAnalysisJob(jobID string) (*MediaAnalysisJob, error)
	ListMediaAnalysisJobs(maxResults int32, nextToken string) ([]*MediaAnalysisJob, string, error)

	Idempotency() *idempotency.Memo

	AccountID() string
	Region() string
	Reset()
	Snapshot(ctx context.Context) []byte
	Restore(ctx context.Context, data []byte) error
}

StorageBackend is the interface for Rekognition storage operations.

type StreamProcessor

type StreamProcessor struct {
	LastUpdateTimestamp   time.Time
	CreationTimestamp     time.Time
	Input                 *StreamProcessorInput
	Tags                  map[string]string
	DataSharingPreference *StreamProcessorDataSharingPreference
	NotificationChannel   *StreamProcessorNotificationChannel
	Settings              *StreamProcessorSettings
	Output                *StreamProcessorOutput
	Name                  string
	KmsKeyID              string
	StatusMessage         string
	Status                string
	RoleARN               string
	StreamProcessorARN    string
	RegionsOfInterest     []RegionOfInterest
}

StreamProcessor represents a Rekognition stream processor. Field order is fieldalignment-optimal (see `fieldalignment -fix`), not meaningful otherwise.

type StreamProcessorDataSharingPreference added in v1.2.0

type StreamProcessorDataSharingPreference struct {
	OptIn bool
}

StreamProcessorDataSharingPreference mirrors AWS's types.StreamProcessorDataSharingPreference.

type StreamProcessorInput added in v1.2.0

type StreamProcessorInput struct {
	KinesisVideoStreamARN string
}

StreamProcessorInput mirrors AWS's types.StreamProcessorInput: the Kinesis video stream that provides the source streaming video.

type StreamProcessorNotificationChannel added in v1.2.0

type StreamProcessorNotificationChannel struct {
	SNSTopicARN string
}

StreamProcessorNotificationChannel mirrors AWS's types.StreamProcessorNotificationChannel.

type StreamProcessorOutput added in v1.2.0

type StreamProcessorOutput struct {
	KinesisDataStreamARN string
	S3Bucket             string
	S3KeyPrefix          string
}

StreamProcessorOutput mirrors AWS's types.StreamProcessorOutput: either a Kinesis data stream (face search) or an S3 destination (label detection).

type StreamProcessorSettings added in v1.2.0

type StreamProcessorSettings struct {
	ConnectedHomeMinConfidence   *float32
	FaceSearchFaceMatchThreshold *float32
	FaceSearchCollectionID       string
	ConnectedHomeLabels          []string
}

StreamProcessorSettings mirrors AWS's types.StreamProcessorSettings: either ConnectedHome (label detection) or FaceSearch settings.

type TaggedEntry added in v1.3.1

type TaggedEntry struct {
	Tags map[string]string
	ARN  string
}

TaggedEntry pairs a resource ARN with its tags.

type UnsuccessfulFaceAssociation

type UnsuccessfulFaceAssociation struct {
	FaceID  string
	Reasons []string
}

UnsuccessfulFaceAssociation represents a face that couldn't be associated.

type UnsuccessfulFaceDisassociation

type UnsuccessfulFaceDisassociation struct {
	FaceID  string
	Reasons []string
}

UnsuccessfulFaceDisassociation represents a face that couldn't be disassociated.

type UpdateStreamProcessorParams added in v1.2.0

type UpdateStreamProcessorParams struct {
	DataSharingPreference      *StreamProcessorDataSharingPreference
	ConnectedHomeMinConfidence *float32
	ParametersToDelete         []string
	RegionsOfInterest          []RegionOfInterest
	ConnectedHomeLabels        []string
}

UpdateStreamProcessorParams groups UpdateStreamProcessorInput's update-only fields. Presence/absence is signaled the same way the AWS wire shape does: a nil pointer/slice means "leave unchanged", a non-nil (possibly empty) pointer/slice means "the caller supplied this field". ParametersToDelete additionally clears RegionsOfInterest or ConnectedHomeMinConfidence regardless of what else is set, matching AWS's documented apply-then-delete semantics.

type User

type User struct {
	UserID     string
	UserStatus string
}

User represents a Rekognition user in a collection.

type UserMatch

type UserMatch struct {
	User       *User
	Similarity float64
}

UserMatch represents a user match result.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL