28편 - AWS Rekognition을 활용한 프로필 이미지 검증
개요
티맵에서는 본인 차량 원부를 조회해서 차량 프로필을 관리하는 기능을 제공하고 있는데요. 이번에 10.9 버전 개편을 하면서 사용자의 프로필 이미지를 관리할 수 있는 기능도 제공하게 되었습니다. 프로필 이미지는 사용자가 원하는 이미지를 직접 등록할 수 있으며, 원부 조회를 통해 차량 프로필을 등록한 경우에는 카바타를 선택해서 등록할 수도 있습니다.
사용자가 직접 이미지를 업로드할 수 있는 기능을 제공하게 되면서 이미지가 프로필로서 적합한지(유해한 이미지는 아닌지) 검토하는 기능이 필요하게 되었습니다. 이번 글에서는 AWS Rekognition 서비스를 이용해 프로필 사진 필터링 기능을 추가한 과정을 공유합니다.
프로필 이미지 등록
회원 정보 화면에서 카바타를 선택(차량 원부를 등록한 경우)하거나 휴대폰 앨범에 저장된 이미지 또는 새로 촬영한 이미지를 프로필로 등록할 수 있습니다. 이 과정에서 이미지가 유해하다고 판단되면 등록하지 않고 위와 같이 알림 메시지를 표시합니다.
실시간으로 등록되는 많은 사진을 수동으로 검토한다는 것은 시간과 인력이 많이 소요되며, 대규모 플랫폼에서는 현실적이지 않습니다. 이를 위해 AWS Rekognition의 Content Moderation 기능을 사용해서 이미지 필터링을 효율적으로 처리하기로 했습니다.
AWS Rekognition은 기계 학습(Machine Learning)을 통해 이미지와 동영상의 다양한 분석 기능을 제공하는 서비스로, 다음과 같은 기능을 제공합니다.
1. 얼굴 인식 : 얼굴을 인식하고 가짜 얼굴을 사용하는 악의적인 사용자를 차단합니다.
2. 얼굴 분석 : 얼굴을 인식하고 주요 특징을 분석합니다. 얼굴의 주요 특징 (나이, 성별, 안경 착용 등)을 식별하고, 감정(행복, 슬픔)을 감지합니다.
3. 유해 콘텐츠 탐지 : 노출, 폭력 등 부적절한 이미지나 동영상을 감지하는 기능으로 안전한 콘텐츠 제공을 위해 사용합니다.
4. 사용자 지정 레이블 : 비즈니스에 필요한 부품이나 로고등 맞춤형 모델을 학습하고, 사진이나 동영상에서 이 모델들을 식별해 냅니다.
5. 객체 탐지 : 이미지나 동영상에서 사람, 동물, 건물, 차량 등 다양한 객체를 감지하고 분류합니다.
6. 텍스트 탐지 : 표지판, SNS 게시글, 제품명 등 이미지 안에 포함된 텍스트를 감지하고 추출합니다.
7. 동영상 분석 : 동영상에서 엔딩 크레딧 위치, 슬래이트 위치, 무음 블랙 프레임 위치 등 특정 장면을 추출합니다.
위와 같이 다양한 기능을 제공하고 있는데요, 티맵에서 필요한 기능은 ‘유해 콘텐츠 탐지’ 기능입니다. 이 Content Moderation 기능은 성적이거나 폭력적인 콘텐츠를 탐지하고, 검토 결과 정확도를 점수로 제공해 줍니다. 서비스 담당자는 임계치를 이용해서 원하지 않는 콘텐츠를 자동으로 제한할 수 있습니다.
1. 부적절 콘텐츠 탐지 및 라벨링 : 이미지 속 콘텐츠를 분석하여 부적절 콘텐츠 유형(성적, 폭력적 등)을 탐지하고 해당 라벨을 추가합니다.
2. 신뢰 점수 스코어링 : 탐지한 콘텐츠 유형에 대해 신뢰 점수를 부여하여, 콘텐츠가 얼마나 부적절한지에 대한 확률을 표시합니다. 이 점수를 기준으로 필터링 정책을 설정할 수 있습니다.
3. 정책 기반 필터링 : 사용자는 신뢰 점수에 따라 필터링 임계값을 설정하여 부적절 콘텐츠를 차단할 수 있습니다.
1. 프로필 이미지 등록
휴대폰 사진첩에 저장된 이미지나 차량 원부 조회한 사용자라면 해당 차량의 카바타 이미지를 등록합니다.
2. AWS S3에 이미지 업로드
사용자가 프로필 이미지를 업로드하면, 해당 이미지를 Amazon S3 버킷에 저장합니다.
이는 Rekognition이 이미지를 분석할 수 있도록 하기 위한 준비 단계입니다.
이미지를 S3에 업로드할 때 PresignedUrl 방식을 사용해서 업로드를 합니다. presigned url을 사용함으로써 단말에서는 업로드를 위한 보안 자격 증명이나 권한 설정 없이 편리하게 업로드를 할 수 있습니다.
3. 유해 이미지 필터링
프로필 관리 서비스에서는 Rekognition API를 호출하기 위해 필요한 라이브러리 의존 관계 추가 및
계정 정보(Service Account)를 설정합니다.
AWS 계정은 AmazonRekognitionFullAccess 권한과 AmazonS3 ReadOnlyAccess 권한이
필요합니다.
4. 이미지 분석 : Rekognition API 호출
S3에 저장한 이미지를 Rekognition의 DetectModerationLabels API를 호출하여 이미지의 콘텐츠를 분석합니다. 이 API는 이미지 내 성인물이나 폭력적인 콘텐츠 등 부적절한 요소가 있는지 탐지합니다.
5. S3 이미지 접근
Rekognition은 요청받은 S3 Object에 직접 접근해서 해당 바이너리를 분석합니다.
이미지는. jpg 또는. png 형식이어야 합니다.
위 과정 중 ‘유해 이미지 필터링', '이미지 분석: Rekognition API 호출’ 이 애플리케이션 서버가 담당한 부분입니다. 단계별로 어떻게 구현했는지 소스코드를 살펴보겠습니다.
Rekognition 및 IRSA 의존 관계 추가
- 의존 관계를 추가한 라이브러리는 모두 같은 버전으로 통일했는데요, 처음에는 각 라이브러리별 최신 버전을 사용했었다가 서로 버전이 달라서 호환이 안 되는 문제가 있었습니다. 시행착오 끝에 같은 버전으로 통일하니 잘 동작하게 되었습니다.
EKS POD에 AWS 계정 설정
- AWS API를 사용하기 위한 Service Account 명칭을 POD에 설정합니다. (IRSA) arn:aws:iam::xxxxxxxxxx 이름은 CredentialProvider를 생성하기 위해 사용합니다.
Rekognition API 호출 : 라인별로 설명을 덧붙이겠습니다.
- Line 8 : 분석할 이미지 경로입니다. (S3에 업로드한 경로) profile/upload/test.jpg 형식의 문자열입니다.
- Line 9 : 이미지 분석 요청 객체 DetectModerationLabelsRequest를 생성합니다. 요청 객체를 생성하는 자세한 로직은 뒤에서 더 다루겠습니다.
- Line 10 : Rekognition 서비스에 접근하기 위한 클라이언트 객체 RekognitionClient를 생성합니다. 자세한 로직은 뒤에서 더 다루겠습니다.
- Line 13 : Rekognition API를 호출하고 이미지 분석 결과로 DetectModerationLabelsResponse객체를 응답으로 전달받습니다.
- Line 15 : 이미지 분석 결과를 바탕으로 비즈니스에서 정의한 기준에 따라 유해한 이미지를 필터링합니다.
- Line 22 : 서버에서 처리한 결과를 클라이언트에게 반환합니다. 분석 결과 안전한 콘텐츠인지 여부와 클라언트에서 접근할 수 있는 이미지 경로(예 : http://cdnhost/profile/test.jpg)를 반환합니다.
이미지 분석 요청 객체 DetectModerationLabelsRequest 생성 로직
- S3에 저장된 이미지 정보를 이용해서 Image 객체를 생성합니다. S3 Bucket 이름과 이미지 경로를 포함한 파일명이 필요합니다.
- minConfidence 설정 : 최저 신뢰도를 설정합니다. 80.0으로 설정한 경우 이 기준보다 낮은 분석결과는 포함하지 않습니다. 예를 들어 이미지 분석 결과 90% 확률로 ‘권총', 70% 확률로 ‘장난감’이라고 분석이 되었다면 ‘권총’에 대한 내용만 분석결과로 반환하게 됩니다.
RekognitionClient 생성 로직
- Region 정보와 Credential 정보가 필요합니다.
- AwsCredentialsProvider객체를 생성해야 하는데, 이 타입의 객체는 ContainerCredentialsProvider , ProfileCredentialsProvider, StsCredentialsProvider 등 종류가 많습니다. 각 서비스 인증 환경에 맞는 CredentialProvider를 생성하면 됩니다. 여기에서는 WebIdentityTokenFileCredentialsProvider를 사용했습니다.
- roleArn 에는 values.yaml 파일에 설정한 리소스 이름과 동일한 이름을 사용합니다.(arn:aws:iam::xxxxxxxxxx)
필터링 결과에 따른 처리
- Rekognition은 이미지 분석결과를 DetectModerationLabelsResponse 객체로 응답합니다.
- API 호출 결과로 반환된 ModerationLabels 배열을 검토하여 부적절한 콘텐츠가 포함되어 있는지 확인합니다. 각 레이블에는 이름과 신뢰도 점수가 포함되어 있으며, 이를 기반으로 이미지의 적절성을 판단할 수 있습니다.
- 부적절 이미지인 경우, 프로필 등록을 차단하고, 사용자에게 오류 메시지를 표시합니다. 정상 콘텐츠인 경우, 해당 이미지를 즉시 프로필 이미지로 등록합니다.
마치며
AWS Rekognition의 Content Moderation 기능을 통해 필터링을 자동화 함으로써 콘텐츠 검토에 필요한 리소스를 절감하고, 적절성 검토를 빠르게 완료할 수 있었습니다. 무엇보다 해당 기능을 빠르게 개발해서 사용자에게 좋은 경험을 제공할 수 있어서 도움이 많이 되었습니다.
서비스에 이미지 관리 기능 제공을 검토 중이시면 정확한 분석과 부적절한 콘텐츠 필터링 기능을 제공하는 Rekognition 서비스를 사용해 보시는 것을 추천합니다.