RESTful flask API - Rekognition 객체 탐지 API 구현하기

반응형

해당 포스팅은 사용자로부터 파일을 받아서 Rekognition을 이용한 객체 탐지 기능만을 설명합니다.

유저로부터 받은 파일의 이미지가 무엇인지 인공지능이 구별하는 기능입니다.

유저로부터 파일을 받는 방법은 이전 포스팅에서 확인 가능합니다.

https://luvris2.tistory.com/206

 

AWS S3 - 파이썬으로 이미지 파일 업로드하기

목표 S3에 이미지 파일을 업로드 RDS DB에 이미지의 URL과 내용 저장 boto3 파이썬용 AWS 소프트웨어 개발 킷 Amazon S3, EC2, DynamoDB 등 AWS 서비스와 쉽게 통합 boto3 라이브러리 설치 S3에 파일을 업로드하

luvris2.tistory.com


Rekognition

  • 딥 러닝 기반 시각 분석 서비스
  • 기계 학습을 통해 이미지 및 비디오 분석 자동화
  • 기계 학습 모델 및 인프라를 구축하지 않고도 사전 훈련되었거나 사용자 지정 가능한 API 제공
  • 예) 얼굴 비교 및 검색, 얼굴 탐지 및 분석, 텍스트 탐지, 유명 인사 인식 등등

boto3

파이썬용 AWS 소프트웨어 개발 킷

Amazon S3, EC2, DynamoDB 등 AWS 서비스와 쉽게 통합


boto3 라이브러리 설치 및 호출

# boto3 설치
pip install boto3

# boto3 호출
import boto3

파이썬으로 객체 탐지 API 구현하기

Visual Studio Code

메인 파일 : app.py

  • 기능 : API 구축, 환경변수 설정, 리소스 경로 생성
from flask import Flask
from flask_jwt_extended import JWTManager
from flask_restful import Api
from ref.config import Config

from resources.rekognition import ObjectDetectionResource

# API 서버를 구축하기 위한 기본 구조
app = Flask(__name__)

# 환경변수 셋팅
app.config.from_object(Config) # 만들었던 Config.py의 Config 클래스 호출

# JWT 토큰 생성
jwt = JWTManager(app)

# restfulAPI 생성
api = Api(app)

# 경로와 리소스(api코드) 연결
api.add_resource(ObjectDetectionResource, '/object_detection')

if __name__ == '__main__' :
    app.run()

추가 리소스 파일 : rekognition.py

  • 기능
    • 사용자로부터 업로드 받은 이미지 파일의 객체를 구분
  • 기능 설계
    • 클라이언트로부터 이미지 파일을 reqeust의 key(filename)로 받음 : request.args['filename']
    • boto3.client('rekognition') : rekognition을 이용하여 객체 탐지 객체 생성 
      • 접속 지역, 액세스 키, 시크릿 키 설정
    • client.detect_labels() : 객체 탐지 수행
      • 버킷명, 이미지파일 이름, 최대 분류 갯수 설정
  • 참고사항
    • 비공개 사항 : Config
      • Config : S3의 액세스키와 시크릿키 내포
from flask import request
from flask_restful import Resource
import boto3
from ref.config import Config

class ObjectDetectionResource(Resource) :
    # 객체 탐지 API
    def get(selft) :
        # 1. 클라이언트로부터 데이터 받기
        filename = request.args['filename']

        # 2. rekognition을 이용하여 object detection
        client = boto3.client('rekognition', 'ap-northeast-2',
                            aws_access_key_id = Config.ACCESS_KEY,
                            aws_secret_access_key = Config.SECRET_ACCESS)

        response = client.detect_labels(Image= {
                                                'S3Object': {
                                                        'Bucket' : Config.S3_BUCKET,
                                                        'Name' : filename
                                                            }
                                                },
                                        MaxLabels=10)
                                        
        return {
                "result" : "success",
                "label" : response["Labels"]
        }, 200

POSTMAN - API 객체 탐지 테스트

GET - http://127.0.0.1:5000/object_detection

Params - KEY(filename) : VALUE(파일이름)

 

  • 이미지

 

  • 객체 탐지 결과

 

그렇습니다 파이리는 캥거루 입니ㄷ..

반응형