컬렉션에 얼굴 추가
IndexFaces 작업을 사용하여 이미지에서 얼굴을 감지하고 컬렉션에 추가할 수 있습니다. Amazon Rekognition은 감지된 각 얼굴에서 얼굴 특성을 추출하여 데이터베이스에 이 특성 정보를 저장합니다. 또한 이 명령은 감지된 각 얼굴의 메타데이터를 지정된 얼굴 컬렉션에 저장합니다. Amazon Rekognition은 실제 이미지 바이트를 저장하지 않습니다.
인덱싱에 적합한 얼굴 제공에 대한 자세한 내용은 얼굴 비교 입력 이미지에 대한 권장 사항 단원을 참조하십시오.
IndexFaces
작업은 각 얼굴에 대해 다음의 정보를 유지합니다.
-
다차원 얼굴 특성 -
IndexFaces
는 얼굴 분석을 사용하여 얼굴 특성에 대한 다차원 정보를 추출하고, 이 정보를 얼굴 컬렉션에 저장합니다. 이 정보를 직접 액세스할 수는 없습니다. 그러나 Amazon Rekognition은 얼굴 컬렉션에서 얼굴 일치를 검색할 때 이 정보를 사용합니다. -
메타데이터 – 각 얼굴의 메타데이터에는 경계 상자, 신뢰도 수준(경계 상자에 얼굴이 포함될 신뢰도 수준), Amazon Rekognition이 할당한 ID(얼굴 ID 및 이미지 ID), 요청 내 외부 이미지 ID(제공한 경우)가 포함됩니다. 이 정보는
IndexFaces
API 호출에 대한 응답으로 반환됩니다. 관련 예제는 다음 응답 예의face
요소를 참조하십시오.이 서비스는 다음 API 호출에 대한 응답으로 이 메타데이터를 반환합니다.
-
얼굴 검색 작업 – SearchFaces 및 SearchFacesByImage에 대한 응답은 일치하는 얼굴의 일치 신뢰도와 함께 일치한 얼굴의 이 메타데이터를 반환합니다.
IndexFaces
에서 인덱스를 생성하는 얼굴 수는 입력 모음과 연결된 얼굴 감지 모델의 버전에 따라 다릅니다. 자세한 내용은 모델 버전 관리 이해 단원을 참조하십시오.
인덱싱된 얼굴에 대한 정보는 FaceRecord 객체의 배열로 반환됩니다.
감지된 이미지와 인덱싱된 얼굴을 연결해야 합니다. 예를 들어 이미지와 이미지의 얼굴에서 클라이언트 측 인덱스를 유지해야 합니다. 얼굴을 이미지와 연결하려면, ExternalImageId
요청 파라미터에서 이미지 ID를 지정합니다. 이미지 ID는 만드는 파일 이름이나 다른 ID일 수 있습니다.
이 API는 얼굴 모음에서 유지하는 위의 정보 외에, 모음에 유지되지 않는 얼굴 세부 정보도 반환합니다. 다음 예제 응답에서 faceDetail
요소를 참조하십시오.
참고
DetectFaces
는 동일한 정보를 반환하므로 같은 이미지에 대해 DetectFaces
와 IndexFaces
를 모두 호출할 필요는 없습니다.
얼굴 필터링
IndexFaces 작업을 통해 이미지에서 인덱싱된 얼굴을 필터링할 수 있습니다. IndexFaces
를 통해 최대 얼굴 수를 인덱스로 지정하거나, 고화질로 감지된 얼굴만 인덱싱하도록 선택할 수 있습니다.
MaxFaces
입력 파라미터를 사용하여 IndexFaces
로 인덱싱되는 최대 얼굴 수를 지정할 수 있습니다. 이는 이미지에서 가장 큰 얼굴을 인덱싱하고자 하며 작은 얼굴(예: 배경에 서 있는 사람들의 얼굴)은 인덱싱하지 않고자 할 때 유용합니다.
기본적으로 IndexFaces
는 얼굴을 필터링하는 데 사용되는 화질 막대를 선택합니다. QualityFilter
입력 파라미터를 사용하여 화질 막대를 명시적으로 설정할 수 있습니다. 값은 다음과 같습니다.
-
AUTO
- Amazon Rekognition이 얼굴을 필터링하는 데 사용되는 화질 막대를 선택합니다(기본값). -
LOW
- 가장 낮은 화질의 얼굴을 제외한 모든 얼굴이 인덱싱됩니다. -
MEDIUM
-
HIGH
- 가장 높은 화질의 얼굴만 인덱싱됩니다. -
NONE
- 화질에 따라 얼굴이 필터링되지 않습니다.
IndexFaces
는 다음과 같은 이유로 얼굴을 필터링합니다.
-
얼굴이 이미지 크기와 비교하여 너무 작습니다.
-
얼굴이 너무 흐릿합니다.
-
이미지가 너무 어둡습니다.
-
얼굴이 극단적인 포즈입니다.
-
얼굴에는 얼굴 검색에 적합한 세부 정보가 충분하지 않습니다.
참고
화질 필터링을 사용하려면 얼굴 모델 버전 3 이상과 연결된 모음이 필요합니다. 컬렉션과 연결된 얼굴 모델 버전을 가져오려면 DescribeCollection을 직접 호출하세요.
IndexFaces
로 인덱싱되지 않은 얼굴에 대한 정보는 UnindexedFace 객체의 배열로 반환됩니다. Reasons
배열에는 얼굴이 인덱싱되지 않은 이유 목록이 포함되어 있습니다. 예를 들어 MaxFaces
로 지정된 얼굴 수가 이미 감지되었으므로 EXCEEDS_MAX_FACES
값은 인덱싱되지 않은 얼굴입니다.
자세한 내용은 컬렉션에서 얼굴 관리 단원을 참조하십시오.
모음에 얼굴을 추가하려면(SDK)
-
아직 설정하지 않았다면 다음과 같이 하세요.
-
AmazonRekognitionFullAccess
권한과AmazonS3ReadOnlyAccess
권한을 가진 사용자를 생성하거나 업데이트합니다. 자세한 내용은 1단계: AWS 계정 설정 및 사용자 생성 단원을 참조하십시오. -
AWS CLI 및 AWS SDK를 설치하고 구성합니다. 자세한 내용은 2단계: AWS CLI 및 AWS SDK 설정 단원을 참조하십시오.
-
-
(하나 이상의 얼굴이 포함된) 이미지를 Amazon S3 버킷에 업로드합니다.
이에 관한 지침은 Amazon Simple Storage Service 사용 설명서에서 Amazon S3에 객체 업로드를 참조하세요.
-
다음 예제를 사용하여
IndexFaces
작업을 호출합니다.
IndexFaces 작업 요청
IndexFaces
에 대한 입력은 인덱스를 생성할 이미지와, 얼굴을 추가할 모음입니다.
{ "CollectionId": "MyCollection", "Image": { "S3Object": { "Bucket": "bucket", "Name": "input.jpg" } }, "ExternalImageId": "input.jpg", "DetectionAttributes": [ "DEFAULT" ], "MaxFaces": 1, "QualityFilter": "AUTO" }
IndexFaces 작업 응답
IndexFaces
는 이미지에서 감지된 얼굴에 대한 정보를 반환합니다. 예를 들어 다음 JSON 응답에는 입력 이미지에서 감지된 얼굴의 기본 감지 속성이 포함됩니다. 이 예제에서는 MaxFaces
입력 파라미터의 값이 초과되어 인덱싱되지 않은 얼굴도 보여줍니다. Reasons
배열에는 EXCEEDS_MAX_FACES가 포함되어 있습니다. 화질로 인해 얼굴이 인덱싱되지 않은 경우 Reasons
에는 LOW_SHARPNESS 또는 LOW_BRIGHTNESS 등의 값이 포함되어 있습니다. 자세한 내용은 UnindexedFace를 참조하십시오.
{ "FaceModelVersion": "3.0", "FaceRecords": [ { "Face": { "BoundingBox": { "Height": 0.3247932195663452, "Left": 0.5055555701255798, "Top": 0.2743072211742401, "Width": 0.21444444358348846 }, "Confidence": 99.99998474121094, "ExternalImageId": "input.jpg", "FaceId": "b86e2392-9da1-459b-af68-49118dc16f87", "ImageId": "09f43d92-02b6-5cea-8fbd-9f187db2050d" }, "FaceDetail": { "BoundingBox": { "Height": 0.3247932195663452, "Left": 0.5055555701255798, "Top": 0.2743072211742401, "Width": 0.21444444358348846 }, "Confidence": 99.99998474121094, "Landmarks": [ { "Type": "eyeLeft", "X": 0.5751981735229492, "Y": 0.4010535478591919 }, { "Type": "eyeRight", "X": 0.6511467099189758, "Y": 0.4017036259174347 }, { "Type": "nose", "X": 0.6314528584480286, "Y": 0.4710812568664551 }, { "Type": "mouthLeft", "X": 0.5879443287849426, "Y": 0.5171778798103333 }, { "Type": "mouthRight", "X": 0.6444502472877502, "Y": 0.5164633989334106 } ], "Pose": { "Pitch": -10.313642501831055, "Roll": -1.0316886901855469, "Yaw": 18.079818725585938 }, "Quality": { "Brightness": 71.2919921875, "Sharpness": 78.74752044677734 } } } ], "OrientationCorrection": "", "UnindexedFaces": [ { "FaceDetail": { "BoundingBox": { "Height": 0.1329464465379715, "Left": 0.5611110925674438, "Top": 0.6832437515258789, "Width": 0.08777777850627899 }, "Confidence": 92.37225341796875, "Landmarks": [ { "Type": "eyeLeft", "X": 0.5796897411346436, "Y": 0.7452847957611084 }, { "Type": "eyeRight", "X": 0.6078574657440186, "Y": 0.742687463760376 }, { "Type": "nose", "X": 0.597953200340271, "Y": 0.7620673179626465 }, { "Type": "mouthLeft", "X": 0.5884202122688293, "Y": 0.7920381426811218 }, { "Type": "mouthRight", "X": 0.60627681016922, "Y": 0.7919750809669495 } ], "Pose": { "Pitch": 15.658954620361328, "Roll": -4.583454608917236, "Yaw": 10.558992385864258 }, "Quality": { "Brightness": 42.54612350463867, "Sharpness": 86.93206024169922 } }, "Reasons": [ "EXCEEDS_MAX_FACES" ] } ] }
모든 얼굴 정보를 가져오려면 DetectionAttributes
요청 파라미터에서 'ALL'을 지정합니다. 예를 들어 다음 예제 응답에서 faceDetail
요소의 추가 정보에 유의해야 하며 이것은 서버에서 지속되지 않습니다.
-
25개의 얼굴 표식(앞의 예의 단 5개와 비교)
-
10개의 얼굴 속성(안경, 수염, 오클루전, 시선 방향 등)
-
감정(
emotion
요소 참조)
face
요소는 서버에서 유지되는 메타데이터를 제공합니다.
FaceModelVersion
은 모음과 연결된 얼굴 모델의 버전입니다. 자세한 내용은 모델 버전 관리 이해 단원을 참조하십시오.
OrientationCorrection
은 이미지의 예상 방향입니다. 버전 3보다 높은 얼굴 감지 모델을 사용하는 경우 방향 보정 정보가 반환되지 않습니다. 자세한 내용은 이미지 방향 및 경계 상자 좌표 가져오기 단원을 참조하십시오.
다음 샘플 응답은 ["ALL"] 을 지정할 때 반환된 JSON을 보여줍니다.
{ "FaceModelVersion": "3.0", "FaceRecords": [ { "Face": { "BoundingBox": { "Height": 0.06333333253860474, "Left": 0.17185185849666595, "Top": 0.7366666793823242, "Width": 0.11061728745698929 }, "Confidence": 99.99999237060547, "ExternalImageId": "input.jpg", "FaceId": "578e2e1b-d0b0-493c-aa39-ba476a421a34", "ImageId": "9ba38e68-35b6-5509-9d2e-fcffa75d1653" }, "FaceDetail": { "AgeRange": { "High": 25, "Low": 15 }, "Beard": { "Confidence": 99.98077392578125, "Value": false }, "BoundingBox": { "Height": 0.06333333253860474, "Left": 0.17185185849666595, "Top": 0.7366666793823242, "Width": 0.11061728745698929 }, "Confidence": 99.99999237060547, "Emotions": [ { "Confidence": 95.40877532958984, "Type": "HAPPY" }, { "Confidence": 6.6088080406188965, "Type": "CALM" }, { "Confidence": 0.7385611534118652, "Type": "SAD" } ], "EyeDirection": { "yaw": 16.299732, "pitch": -6.407457, "confidence": 99.968704 } "Eyeglasses": { "Confidence": 99.96795654296875, "Value": false }, "EyesOpen": { "Confidence": 64.0671157836914, "Value": true }, "Gender": { "Confidence": 100, "Value": "Female" }, "Landmarks": [ { "Type": "eyeLeft", "X": 0.21361233294010162, "Y": 0.757106363773346 }, { "Type": "eyeRight", "X": 0.2518567442893982, "Y": 0.7599404454231262 }, { "Type": "nose", "X": 0.2262365221977234, "Y": 0.7711842060089111 }, { "Type": "mouthLeft", "X": 0.2050037682056427, "Y": 0.7801263332366943 }, { "Type": "mouthRight", "X": 0.2430567592382431, "Y": 0.7836716771125793 }, { "Type": "leftPupil", "X": 0.2161938101053238, "Y": 0.756662905216217 }, { "Type": "rightPupil", "X": 0.2523181438446045, "Y": 0.7603650689125061 }, { "Type": "leftEyeBrowLeft", "X": 0.20066319406032562, "Y": 0.7501518130302429 }, { "Type": "leftEyeBrowUp", "X": 0.2130996286869049, "Y": 0.7480520606040955 }, { "Type": "leftEyeBrowRight", "X": 0.22584207355976105, "Y": 0.7504606246948242 }, { "Type": "rightEyeBrowLeft", "X": 0.24509544670581818, "Y": 0.7526801824569702 }, { "Type": "rightEyeBrowUp", "X": 0.2582615911960602, "Y": 0.7516844868659973 }, { "Type": "rightEyeBrowRight", "X": 0.26881539821624756, "Y": 0.7554477453231812 }, { "Type": "leftEyeLeft", "X": 0.20624476671218872, "Y": 0.7568746209144592 }, { "Type": "leftEyeRight", "X": 0.22105035185813904, "Y": 0.7582521438598633 }, { "Type": "leftEyeUp", "X": 0.21401576697826385, "Y": 0.7553104162216187 }, { "Type": "leftEyeDown", "X": 0.21317370235919952, "Y": 0.7584449648857117 }, { "Type": "rightEyeLeft", "X": 0.24393919110298157, "Y": 0.7600628137588501 }, { "Type": "rightEyeRight", "X": 0.2598416209220886, "Y": 0.7605880498886108 }, { "Type": "rightEyeUp", "X": 0.2519053518772125, "Y": 0.7582084536552429 }, { "Type": "rightEyeDown", "X": 0.25177454948425293, "Y": 0.7612871527671814 }, { "Type": "noseLeft", "X": 0.2185886949300766, "Y": 0.774715781211853 }, { "Type": "noseRight", "X": 0.23328955471515656, "Y": 0.7759330868721008 }, { "Type": "mouthUp", "X": 0.22446128726005554, "Y": 0.7805567383766174 }, { "Type": "mouthDown", "X": 0.22087252140045166, "Y": 0.7891407608985901 } ], "MouthOpen": { "Confidence": 95.87068939208984, "Value": false }, "Mustache": { "Confidence": 99.9828109741211, "Value": false }, "Pose": { "Pitch": -0.9409101605415344, "Roll": 7.233824253082275, "Yaw": -2.3602254390716553 }, "Quality": { "Brightness": 32.01998519897461, "Sharpness": 93.67259216308594 }, "Smile": { "Confidence": 86.7142105102539, "Value": true }, "Sunglasses": { "Confidence": 97.38925170898438, "Value": false } } } ], "OrientationCorrection": "ROTATE_0" "UnindexedFaces": [] }