{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-unused-binds #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Network.AWS.Rekognition.StartFaceSearch -- Copyright : (c) 2013-2018 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- -- Starts the asynchronous search for faces in a collection that match the faces of persons detected in a stored video. -- -- -- The video must be stored in an Amazon S3 bucket. Use 'Video' to specify the bucket name and the filename of the video. @StartFaceSearch@ returns a job identifier (@JobId@ ) which you use to get the search results once the search has completed. When searching is finished, Rekognition Video publishes a completion status to the Amazon Simple Notification Service topic that you specify in @NotificationChannel@ . To get the search results, first check that the status value published to the Amazon SNS topic is @SUCCEEDED@ . If so, call and pass the job identifier (@JobId@ ) from the initial call to @StartFaceSearch@ . For more information, see 'collections-search-person' . -- module Network.AWS.Rekognition.StartFaceSearch ( -- * Creating a Request startFaceSearch , StartFaceSearch -- * Request Lenses , sfsFaceMatchThreshold , sfsJobTag , sfsNotificationChannel , sfsClientRequestToken , sfsVideo , sfsCollectionId -- * Destructuring the Response , startFaceSearchResponse , StartFaceSearchResponse -- * Response Lenses , sfsrsJobId , sfsrsResponseStatus ) where import Network.AWS.Lens import Network.AWS.Prelude import Network.AWS.Rekognition.Types import Network.AWS.Rekognition.Types.Product import Network.AWS.Request import Network.AWS.Response -- | /See:/ 'startFaceSearch' smart constructor. data StartFaceSearch = StartFaceSearch' { _sfsFaceMatchThreshold :: !(Maybe Double) , _sfsJobTag :: !(Maybe Text) , _sfsNotificationChannel :: !(Maybe NotificationChannel) , _sfsClientRequestToken :: !(Maybe Text) , _sfsVideo :: !Video , _sfsCollectionId :: !Text } deriving (Eq, Read, Show, Data, Typeable, Generic) -- | Creates a value of 'StartFaceSearch' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'sfsFaceMatchThreshold' - The minimum confidence in the person match to return. For example, don't return any matches where confidence in matches is less than 70%. -- -- * 'sfsJobTag' - Unique identifier you specify to identify the job in the completion status published to the Amazon Simple Notification Service topic. -- -- * 'sfsNotificationChannel' - The ARN of the Amazon SNS topic to which you want Rekognition Video to publish the completion status of the search. -- -- * 'sfsClientRequestToken' - Idempotent token used to identify the start request. If you use the same token with multiple @StartFaceSearch@ requests, the same @JobId@ is returned. Use @ClientRequestToken@ to prevent the same job from being accidently started more than once. -- -- * 'sfsVideo' - The video you want to search. The video must be stored in an Amazon S3 bucket. -- -- * 'sfsCollectionId' - ID of the collection that contains the faces you want to search for. startFaceSearch :: Video -- ^ 'sfsVideo' -> Text -- ^ 'sfsCollectionId' -> StartFaceSearch startFaceSearch pVideo_ pCollectionId_ = StartFaceSearch' { _sfsFaceMatchThreshold = Nothing , _sfsJobTag = Nothing , _sfsNotificationChannel = Nothing , _sfsClientRequestToken = Nothing , _sfsVideo = pVideo_ , _sfsCollectionId = pCollectionId_ } -- | The minimum confidence in the person match to return. For example, don't return any matches where confidence in matches is less than 70%. sfsFaceMatchThreshold :: Lens' StartFaceSearch (Maybe Double) sfsFaceMatchThreshold = lens _sfsFaceMatchThreshold (\ s a -> s{_sfsFaceMatchThreshold = a}) -- | Unique identifier you specify to identify the job in the completion status published to the Amazon Simple Notification Service topic. sfsJobTag :: Lens' StartFaceSearch (Maybe Text) sfsJobTag = lens _sfsJobTag (\ s a -> s{_sfsJobTag = a}) -- | The ARN of the Amazon SNS topic to which you want Rekognition Video to publish the completion status of the search. sfsNotificationChannel :: Lens' StartFaceSearch (Maybe NotificationChannel) sfsNotificationChannel = lens _sfsNotificationChannel (\ s a -> s{_sfsNotificationChannel = a}) -- | Idempotent token used to identify the start request. If you use the same token with multiple @StartFaceSearch@ requests, the same @JobId@ is returned. Use @ClientRequestToken@ to prevent the same job from being accidently started more than once. sfsClientRequestToken :: Lens' StartFaceSearch (Maybe Text) sfsClientRequestToken = lens _sfsClientRequestToken (\ s a -> s{_sfsClientRequestToken = a}) -- | The video you want to search. The video must be stored in an Amazon S3 bucket. sfsVideo :: Lens' StartFaceSearch Video sfsVideo = lens _sfsVideo (\ s a -> s{_sfsVideo = a}) -- | ID of the collection that contains the faces you want to search for. sfsCollectionId :: Lens' StartFaceSearch Text sfsCollectionId = lens _sfsCollectionId (\ s a -> s{_sfsCollectionId = a}) instance AWSRequest StartFaceSearch where type Rs StartFaceSearch = StartFaceSearchResponse request = postJSON rekognition response = receiveJSON (\ s h x -> StartFaceSearchResponse' <$> (x .?> "JobId") <*> (pure (fromEnum s))) instance Hashable StartFaceSearch where instance NFData StartFaceSearch where instance ToHeaders StartFaceSearch where toHeaders = const (mconcat ["X-Amz-Target" =# ("RekognitionService.StartFaceSearch" :: ByteString), "Content-Type" =# ("application/x-amz-json-1.1" :: ByteString)]) instance ToJSON StartFaceSearch where toJSON StartFaceSearch'{..} = object (catMaybes [("FaceMatchThreshold" .=) <$> _sfsFaceMatchThreshold, ("JobTag" .=) <$> _sfsJobTag, ("NotificationChannel" .=) <$> _sfsNotificationChannel, ("ClientRequestToken" .=) <$> _sfsClientRequestToken, Just ("Video" .= _sfsVideo), Just ("CollectionId" .= _sfsCollectionId)]) instance ToPath StartFaceSearch where toPath = const "/" instance ToQuery StartFaceSearch where toQuery = const mempty -- | /See:/ 'startFaceSearchResponse' smart constructor. data StartFaceSearchResponse = StartFaceSearchResponse' { _sfsrsJobId :: !(Maybe Text) , _sfsrsResponseStatus :: !Int } deriving (Eq, Read, Show, Data, Typeable, Generic) -- | Creates a value of 'StartFaceSearchResponse' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'sfsrsJobId' - The identifier for the search job. Use @JobId@ to identify the job in a subsequent call to @GetFaceSearch@ . -- -- * 'sfsrsResponseStatus' - -- | The response status code. startFaceSearchResponse :: Int -- ^ 'sfsrsResponseStatus' -> StartFaceSearchResponse startFaceSearchResponse pResponseStatus_ = StartFaceSearchResponse' {_sfsrsJobId = Nothing, _sfsrsResponseStatus = pResponseStatus_} -- | The identifier for the search job. Use @JobId@ to identify the job in a subsequent call to @GetFaceSearch@ . sfsrsJobId :: Lens' StartFaceSearchResponse (Maybe Text) sfsrsJobId = lens _sfsrsJobId (\ s a -> s{_sfsrsJobId = a}) -- | -- | The response status code. sfsrsResponseStatus :: Lens' StartFaceSearchResponse Int sfsrsResponseStatus = lens _sfsrsResponseStatus (\ s a -> s{_sfsrsResponseStatus = a}) instance NFData StartFaceSearchResponse where