실시간으로 수어를 인식하여 텍스트와 음성으로 번역하는 AI 기반 프로그램입니다.
- 실시간 수어 인식: 웹캠을 통해 실시간으로 수어 동작을 인식
- 양손 동작 대응: MediaPipe에서 감지한 좌·우 손을 자동 정렬해 128차원 특징 벡터로 변환
- 텍스트/음성 번역: 인식된 수어를 한글 텍스트로 표시하고 음성으로 출력
- 데이터 수집: 새로운 수어 동작을 학습시키기 위한 데이터 수집 기능
- AI 모델 학습: LSTM 기반 딥러닝 모델로 수어 패턴 학습
- MediaPipe: 손 관절 좌표 추출
- TensorFlow: 딥러닝 모델 구축 및 학습
- OpenCV: 영상 처리
- pyttsx3: 텍스트 음성 변환
- 필요한 패키지 설치:
pip install -r requirements.txt- 프로젝트 디렉토리 구조 확인:
Sign_language_translation/
├── src/
│ ├── hand_detector.py # 손 인식 모듈
│ ├── sign_language_model.py # AI 모델
│ ├── sign_translator.py # 실시간 번역기
│ └── data_collector.py # 데이터 수집 도구
├── data/
│ ├── train/ # 학습 데이터
│ └── test/ # 테스트 데이터
├── models/ # 학습된 모델 저장
├── main.py # 메인 실행 파일
├── train_model.py # 모델 학습 스크립트
└── requirements.txt # 의존성 목록
프로그램을 처음 사용하거나 학습된 모델이 없는 경우, 다음 순서를 따라주세요:
1단계: 데이터 수집 (최소 2-3개 이상의 서로 다른 수어 단어 필요)
python3.11 main.py --mode collect- 최소 2-3개의 서로 다른 수어 단어를 수집해야 합니다
- 각 단어당 최소 30개 시퀀스 권장
- 예시: "안녕", "감사", "사랑" 등
왜 여러 개 필요한가요?
- 클래스가 1개만 있으면 모델이 모든 동작을 그 단어로 예측합니다
- 최소 2개 이상의 클래스가 있어야 구분 학습이 가능합니다
2단계: 모델 학습
python3.11 main.py --mode train3단계: 실시간 번역 시작
python3.11 main.pypython3.11 main.py조작법:
- Space: 번역 시작/중지
- Q: 프로그램 종료
- R: 버퍼 초기화
- T: 인식 임계값 조정
- S: 스크린샷 저장
새로운 수어 동작을 학습시키기 위한 데이터 수집:
python3.11 main.py --mode collect- 수집할 수어 단어 입력 (한글)
- 수집할 시퀀스 개수 설정 (기본값: 30)
- 스페이스바로 녹화 시작/정지
- ESC로 종료
data/train과data/test디렉터리에 저장된.npy파일의 레이블 이름이 학습/평가 시 일관되도록 유지
팁:
- 동일한 수어를 다양한 각도/속도로 수집하면 인식률이 향상됩니다
- 조명이 밝고 배경이 단순한 곳에서 수집하세요
수집한 데이터로 AI 모델 학습:
python3.11 main.py --mode train학습 시간: 데이터 양에 따라 수 분~수십 분 소요
python main.py --model models/sign_language_model.h5python main.py --video input.mp4 --output output.mp4기본적으로 다음 50개의 한국 수어 단어를 인식할 수 있습니다:
인사/감정:
- 안녕하세요, 감사합니다, 사랑해요, 미안합니다
- 좋아요, 싫어요, 괜찮아요
기본 동작:
- 네, 아니요, 도와주세요
- 먹다, 마시다, 가다, 오다
- 앉다, 서다, 보다, 듣다, 말하다
명사:
- 이름, 물, 밥, 집, 학교, 병원
- 친구, 가족, 어머니, 아버지, 형제
- 시간, 돈, 일, 공부, 책
- 전화, 컴퓨터
시간:
- 오늘, 내일, 어제
상태:
- 아프다, 피곤하다, 배고프다, 목마르다
- 춥다, 덥다, 크다, 작다, 많다, 적다
- 입력: 30 프레임 × 128차원 시퀀스 (손 당 64차원: 21개 3D 랜드마크 정규화 + 손 크기 스칼라)
- 모델: 3층 LSTM + Dense layers
- 출력: 기본 50개 수어 단어 (사용자 학습 시 레이블 수에 맞게 자동 조정)
- 조명: 밝고 균일한 조명에서 최상의 성능
- 배경: 단순한 배경에서 인식률 향상
- 손 위치: 카메라에서 적당한 거리 유지 (30-60cm)
- 동작 속도: 너무 빠르거나 느리지 않은 자연스러운 속도
❌ 모든 동작이 같은 단어로 인식되는 경우:
- 원인: 학습된 클래스가 1개뿐입니다
- 해결: 최소 2-3개 이상의 서로 다른 수어 단어를 수집하고 재학습하세요
python3.11 main.py --mode collect # 여러 단어 수집 python3.11 main.py --mode train # 재학습
❌ 카메라가 작동하지 않는 경우:
# 카메라 권한 확인 (macOS)
tccutil reset Camera❌ 모델 학습이 실패하는 경우:
- 충분한 학습 데이터 확보 (각 단어당 30개 이상 시퀀스 권장)
- 최소 2개 이상의 서로 다른 클래스가 필요합니다
- GPU 메모리 부족 시 batch_size 줄이기
- 학습/테스트 데이터의 레이블 이름이 동일해야 하며, 테스트 데이터에 새 레이블이 포함되면 자동으로 제외됨
❌ 음성 출력이 안 되는 경우:
# macOS에서 한국어 음성 설치
# 시스템 환경설정 > 접근성 > 음성 콘텐츠에서 한국어 음성 다운로드❌ 인식률이 낮은 경우:
- 조명을 밝게 하고 배경을 단순하게 유지하세요
- 손을 카메라에 적당한 거리(30-60cm) 유지
- 각 단어당 더 많은 시퀀스를 수집하세요 (50개 이상 권장)
- 다양한 각도와 속도로 데이터를 수집하세요
- Python 3.8+
- macOS/Windows/Linux
- 웹캠 필수
이 프로젝트는 교육 목적으로 개발되었습니다.
- 새로운 수어 단어 데이터 수집
- 모델 성능 개선
- UI/UX 개선
- 버그 리포트 및 수정
- 양손 수어 지원 (좌·우 손 자동 패딩)
- 문장 단위 번역
- 동적 수어(움직임이 있는 수어) 인식
- 웹 인터페이스 개발
- 모바일 앱 지원
- 다국어 수어 지원
프로젝트 관련 문의는 Issues 탭을 이용해주세요.