I built a real-time ASL interpreter for the Gemma4 challenge, no cloud needed
This is a submission for the Gemma 4 Challenge: Build with Gemma 4 What I Built A...
Gemma 4 Challenge 출품작 #
이 프로젝트는 Gemma 4 Challenge: Build with Gemma 4에 제출한 작품이다.
웹캠 앞에 손을 올려 수어 알파벳을 보여주면 Gemma4가 어떤 글자인지, 얼마나 확신하는지, 손의 위치에서 무엇을 감지했는지 알려주는 미국 수어(ASL) 알파벳 실시간 인식기다. API 키, 클라우드, 구독 없이 100% 로컬에서 동작한다.
파이프라인 구성은 이렇다.
웹캠 → MediaPipe (손 감지 + 크롭) → Gemma4 (ASL 인식) → 결과 출력
저장소와 설치 방법: https://github.com/cbms26/asl-interpreter
이 주제, 이 모델을 고른 이유 #
기존 ASL 인식 도구는 대부분 클라우드 API에 의존하거나, ASL 데이터셋으로 전문 훈련된 전용 모델을 사용한다. 두 방식 모두 트레이드오프가 있다. 클라우드 API는 손 동작이 외부 서버로 전송되고, 전용 모델은 학습에 쓰인 글자들로 인식 범위가 고정된다.
파인튜닝(사전 학습된 모델을 특정 목적에 맞게 추가 학습시키는 과정)이나 별도 데이터셋 없이, 각 글자 모양에 대한 정밀한 설명만으로 Gemma4 같은 범용 비전 모델이 ASL 인식을 얼마나 잘 처리할 수 있는지 확인하고 싶었다. 웹캠으로 손을 찍는 이상 개인정보도 신경 써야 했기에, 모든 처리는 로컬에서 완결돼야 했다.
모델은 gemma4:e4b로 골랐다. E2B는 유사한 글자 간 미묘한 차이를 다루기엔 너무 작았고, 31B Dense 모델은 성능이 좋지만 대부분의 노트북에서 실행이 어렵다. E4B는 섬세한 손 모양을 추론할 만한 능력과 로컬 실행 가능한 크기 사이에서 적당한 타협점이었다.
핵심 설계 결정 #
가장 단순한 방법은 웹캠 원본 프레임을 Gemma 4에 그대로 넘기고 수어를 식별하게 하는 것이다. 이 방법도 동작하긴 하지만, 모델이 손·배경·얼굴·조명 등 프레임 내 모든 요소에 주의를 분산시키다 보니 정확도가 눈에 띄게 낮다.
그래서 MediaPipe를 전처리 단계에 추가했다. ~15fps로 브라우저에서 실행되며 손을 감지해 512×512 정사각형으로 타이트하게 크롭한다. Gemma4가 실제로 보는 건 이 크롭된 이미지, 즉 손만 담긴 이미지다.
MediaPipe가 손의 위치를 담당하고, Gemma 4가 어떤 글자인지를 담당한다. 이 두 역할을 분리한 것이 시도한 방법 중 정확도 향상에 가장 큰 영향을 미쳤다.
프롬프트 엔지니어링의 역할 #
Gemma 4는 ASL 훈련 데이터가 없다. 이를 보완하기 위해 26개 글자 전체에 대한 정밀한 설명과 모델이 혼동하던 글자 쌍에 대한 명시적인 구분 규칙을 작성했다.
"A vs S: A는 엄지가 검지 옆에 위치한다. S는 엄지가 주먹 위로 접혀 있다." "M vs N vs T: 모두 손가락을 엄지 위로 접는다. M = 손가락 3개, N = 손가락 2개, T = 엄지가 검지와 중지 사이."
이 규칙들을 작성하는 과정은 수어 자체를 제대로 이해하는 계기가 됐다. 파인튜닝 없이도 혼동 글자 쌍의 정확도가 크게 올랐다.
측정 방법 #
데모 시연에 그치지 않고 제대로 된 평가 파이프라인을 구축했다.
- ASL 튜토리얼 영상에서 프레임을 추출
- Gemma 4가
test_signs/<LETTER>/폴더로 자동 분류 batch_tester.py를 실행해 정답 레이블 기준 글자별 정확도 측정
웹캠 캡처, 배치 실행, 모델 분류 등 모든 상호작용은 타임스탬프가 포함된 CSV 로그에 기록된다. 웹캠 UI에도 좋아요/싫어요 피드백 버튼이 있어서, 모델이 틀렸을 때 A-Z 선택기로 정답 글자를 고를 수 있다. 단순히 틀렸다는 사실뿐 아니라 무엇을 틀렸는지까지 남는 셈이다.
현재까지 결과:
| 항목 | 수치 |
|---|---|
| 전체 이미지 수 | 66 |
| 전체 정확도 | 59.1% |
| 100% 정확 글자 | B, D, E, F, G, H, K, R, T, U, X, Y, Z |
| 0% 정확 글자 | I, O, P |
| 22% 정확 글자 | V |
라이브 웹캠 테스트에서 내장 피드백은 15개 세션을 기록했다 — 정답 3개(좋아요)와 오답 12개(싫어요 + 정답 글자 기록). 자주 잘못 인식된 사례는 A, C, E를 O로 예측하거나 D, F에서 빈 응답 또는 낮은 신뢰도 응답이 나오는 경우였다.
예상 밖의 발견 #
가장 어려운 글자는 예상과 달랐다. J와 Z는 실제 ASL에서 동작을 포함한다 — J는 호 모양, Z는 공중에 Z를 그린다. 정지 이미지에서는 각각 I와 A와 거의 동일하게 보인다. Gemma 4는 이 경우 자신 없이 틀린 답을 내놓는 대신 low 신뢰도로 표시해 잘 처리했다.
입력 품질이 프롬프트 길이보다 더 중요했다. 가장 큰 정확도 향상은 프롬프트를 더 상세하게 만드는 게 아니라 MediaPipe 크롭과 깨끗한 배경에서 비롯됐다.
데모 #
YouTube 데모 영상: https://youtu.be/jDNOOyWUUOc
이 글은 위 출처의 내용을 바탕으로 작성된 초안입니다. 원문의 의견과 정보를 그대로 전달하며, 별도의 견해를 포함하지 않습니다.

