Amazon Web Services 한국 블로그

Amazon Rekognition의 얼굴 필터링 기능을 사용하여 개발 시간과 비용 절감하기

Amazon Rekognition은 객체, 사람, 텍스트, 장면 및 활동을 식별하고 부적절한 콘텐츠를 감지할 수 있는 딥 러닝 기반 이미지 및 비디오 분석 서비스입니다. 새로운 Rekognition 얼굴 필터링 기능을 사용하면 얼굴 인식용으로 인덱싱할 수 있는 얼굴의 품질과 수량을 제어할 수 있습니다. 이 기능을 활용하여 비용을 절감하고, 개발 시간을 단축하며, 얼굴 인식의 정확도를 개선할 수 있습니다.

Rekognition 얼굴 필터링 기능이 나오기 전에는 IndexFaces API를 사용하면 Amazon Rekognition이 이미지에 포함된 모든 얼굴을 감지하고 지정된 컬렉션으로 인덱싱했습니다. 그러나 일부 이미지는 인덱싱하고 싶지 않은 얼굴을 포함할 수 있습니다. 예를 들어, 얼굴 검색 품질에 부정적인 영향을 줄 수 있는 작고 흐릿한 얼굴이나 영화제 같이 관중이 많은 이벤트에서 배경에 나온 얼굴은 인덱싱할 필요가 없을 수 있습니다. 이런 얼굴까지 인덱싱에 포함하면 비용이 증가하고 많은 경우 정확도가 저하됩니다. 지금까지는 얼굴 감지를 실행하여 얻어진 각 얼굴 이미지에 필터링 규칙을 적용하고, 필터를 통과한 얼굴 이미지를 인덱싱하는 과정을 통해 얼굴을 필터링할 수 있었습니다. 새롭게 추가된 Amazon Rekognition 얼굴 필터링 기능을 사용하면 인덱싱 하는 중에 파라미터 2개를 사용하여 얼굴을 필터링할 수 있으므로 이 프로세스가 간단해집니다. 더 이상 다수의 API 호출을 필요로 하는 추가 코드를 만들거나 품질 측정을 위한 별도 규칙을 생성하지 않아도 됩니다.

이 블로그 게시물에서는 새로운 Amazon Rekognition 얼굴 필터링 기능의 사용법을 보여주는 몇 가지 예제를 소개하겠습니다.

1단계 – 컬렉션 생성

CreateCollection API 작업을 사용하여 컬렉션을 생성할 수 있습니다.

컬렉션 생성 예시

import boto3

collection_name = "TestCollection"

def create_collection():
	# assumes aws default region and credentials
	rekognition_client = boto3.client('rekognition')
	response = rekognition_client.create_collection(CollectionId=collection_name)
	print(response)

create_collection()

2단계 – 인덱싱에 사용할 이미지 수집 및 검사

컬렉션이 생성되면 얼굴을 인덱싱할 이미지를 수집할 수 있습니다. 인덱싱에 사용되는 일부 이미지에는 너무 작거나 흐릿한 얼굴 또는 피사체가 얼굴을 돌린 탓에 일부분만 나온 얼굴이 있을 수 있습니다. 이상적으로는 “좋은” 품질의 얼굴만 인덱싱되고 품질이 낮은 얼굴은 자동으로 필터링되는 것이 좋습니다. 또한 이미지에 나온 얼굴 중 일부를 인덱싱하지 않는 경우도 있을 수 있습니다. 야구 경기를 보러 가서 친구과 함께 찍은 셀카에서 배경에 작게 표시된 다른 많은 사람들의 얼굴은 제외하고 본인과 친구의 얼굴만 인덱싱하려는 경우를 예로 들 수 있습니다.

이 블로그에서는 2개의 예제 사진을 사용하여 작동 방식을 설명합니다. 첫 번째 사진은 WikiMedia Creative Commons(Alan Light)에서 가져온 것이고 두 번째 사진은 Pexels.com에서 가져왔습니다.

먼저, 공식 사진 기자가 촬영한 레드 카펫 이벤트 사진 예시를 보겠습니다.

다음은 Amazon Rekognition이 얼굴 감지 기능으로 찾아낸 얼굴입니다.

보시다시피 크고 두드러진 두 개의 얼굴이 있고 배경에 다른 세 개의 얼굴이 있습니다.

이제 두 번째 사진에서 찾은 얼굴을 보겠습니다.

인덱싱에 사용하지 않을 흐릿한 얼굴이 배경에 있습니다.

이제 두 가지 사용 사례를 생각해 보겠습니다. (i) 눈에 띄는 잘 나온 얼굴만 인덱싱하고 배경의 얼굴은 인덱싱하지 않습니다(첫 번째 사진). (ii) 이미지에서 “잘 나온” 얼굴을 모두 인덱싱합니다(두 번째 사진). 얼굴 필터링을 사용하여 이 작업을 수행하는 방법을 살펴 보겠습니다.

3단계 – 얼굴 필터링을 사용하여 원하는 얼굴을 컬렉션으로 인덱싱

Amazon Rekognition 얼굴 필터링 기능을 사용하려면 IndexFaces API 작업 요청에서 새로운 속성인 MaxFacesQualityFilter 에 적절한 값을 지정하면 됩니다.

MaxFaces는 인덱싱할 얼굴의 최대 수를 지정할 때 사용하고 그 값은 1 이상이어야 합니다. IndexFacesMaxFaces에 100보다 큰 값을 지정해도 이미지에서 감지된 얼굴을 100개까지만 반환합니다. 반대로, QualityFilter는 잘 안 나온 얼굴에 대한 필터링을 조절하기 위해 사용합니다. AUTO를 지정하면 Amazon Rekognition이 자동으로 낮은 품질의 얼굴을 찾아내서 인덱싱에서 제외합니다. NONE을 지정하면 필터링이 적용되지 않기 때문에 품질에 관계 없이 감지된 모든 얼굴이 인덱싱됩니다. 필터링에서 걸러진 얼굴은 인덱싱되지 않습니다. 기본값은 AUTO로 설정되고 품질이 좋은 얼굴만 인덱싱합니다.

첫 번째 사용 사례는 다음 설정을 적용하여 간단히 구현할 수 있습니다.

Request Syntax

import boto3

collection_name = "TestCollection"
image_file = "TestImage.jpg"
external_image_id = "TestImage"

def index_faces():
	# assumes aws default region and credentials
	rekognition_client = boto3.client('rekognition')
	with open(image_file, 'rb') as image:
		# QualityFilter defaults to AUTO
		rekognition_response = rekognition_client.index_faces(
			Image={'Bytes': image.read()},
			CollectionId=collection_name,
			ExternalImageId=external_image_id,
			MaxFaces=2)
	print(rekognition_response)

index_faces()

여기서는 MaxFaces를 2로 설정했기 때문에 Amazon Rekognition이 가장 크고 감지 신뢰성 높은 얼굴 2개를 선택하며 그 결과로 해당되는 2개의 얼굴만 인덱싱됩니다. 첫번째 이미지에서 카메라에 가까운 남자와 여자의 얼굴은 인덱싱 되지만 나머지 배경의 얼굴은 인덱싱되지 않습니다.

MaxFaces를 5로 변경하면 눈에 띄는 다른 세 개의 얼굴도 인덱싱됩니다.

두 번째 사용 사례는 기본 설정을 그대로 사용하여 QualityFilter가 수행되게 합니다.

Request Syntax

import boto3

collection_name = "TestCollection"
image_file = "TestImage.jpg"
external_image_id = "TestImage"

def index_faces():
	# assumes aws default region and credentials
	rekognition_client = boto3.client('rekognition')
	with open(image_file, 'rb') as image:
		# QualityFilter defaults to AUTO
		rekognition_response = rekognition_client.index_faces(
			Image={'Bytes': image.read()},
			CollectionId=collection_name,
			ExternalImageId=external_image_id)
	print(rekognition_response)

index_faces()

이 경우, 배경의 흐릿한 얼굴만 필터링되고 전면의 눈에 띄는 얼굴은 인덱싱됩니다.

IndexFaces 호출에서 감지되었지만 인덱싱되지 않은 얼굴은 UnindexedFaces라는 어레이에 반환됩니다. 얼굴이 인덱싱되지 않는 이유는 다음에 해당할 수 있습니다.

  • 감지된 얼굴 수가 MaxFaces 요청 파라미터의 값보다 큼
  • 얼굴이 너무 흐릿함
  • 얼굴이 너무 어두움
  • 얼굴의 자세가 극단적임 (예: 피사체가 카메라를 외면)
  • 얼굴이 전체 이미지 크기에 비해 너무 작음

UnindexedFaces에 대한 자세한 내용은 여기를 참조하시기 바랍니다. 원하는 필터링 옵션을 통해 얼굴 인덱싱을 마친 후에는 DescribeCollection API 작업을 사용하여 컬렉션에 저장된 얼굴 수를 확인할 수 있습니다.

4단계 – 컬렉션에서 얼굴 검색

컬렉션이 준비되면 이미지를 사용하여 얼굴 검색저장된 비디오에서 얼굴 검색에 설명된 방법을 사용하여 컬렉션 내에서 검색을 할 수 있습니다. 위의 예시는 이미지를 처리하므로 다음 코드를 사용할 수 있습니다.

import boto3

collection_name = "TestCollection"
image_file = "TestImage.jpg"


def search_faces_by_image():
	# assumes aws default region and credentials
	rekognition_client = boto3.client('rekognition')
	with open(image_file, 'rb') as image:
		rekognition_response = rekognition_client.search_faces_by_image(
			Image={'Bytes': image.read()},
			CollectionId=collection_name)
print(rekognition_response)

search_faces_by_image()

결론

이 블로그 게시물에서는 얼굴 인식 시, Amazon Rekognition의 얼굴 필터링 기능을 사용하여 얼굴 컬렉션으로 인덱싱할 얼굴의 수와 품질을 관리하는 방법을 알아보았습니다. 이 기능을 활용하면 컬렉션으로 인덱싱되는 얼굴의 수를 제어하여 비용을 절감하거나, 낮은 품질의 얼굴을 관리하기 위한 별도 코드에 소요되는 시간을 절약 할 수 있습니다. 또한, 대부분의 경우 얼굴 검색의 정확도가 개선됩니다.

얼굴 필터링은 Amazon Rekognition이 제공되는 지원되는 모든 AWS 리전에서 추가 비용 없이 사용할 수 있습니다. 자세한 내용은 설명서 페이지를 참조하시기 바랍니다. 최신 버전의 AWS SDK를 다운로드하여 시작할 수 있습니다.

Amazon Rekognition을 사용한 얼굴 인식에 관한 흥미로운 사용 사례에 대해 알아 보려면 자격 증명 확인인신매매 근절를 참조하세요.

이 글은 AWS Machine Learning BlogSave time and money by filtering faces during indexing with Amazon Rekognition의 한국어 번역으로 AWS 프로페셔널 서비스팀의 연나라 컨설턴트가 감수하였습니다.