/AWS1/IF_REK=>SEARCHUSERSBYIMAGE()¶
About SearchUsersByImage¶
Searches for UserIDs using a supplied image. It first detects the largest face in the image, and then searches a specified collection for matching UserIDs.
The operation returns an array of UserIDs that match the face in the supplied image, ordered by similarity score with the highest similarity first. It also returns a bounding box for the face found in the input image.
Information about faces detected in the supplied image, but not used for the search, is
returned in an array of UnsearchedFace objects. If no valid face is detected in
the image, the response will contain an empty UserMatches list and no
SearchedFace object.
Method Signature¶
METHODS /AWS1/IF_REK~SEARCHUSERSBYIMAGE
IMPORTING
!IV_COLLECTIONID TYPE /AWS1/REKCOLLECTIONID OPTIONAL
!IO_IMAGE TYPE REF TO /AWS1/CL_REKIMAGE OPTIONAL
!IV_USERMATCHTHRESHOLD TYPE /AWS1/RT_FLOAT_AS_STRING OPTIONAL
!IV_MAXUSERS TYPE /AWS1/REKMAXUSERRESULTS OPTIONAL
!IV_QUALITYFILTER TYPE /AWS1/REKQUALITYFILTER OPTIONAL
RETURNING
VALUE(OO_OUTPUT) TYPE REF TO /aws1/cl_reksrchusersbyimage01
RAISING
/AWS1/CX_REKACCESSDENIEDEX
/AWS1/CX_REKIMAGETOOLARGEEX
/AWS1/CX_REKINTERNALSERVERERR
/AWS1/CX_REKINVIMAGEFORMATEX
/AWS1/CX_REKINVALIDPARAMETEREX
/AWS1/CX_REKINVALIDS3OBJECTEX
/AWS1/CX_REKPROVTHRUPUTEXCDEX
/AWS1/CX_REKRESOURCENOTFOUNDEX
/AWS1/CX_REKTHROTTLINGEX
/AWS1/CX_REKCLIENTEXC
/AWS1/CX_REKSERVEREXC
/AWS1/CX_RT_TECHNICAL_GENERIC
/AWS1/CX_RT_SERVICE_GENERIC.
IMPORTING¶
Required arguments:¶
iv_collectionid TYPE /AWS1/REKCOLLECTIONID /AWS1/REKCOLLECTIONID¶
The ID of an existing collection containing the UserID.
io_image TYPE REF TO /AWS1/CL_REKIMAGE /AWS1/CL_REKIMAGE¶
Provides the input image either as bytes or an S3 object.
You pass image bytes to an Amazon Rekognition API operation by using the
Bytesproperty. For example, you would use theBytesproperty to pass an image loaded from a local file system. Image bytes passed by using theBytesproperty must be base64-encoded. Your code may not need to encode image bytes if you are using an AWS SDK to call Amazon Rekognition API operations.For more information, see Analyzing an Image Loaded from a Local File System in the Amazon Rekognition Developer Guide.
You pass images stored in an S3 bucket to an Amazon Rekognition API operation by using the
S3Objectproperty. Images stored in an S3 bucket do not need to be base64-encoded.The region for the S3 bucket containing the S3 object must match the region you use for Amazon Rekognition operations.
If you use the AWS CLI to call Amazon Rekognition operations, passing image bytes using the Bytes property is not supported. You must first upload the image to an Amazon S3 bucket and then call the operation using the S3Object property.
For Amazon Rekognition to process an S3 object, the user must have permission to access the S3 object. For more information, see How Amazon Rekognition works with IAM in the Amazon Rekognition Developer Guide.
Optional arguments:¶
iv_usermatchthreshold TYPE /AWS1/RT_FLOAT_AS_STRING /AWS1/RT_FLOAT_AS_STRING¶
Specifies the minimum confidence in the UserID match to return. Default value is 80.
iv_maxusers TYPE /AWS1/REKMAXUSERRESULTS /AWS1/REKMAXUSERRESULTS¶
Maximum number of UserIDs to return.
iv_qualityfilter TYPE /AWS1/REKQUALITYFILTER /AWS1/REKQUALITYFILTER¶
A filter that specifies a quality bar for how much filtering is done to identify faces. Filtered faces aren't searched for in the collection. The default value is NONE.
RETURNING¶
oo_output TYPE REF TO /aws1/cl_reksrchusersbyimage01 /AWS1/CL_REKSRCHUSERSBYIMAGE01¶
Examples¶
Syntax Example¶
This is an example of the syntax for calling the method. It includes every possible argument and initializes every possible value. The data provided is not necessarily semantically accurate (for example the value "string" may be provided for something that is intended to be an instance ID, or in some cases two arguments may be mutually exclusive). The syntax shows the ABAP syntax for creating the various data structures.
DATA(lo_result) = lo_client->searchusersbyimage(
io_image = new /aws1/cl_rekimage(
io_s3object = new /aws1/cl_reks3object(
iv_bucket = |string|
iv_name = |string|
iv_version = |string|
)
iv_bytes = '5347567362473873563239796247513D'
)
iv_collectionid = |string|
iv_maxusers = 123
iv_qualityfilter = |string|
iv_usermatchthreshold = |0.1|
).
This is an example of reading all possible response values
lo_result = lo_result.
IF lo_result IS NOT INITIAL.
LOOP AT lo_result->get_usermatches( ) into lo_row.
lo_row_1 = lo_row.
IF lo_row_1 IS NOT INITIAL.
lv_percent = lo_row_1->get_similarity( ).
lo_matcheduser = lo_row_1->get_user( ).
IF lo_matcheduser IS NOT INITIAL.
lv_userid = lo_matcheduser->get_userid( ).
lv_userstatus = lo_matcheduser->get_userstatus( ).
ENDIF.
ENDIF.
ENDLOOP.
lv_string = lo_result->get_facemodelversion( ).
lo_searchedfacedetails = lo_result->get_searchedface( ).
IF lo_searchedfacedetails IS NOT INITIAL.
lo_facedetail = lo_searchedfacedetails->get_facedetail( ).
IF lo_facedetail IS NOT INITIAL.
lo_boundingbox = lo_facedetail->get_boundingbox( ).
IF lo_boundingbox IS NOT INITIAL.
lv_float = lo_boundingbox->get_width( ).
lv_float = lo_boundingbox->get_height( ).
lv_float = lo_boundingbox->get_left( ).
lv_float = lo_boundingbox->get_top( ).
ENDIF.
lo_agerange = lo_facedetail->get_agerange( ).
IF lo_agerange IS NOT INITIAL.
lv_uinteger = lo_agerange->get_low( ).
lv_uinteger = lo_agerange->get_high( ).
ENDIF.
lo_smile = lo_facedetail->get_smile( ).
IF lo_smile IS NOT INITIAL.
lv_boolean = lo_smile->get_value( ).
lv_percent = lo_smile->get_confidence( ).
ENDIF.
lo_eyeglasses = lo_facedetail->get_eyeglasses( ).
IF lo_eyeglasses IS NOT INITIAL.
lv_boolean = lo_eyeglasses->get_value( ).
lv_percent = lo_eyeglasses->get_confidence( ).
ENDIF.
lo_sunglasses = lo_facedetail->get_sunglasses( ).
IF lo_sunglasses IS NOT INITIAL.
lv_boolean = lo_sunglasses->get_value( ).
lv_percent = lo_sunglasses->get_confidence( ).
ENDIF.
lo_gender = lo_facedetail->get_gender( ).
IF lo_gender IS NOT INITIAL.
lv_gendertype = lo_gender->get_value( ).
lv_percent = lo_gender->get_confidence( ).
ENDIF.
lo_beard = lo_facedetail->get_beard( ).
IF lo_beard IS NOT INITIAL.
lv_boolean = lo_beard->get_value( ).
lv_percent = lo_beard->get_confidence( ).
ENDIF.
lo_mustache = lo_facedetail->get_mustache( ).
IF lo_mustache IS NOT INITIAL.
lv_boolean = lo_mustache->get_value( ).
lv_percent = lo_mustache->get_confidence( ).
ENDIF.
lo_eyeopen = lo_facedetail->get_eyesopen( ).
IF lo_eyeopen IS NOT INITIAL.
lv_boolean = lo_eyeopen->get_value( ).
lv_percent = lo_eyeopen->get_confidence( ).
ENDIF.
lo_mouthopen = lo_facedetail->get_mouthopen( ).
IF lo_mouthopen IS NOT INITIAL.
lv_boolean = lo_mouthopen->get_value( ).
lv_percent = lo_mouthopen->get_confidence( ).
ENDIF.
LOOP AT lo_facedetail->get_emotions( ) into lo_row_2.
lo_row_3 = lo_row_2.
IF lo_row_3 IS NOT INITIAL.
lv_emotionname = lo_row_3->get_type( ).
lv_percent = lo_row_3->get_confidence( ).
ENDIF.
ENDLOOP.
LOOP AT lo_facedetail->get_landmarks( ) into lo_row_4.
lo_row_5 = lo_row_4.
IF lo_row_5 IS NOT INITIAL.
lv_landmarktype = lo_row_5->get_type( ).
lv_float = lo_row_5->get_x( ).
lv_float = lo_row_5->get_y( ).
ENDIF.
ENDLOOP.
lo_pose = lo_facedetail->get_pose( ).
IF lo_pose IS NOT INITIAL.
lv_degree = lo_pose->get_roll( ).
lv_degree = lo_pose->get_yaw( ).
lv_degree = lo_pose->get_pitch( ).
ENDIF.
lo_imagequality = lo_facedetail->get_quality( ).
IF lo_imagequality IS NOT INITIAL.
lv_float = lo_imagequality->get_brightness( ).
lv_float = lo_imagequality->get_sharpness( ).
ENDIF.
lv_percent = lo_facedetail->get_confidence( ).
lo_faceoccluded = lo_facedetail->get_faceoccluded( ).
IF lo_faceoccluded IS NOT INITIAL.
lv_boolean = lo_faceoccluded->get_value( ).
lv_percent = lo_faceoccluded->get_confidence( ).
ENDIF.
lo_eyedirection = lo_facedetail->get_eyedirection( ).
IF lo_eyedirection IS NOT INITIAL.
lv_degree = lo_eyedirection->get_yaw( ).
lv_degree = lo_eyedirection->get_pitch( ).
lv_percent = lo_eyedirection->get_confidence( ).
ENDIF.
ENDIF.
ENDIF.
LOOP AT lo_result->get_unsearchedfaces( ) into lo_row_6.
lo_row_7 = lo_row_6.
IF lo_row_7 IS NOT INITIAL.
lo_facedetail = lo_row_7->get_facedetails( ).
IF lo_facedetail IS NOT INITIAL.
lo_boundingbox = lo_facedetail->get_boundingbox( ).
IF lo_boundingbox IS NOT INITIAL.
lv_float = lo_boundingbox->get_width( ).
lv_float = lo_boundingbox->get_height( ).
lv_float = lo_boundingbox->get_left( ).
lv_float = lo_boundingbox->get_top( ).
ENDIF.
lo_agerange = lo_facedetail->get_agerange( ).
IF lo_agerange IS NOT INITIAL.
lv_uinteger = lo_agerange->get_low( ).
lv_uinteger = lo_agerange->get_high( ).
ENDIF.
lo_smile = lo_facedetail->get_smile( ).
IF lo_smile IS NOT INITIAL.
lv_boolean = lo_smile->get_value( ).
lv_percent = lo_smile->get_confidence( ).
ENDIF.
lo_eyeglasses = lo_facedetail->get_eyeglasses( ).
IF lo_eyeglasses IS NOT INITIAL.
lv_boolean = lo_eyeglasses->get_value( ).
lv_percent = lo_eyeglasses->get_confidence( ).
ENDIF.
lo_sunglasses = lo_facedetail->get_sunglasses( ).
IF lo_sunglasses IS NOT INITIAL.
lv_boolean = lo_sunglasses->get_value( ).
lv_percent = lo_sunglasses->get_confidence( ).
ENDIF.
lo_gender = lo_facedetail->get_gender( ).
IF lo_gender IS NOT INITIAL.
lv_gendertype = lo_gender->get_value( ).
lv_percent = lo_gender->get_confidence( ).
ENDIF.
lo_beard = lo_facedetail->get_beard( ).
IF lo_beard IS NOT INITIAL.
lv_boolean = lo_beard->get_value( ).
lv_percent = lo_beard->get_confidence( ).
ENDIF.
lo_mustache = lo_facedetail->get_mustache( ).
IF lo_mustache IS NOT INITIAL.
lv_boolean = lo_mustache->get_value( ).
lv_percent = lo_mustache->get_confidence( ).
ENDIF.
lo_eyeopen = lo_facedetail->get_eyesopen( ).
IF lo_eyeopen IS NOT INITIAL.
lv_boolean = lo_eyeopen->get_value( ).
lv_percent = lo_eyeopen->get_confidence( ).
ENDIF.
lo_mouthopen = lo_facedetail->get_mouthopen( ).
IF lo_mouthopen IS NOT INITIAL.
lv_boolean = lo_mouthopen->get_value( ).
lv_percent = lo_mouthopen->get_confidence( ).
ENDIF.
LOOP AT lo_facedetail->get_emotions( ) into lo_row_2.
lo_row_3 = lo_row_2.
IF lo_row_3 IS NOT INITIAL.
lv_emotionname = lo_row_3->get_type( ).
lv_percent = lo_row_3->get_confidence( ).
ENDIF.
ENDLOOP.
LOOP AT lo_facedetail->get_landmarks( ) into lo_row_4.
lo_row_5 = lo_row_4.
IF lo_row_5 IS NOT INITIAL.
lv_landmarktype = lo_row_5->get_type( ).
lv_float = lo_row_5->get_x( ).
lv_float = lo_row_5->get_y( ).
ENDIF.
ENDLOOP.
lo_pose = lo_facedetail->get_pose( ).
IF lo_pose IS NOT INITIAL.
lv_degree = lo_pose->get_roll( ).
lv_degree = lo_pose->get_yaw( ).
lv_degree = lo_pose->get_pitch( ).
ENDIF.
lo_imagequality = lo_facedetail->get_quality( ).
IF lo_imagequality IS NOT INITIAL.
lv_float = lo_imagequality->get_brightness( ).
lv_float = lo_imagequality->get_sharpness( ).
ENDIF.
lv_percent = lo_facedetail->get_confidence( ).
lo_faceoccluded = lo_facedetail->get_faceoccluded( ).
IF lo_faceoccluded IS NOT INITIAL.
lv_boolean = lo_faceoccluded->get_value( ).
lv_percent = lo_faceoccluded->get_confidence( ).
ENDIF.
lo_eyedirection = lo_facedetail->get_eyedirection( ).
IF lo_eyedirection IS NOT INITIAL.
lv_degree = lo_eyedirection->get_yaw( ).
lv_degree = lo_eyedirection->get_pitch( ).
lv_percent = lo_eyedirection->get_confidence( ).
ENDIF.
ENDIF.
LOOP AT lo_row_7->get_reasons( ) into lo_row_8.
lo_row_9 = lo_row_8.
IF lo_row_9 IS NOT INITIAL.
lv_unsearchedfacereason = lo_row_9->get_value( ).
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDIF.
SearchUsersByImage¶
Searches for UserIDs using a supplied image.
DATA(lo_result) = lo_client->searchusersbyimage(
io_image = new /aws1/cl_rekimage(
io_s3object = new /aws1/cl_reks3object(
iv_bucket = |bucket|
iv_name = |input.jpg|
)
)
iv_collectionid = |MyCollection|
iv_maxusers = 2
iv_qualityfilter = |MEDIUM|
iv_usermatchthreshold = |70|
).