이미지에서 정보를 수집하는 능력은 엄청난 비즈니스 잠재력을 가지고 있습니다. 그리고 글쎄, 그것은 또한 재미있을 수도 있습니다. 이번 글에서는 우리가 어떻게 사용했는지 간략하게 설명하겠습니다.
간단히 말해서, 이미지 객체 감지는 주어진 이미지에서 엔터티에 대한 정보를 감지하고 추출하는 프로세스입니다. 여기에는 물체, 활동, 장소, 동물, 제품 등을 감지하는 것이 포함됩니다.
이미지 객체 감지에는 다양한 산업 분야에 걸쳐 광범위한 사용 사례가 있습니다. 은행, 보험, 소셜 미디어, 데이트 앱, 통신사, 핀테크 등 주요 부문에서는 어떤 형태로든 객체 감지를 사용합니다.
최근에 우리는 소셜 미디어 스타트업을 위한 이미지 객체 감지 기능을 구축하는 임무를 받았습니다. 사용 사례는 간단했습니다. 사용자는 자신이 좋아하는 사진 중 일부를 선택하고 스타트업의 소셜 미디어 페이지 중 하나에 소개되도록 제출할 수 있어야 했습니다.
소셜 미디어 마케팅 팀은 바다 사진, 인기 명소, 동물, 음악 콘서트 등과 같은 특정 주제에 대해 제출된 이미지를 검색할 수 있는 방법이 필요했습니다.
이미지를 분석하고 이미지 속 풍경과 사물을 기준으로 분류하는 것은 간단한 작업이 아닙니다. 인간의 시력은 그야말로 놀랍습니다. 물체를 감지하는 뇌의 능력을 복제할 수 있는 애플리케이션을 구축하는 것은 엄청나게 복잡합니다. 바로 그 일을 하는 데 전념하는 전체 컴퓨터 비전 산업이 있습니다.
처음부터 객체 감지를 수행하는 것은 일반적으로 다음을 포함하는 다단계 프로세스입니다.
프로젝트의 다른 모든 기능과 마찬가지로 이 기능에 대한 우리의 목표는 이 기능을 신속하게 구축하고 가능한 한 빨리 프로덕션 환경에서 그 효율성을 테스트하는 것이었습니다. 게다가 우리는 기존 클라우드 서비스를 활용할 수 있을 때 처음부터 솔루션을 구축하는 데 개발 리소스를 투자하고 싶지 않았습니다.
Cue Serverless — 스타트업의 전체 백엔드는 완전히 서버리스이며 이벤트 중심입니다. 이 아키텍처를 통해 우리는 소셜 미디어 앱을 다른 앱과 차별화 하는 기능에만 집중하면 되는 개발자 팀을 구성할 수 있습니다. 또한 서버리스를 사용하면 확장성이 뛰어난 서비스를 구축하는 동시에 사용한 만큼만 비용을 지불할 수 있습니다. 이는 확장성 스타트업에 대한 중요한 고려 사항입니다.
따라서 이 기능을 달성하기 위해 우리는 완전한 서버리스 이미지 및 비디오 분석 서비스인 Amazon Rekognition을 사용했습니다. Rekognition을 사용하여 우리는 이 복잡하고 중요한 워크플로우를 몇 시간 만에 개발할 수 있었습니다. 그것에 대해 자세히 살펴 보겠습니다.
Amazon Rekognition은 딥 러닝을 사용하여 이미지 및 비디오 분석을 수행하는 AWS 서버리스 제품입니다. 완전한 서버리스라는 것은 Rekognition을 사용하면 기본 인프라의 복잡성에 대해 걱정할 필요가 없다는 것을 의미합니다. 우리는 사용한 만큼만 비용을 지불 하며 이미지 및 비디오 분석 작업을 위해 미리 작성된 소프트웨어를 제공합니다. Rekognition은 이미지 레이블 감지, 얼굴 감지, 유명인 감지, 콘텐츠 조정, 텍스트 감지 등 다양한 기능을 제공합니다.
가장 좋은 부분? Rekognition은 딥 러닝 모델 구축, 훈련, 분석의 무거운 작업을 추상화합니다. 이미지 및 비디오 분석은 최소한의 설정만으로 빠르고 간단합니다. 우리는 서비스 확장을 위해 자체 데이터 세트를 구축 및 훈련하고 서버 용량을 프로비저닝하는 것에 대해 걱정할 필요가 없었습니다. 우리가 걱정해야 할 것은 통합뿐이었습니다.
아키텍처는 간단합니다. 우리 모바일 앱은 사용자 휴대폰의 이미지를 S3 버킷에 업로드합니다. 그런 다음 S3에 업로드하면 Lambda 함수가 트리거되어 Rekognition API를 호출하고 쿼리를 위해 결과를 DynamoDB에 저장합니다.
AWS를 사용한 서버리스 이미지 객체 감지 아키텍처 다이어그램
코드 작성은 재미있죠? 음, 코드를 적게 작성하는 것이 훨씬 더 재미있습니다.
Rekognition은 분석을 수행하고 결과를 반환하는 이미지 데이터를 보내는 API 세트를 노출합니다. 우리의 사용 사례에서는
서버리스 프레임워크 코드형 인프라 파일의 단순화된 버전은 다음과 같습니다.
//serverless.yamlfunctions: imageLabelDetection: handler: image-label-detection.handler events: - s3: bucket: my-image-bucket event: s3:ObjectCreated:* existing: true iamRoleStatements: - Effect: Allow Action: rekognition:DetectLabels Resource: "*" - Effect: Allow Action: s3:GetObject Resource: arn:aws:s3:::my-image-bucket
Lambda 코드는 단순히 Rekognition API를 호출하고 결과를 DynamoDB에 저장하지만 사용 사례에 적합한 모든 것을 사용할 수 있습니다. S3 이벤트에서 S3 버킷 이름과 이미지의 객체 이름을 가져와 이를 다음의 discoverLabels 함수에 전달합니다.
또한 신뢰 수준 임계값과 반환하려는 최대 레이블 수를 지정하기 위해 두 개의 선택적 매개 변수(MaxLabels 및 MinConfidence)를 전달합니다. 아래 예에서는 응답으로 최대 20개의 라벨만 얻을 수 있으며 모든 라벨의 신뢰도는 80%가 넘습니다.
//image-label-detecion.jsconst AWS = require("aws-sdk");const rekognition = new AWS.Rekognition();exports.handler = async (event) => { const imageDetails = event.Records[0].s3; const bucketName = imageDetails.bucket.name; const objectKey = imageDetails.object.key; const rekognitionResp = await rekognition .detectLabels({ Image: { S3Object: { Bucket: bucketName, Name: objectKey, }, }, MaxLabels: 20, MinConfidence: 80, }) .promise(); // Send to data store, eg DynamoDB // ... };
개 사진을 좋아하지 않는 사람이 있을까요? 다음은 S3 버킷에 업로드한 이미지에 대한 응답입니다. 보시다시피 Rekognition은 그것이 야외 자갈길에 있는 개의 이미지인지 정확하게 판단합니다(그리고 이미지에서 개가 있는 위치를 알려줍니다!).
재인식 응답(왼쪽), 업로드된 이미지(오른쪽).
그렇다면 몇 달간 프로덕션 환경에서 Rekognition을 사용한 후의 내 생각은 무엇입니까? 주요 내용은 다음과 같습니다.
TLDR: Rekognition을 통해 우리는 정확하고 빠르며 확장 가능한 이미지 개체 감지 기능을 신속하게 구축할 수 있었습니다.