1. Rekognition
- AWS에서 제공하는 딥 러닝 기반 시각 분석 서비스
- 기계 학습을 통해 이미지 및 비디오 분석 자동화
- 기계 학습 모델 및 인프라를 구축하지 않고도 사전 훈련되었거나 사용자 지정 가능한 API 제공
- 예) 레이블 탐지, 얼굴 비교 및 검색, 얼굴 탐지 및 분석, 텍스트 탐지 등등
- 문서: https://aws.amazon.com/ko/rekognition/
2. IAM 사용자 권한 수정
rekogniton을 사용할 수 있게 IAM 사용자 권한을 추가한다.
3. 객체 탐지 API 코드
from flask import request
from flask_restful import Resource
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 한다.
# rekognition 서비스를 이용할 수 있는지
# 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
config.py 파일
class Config :
# AWS 관련 키
ACCESS_KEY = IAM 사용자 access key
SECRET_ACCESS = IAM 사용자 secret access key
# S3 버킷
S3_BUCKET = 버킷명
# S3 Location
S3_LOCATION = 'https://버킷명.지역명.amazonaws.com/'
4. 포스트맨으로 테스트
사용한 이미지
포스트맨 테스트 결과
원숭이 99.54%, 호랑이 96.64% 라는 결과가 나왔다.
다음으로 높게 예상한 label은 바로 동물원, 95.84%였다.
'REST API' 카테고리의 다른 글
네이버 오픈API 활용 - 뉴스 검색 API (0) | 2023.01.13 |
---|---|
API서버 - 클라이언트에게 받은 이미지와 텍스트를 DB에 저장하는 API (0) | 2023.01.13 |
API서버 - @jwt_required(optional=True)를 이용한 분기 처리 (0) | 2023.01.10 |
API서버 - Flask 쿼리스트링(Query String)을 사용한 API (0) | 2023.01.06 |
Flask - PROPAGATE_EXCEPTIONS에 대한 이해 (0) | 2023.01.06 |