반응형
< AWS rekognition 활용한 얼굴 인식 API >
# Amazon Rekognition은 AWS에서 제공하는 이미지 및 비디오 분석 서비스로, 이 서비스는 기계 학습 모델을 사용하여 다양한 객체, 장면, 얼굴, 텍스트 등을 감지하고 분석할 수 있게 해준다.
# 주요 기능
- 객체 및 장면 감지 (Object and Scene Detection):
- 이미지나 비디오에서 사람, 동물, 차량 등 다양한 객체와 장면을 감지할 수 있습니다.
- 텍스트 감지 (Text Detection):
- 이미지와 비디오에서 텍스트를 감지하고 추출할 수 있습니다. OCR(Optical Character Recognition) 기능을 제공합니다.
- 얼굴 감지 및 분석 (Face Detection and Analysis):
- 이미지나 비디오에서 얼굴을 감지하고, 성별, 나이, 감정 등의 얼굴 속성을 분석할 수 있습니다.
- 얼굴 비교 (Face Comparison):
- 두 개의 얼굴 이미지를 비교하여 동일 인물인지 여부를 확인할 수 있습니다.
- 유해 콘텐츠 감지 (Content Moderation):
- 이미지와 비디오에서 폭력적이거나 성인용 콘텐츠 등 유해 콘텐츠를 감지할 수 있습니다.
- 유사 이미지 검색 (Image and Video Search):
- 대규모 이미지 및 비디오 컬렉션에서 유사한 이미지와 비디오를 검색할 수 있습니다.
- 모션 감지 및 추적 (Activity and Movement Detection):
- 비디오에서 사람의 동작과 활동을 감지하고 추적할 수 있습니다.
- Custom Labels:
- 사용자 정의 라벨을 생성하여 특정 비즈니스 요구에 맞춘 모델을 학습시키고 사용할 수 있습니다.
# 참고 URL : https://ap-northeast-2.console.aws.amazon.com/rekognition/home?region=ap-northeast-2#/
# 이중 얼굴 감지 및 분석 기능과 얼굴 비교 기능 구현!
# 이전에 작성했었던 S3 업로드 프로젝트에 파일을 추가하여 신규 클래스로 작성
- 참고 : https://sorktjrrb.tistory.com/170
# facedetection.py 파일 생성하여 작성
from flask import request
from flask_restful import Resource
from datetime import datetime
import boto3
from config import Config
class FaceDetectionResource(Resource):
# 얼군인식 API
def post(self) :
# 1. 클라이언트로부터 데이터를 받아온다.
file = request.files.get('photo')
# 2 S3에 저장한다.
if file is None :
return {'error' : '파일을 업로드 하세요'}, 400
current_time = datetime.now()
new_file_name = current_time.isoformat().replace(':','_') + '.jpg'
# 유저가 올린 파일의 이름을 새로운 파일 이름으로 변경한다.
file.filename = new_file_name
# S3에 업로드를 위해 boto3 라이브러리를 사용.
# boto3 라이브러리는, AWS의 모든 서비스를
# 파이썬 코드로 작성할 수 있는 라이브러리이다. => pip install boto3 설치
s3 = boto3.client( 's3',
aws_access_key_id = Config.AWS_ACCESS_KEY,
aws_secret_access_key = Config.AWS_SECRET_ACCESS_KEY)
try :
s3.upload_fileobj(file, Config.S3_BUCKET,
file.filename,
ExtraArgs = {'ACL' : 'public-read', 'ContentType' : 'image/jpeg'} )
except Exception as e :
print(e)
return {'error' : str(e)}, 500
# 3 S3에 이미지가 있으니,
# rekognition 을 이용해서,
# object detection 한다.
region = 'ap-northeast-2'
faces_list = self.detect_faces(new_file_name,Config.S3_BUCKET,region)
# 얼굴 감지 함수
def detect_faces(self, photo, bucket, region):
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_faces(Image={'S3Object':{'Bucket':bucket,'Name':photo}},
Attributes=['ALL'])
print('Detected faces for ' + photo)
faces_list = []
for faceDetail in response['FaceDetails']:
face_info = {
"성별": str(faceDetail['Gender']),
'예상 연령대 ': str(faceDetail['AgeRange']['Low'])
+ ' ~ ' + str(faceDetail['AgeRange']['High']) + '세',
"웃고있는가?": str(faceDetail['Smile']),
"안경 착용 여부": str(faceDetail['Eyeglasses']),
"얼굴 가려짐 여부": str(faceDetail['FaceOccluded']),
"표정": str(faceDetail['Emotions'][0]),
"눈 뜬 여부": str(faceDetail['EyesOpen'])
}
faces_list.append(face_info)
print("성별: " + str(faceDetail['Gender']))
print("웃고있는가?: " + str(faceDetail['Smile']))
print("안경 착용 여부: " + str(faceDetail['Eyeglasses']))
print("얼굴 가려짐 여부: " + str(faceDetail['FaceOccluded']))
print("표정: " + str(faceDetail['Emotions'][0]))
print('예상 연령대: ' + str(faceDetail['AgeRange']['Low'])
+ '세 ~ ' + str(faceDetail['AgeRange']['High']) + '세')
print("눈 뜬 여부" + str(faceDetail['EyesOpen']))
return (faces_list)
# S3로 저장후 불러오는 코드
def post(self) :
# 1 클라이언트로부터 데이터를 받아온다.
file = request.files.get('photo')
# 2 S3에 저장한다.
if file is None :
return {'error' : '파일을 업로드 하세요'}, 400
current_time = datetime.now()
new_file_name = current_time.isoformat().replace(':','_') + '.jpg'
# 유저가 올린 파일의 이름을 새로운 파일 이름으로 변경한다.
file.filename = new_file_name
# S3에 업로드를 위해 boto3 라이브러리 사용
s3 = boto3.client( 's3',
aws_access_key_id = Config.AWS_ACCESS_KEY,
aws_secret_access_key = Config.AWS_SECRET_ACCESS_KEY)
try :
s3.upload_fileobj(file, Config.S3_BUCKET,
file.filename,
ExtraArgs = {'ACL' : 'public-read', 'ContentType' : 'image/jpeg'} )
except Exception as e :
print(e)
return {'error' : str(e)}, 500
# 3 S3에 이미지가 있으니,
# rekognition 을 이용해서,
# object detection 한다.
region = 'ap-northeast-2'
faces_list = self.detect_faces(new_file_name,Config.S3_BUCKET,region)
# 추가된 리턴부분
return {'result' : 'success',
'list' : faces_list,
'count' : len(faces_list)
}, 200
# app.py 파일에도 연결 코드 작성
from flask import Flask
from flask_restful import Api
from resources.facematch import FaceMatchResource
from resources.image import FileUploadResource
from resources.rekognition import ObjectDetectionResource
from resources.facedetection import FaceDetectionResource
app = Flask(__name__)
api = Api(app)
# 경로와 리소스를 연결하는 코드 작성
api.add_resource( FileUploadResource , '/upload' )
api.add_resource( ObjectDetectionResource , '/object_detection' )
api.add_resource( FaceDetectionResource , '/face_detection' )
# 이제 flask run 실행 후 post man 으로 테스트!
# 다른 사진도 평가해보자!
# VS Code에 CMD 창에서도 결과를 확인할수 있다.
다음 게시글로 계속~!
728x90
반응형
'API 개발 > AWS S3 & Rekognition API 파일 업로드' 카테고리의 다른 글
AWS rekognition : AWS rekognition 활용한 얼굴 비교 API (0) | 2024.06.25 |
---|---|
Restful API : AWS boto3 로 Rekognition 사용하여 객체 감지(Object Detection) 하기 (0) | 2024.05.31 |
Restful API : AWS boto3 로 S3에 파일 업로드 하기 (1) | 2024.05.30 |
AWS S3 : S3 스토리지 사용 방법 (버킷 생성) (0) | 2024.05.28 |