파이썬과 OpenCV를 이용한 성별 및 연령 판별하기
· Version : Python 3.X, OpenCV
파이썬과 OpenCV 라이브러리를 활용하여 성별 및 연령을 판별해 보도록 한다. 이번 포스트에서는 프로그램 코드에 대한 설명이나 알고리즘에 대한 설명은 다루지 않는다. 참고 사이트에서 다운로드 받은 소스를 단순히 실행하고 결과를 얻음으로써, 이미지 분석에 대한 흥미를 유발하는데 목적이 있다.
CV (Computer Vision)은 컴퓨터가 인간처럼 디지털 이미지와 비디오를 보고 식별할 수 있게 하는 연구분야 이다. Computer Vision은 디지털 이미지를 수집, 처리, 분석 및 이해하여 실제 세계에서 고차원적 데이터를 추출하여 결정에 사용할 수 있는 기호 또는 숫자 정보를 생성한다. 이 과정에는 물체 인식, 비디오 추적, 모션 추정 및 이미지 복원과 같은 사례가 포함된다.
Open CV는 Open Source Computer Vision의 약자이다. 이 라이브러리는 실시간 이미지 및 비디오를 처리하는 동시에 분석 기능을 제공한다. 딥러닝 프레임워크인 TensorFlow, Caffe 및 PyTorch를 지원한다.
이번 프로젝트에서 사용되는 알고리즘은 CNN (Convolutional Neural Network)으로 이미지 인식 처리 및 NLP 목적으로 사용되는 DNN(Deep Neural Network)이다. ConvNet이라고도하는 CNN에는 입력 및 출력 레이어와 여러 개의 숨겨진 레이어가 있으며 그 중 다수는 컨볼루션이다. 실습에 사용된 파이썬 프로젝트의 CNN은 3개의 컨볼루션 레이어가 있다.
· Convolutional layer; 96 nodes, kernel size 7
· Convolutional layer; 256 nodes, kernel size 5
· Convolutional layer; 384 nodes, kernel size 3
각각 512개의 노드가 있는 2개의 완전히 연결된 레이어와 softmax 유형의 최종 출력 레이어가 있다. 이번 프로젝트에서는 아래와 같은 분석 결과를 도출한다.
· 얼굴 감지
· 남성 / 여성으로 분류
· 8 가지 연령대 중 하나로 분류
· 결과를 이미지에 놓고 표시
이 프로젝트에는 Adience 데이터셋을 사용한다. 이 데이터셋은 얼굴 사진의 벤치 마크 역할을 하여 노이즈, 조명, 포즈 및 모양과 같은 다양한 실제 이미징 조건을 포함한다. 이미지는 Flicker 앨범에서 수집되어 CC(Creative Commons) 라이선스에 따라 배포되었다. 8가지 연령대((0 – 2), (4 – 6), (8 – 12), (15 – 20), (25 – 32), (38 – 43), (48 – 53), (60 – 100))에 총 2,284명의 피사체에 대한 총 26,580장의 사진이 있으며 크기는 약 1GB 이다. 이 프로젝트에서 사용된 모델은 이 데이터셋을 사용하여 훈련되었다. (그래서인지 동양인에 대한 나이 예측을 잘 하지 못한다.)
프로젝트를 실행하기 위해서는 파이썬이 설치되어 있어야 하며, 아래 패키지를 PIP를 사용하여 설치 할 수 있도록 한다.
pip install opencv-python |
프로젝트를 다운로드 한다.
· Download : https://drive.google.com/file/d/1yy_poZSFAPKi0y2e2yj9XDe1N8xXYuKB/view)
프로젝트에는 아래와 같은 파일로 이루어져 있다.
· opencv_face_detector.pbtxt : 얼굴을 감지 하기 위한 파일. 텍스트 형식
· opencv_face_detector_uint8.pb : 얼굴을 감지 하기 위한 파일. 이진 형식
· age_deploy.prototxt : 연령에 대한 네트워크 구성 설정
· age_net.caffemodel : 연령에 대한 레이어 매개 변수의 내부 상태를 정의
· gender_deploy.prototxt :성별에 대한 네트워크 구성
· gender_net.caffemodel : 성별에 대한 레이어 매개 변수의 내부 상태를 정의
· a few pictures to try the project on
프로그램을 실행하여 사진속의 인물 성별과 연령이 맞는지 확인해 본다. (필자의 실험에서는 사진에 필터가 적용되어 있거나, 포샵을 과하게 한경우 정확한 인식을 하지 못하였다.)
python gad.py --image woman1.jpg |
다운로드 받은 프로젝트에 포함되어 있는 woman1.jpg의 결과.
다운로드 받은 프로젝트에 포함되어 있는 girl1.jpg의 결과.
필자의 얼굴을 Snow 앱을 사용하여 뽀샤시 필터를 적용한 결과
[참고자료]
· Interesting Python Project of Gender and Age Detection with OpenCV : https://data-flair.training/blogs/python-project-gender-age-detection/?fbclid=IwAR1d43CEOg-5dnzxPTxE06uB60leOzBKe30bRZewVvsM88V7v6TmTN9GDYI
· Adience Benchmark Gender And Age Classification : https://www.kaggle.com/ttungl/adience-benchmark-gender-and-age-classification
2020-03-02/ Sungwook Kang / http://sungwookkang.com
파이썬, Python, 얼굴인식, 파이썬 이미지 처리, 이미지 프로세싱, 연령 분석, 성별 분석, 이미지 분석, Convolutional, OpenCV, Computer Vision, 머신러닝, 딥러닝, Neural Network
'SW Engineering > 머신러닝 딥러닝' 카테고리의 다른 글
인공지능 / 머신러닝 / 딥러닝 개념 (0) | 2020.03.08 |
---|---|
CNN (Convolutional Neural Network) 개념 (0) | 2020.03.07 |
신경망 분석(Neural Network) (0) | 2015.07.16 |
Naive Bayes Classifier (0) | 2015.07.16 |
군집분석(Cluster Analysis) (0) | 2015.07.16 |