프로젝트 - 발표의 참견 α

KDG·2021년 3월 22일
3

발표의 참견 α

  • 개요 : 인공지능을 활용한 사용자 프레젠테이션의 역량 강화 시스템, 사용자의 발표영상 중 비언어적 표현인 자세분석모델, 눈 깜박임 분석모델, 표정변화율 분석모델을 개발
  • 개발 인원 : 손기훈 김동건 유주아 김은찬 (4명)
  • 개발 기간 : 2021년 1월 19일 ~ 2021년 3월 16일
  • Github 링크

DEMO

적용 기술

  • 개발언어 : Python
  • 모델 구현 : OpenPose, OpenCV, Mediapipe, Tensorflow2.0
  • 분석 및 시각화 : Numpy, Pandas, matplotlib, Plotpy
  • Git, Github

Workflow

Features

  • pose_check.py : 자세(눈, 어깨, 골반)의 기울기를 측정해 발표자세의 올바름을 판단하고 시각화하는 엔진 파일
  • proto_face_engine.py : 눈 깜박임으로 긴장도를 파악하고 표정 변화율을 확인해 표정의 다채로움을 판단해서 시각화하는 엔진 파일
  • models
    • eye_model.h5 : 눈 이미지를 가져와서 눈 깜박임을 측정하는 모델

프로젝트에서 맡은 역할

  • 포즈 엔진 개발
  • 포즈 엔진 시각화

기록하고 싶은 코드

1. opencv gpu로 가동

opencv gpu 가동하는 방법
코드는 아니지만 opencv는 기본적으로 cpu를 사용하는데 cpu만을 사용하면 연산속도가 느리기 때문에 프로젝트에서 모델을 적용하고 속도를 내는데 문제가 있었다. 그래서 gpu를 사용하기로 했다.
gpu 사용하기 위해 몇 가지 환경설정을 해줘야하는데 이 부분에서 굉장히 시간을 많이 잡아먹었고, 많은 노력을 했었기 때문에 성공했을때 굉장히 기뻤고, 속도가 전보다 훨씬 빨라졌기 때문에 기억에 가장 남는다.

2. 자세의 올바름을 판단하는 기울기 계산


이 코드는 같은 팀원인 기훈이형이 짠 코드인데 기울기의 각도를 계산하고 모델이 입혀진 사진을 하나하나 비교해보면서 기울기의 임계값을 지정하고 점이 잘못찍힌 부분은 NONE으로 설정했다. 짧은 시간에 이런식으로 코드를 짤 수 있다는 것에 놀랐고, 본받고 싶다.
설명하자면 어깨 두 점의 기울기를 계산해서 기울기가 0.5나 -0.5이상으로 잡히면 NONE을 반환하고 임계값 0.125나 -0.125를 넘으면 자세가 흐트러졌다고 판단해 1을 반환한다. 그리고 그 이하이면 올바른 자세로 판단한다. 이러한 식으로 눈의 기울기도 계산했고, 골반은 허벅지의 점과 수직인가를 판단하고 기울기를 계산해 올바른 자세인지 확인하는 코드이다.

3. 시각화하기 위한 데이터프레임으로 변환


모델을 입힌 각각 이미지의 기울기를 판단해서 0이나 1, NONE의 값을 리스트에 넣고 데이터프레임으로 변경하는 코드이다. 어깨, 눈, 골반의 리스트를 데이터프레임으로 만들기는 굉장히 쉬웠지만 전체 자세를 판별하는 pose_count 부분에서 좀 애를 먹었다.
일단 all_count라는 세 개의 데이터프레임을 하나로 합쳐서 각 로우의 값에 1이 하나라도 들었으면 자세가 흐트러졌다는 것으로 판단했고, 각 로우에 1이 하나도 없고 0이 하나라도 있으면 0(자세가 흐트러지지 않음)을 추가했고, 각 로우의 세 개(어깨, 눈, 골반)의 값이 모두 NONE이면 NONE을 추가하는 방식으로 진행했다. 이 부분에서 각 로우를 한 줄씩 읽어 데이터를 비교해야하는데 세 개의 데이터다 보니 하나의 값을 받지 못했다.
그러나 .values로 넘파이 배열을 만들고 쉽게 비교할 수 있었다.

4. 자세 올바름 판단 시각화

시각화

저번처럼 이번에도 시각화를 맡았는데 저번에 해봤던 거라 쉽게 할 수 있었다. 그러나 이번에는 처음해보는 원 그래프이기도 하고, 디자인에 좀 신경을 썼다. 그리고 서브플롯을 사용해 네 개의 그래프를 한 꺼번에 보여주는 것도 시도해봤다.
시각화하면서 색깔 지정이나, 원하는 부분을 튀어나오게 하는 것 등의 디자인을 하는 부분에서 재밌었다.

느낀점

1. 잘한점

  • 팀별로 맡은 바를 불화없이 좋은 분위기로 프로젝트를 진행했다. 팀원들이 힘들거나 안 풀릴때 으쌰으쌰하면서 프로젝트가 잘 진행되도록 했다.

  • opencv 코드를 gpu로 가동시킬때 환경설정 하는 부분에서 많은 시간을 쏟았는데 그 때 포기하지않고 해결한 점

  • 모델을 가져다가 처음으로 사용해봤고, 그 모델을 응용해서 새로운 프로젝트를 만든 좋은 경험을 했다.

  • git과 github을 이용해 코드를 팀과 공유한 점

2. 아쉬운점

  • 팀별로 일을 나눠 진행했지만 팀별간의 정확한 업무를 나누지 않아 효율적으로 업무를 진행하지 못한 점이 아쉽다.

  • openpose에서 사용하는 모델을 가져다가 사용했는데 직접 데이터를 수집하고 학습데이터와 정답데이터를 분리해 모델을 학습해서 사용하지 못한 점이 아쉽다.

  • 도커를 이용해 각자의 컴퓨터에 같은 환경을 맞추지 못한 점이 아쉽다.

  • 시간이 좀 부족해 포즈엔진과 페이스엔진을 멀티프로세싱으로 실행시키지 못한 점이 아쉽다.

3. 해결 / 개선 방법

  • 이번 프로젝트를 3차까지 끌고가서 더 많은 엔진을 구현하고 웹으로 구현할 예정이다. 그렇기 때문에 확실한 업무 분담으로 프로젝트를 진행해야 될 것 같다.

  • 모델을 가져오기 전 시간이나 데이터를 좀 더 확인해서 모델을 직접 만들어 보도록 해야할 것 같다.

  • 도커를 더 공부해서 같은 환경을 맞추도록 해야한다.

  • 멀티 프로세싱도 더 공부해서 많은 엔진들을 빠른 속도로 가동할 수 있도록 해야한다.

4개의 댓글

comment-user-thumbnail
2021년 3월 23일

wow 👍 도커 공부 열심히 하시겠네요~!

1개의 답글
comment-user-thumbnail
2021년 4월 9일

정리 잘하셨네요 ~! 잘보고갑니다

1개의 답글