Flask

S3 에 저장돼 있는 이미지를 객체 탐지 하는 API - Amazon Rekognition

yugyeong 2023. 1. 12. 17:42

 

Amazon Rekognition

Amazon Rekognition 을 사용하면 애플리케이션에 이미지 및 비디오 분석을 쉽게 추가할 수 있다.

https://docs.aws.amazon.com/ko_kr/rekognition/latest/dg/what-is.html

 

Amazon Rekognition 란 무엇입니까? - Amazon Rekognition

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다. Amazon Rekognition 란 무엇입니까? Amazon Rekognition Rekognition을 사용하면 애플리케

docs.aws.amazon.com

 

Flask 를 이용하여, Amazon Rekognition Api 를 개발할 것이다.

 

1. AWS 의 IAM 으로 이동하여 권한 추가 

AWS 의 IAM 으로 이동하여서 권한 추가를 하여야한다.

 

권한 추가 버튼 클릭 - 기본 정책 직접연결 - AmazonRekognitionFullAccess 를 추가한다.

 

2. 코드 작성

vs code 로 이동하여서 S3 에 저장돼 있는 이미지를 객체 탐지 하는 API 코드를 작성한다.

S3 에 저장돼 있는 이미지를 객체 탐지하는 것이기 때문에, S3 에 이미지가 업로드 된 상태여야한다.

from flask import request
from flask_jwt_extended import jwt_required
from flask_restful import Resource
from mysql.connector import Error
from flask_jwt_extended import get_jwt_identity
from mysql_connection import get_connection

from datetime import datetime
import boto3
from config import Config

class ObjectDetectionResource(Resource) :

    # S3에 저장돼 있는 이미지를
    # 객체 탐지 하는 API
    def get(self) :

        # 1. 클라이언트로부터 파일명을 받아온다.
        filename = request.args.get('filename')

        # 2. 위의 파일은 이미 S3에 있다는 상황.
        # 따라서 aws의 rekognition 인공지능서비스를
        # 이용해서, object detection 한다.

        # 리코그니션 서비스 이용할수 있는지
        # IAM 의 유저 권한 확인하고, 설정해준다.
        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 )
        
        for label in response['Labels']:
            print ("Label: " + label['Name'])
            print ("Confidence: " + str(label['Confidence']))
            print ("Instances:")
            for instance in label['Instances']:
                print ("  Bounding box")
                print ("    Top: " + str(instance['BoundingBox']['Top']))
                print ("    Left: " + str(instance['BoundingBox']['Left']))
                print ("    Width: " +  str(instance['BoundingBox']['Width']))
                print ("    Height: " +  str(instance['BoundingBox']['Height']))
                print ("  Confidence: " + str(instance['Confidence']))
                print()

            print ("Parents:")
            for parent in label['Parents']:
                print ("   " + parent['Name'])
            print ("----------")
            print ()


        return {'result' : 'success', 
                'Labels' : response['Labels']}, 200

 

 

3. postman 으로 테스트

  • GET 으로 설정
  • 경로 연결 ('/object_detection')
  • Params 에 KEY 와 VALUE 값 설정 ( VALUE 값에는 S3에 업로드 되어있는 파일명을 넣어주어야 한다.)

위 상태로 실행을 돌리면 아래처럼 결과값이 나온다.