BLOG

Amazon Rekognition으로 인덱싱하는 동안 얼굴을 필터링하여 시간과 비용 절약하기
작성일: 2018-09-27

Amazon Rekognition은 개체, 사람, 텍스트, 장면 및 활동을 식별하고 부적절한 내용을 감지할 수 있는 심층 학습 기반 이미지 및 비디오 분석 서비스입니다. 이제 새로운 Amazon Rekognition 얼굴 필터링 기능을 사용하여 얼굴 인식을 위해 인덱싱할 수 있는 얼굴의 질과 양을 제어할 수 있습니다. 이를 통해 비용을 절감하고 개발 시간을 단축하며 얼굴 인식의 정확성을 높일 수 있습니다.

이 출시 전에 IndexFaces API 작업을 사용했을 때 Amazon Rekognition은 이미지의 모든 얼굴을 검색하여 지정한 컬렉션으로 인덱싱했습니다. 그러나 일부 이미지에는 인덱싱하지 않을 얼굴이 포함되어 있을 수 있습니다. 예를 들어, 빨간색 카펫 시사회와 같이 사람이 붐비는 이벤트에서 얼굴 검색 품질이나 배경에 관련 없는 얼굴이 부정적인 영향을 줄 수 있는 작고 흐린 얼굴을 인덱싱하는 것을 원하지 않을 수 있습니다. 그러한 얼굴을 인덱싱하는 것은 비용을 증가시키고 많은 경우에 정확성에 해롭습니다. 지금까지 얼굴 탐지 실행, 각 얼굴 자르기에 필터링 규칙 적용, 필터를 통과한 얼굴 자르기 색인화를 통해서만 이러한 얼굴을 필터링할 수 있었습니다. 새로운 Amazon Rekognition 얼굴 필터링 기능은 인덱싱하는 동안 두 개의 매개 변수만 사용하여 얼굴을 필터링할 수 있도록 하여 이 프로세스를 간소화합니다. 더 이상 여러 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단계 – 인덱싱에 사용할 이미지 수집 및 검사하기

컬렉션을 설정한 후 얼굴을 인덱싱할 이미지를 수집할 수 있습니다. 인덱싱에 사용되는 일부 이미지에는 대상이 보고 있기 때문에 매우 작거나 흐리거나 얼굴의 일부만 볼 수 있는 얼굴이 포함될 수 있습니다. 이상적으로는 “좋은” 품질 얼굴만 인덱싱되고 낮은 품질의 얼굴은 자동으로 필터링되도록 하는 것이 좋습니다. 또한 이미지에 있는 모든 얼굴을 색인화하지 않으려는 시나리오가 발생할 수도 있습니다. 예를 들어, 배경에 많은 다른 사람들의 작은 얼굴들이 있는 가운데 데이트 상대와 함께 술집에서 찍은 사진 중 가장 유명한 두 얼굴들을 색인화하기를 원할 수도 있습니다.

어떻게 작동하는지 설명하기 위해, 저희는 두 장의 예시 사진을 사용할 것입니다. 첫 번째는 위키미디어 크리에이티브 커먼즈(Alan Light)에서, 두 번째는 Pexels.com에서 제공받았습니다.

우선, 공식적인 사진작가가 취재하고 있는 레드 카펫 행사의 예를 살펴보겠습니다.

다음으로, 얼굴 탐지를 이용한 Amazon Rekognition에 의해 발견된 얼굴들을 살펴봅시다.

보시다시피, 두 개의 크고 두드러진 얼굴과 세 개의 다른 얼굴이 배경에 있습니다. 이제 두 번째 사진에서 발견된 얼굴들을 살펴봅시다.

보시는 바와 같이, 배경에는 인덱싱에 사용하고 싶지 않은 흐릿한 얼굴이 있습니다.

이제 두 가지 사용 사례를 살펴보겠습니다. (i) 배경에는 아무 얼굴도 없이 눈에 띄고 고품질의 얼굴만 인덱싱하려고 합니다(첫 번째 사진). (ii) 이미지에 있는 모든 “좋은” 품질의 얼굴을 인덱싱하려고 합니다(두 번째 사진). 얼굴 필터링을 사용하여 이 작업을 어떻게 수행할 수 있는지 살펴보겠습니다.

 

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

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

MaxFaces는 인덱싱할 최대 얼굴 수를 지정하는 데 사용되며 1보다 크거나 같아야 합니다. MaxFaces에 대해 더 큰 값을 지정하는 경우에도 IndexFaces는 이미지에서 100개 이하의 탐지된 얼굴을 반환하지 않습니다. 반면, QualityFilter는 낮은 품질의 얼굴에 대한 필터링을 전환하기 위해 사용됩니다. AUTO를 지정하면 Amazon Rekognition이 자동으로 낮은 품질의 얼굴을 찾아 인덱싱에서 제외합니다. NONE을 지정하면 필터링이 수행되지 않으며 발견된 모든 얼굴은 품질에 관계없이 인덱싱됩니다. 필터링된 얼굴은 색인화되지 않습니다. 좋은 품질의 얼굴만 색인되도록 기본값은 AUTO로 설정됩니다.

첫 번째 사용 사례의 경우에는 다음 설정을 사용하면 됩니다.

 

문장 요청

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은 탐지 신뢰도가 가장 높은 두 개의 가장 큰 얼굴을 선택하고 이러한 얼굴만 인덱싱합니다. 이 이미지에서 전경 속의 남자와 여자의 얼굴은 색인이 되는 반면 배경의 얼굴은 색인이 되지 않습니다.

MaxFaces를 5로 변경하면 다른 세 개의 주요 얼굴도 색인됩니다.

두 번째 사용 사례에서는 기본 설정을 사용하여 QualityFilter가 작업을 수행하도록 할 수 있습니다.

 

문장 요청

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에 대한 자세한 내용은 다음을 참조하십시오. 원하는 필터링 옵션을 사용하여 모든 얼굴이 인덱싱되면 DescriptionCollection 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을 사용하여 얼굴 인식과 관련된 몇 가지 흥미로운 사용 사례에 대해 읽으려면 신원 확인인신매매에 맞서 싸우기에 대한 블로그를 참조하십시오.

 

원문 URL: https://aws.amazon.com/ko/blogs/machine-learning/save-time-and-money-by-filtering-faces-during-indexing-with-amazon-rekognition/

** 메가존클라우드 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.