본문 바로가기

BackEnd

API - Amazon Rekognition 사용해 이미지 객체식별 API 만들기

반응형
Amazon Rekognition
 
 
 

Amazon Rekognition Rekognition을 사용하면

 

애플리케이션에 이미지 및 비디오 분석을 쉽게 추가할 수 있습니다.

 

Amazon Rekognition API에 이미지나 비디오를 제공하면 서비스에서

 

객체, 사람, 텍스트, 장면 및 활동을 식별할 수 있습니다.

 

또한 부적절한 콘텐츠를 감지할 수도 있습니다.

 

Amazon Rekognition Rekognition은

 

매우 정확한 얼굴 분석, 얼굴 비교 및 얼굴 검색 기능도 제공합니다.

 

사용자 확인, 카탈로그 작성, 인원 계산 및 공공 안전을 포함하여

 

다양한 사용 사례에서 얼굴을 탐지, 분석, 비교할 수 있습니다.

 

Amazon Rekognition Rekognition은 Amazon의 컴퓨터 비전 과학자들이

 

매일 수십억 개의 이미지와 비디오를 매일 분석할 목적으로 개발하여

 

검증되고 확장성이 뛰어난 딥 러닝 기술을 기반으로 하고 있습니다.

 

이를 위해 머신 러닝 전문 지식이 필요하지 않습니다.

 

Amazon Rekognition Rekognition에는

 

Amazon S3 저장된 모든 이미지 또는 비디오 파일을

 

신속하게 분석할 수 있는 간편하고 사용하기 쉬운 API가 포함되어 있습니다.

 

Amazon Rekognition Rekognition은 항상 새로운 데이터에서 학습하고 있으며,

 

서비스에 새로운 레이블과 얼굴 비교 기능을 지속적으로 추가하고 있습니다.

 

자세한 내용은 아래 url을 참조하십시오.

 

 

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

 

 

 

 

 

이미지에서 레이블 감지

 

 

from datetime import datetime
from http import HTTPStatus
from os import access
from flask import request
from flask_jwt_extended import create_access_token, get_jwt, get_jwt_identity, jwt_required
from flask_restful import Resource
from mysql.connector.errors import Error
from config import Config
import boto3


class ObjectDetectionResource(Resource) :
    
    def get(self) :

        # 클라이언트로부터 s3에 저장되어있는 file name을 받아온다.
        filename = request.args['filename']

        # 위의 파일은 s3에 저장되어 있어야 한다.
        # 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)

        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

 

 

 

 

 

 

 

위와 같은 이미지를 S3에 업로드 후 POSTMAN으로 Test시 출력 예시

 

 

{
    "result": "success",
    "Labels": [
        {
            "Name": "Person",
            "Confidence": 95.0688247680664,
            "Instances": [
                {
                    "BoundingBox": {
                        "Width": 0.3874511122703552,
                        "Height": 0.4954732060432434,
                        "Left": 0.002048889873549342,
                        "Top": 0.13204264640808105
                    },
                    "Confidence": 95.0688247680664
                }
            ],
            "Parents": []
        },
        {
            "Name": "Computer Keyboard",
            "Confidence": 93.35923767089844,
            "Instances": [
                {
                    "BoundingBox": {
                        "Width": 0.32443979382514954,
                        "Height": 0.22741711139678955,
                        "Left": 0.2543860971927643,
                        "Top": 0.2586889863014221
                    },
                    "Confidence": 93.35923767089844
                }
            ],
            "Parents": [
                {
                    "Name": "Computer"
                },
                {
                    "Name": "Electronics"
                }
            ]
        },
        {
            "Name": "Computer",
            "Confidence": 93.35923767089844,
            "Instances": [],
            "Parents": [
                {
                    "Name": "Electronics"
                }
            ]
        },
        {
            "Name": "Electronics",
            "Confidence": 93.35923767089844,
            "Instances": [],
            "Parents": []
        },
        {
            "Name": "Table",
            "Confidence": 90.36174011230469,
            "Instances": [],
            "Parents": [
                {
                    "Name": "Furniture"
                }
            ]
        },
        {
            "Name": "Furniture",
            "Confidence": 90.36174011230469,
            "Instances": [],
            "Parents": []
        },
        {
            "Name": "Desk",
            "Confidence": 85.16712188720703,
            "Instances": [],
            "Parents": [
                {
                    "Name": "Table"
                },
                {
                    "Name": "Furniture"
                }
            ]
        },
        {
            "Name": "Text",
            "Confidence": 83.44525146484375,
            "Instances": [],
            "Parents": []
        },
        {
            "Name": "Finger",
            "Confidence": 74.90338897705078,
            "Instances": [],
            "Parents": []
        },
        {
            "Name": "Diary",
            "Confidence": 57.40088653564453,
            "Instances": [],
            "Parents": [
                {
                    "Name": "Text"
                }
            ]
        }
    ]
}

 

 

반응형