객체 감지(Object Detection)는 컴퓨터 비전 분야의 한 기술로
이미지나 비디오에서 객체를 인식하고 해당 객체의 위치를 파악하는 작업을 의미
객체 감지 기술은 이미지 내에서 특정 객체(예: 사람, 자동차, 동물 등)를 찾아내고,
그 객체의 boundary box를 표시하여 위치를 식별한다.
포스트맨에서 API 설계 시작
Visual Studio Code를 실행해 코드를 작성
rekognition을 사용하기 위해서 IAM에서 AmazonRekognitionFullAccess 권한 추가하고 진행한다.
Amazon Rekognition 메뉴얼 확인은
https://docs.aws.amazon.com/ko_kr/rekognition/latest/dg/labels-detect-labels-image.html
이미지에서 레이블 감지 - Amazon Rekognition
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다. 이미지에서 레이블 감지 이 DetectLabels작업을 사용하여 이미지에서 레이블 (
docs.aws.amazon.com
from flask import request
from flask_restful import Resource
from datetime import datetime
import boto3
from config import Config
class ObjectDetectionResource(Resource):
def post(self):
# 파일을 올렸는지 확인
if 'photo' not in request.files:
return {'result':'fail',
'error':'사진은 필수입니다.'}, 400
file = request.files['photo']
# 이미지 파일 올렸는지 확인
if 'image' not in file.content_type:
return {'result':'fail',
'error':'이미지 파일을 업로드하세요.'}, 400
# 이미지 파일이 맞다면 파일 이름 변경
current_time = datetime.now()
file_name = current_time.isoformat().replace(':', '_') + '.jpg'
file.filename = file_name
# rekognition 서비스를 이용하려면 먼저 S3에 이미지 파일을 업로드 해놔야 한다.
client = boto3.client('s3',
aws_access_key_id = Config.AWS_ACCESS_KEY,
aws_secret_access_key = Config.AWS_SECRET_ACCESS_KEY)
try:
client.upload_fileobj(file,
Config.S3_BUCKET,
file_name,
ExtraArgs = {'ACL':'public-read',
'ContentType':'image/jpeg'})
except Exception as e:
return {'result':'fail',
'error':str(e)}, 500
# 리코그니션을 이용한다.
label_list = self.detect_labels(file_name, Config.S3_BUCKET)
return {'result':'success',
'labels':label_list}
def detect_labels(self, photo, bucket):
client = boto3.client('rekognition',
'ap-northeast-2',
aws_access_key_id = Config.AWS_ACCESS_KEY,
aws_secret_access_key = Config.AWS_SECRET_ACCESS_KEY)
response = client.detect_labels(Image={'S3Object':{'Bucket':bucket,'Name':photo}},
MaxLabels=10,
# Uncomment to use image properties and filtration settings
#Features=["GENERAL_LABELS", "IMAGE_PROPERTIES"],
#Settings={"GeneralLabels": {"LabelInclusionFilters":["Cat"]},
# "ImageProperties": {"MaxDominantColors":10}}
)
print('Detected labels for ' + photo)
print()
print(response['Labels'])
label_list = []
for label in response['Labels']:
print("Label: " + label['Name'])
label_list.append(label['Name'])
return label_list
메뉴얼을 가져와서 필요한 것만 추려내기 위한 수정작업 완료!
끘^^
'Restful API' 카테고리의 다른 글
[Restful API] Naver 뉴스 검색 API 사용 (0) | 2024.05.29 |
---|---|
[Restful API] 이미지 S3에 업로드하는 API 만들기, boto3 (0) | 2024.05.28 |
[Restful API] 영화 추천 API 만들기 (0) | 2024.05.27 |
[Restful API] 로그아웃 시키는 방법 (0) | 2024.05.22 |
[Restful API] 토큰 유효기간 만료 시키기 (0) | 2024.05.22 |