Back End/Flask

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

luvris2 2022. 6. 24. 14:27
반응형

해당 포스팅은 사용자로부터 파일을 받아서 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(파일이름)

 

  • 이미지

 

  • 객체 탐지 결과

 

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

반응형