프로젝트

[컴퓨터비전 프로젝트] 수어 양방향 소통 프로그램-1

거북이07 2024. 2. 28. 16:36

3차 프로젝트 시작

작년 8월 30일부터 KDT OCR 과정을 배우고 있는중이다 6개월 과정으로 이제 종강이 바로 앞까지 온 상태이고 현재는 컴퓨터비전 수업을 들으면서 마지막 3차 컴퓨터비전 프로젝트를 들어가게되었다.

 

사실 일주일 전인 19일부터 프로젝트를 시작하였는데 저번주에는 팀을 구성하고 인터넷에서 데이터를 찾아본 후 주제를 정하는 시간을 가졌다. 서버 백앤드쪽 프로젝트나, 프론트쪽 프로젝트는 조금 진행해보았는데 컴퓨터비전 프로젝트는 처음이고 사실 AI 분야가 처음이라 아직 아는게 많이 없기때문에.. 프로젝트를 하면서 어려운 상황이 많이 발생될거라고 생각한다... 그렇지만 최대한 팀원들이랑 소통하며 남은 일주일동안 열심히해볼 생각이다..😂

 

사실.. 저번 2차 프로젝트때 챗봇 프로젝트를 진행하였지만...나는 모델 부분을 만지지않아 모델을 만지는건 진짜 처음이다.(이 부분에서는 할 말이 많다)

 

수어 양방향 소통 프로그램

우선 우리 팀은 주제를 선정하기위해 AI허브에 들어가 어떤 데이터가 있는지 또 이 데이터들로 어떤 프로그램을 만들 수 있는지 의논하였다.

 

데이터들을 살펴보고 팀원들의 의견을 들어본 결과 아래와 같이 약 4개정도의 주제가 나왔다.

1️⃣ 수어 양방향 소통 프로그램

2️⃣ 홍채인식 프로그램

3️⃣ 계란인식 프로그램

4️⃣ 무인점포 이상행동 인식 프로그램

 

수어 양방향 소통 프로그램은 쉽게 말해 청인과 농인의 편리한 소통을 위한 프로그램으로 농인의 수화는 텍스트로 변환 후 청인에게 음성으로 출력되며 청인의 음성은 텍스트로 변환되어 농인이 보는 디바이스에 텍스트로 출력하는 프로그램이다.

 

홍채인식 프로그램은 줌 강의나, 인터넷 강의를 볼 때 캠으로 사람 홍체를 인식하여 집중을 잘 하고있는지를 확인하고 집중하고있지않다면 인터넷 강의를 멈추거나 학습률이 올라가지않는 프로그램이다

 

계란인식 프로그램은 팀원 지인이 필요하다고 말했던 프로그램인데 양계장을 운영중인데 어디에 가두고 키우는게 아닌 방목형식으로 닭을 키우고있어 계란 로스률이 높아 계란을 인식하여 찾아주는 프로그램이 있으면 좋을거같다고 하셔서 나온 프로그램이다.

 

무인점포 이상행동 인식 프로그램은 무인점포, 편의점 등 외부에서 이상한 행동을 하거나 무기를 소지하고 있는 사람을 인식하여 신고하는 프로그램이다.

 

우리팀은 위 4개 중 우리가 공부하는데 도움이 되는가, 사회적으로 도움이 되는 프로그램인가, 확장성이 있는가 등 여러가지 사항을 고려하여 "수어 양방향 소통 프로그램"을 최종적으로 채택하게 되었다.

채택 이유는 수화 양방향 소통 프로그램을 진행하면 영상인식뿐만 아니라 이전에 못했던 자연어처리 모델도 같이 공부할 수 있으며 모션인식을 통한 keypoint학습도 해볼 수 있다고 판단하여 해당 프로젝트를 진행하기로 하였다.

 

우리 팀 인원이 5명인데 5명 중 1명을 제외한 나머지 4명이 이전 2차 프로젝트(챗봇)에서 모델을 한 번도 만져보지 못한 사람들이었기 때문에 자연어 처리도 같이 해볼 수 있는 걸 가장 큰 이유로 삼았다.

 

데이터 및 작업방식 확인

주제를 정하였으면 데이터를 분석하여 어떤식으로 개발을 진행해야할지를 정리하고 강사님께 최종적으로 컨펌을 받아야하는데 이 부분에서 몇가지 문제점이 발생하였다.

 

우선 우리는 컴퓨터비전 프로젝트를 진행하고있지만 아직 학원에서 컴퓨터비전이라는것을 배운적이 없어 어떤식으로 개발해야하는지를 모르는게 가장 큰 문제였다.....

 

그래서 우선 샘플데이터를 다운받아 확인해보았는데 원천데이터인 동영상파일과, 라벨데이터인 json파일이 있는것을 확인하였는데 json 데이터는 keypoint.json, morpheme.json으로 두가지의 파일이 있었다.. 처음에는 이 두개의 파일이 뭐가 다른지 몰랐지만 팀원들끼리 상의해보니 keypoint는 말 그대로 수화 동작별 좌표를 뜻하는 거 같았고 morpheme는 동영상 및 키포인트별 라벨이 들어있는 파일이었다.

 

그래서 우리 팀은 두가지 학습방법을 생각해보았다.


 

1️⃣ 영상으로 학습

영상으로 학습하는 방법은 YOLO모델을 사용하여 손을 인식하고 그 손모양과 수어 뜻을 라벨링을하여 인식하는 방법으로

속도가 빠르지만 정확도는 키포인트로 학습한 모델모다 떨어질거라고 예상하였다.

 

2️⃣ 키포인트로 학습

키포인트로 학습하는 방법은 데이터뎃에 들어있는 keypoint를 수어 뜻과 라벨링하여 학습시키는 방법으로 영상으로 학습하는것과는 다르게 속도는 좀 느리지만 정확도는 올라갈것으로 예상하였다.

 

위 두가지 학습방법을 진행하기위해서는 필요한 데이터나 모델, 라이브러리등이 있을거같아 인터넷에 검색하여 해당 내용을 찾아보았는데 우리랑 같은 프로젝트를 진행한 사람들이 많아 비교적 쉽게 관련 내용을 확인할 수 있었다.

 

우선 OpenPose라는 모델로 keypoint를 실시간으로 찾을 수 있다는 것을 듣고 OpenPose를 테스트해 보았는데..... 이럴 수가......😂😂😂😂😂 서버가 끊어졌다는 에러 메시지가 발생했고.. 인터넷을 검색해 보니 최신 글이 한 개도 없는 것을 확인할 수 있었다.... 가장 최신 글이 22년도라는 것을 봐서는 아마도 서비스를 중단한 것으로 예상된다..우리 팀은 여기서부터 멘붕이 왔었는데.. 멘붕온 이유는 다양한 논문을 확인해 보았을 때 거의 대부분에 논문에서 이 OpenPose를 사용했다고 쓰여있었기 때문이다.

 

그렇지만 지금 주제를 돌리기에는 이미 3일이라는 시간이 지나가버렸고 다른 마땅한 주제가 없다고 생각하여 인터넷을 검색해본 결과 구글에서 제작한 mediapipe라는 모션인식모델이 있다는것을 확인하였고 테스트를 하였는데 그 결과!

 

위 이미지처럼 좌표를 잘 뽑아주는 것을 확인하였다. 모션인식모델을 테스트하는동안 다른 팀원은 STT, TTS 라이브러리를 확인하고 테스트 작업을 진행하였고 결과가 좋아 해당 부분들을 잘 정리하여 우리 팀은 다같이 강사님께 피드백을 받았고 그 결과 수화 양방향 소통 프로그램으로 최종 확정이 났다.

데이터 업로드

프로젝트 마감 일주일하고 4일전... 우리 팀은 아주 큰 문제에 직면했다.. 그것은 바로 데이터 공유 및 업로드 부분인데 AI 허브에서 찾아본 데이터가 2테라 정도 되었고 우리 팀 인원은 위에서 언급했듯이 5명이다.. 이 많은 사람들이 다 같이 2테라씩 다운로드하는 건 말도 안 되고 이걸 공유하기도 쉽지 않았다.

 

또 이번에는 다 같이 모델을 만져보자는 약속을 한 이상 모든 사람들이 데이터를 가지고 있어야 하는데.. 용량이 너무 커서 노트북을 사용하는 팀원들이나 데스크톱에 용량이 없는 팀원들은 힘든 상황이었다. 그래서 우리가 처음에 생각한 방법은 네이버 클라우드를 이용하는 거였다! 2TB를 구매하면 한 달에 만 원 정도밖에 안 들어가니까 한 명의 아이디에 결제를 해놓고 다 같이 사용하자는 의견이 나와 해당 방법으로 데이터 업로드를 진행하였다.

 

그 결과~ 팀장분이 이틀만에 많은 데이터를 업로드하였고 성공적으로 보였으나.. 여기서 문제는 네이버클라우드는 본인 컴퓨터에 무조건 파일을 다운받아 사용해야한다는 큰 단점이 있었다... 생각해보니 우리는 google코랩으로 학습을 진행할거라 google drive에 업로드해서 마운트하는 형식으로 진행하는게 더욱 빠를거같다는 의견이 나와 다시... 업로드를 진행하였다.

 

하지만 간과한게 있었으니.. 프로젝트 마감 날짜는 다가오는데 업로드 속도가 너무너무 느려 모든 데이터를 다 넣을 수 없다는 판단이 나와 차라리 학습하는 데이터를 줄이자 라는 의견이 나왔다.

 

데이터는 단어3,000개, 문장2,000개를 각 16명의 사람이 촬영을하였는데 단어를 조금 학습하고 다양한 사람을 학습시킬지, 모든 단어를 학습시키고 16명의 사람 중 일부만 학습시킬지 의견이 나왔는데 우리 팀의 선택은 모든 단어와 5명의 사람 데이터를 학습시키기로하였다.

 

그 이유는 주제 목적상 다양한 사람을 학습시키는것보다는 최대한 많은 단어를 학습시켜 다양한 문장을 구사하는것이 더 낫다는 생각을 하였다. 그래서 우리는 영상을 하나씩 보면서 덩치가 작은 여자, 보통인 여자, 덩치가 큰 남자, 덩치가 작은 남자 등 5명을 뽑아 데이터 업로드를 진행하였고...월요일 저녁부터 수요일(오늘)까지 업로드를 진행하였지만 아직 전부 들어가지 않아 기다리고 있는 중이다.

 

이렇게 오늘의 프로젝트 일지를 마치고 그 외 프로젝트 작업은 다음 포스트에 진행하기로 하겠다.