프로젝트 개요
배경
수화는 청각장애인과 비청각장애인이 의사소통에 사용하는 시각 언어로, 손과 신체 움직임을 이용하여 대화를 전달합니다. 하지만, 한국장애인고용공단에 따르면 신조어의 등장으로 실제 일상에서 사용되는 수어의 80%가 지문자로 구성되며, 이를 체계적으로 학습할 수 있는 환경은 제한적입니다.
현재 수화를 학습하기 위한 콘텐츠 대부분은 시청각 자료에 의존하며, 외국어 학습과 마찬가지로 실제 의사소통 환경에서 배우는 것이 더 효과적입니다. 그러나 오프라인 환경에서 실시간 수화 학습은 시간과 공간적 제약이 크다는 한계가 있습니다.
이런 상황에서 컴퓨터와 웹캠만 있다면 시간과 공간의 제약없이 수어를 학습하고 실생활에서 활용할 수 있도록 지원하기 위해 해당 프로젝트를 시작하게 되었습니다.
💡 지문자, 지화
수어에서 한글 자모음이나 알파벳, 숫자 하나하나를 손가락으로 표시하는 방법을 지문자라고 하고 지문자로 의사소통하는 방식을 지화라고 한다.
출처: https://www.nld.go.kr/upload/contents02/2021_nld_suau_jejack_jichim.pdf (10p)
목표
- 실시간 수어 학습 환경 제공
- Hand Tracking 기술과 대화형 AI를 적용하여 사용자가 가상 인물과 상호작용하며 실시간으로 수화를 학습할 수 있는 환경을 제공
- 현실과 가상공간에서의 학습 지원
- 웹페이지와 VR 기기를 활용해 사용자에게 다양한 학습 환경을 제공하여 수어 학습의 접근성 향상
- 시간과 장소의 제약 없는 자유로운 학습
- 사용자가 원하는 시간과 장소에서 손쉽게 수어를 학습할 수 있도록 지원하여 학습의 유연성과 편의성 향상
기술 스택
- 백엔드: Python, Flask
- 머신러닝: Scikit Learn
- 이미지 처리: OpenCV, MediaPipe
- 3D 가상인물: Unreal Engine
- API: ChatGPT API
- 협업: Notion, Kakao Talk
주요 기여 내용
- 수어 인식 AI 모델 서빙
- Flask 프레임워크를 활용해 API 서버를 구축하고, 사용자 화면에서 프레임을 캡처해 학습된 AI 모델로부터 수어 동작의 지문자 값을 추출.
- 자모음 조합/분리 알고리즘 구현
- 한글 자모음을 유니코드 값을 활용해 조합 및 분리하는 로직 구현
- 수어 동작 히트박스(가이드라인) 도입 의견 제시
- 웹 UI에 초성, 중성, 종성의 위치를 나타내는 히트박스(가이드라인)를 도입해 사용자의 동작 위치를 명확히 가이드해주자는 의견 제시
- 히트박스를 기반으로 동작의 위치 값을 같이 추출하여 초성, 중성, 종성을 정확히 판별해 잘못된 자모음 조합으로 인한 의도하지 않은 문장 생성 문제를 개선
아키텍처
![]()
상세 기여 내용
수어 동작 히트박스 도입 및 알고리즘 개선
해당 프로젝트는 사용자와 가상 인물(ChatGPT) 간에 수어를 통한 대화가 가능하도록 구현하는 것을 목표로 합니다. 이를 위해, 사용자가 동작한 지문자를 조합하여 단어나 문장을 생성하고, 이를 ChatGPT에 질문으로 전달한 뒤, 받은 답변을 가상 인물이 다시 지문자로 표현할 수 있도록 답변을 지문자로 분리해야합니다. 이 과정을 구현하기 위해 다음과 같은 사항을 고려하였습니다.
고려사항
- 지문자 조합 시 한글 자모음의 초성, 중성, 종성은 어떻게 구분할 것인가?
- 쌍자음(ㄲ, ㄸ, ㅃ, ㅉ, ㅆ)은 특정 동작이 존재하지 않고 기존 자음(ㄱ, ㄷ, ㅂ, ㅈ, ㅅ)를 연속으로 동작하여 만드는데 이 경우에 쌍자음을 어떻게 구분할 것인가?
- 지문자와 지숫자 중 동일한 동작이 있는데 이것을 어떻게 구분할 것인가?
기존 알고리즘 문제점
초기 알고리즘에서는 단순히 자음과 모음을 구분하여 단어를 조합하는 방식으로 구현되었습니다. 자음과 모음을 미리 라벨링하고, 자음 ㄱ이 입력되면 초성 또는 종성으로, 모음 ㅏ가 입력되면 중성으로 처리하여 지문자를 조합했습니다.
- 사용자가
ㅇ, ㅏ, ㄴ, ㄴ, ㅕ, ㅇ순으로 동작하면, 모음ㅏ, ㅕ는 중성으로 처리 - 자음은 연속성을 기반으로 구분하여, 앞 자음은 종성(ㄴ), 뒤 자음은 초성(ㄴ)으로 설정 결과적으로
안녕이라는 단어를 인식 - 반면에,
ㅇ, ㅏ, ㄴ, ㅕ처럼 중간에 자음이 하나만 있다면, 해당 자음을 초성으로 처리하여아녕이라는 단어로 인식
하지만 기존 방식은 아래와 같은 문제가 있습니다.
문제 정의
-
쌍자음 구분의 어려움
- 예를 들어, 바쁘다라는 단어를 표현할 때
ㅂ, ㅏ, ㅂ, ㅂ, ㅡ, ㄷ, ㅏ의 동작이 연속적으로 발생합니다. - 이때 중간의
ㅂ, ㅂ부분을 종성과 초성으로 처리해야 할지, 아니면 쌍자음으로 처리해야 할지 구분할 수 있는 명확한 기준이 없습니다. - 따라서,
밥브다와바쁘다두 단어 모두 가능성이 있는 결과로 처리되어 인식의 정확도가 떨어지는 문제가 발생합니다.
- 예를 들어, 바쁘다라는 단어를 표현할 때
-
지문자와 지숫자의 구분 문제
- 수어에서는 동일한 동작이 두개 이상의 의미를 가질 경우 문맥의 흐름을 통해 의미를 구분한다고 한국장애인고용공단의 자문을 통해 확인하였습니다.
- 예를 들어, 지문자
ㅏ와 지숫자1의 동작은 실제로 동일합니다. - 하지만 이미지 처리 모델은 해당 동작을 하나의 값으로 추출합니다.(이 프로젝트에서는 모두
ㅏ로 인식) - 동작의 문맥을 파악하지 못하고 동일한 동작을 다른 의미로 구분하지 못해, 단어를 조합하는 과정에서 의도와 다르게 처리되는 문제가 있습니다.
-
비의도적 손동작 인식 문제
- 사용자가 의도적으로 수어 동작을 하지 않았음에도 카메라에 손이 조금이라도 포착되면 이를 동작으로 잘못 인식하는 문제가 발생하였습니다.
개선 방안
실제 지문자로 글씨를 쓸 때는 일반 글자 쓰기와 동일하게 초성-중성-종성 순서로 작성되며, 동작 위치 또한 유사한 방식으로 이루어집니다.
웹 화면에서 초성, 중성, 종성 위치를 명확히 제시하고, 손 동작과 위치 데이터를 활용한 인식 정확도를 향상시키기 위한 알고리즘을 개선하였습니다.
- 초성, 중성, 종성 위치 히트박스(가이드라인) 제시
- 웹 화면에 초성, 중성, 종성의 위치를 나타내는 히트박스를 추가하여, 사용자가 동작할 위치를 명확히 알 수 있도록 하였습니다.
- 오히려 히트박스를 표시해주는 것이 학습을 방해할 수 있다는 의견도 있었지만, 초보 학습자가 손 동작의 위치를 명확히 이해하도록 돕는 것이 교육 서비스의 목적에 더 부합한다고 판단했습니다.
- 효과
- 교육 서비스의 목적을 강화하며, 수어를 처음 배우거나 심화 학습을 원하는 사용자가 손 동작의 위치를 더 쉽게 이해할 수 있습니다.
- 사용자의 위치 데이터를 기반으로 손의 동작이 초성, 중성, 종성 중 어디에 해당하는지 정확히 판단할 수 있습니다.

- 손동작 위치기반 알고리즘으로 개선
-
히트박스 추가로 손의 위치를 초성, 중성, 종성으로 명확히 구분할 수 있게 되면서, 다음과 같은 알고리즘 개선이 이루어졌습니다
- 쌍자음 처리
- 초성 or 종성 위치에서 자음이 연속으로 입력될 경우 쌍자음으로 판단합니다.
- 동일한 동작의 지문자, 지숫자 구분
- 초성 위치에서 모음 동작 시 지숫자, 중성 위치에서는 지문자로 처리합니다.
- 잘못된 인식 방지
- 사용자 동작이 히트박스 내에서만 인식되도록 제한하여 오인식을 방지합니다.
- 쌍자음 처리
| 개선 전 | ![]() |
| 개선 후 | ![]() |
결과
- 초성, 중성, 종성 정확한 구분을 통한 단어 조합 정확도 향상
- 손동작의 위치 데이터를 활용하여 지문자의 초성, 중성, 종성을 정확히 구분함으로써 단어 조합 시 올바른 단어를 생성할 수 있도록 알고리즘을 개선
- 비의도적 손동작 오인식 현상 감소
- 히트박스 도입을 통해 손동작 인식 범위를 제한하여, 의도하지 않은 손동작의 오인식을 감소시킴


