728x90
스파르타 코딩클럽의 딥러닝 이미지 처리 수업을 기반으로 공부한 내용을 정리하고 있습니다.
이미 학습된 모델을 기반으로 주어진 데이터들을 추론하는 연습을 하는 거라, 모델 자체를 학습하고 만드는 과정에 대한 내용은 없습니다.
사진 및 영상에서 딥러닝 모델을 활용하여 사람의 얼굴을 인식하고, 마스크 착용여부를 detect 하는 것을 연습했었다.
이번에는 지난번의 얼굴 인식 모델을 활용하여 사람의 성별이나 나이를 예측 하는 것에 대해 연습해 보려 한다.
얼굴을 인식하여 그 부분에 표시가 되게 하도록 하는 것은 해당 게시글을 참고 하면 된다.
모델로드하기
1
2
3
4
5
6
7
8
|
#나이 및 성별 예측하는 모델 로드하기
gender_list = ['Male', 'Female']
#나이에 대한 리스트는 범위로 나오게 된다.
age_list = ['(0, 2)','(4, 6)','(8, 12)','(15, 20)','(25, 32)','(38, 43)','(48, 53)','(60, 100)']
gender_net = cv2.dnn.readNetFromCaffe('성별관련 모델')
age_net = cv2.dnn.readNetFromCaffe('나이관련 ')
|
cs |
추론할 이미지 전처리 하기
-> 여기서 전처리할 이미지는 순수한 이미지가 아닌, 얼굴 인식을 완료한 이미지이다. 따라서 얼굴 인식 완료된 코드 아래에 해당 코드를 넣어준다.
1
2
|
#얼굴 인식하여 crop 처리 한 부분에 모델로 전처리 하기
blob = cv2.dnn.blobFromImage(face, size=('원하는 사이즈'), mean=(78.4263377603, 87.7689143744, 114.895847746))
|
cs |
추론하기
1
2
3
4
5
6
7
8
|
#이미지 처리 한거 추론하기
gender_net.setInput(blob)
gender_index = gender_net.forward().squeeze().argmax()
gender = gender_list[gender_index]
age_net.setInput(blob)
age_index = age_net.forward().squeeze().argmax()
age = age_list[age_index]
|
cs |
추론하는 과정에서 foward = 추론하고 / squeeze = 차원을 줄이고 / argmax = 사람이 이해할 수 있게 압축하는 과정
위와 같은 코드로 추론 과정이 진행된다.
실제로 다양한 class list에서 모델이 추론하면서 각 인덱스의 값들에 confidence 즉 정확도를 출력하게 된다. 그리고 결과적으로 confidence 값이 가장 높은 인덱스를 출력하게 되는데 그 역할을 argmax() 가 하는 것이다.
결과 출력하기
1
2
3
|
#결과 출력하기
cv2.putText(img, text='%s, %s' % (gender, age), org=(x1, y1), fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale = 1, color = (0,255,0), thickness = 2)
|
cs |
-> org는 해당 출력 텍스트가 표시되는 위치이다.
728x90
'Data' 카테고리의 다른 글
[Practice]스노우 앱처럼 얼굴에 스티커 붙이기 (0) | 2020.12.17 |
---|---|
딥러닝 이해하기_컴퓨터비전(CV) (0) | 2020.12.17 |
[Practice]Face Mask Detector (0) | 2020.12.10 |
[Practice] 이미지 처리 연습하기 (0) | 2020.12.04 |
딥러닝_이미지 처리하기(2) (0) | 2020.12.04 |