군침이 싹 도는 코딩

S3에 저장된 이미지 객체 탐지 API 본문

Python/Flask

S3에 저장된 이미지 객체 탐지 API

mugoori 2023. 1. 12. 17:28

# 객체 탐지 API는 GET 메소드로 만들고 쿼리스트링으로 S3에 저장되어있는 이미지 파일 이름을 받아온다

 

 

 

class ObjectDetectionResource(Resource) :

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

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

        # 위의 파일은 이미 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)

        print(response)

        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

# 코딩의 주석이 없는 부분은 모두 메뉴얼에 있는것을 그대로 복사 붙여넣기한것이다

주의할점은 리코그레이션을 사용할때는 IAM 권한설절이 되어있는지 확인한다

 

 

 

# 결과는 이런식으로 레이블이 쭉 나열된다

 

 

 

            name_list = []
            for label in response['Labels']:
                name_list.append(label['Name'])
                
        except Exception as e :
            return {'error':str(e)}, 500

        

        return {'result':'success','Labels':name_list}, 200

# 만약 출력결과의 이름만 뽑아 키워드형식으로 출력하고 싶다면 for문을 전부 지우고 이것만 써주도록한다

빈 리스트를 만들고 response의 레이블을 레이블에 저장한 뒤 빈 리스트에 레이블의 네임을 저장하라는뜻이다

그리고 마지막 리턴 부분을 name_list로 바꿔준다

 

 

 

# 강아지 사진을 넣어 키워드 형식으로 뽑은 결과는 이런식으로 나온다

 

 

 

# IAM에 들어가서 빨간줄표시가 추가되어있는지 꼭 확인한다

'Python > Flask' 카테고리의 다른 글

Flask 기본 구조  (0) 2023.01.13
사진과 글을 DB에 저장하는 API  (0) 2023.01.13
S3에 이미지 업로드하는 API  (0) 2023.01.12
리얼 타임 추천 시스템 API  (0) 2023.01.10
추천 시스템 API  (0) 2023.01.10