제 포스팅은 AI가 작성한게 아닌 한글자 한글자 타자를 쳐서 작성한 포스팅입니다. 구독 좋아요 댓글은 힘이됩니다.
안녕하세요~~~!!!

이번에 포스팅을 할 주제는!
Vosk / Pyannote / Sherpa-ONNX / Whisper.cpp 결과 비교
입니다. 제가 직접 경험하고 구동하고 성능까지 직접 테스트해본 결과입니다. 재미있게 봐주세요!
1. 테스트 개요 및 전제 조건
| 테스트환경 | 갤럭시 A35, Exynos 1380, RAM 6GB이며 일반적으로 3GB 내외만 가용 가능한 조건 |
| 실행기반 | Android + Termux + ARM 환경, 일부 항목은 PRoot Ubuntu 및 Conda를 추가로 사용 |
| 평가대상 | Whisper.cpp, Sherpa-ONNX, pyannote.audio, Vosk |
평가 기준은 다음 세 축으로 구성했다.
- STT 성능(정확도 중심)
- 화자 분리 성능(구간 분할 정교함, 겹침 구간 대응, 실패 여부)
- 설치 및 구동 난이도(의존성, 빌드/런타임 우회 필요성, OOM 리스크, 재현성)
2. 엔진별 결과 요약 점수(10점 만점)
Whisper.cpp
총점 : 6/10
가장 안정적이고 정확한 STT 성능을 보여주었으나, 화자 분리 기능의 부재로 인해 점수가 깎였다.
| 평가 항목 | 점수 (10점 만점) | 산정 이유 및 근거 |
| STT 성능 | 9 | 거대 언어 모델 기반으로 문맥을 파악하며, 비교 대상 중 한국어 텍스트 인식률이 가장 압도적이고 정확하다. |
| 처리 속도 | 7 | 모바일 환경에서 단일 STT 추론 시 무난하고 수용 가능한 수준의 속도를 보여준다. |
| 화자 분리 | 0 | 원천적으로 화자 분리(Diarization) 기능이 존재하지 않으며, 한국어 지원 모델도 전무하다. |
| 시스템 안정성 | 8 | 안드로이드 메모리 한계 내에서 강제 종료(OOM) 없이 안정적으로 연산을 완주한다. |
| 설치 편의성 | 8 | 치명적인 억까(오류)나 복잡한 우회 과정 없이 Termux 순정 환경에서 원활하게 빌드된다. |
제공된 로그에서는 GPU가 탐지되지 않았고(CPU only), 스레드 4로 실행되었다. 그럼에도 실행 자체는 안정적으로 완료되었고, 별도의 PRoot/Conda/대형 프레임워크 적재 없이 단일 바이너리 형태로 처리된 흐름이 확인되었다.
따라서 STT 단독 성능은 비교 대상 중 가장 우수하다. 거대 언어 모델 기반이라 문맥 파악이 가능해 준수한 텍스트 인식률을 보여준다. 다만 화자 분리 기능이 원천적으로 없고, 한국어 학습 모델이 부재하여 단일 화자의 단순 받아쓰기 용도로만 활용할 수 있다.
그리고 다른 환경 대비 치명적인 오류나 복잡한 우회 과정 없이, 터뮤즈 환경에서 상대적으로 수월하게 빌드 및 구동을 완료한점이 가장 높은 점수를 줄 수 있었다.
Sherpa-ONNX
총점 5/10
C++ 기반의 훌륭한 화자 분리 능력을 갖췄으나, STT 결합 시 발생하는 심각한 인식률 저하와 파이썬 래퍼의 비효율이 한계로 작용했다.
| 평가 항목 | 점수 (10점 만점) | 산정 이유 및 근거 |
| STT 성능 | 3 | 양자화 모델의 한계로 "LS 증권"을 "에르 건"으로 표기하는 등 고유명사 및 문맥 파괴가 심각하다. |
| 처리 속도 | 4 | 화자 분리 단독 구동 시 빠르나(RTF 1.6), STT와 결합하여 파이썬으로 구동 시 처리 속도가 처참하게 지연된다(RTF 5.9). |
| 화자 분리 | 9 | 두 사람의 목소리가 겹치는 구간(Overlap)까지 정밀하게 인지하고 세밀하게 분리해낸다. |
| 시스템 안정성 | 4 | 파이썬 환경에서 모델 3개를 동시 구동 시 램 점유율이 95%까지 치솟으며 시스템이 얼어붙는 불안정을 보인다. |
| 설치 편의성 | 3 | 공식 CMake가 안드로이드 환경을 미지원하여 빌드에 실패하며, PRoot 우분투 셋업 등 복잡한 우회 과정이 강제된다. |
Pyannote
총점 : 1/10
업계 표준의 강력한 모델이나, 모바일의 물리적 한계(메모리 부족)를 넘지 못해 실사용이 불가능하다.
| 평가 항목 | 점수 (10점 만점) | 산정 이유 및 근거 |
| STT 성능 | N/A (0) | 자체적인 음성 텍스트 변환(STT) 받아쓰기 기능이 포함되어 있지 않다. |
| 처리 속도 | 1 | 무거운 파이토치 기반으로, 모바일 엣지 환경에서는 연산 속도를 논하기 어려울 정도로 무겁다. |
| 화자 분리 | N/A (0) | PC 서버 기준으로는 완벽한 파이프라인이나, 모바일에서는 메모리 폭발로 결과를 끝까지 도출하지 못한다. |
| 시스템 안정성 | 0 | 연산 과정에서 메모리 한계를 초과하여 안드로이드 OS 정책에 의해 100% 프로세스 강제 종료(Killed)가 발생한다. |
| 설치 편의성 | 1 | torchaudio 버전 충돌, 보안 정책 우회(weights_only), torchcodec 의존성 강제 수정 등 극악의 트러블슈팅이 필요하다. |
Vosk
| 평가 항목 | 점수 (10점 만점) | 산정 이유 및 근거 |
| STT 성능 | 1 | 언어 모델(LM)의 부재로 인해 "문 듀라셀 결시생" 등 문맥과 무관한 워드 샐러드(외계어) 현상이 발생한다. |
| 처리 속도 | 1 | 극심한 병목 현상이 발생하여, 약 1분짜리 오디오 파일을 분석하는 데 30분 이상이 소요된다. |
| 화자 분리 | 4 | 특정 화자(Speaker 0, 1)로 묶어주지 못하고 주파수 벡터 값(-1.11 등)만 단순 추출하는 한계를 보인다. |
| 시스템 안정성 | 6 | 속도는 매우 느리지만, 엔진 자체가 가벼워 시스템 메모리 부족으로 인한 강제 종료는 발생하지 않는다. |
| 설치 편의성 | 0 | 모바일(안드로이드) 파이썬 구동을 아예 차단해두어, OS 환경 변수를 'linux'로 강제 뇌수술(Spoofing)해야만 구동된다. |
단 50MB라는 극단적인 가벼움은 모바일 환경에서 분명 매력적인 장점이었지만, 실제 구동 시 여러 치명적인 한계를 드러냈다.
가장 큰 문제는 STT 성능이 사실상 붕괴되었다는 점인데, 언어 모델의 부재로 인해 자연어의 맥락을 전혀 파악하지 못했고, '문 듀라셀 결시생 풀어갈지' 처럼 원문과 전혀 대응되지 않는 워드 샐러드 현상이 발생했다. 일부 구간에서 첫 두세 단어는 맞추더라도 뒤로 갈수록 급격히 무너지며 문장 단위의 신뢰도를 상실학도 했고 화자 분리 기능 역시 기대했던 명확한 레이블링이나 군집화 대신 "-1.11, 0.730"과 같은 임베딩 벡터 실수 값만 출력하는 데 그쳤다.
다만, 이 특징 벡터를 뽑아내는 과정 자체는 동작했기에 분리를 시도했다는 점에서는 일말의 가능성을 엿볼 수 있었다. 더불어 처리 속도 측면에서도 모바일 파이썬 환경 기준 약 1분짜리 오디오 분석에 30분이 넘게 소요되는 심각한 병목 현상이 발생해 실사용이 불가능한 수준이었다.
가장 험난했던 부분은 설치 과정이며 이는 단순한 설치 난이도를 넘어선 사실상의 '생존 게임'에 가까웠다.
PyPI에 안드로이드용 배포판이 없어 시작부터 가로막혔고, TUR 저장소나 wheel 패키징 재시도도 모두 실패했습니다. 결국 안드로이드 AAR 파일에서 arm64-v8a용 라이브러리(libvosk.so)를 직접 추출해 수동으로 연결하고, 소스 코드를 클론하여 vosk_builder.py를 통해 CFFI 바인딩을 강제로 생성하는 우회로를 거쳐야만 했다.
게다가 마지막 실행 단계에서는 sys.platform 체크 로직에 막혀, 런타임 환경 변수를 linux 속이는 짓까지 감행하고 나서야 간신히 구동시킬 수 있었다. 이러한 극한의 트러블슈팅 과정을 고려할 때, 설치 편의성은 끔찍헀다.
결과적으로, 가벼운 용량 덕분에 램 점유율 문제는 없었지만, 처참한 인식률과 최악의 이식 난이도로 인해 모바일 오프라인 환경에는 단독으로 사용하긴 어렵고 부적합하다는 결론이 도출되는 것 같다.
종합 점수 비교표
각 항목의 점수를 한눈에 비교할 수 있는 총점 비교표이다.
| 평가 모델 | STT 성능 | 처리 속도 | 화자 분리 | 시스템 안정성 | 설치 편의성 | 최종 평가 총점 (환산) |
| Whisper.cpp | 9 | 7 | 0 | 8 | 8 | 6 / 10 |
| Sherpa-ONNX | 3 | 4 | 9 | 4 | 3 | 5 / 10 |
| Vosk | 1 | 1 | 4 | 6 | 0 | 3 / 10 |
| Pyannote | 0 | 1 | 0 | 0 | 1 | 0 / 10 |
3. 엔진별 종합 평가 및 경험 공유
Whisper.cpp
누가 말했는지 구분하는 화자 분리 기능이 없어서 아쉬웠지만, 텍스트 받아쓰기 자체는 가장 정확하고 듬직했어요ㅎㅎ복잡한 에러 없이 모바일 환경에서 묵묵하게 돌아가 주는 모습이 정말 마음에 들었습니다.
회의록이나 대화 분류가 굳이 필요 없는 단순 음성 메모용이라면 무조건 이 녀석을 기용해야할듯합니다.
Sherpa-ONNX
C++의 깡패 같은 속도로 겹치는 목소리까지 정밀하게 나누는 걸 보고 모바일 AI의 희망인 줄 알았어요ㅋㅋㅋㅋ
그런데 막상 STT 모델이랑 합쳐서 결과를 뽑아내려고 파이썬을 끼얹는 순간, 속도도 처참해지고 알아듣는 수준도 술 취한 비서처럼 변해서 너무 실망했네요;; 화자는 기가 막히게 나누는데 본문 내용을 다 틀려버리니 반쪽짜리 성공 같아서 아쉬움이 많이 남는 녀석;
Pyannote
버전 충돌부터 라이브러리 에러까지 온갖 파이썬 오류를 밤새워 고치며 간신히 오디오를 밀어 넣었는데 결국 램 부족으로 안드로이드가 가차 없이 강제 종료시켜버렸을 때는 정말 허무했어요;;
스마트폰의 3GB 남짓한 가용 램으로는 도저히 이 무거운 녀석을 품을 수 없다는 걸 뼈저리게 느꼈고, 이런 작업은 좋은 PC나 외부 서버에 던져주는 게 맞다는 걸 깨닿게 해준 녀석ㅎㅎ
Vosk
정말 설치하는 내내 저를 제일 괴롭혔던 애증의 엔진
모바일 환경을 아예 배제해놓은 구조라 소스코드까지 뜯어고치며 억지로 구동시켰는데, 결과물이 듀라셀 결시생 같은 외계어라서 헛웃음이 났어요. 게다가 분석 속도까지 30분이나 걸려서, 짧은 단어 명령어가 아니라면 자연어 대화 프로젝트에는 절대 쓸 수 없겠다는 확신이 들었어요. 그래도 화자분리가 가능하단 점에서 우선 조금 고려할 수 있을 것 같아요.
Whisper.cpp, Sherpa-ONNX, Vosk는 험난한 우여곡절 끝에 모바일(엑시노스 1380, 가용 RAM 3GB) 환경에서 구동하는 데 성공했지만, 모바일 단독 환경에서 STT와 화자 분리를 완벽하게 동시에 처리해 주는 만능 엔진은 없으며, 목적에 맞춰 구동 가능한 엔진을 타협해서 사용해야만 하는것같다.
이번 뼈저린 검증을 통해 완벽한 단일 엔진을 찾는 것은 무리라는 것을 깨달았네여.
그래서 앞으로는 각 엔진의 확실한 장점들만 쏙쏙 뽑아내어 하이브리드 파이프라인을 구축해 볼 계획이에요!!!
긴글 읽어주셔서 감사합니다!!!!
다음 포스팅은 하이브리드 파이프라인 구축과정과 검증을 해보고 이제 이친구들과 비교를 최종적으로 해봐야겠어요 ㅎㅎ

제 포스팅은 AI가 작성한게 아닌 한글자 한글자 타자를 쳐서 작성한 포스팅입니다. 구독 좋아요 댓글은 힘이됩니다.
댓글