๋ฐ์ํ
Notice
Recent Posts
Recent Comments
Link
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ์๋ฐ๊ธฐ์ด
- ์๋ฐ๊ณต๋ถ
- ์น๋์๋ณด๋ ๊ธฐ์ด
- ์น๋์๋ณด๋ ์ ์
- ์๋ฐ์คํฌ๋ฆฝํธ ๊ณต๋ถ
- ์๋๋ก์ด๋ ์คํ๋์ค
- ํ์ด์ฌ๊ณต๋ถ
- Flutter
- streamlit
- ์คํธ๋ฆผ๋ฆฟ ๊ธฐ๋ณธ
- ์คํธ๋ฆผ๋ฆฟ
- ํ์ด์ฌ
- db
- Streamlit๊ธฐ์ด
- Android
- ํ๋ค์ค๊ณต๋ถ
- ํ๋ค์ค
- ์๋ฐํ๋ก๊ทธ๋๋ฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- Pandas
- serverless
- JavaScript
- Streamlit๊ธฐ๋ณธ
- RESTful API
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์๋ฐ
- MySQL
- java
- ์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐ
- ์๋ฐ์ด๋ณด
Archives
- Today
- Total
ruriruriya
[AWS]Rekognition - Flask Restful Api๋ก ์๋ฉด ๊ฐ์ง ๊ธฐ๋ฅ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ๋ณธ๋ฌธ
๐ฅ๏ธAWS/Rekognition
[AWS]Rekognition - Flask Restful Api๋ก ์๋ฉด ๊ฐ์ง ๊ธฐ๋ฅ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
๋ฃจ๋ฆฌ์ผใ 2024. 1. 20. 23:50๋ฐ์ํ
๋ณธ์ธ์ flask ํ๋ ์์ํฌ๋ก restful api ๋ฅผ ํ์ฉํ ์์ ์ด๋ค.
์์์์ ํ๊ฒฝ์ค์ ์ ๋จผ์ ํ๋ค๋ ๊ฐ์ ํ์ ์งํํ๋ค.
https://ruriruriya.tistory.com/171
1. post์ 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 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉ.
# boto3 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋, AWS์ ๋ชจ๋ ์๋น์ค๋ฅผ
# ํ์ด์ฌ ์ฝ๋๋ก ์์ฑํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. => pip install boto3 ์ค์น
s3 = boto3.client( 's3',
aws_access_key_id = Config.AWS_ACCESS_KEY_ID,
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)
2. ์ผ๊ตด ๊ฐ์ง ํจ์ ์์ฑ
def detect_faces(self, photo, bucket, region):
client = boto3.client('rekognition',
'ap-northeast-2',
aws_access_key_id = Config.AWS_ACCESS_KEY_ID,
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)
3. post์ 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 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉ.
# boto3 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋, AWS์ ๋ชจ๋ ์๋น์ค๋ฅผ
# ํ์ด์ฌ ์ฝ๋๋ก ์์ฑํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. => pip install boto3 ์ค์น
s3 = boto3.client( 's3',
aws_access_key_id = Config.AWS_ACCESS_KEY_ID,
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
4. ์คํ ๊ฒฐ๊ณผ
์ค์๋ ฌ ๋ํต๋ น์ ์ฌ์ง์ ๊ฐ์ง ํ ์คํธ ํด๋ณด์๋ค.
๊ฒฐ๊ณผ๋ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ ์ค์์ ์ ํํ ์ ์๊ธฐ์
์ฑ๋ณ๊ณผ ์ฐ๋ น๋๋ฅผ ๋ฃ์ด์ ์คํํด๋ณด์๋๋
๋จ์์ธ ๊ฒ๊ณผ ์ฐ๋ น๋๋ฅผ ๋น์ทํ๊ฒ ๋ง์ถ์๋ค. ์ ๊ธฐํ๋ค..
VS code ํฐ๋ฏธ๋ ์ฐฝ.
- ๋ค์ ์ธ์์ด ๋ค์ด๊ฐ ๋
ํฌ์คํธ๋งจ ์คํ ์๋ต์ ๋ณด๋
๋ฆฌ์คํธ๊ฐ 2๊ฐ๋ก ๋๋์ด ๋์ค๊ณ
์ฑ๋ณ ์ฐ๋ น๋ ํ์ ์๊ฒฝ์ฌ๋ถ ๋ฑ์ด ์ ๋์ค๊ณ ์๋ค.
์ ๊ธฐํ๋ค.
๋์ค์ ์ข๋ ํ ์คํธ ํด๋ณด์์ผ ๊ฒ ๋ค.
๋ฐ์ํ