# Transcribe.cpp: 크로스 플랫폼 로컬 음성 인식 라이브러리

> Clean Markdown view of GeekNews topic #31600. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=31600](https://news.hada.io/topic?id=31600)
- GeekNews Markdown: [https://news.hada.io/topic/31600.md](https://news.hada.io/topic/31600.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-07-20T09:52:57+09:00
- Updated: 2026-07-20T09:52:57+09:00
- Original source: [workshop.cjpais.com](https://workshop.cjpais.com/projects/transcribe-cpp)
- Points: 1
- Comments: 1

## Topic Body

- **transcribe.cpp**는 여러 최신 음성 인식 모델을 Mac·Windows·Linux 앱에 쉽게 내장하고 GPU로 가속하기 위해 만든 ggml 기반 라이브러리임
- **16개 ASR 계열·60개 이상 모델**을 Vulkan·Metal·CUDA·TinyBLAS에서 실행하며 스트리밍과 배치 전사를 모두 지원함
- 모든 모델을 참조 구현과 수치 비교하고 수천 개 발화로 **WER 테스트**했으며, 검증 결과를 저장소와 Hugging Face에 공개함
- 기존 whisper.cpp용 `.bin` 파일을 실행하고 대부분의 용도에서 비슷한 성능으로 대체할 수 있으며, Python·JavaScript/TypeScript·Rust·ObjC/Swift 공식 바인딩도 제공함
- 저전력 RK3566에서도 실시간보다 빠르게 전사할 수 있어 음성을 클라우드로 보내지 않고 다양한 장치에 **로컬 ASR**을 배포할 수 있음

---

### 크로스 플랫폼 ASR 배포의 제약
- 기존 크로스 플랫폼 ASR 추론 선택지는 사실상 **whisper.cpp와 ONNX**로 제한됨
  - Apple 장치에는 MLX를 추가할 수 있지만, 그러면 두 개의 엔진을 지원하고 엔진마다 모델을 포팅해야 함
  - ONNX는 Handy에 모델을 빠르게 추가하는 데 유용했으나 CPU 전용 실행으로는 성능을 충분히 활용하기 어려웠음
- 여러 모델을 지원하는 일부 라이브러리는 작성자와 테스트 수준, 유지보수 계획이 불명확함
  - 실제 데스크톱·모바일 앱에서 쓸 바인딩이 있는지, 데모 코드에 그치는지, 벤치마크가 있는지, ONNX보다 빠른지 확인하기 어려웠음
- [Handy](https://handy.computer)의 크로스 플랫폼 음성 입력 배포 경험을 바탕으로 다음 조건을 충족하는 엔진이 필요했음
  - 파일을 내려받아 바로 추론할 수 있어야 함
  - 추론 품질이 **참조 구현과 동등한지 검증**할 수 있어야 함
  - 최고 성능을 위해 GPU에서 실행되어야 함
  - 대규모 PyTorch 라이브러리 없이 Handy에 쉽게 내장할 수 있어야 함
  - Mac·Windows·Linux에서 동작해야 함
- [ggml](https://github.com/ggml-org/ggml)은 강한 커뮤니티와 편리한 배포 방식을 갖춰 이 요구를 구현할 기반으로 선택됨

### 지원 모델과 가속 방식
- [transcribe.cpp](https://github.com/handy-computer/transcribe.cpp)는 빠르고 정확한 추론과 폭넓은 모델 지원을 목표로 함
  - **16개 ASR 계열과 60개 이상 모델**을 지원하며 더 많은 모델을 추가할 예정임
  - 공개된 최신 전사 모델 대부분을 지원하지만 아직 빠진 모델도 있음
  - 스트리밍 전사와 배치 전사를 모두 제공함
- 모든 지원 모델은 다음 가속 백엔드에서 실행 가능함
  - Vulkan
  - Metal
  - CUDA
  - TinyBLAS
- 모델별 벤치마크는 Fedora 환경의 **Ryzen 4750U CPU·Vulkan**과 M4 Max에서 수행함
- Vulkan 지원을 로컬 추론 애플리케이션 배포의 최소 조건으로 삼음

### 참조 구현과 정확성 검증
- Hugging Face에서 구한 `.onnx` 모델의 추론 정확도를 확신하기 어려웠던 경험을 바탕으로 모든 모델을 **참조 구현과 수치 검증**함
- 수치 비교와 함께 전체 WER 점검을 실행해 참조 구현과 같은 출력을 내는지 확인함
  - 모델마다 수천 개 발화를 처리함
  - 결과는 참조 구현과 매우 가깝거나 동일함
- 검증 데이터는 transcribe.cpp 저장소와 [handy-computer Hugging Face 조직](https://huggingface.co/handy-computer)의 각 모델 페이지에 공개됨

### whisper.cpp 호환성
- Handy에서 사용하던 whisper.cpp를 교체할 수 있도록 **드롭인 대체에 가까운 호환성**을 구현함
- Handy와 함께 배포된 whisper.cpp용 `.bin` 모델 파일을 transcribe.cpp에서도 실행할 수 있음
- whisper.cpp의 일부 플래그와 기능은 아직 지원하지 않음
- 대부분의 용도에서 whisper 구현은 충분히 안정적이며, 대략 비슷한 성능으로 whisper.cpp를 대체할 수 있음

### 언어 바인딩과 유지보수
- C/C++로 작성됐으며 로컬 전사를 여러 환경에 배포할 수 있도록 **공식 유지보수 바인딩**을 제공함
  - Python
  - JavaScript/TypeScript
  - Rust
  - ObjC/Swift
- 다른 언어 바인딩의 기여도 환영하지만, 기여자가 해당 바인딩의 유지보수를 맡아야 함
- Handy의 실제 요구가 라이브러리 설계에 반영됐으며, Handy 유지보수 경험을 바탕으로 transcribe.cpp도 계속 관리할 계획임
- 다양한 ASR 모델과 실제 사용 사례를 지원하며 얻은 경험을 반영했지만, 아직 처리하지 못하는 사례가 있어 외부 기여를 받고 있음
- 현재 버전은 **v0.1.0**으로 거친 부분이 남아 있어 [이슈 보고](https://github.com/handy-computer/transcribe.cpp/issues)를 요청함

### 저전력 장치까지 확장하는 로컬 ASR
- 장치에서 직접 ASR을 실행하기 쉽게 만들어 음성을 **클라우드 서비스로 보낼 필요를 줄이는 것**이 목표임
- 성능이 낮은 RK3566 CPU에서도 모델을 실시간보다 빠르게 실행할 수 있음
- 최신 모델을 이용한 실시간 이상의 전사 속도가 수 W 수준의 전력으로 동작함
- 더 많은 추론을 로컬에서 처리하려면 애플리케이션에 추론 엔진을 배포하고 실행하는 과정이 쉬워져야 함
- transcribe.cpp 하나로 로컬 추론 배포 문제 전체를 해결할 수는 없지만, 로컬 ASR의 진입 장벽을 낮추는 단계로 개발됨

### 프로젝트를 뒷받침한 지원
- [Mozilla AI](https://www.mozilla.ai), [BiR 프로그램](https://www.mozilla.ai/company/bir), Mozilla AI의 Davide가 구체적인 제품 형태가 없던 초기 탐색 단계부터 프로젝트를 지원함
- [ggml](https://github.com/ggml-org)은 로컬 추론 애플리케이션 배포를 가능하게 하는 핵심 기반임
- [Modal](https://modal.com/)은 **WER 테스트와 CUDA 검증**에 쓰이는 크레딧을 제공함
- [Blacksmith](https://blacksmith.sh)는 릴리스 결과물을 검사하는 CI/CD 일부를 지원함
- [Hugging Face](https://huggingface.co)는 handy-computer 조직에 비공개 저장 공간을 제공해 모델을 자유롭게 업로드할 수 있게 함

### 개발 과정의 AI 활용
- ggml 기반의 이 정도 규모 엔진을 개인이 몇 달 만에 처음부터 작성하기는 어렵다고 판단해 개발에 **AI 지원**을 활용함
- 프로젝트 소개문은 AI로 작성하지 않았으며 직접 말하거나 입력한 문장으로 구성됨

## Comments



### Comment 62063

- Author: neo
- Created: 2026-07-20T09:52:58+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=48963879) 
- 아주 멋져 보임. 다만 알려지지 않은 언어의 의미가 아니라 소리를 **국제음성기호(IPA)** 로 전사하는 기능은 모델 문서에서 찾지 못했음  
  화자가 1만 명도 안 되는 소수 언어는 언어별 모델을 훈련할 자원이 영원히 부족할 수 있음. 언어를 식별하지 않고 음성 자체를 IPA로 옮기는 모델이 있다면 전 세계 소수 언어를 연구하는 언어학자들에게 큰 도움이 될 것임
  - 실제 발화에는 생략과 축약이 많아, 언어를 알고 있어도 단어보다 **음소 전사**가 훨씬 어려움. [https://huggingface.co/spaces/KoelLabs/IPA-Transcription-EN](<https://huggingface.co/spaces/KoelLabs/IPA-Transcription-EN>) 같은 모델도 있지만 오류율이 매우 높음
  - 아내 가족은 중국 다오족·야오족의 하위 집단인 **Iu Mien** 출신임. Mien은 독립된 언어지만 화자 대부분이 사실상 문맹이고 교재나 강좌도 거의 없어 배우기 어려움  
    글로 남은 자료도 적어서, 《프로젝트 헤일메리》처럼 번역 시스템을 직접 만들고 싶음
  - 이 기능을 지원하는 모델을 거의 알지 못해 현재는 라이브러리 범위 밖이지만, 적합한 모델이 있다면 기꺼이 지원할 생각임
  - **자동 음소 인식(APR)** 모델이 일부 있지만 성능은 그저 그런 수준임
  - 이런 모델은 자신이 들을 것으로 예상하는 **음성 범위**를 알아야 실용적일 듯함. IPA가 표현하는 소리는 매우 많지만 개별 언어는 그중 일부만 사용함  
    영어의 어두운 l과 밝은 l(ball/light), 유기음 p(pin/spin)는 다른 언어에서 의미를 구분할 수 있지만 영어에서는 그렇지 않음. 언어학자들이 최대한 충실한 IPA 전사를 받은 뒤 수동으로 정규화하려는 것인지 궁금함

- 출시를 축하함. Mac과 휴대폰에서 **Handy**를 잘 쓰고 있으며, Apple 기본 음성 인식처럼 특정 분야 용어를 잘못 알아듣는 상황에서 특히 유용함  
  유지보수 비용을 재단에서 지원받는 방안은 어떨지 궁금함. 이런 프로젝트의 대가를 받는다면 어떤 조직을 찾아 어떤 방식으로 지원을 요청할지도 알고 싶음
  - Handy가 인기를 얻으면서 의도치 않게 **오픈소스 유지보수자**가 됐고, 다행히 개인 기부와 여러 후원자가 작업을 지원하고 있음  
    오픈소스에 기여하는 일을 계속하고 싶으므로 이를 지지하는 곳이라면 환영하며, 특히 오픈소스를 믿고 발전시키는 조직과 잘 맞음. 자세한 논의는 contact@handy.computer로 가능함
  - iOS의 **운영체제 기본 받아쓰기**는 iCloud를 사용하지 않더라도 요청할 때마다 주소록을 Apple에 업로드해야 해서 꺼둘 수밖에 없음

- 여러 음성 텍스트 변환 시스템이 발화 자체는 정확히 인식하지만 원하는 작업 흐름을 지원하지 않음. 문서를 열고 말하면 커서 위치에 **최소 지연으로 계속 입력**돼야 함  
  녹음을 멈춘 뒤 한꺼번에 붙여 넣는 방식은 유용하지 않으며, 연속 입력이 핵심임
  - 오히려 녹음이 끝난 뒤 한꺼번에 전사하는 방식이 더 잘 맞았음. **실시간 입력**을 보면 전사 오류를 확인하느라 생각을 끝까지 이어가기 어려움  
    한 주제에 대해 머릿속 내용을 5~10분간 모두 말한 뒤 검토하는 편이 사고 흐름을 끊지 않아 더 유용함
  - 원한다면 [Handy]([https://handy.computer](<https://handy.computer>))를 비교적 쉽게 수정해 구현할 수 있음. 앱의 **정식 기능**으로도 추가할 계획이지만 먼저 해결할 일이 많음
  - 영어 단어는 주변 문맥이 있어야 확정되는 경우가 많음. 예를 들어 **there와 their**는 발음만으로 구분되지 않음
  - 전사 기능의 유용성은 사용 방식에 따라 달라짐. 받아쓰기 도중 다른 창을 열거나 그래프와 데이터를 살펴보면 발화를 뒷받침할 정보를 제공하기 쉬움  
    일부 앱은 복사하거나 보고 있는 내용까지 **전사 문맥**으로 활용해 결과를 개선함: [https://superwhisper.com/docs/common-issues/context#types-of...](<https://superwhisper.com/docs/common-issues/context#types-of-context>)
  - [https://github.com/electronstudio/low_latency_dictation](<https://github.com/electronstudio/low_latency_dictation>)에서 이 방식을 시도했지만 **실시간 모델의 정확도**가 낮았음. 그래서 텍스트를 확정하기 전에 더 정확한 모델로 두 번째 처리를 수행함

- Whisper.cpp처럼 **문맥을 입력**해 정확도를 크게 높일 수 있는지 궁금함
  - 가능함

- 유지보수자가 지원하는 네 언어 바인딩 중 Python용은 [https://github.com/handy-computer/transcribe.cpp/tree/main/b...](<https://github.com/handy-computer/transcribe.cpp/tree/main/bindings/python>)에 있음  
  아직 의존성을 포함한 **PyPI 바이너리 휠**은 없고, 현재 PyPI 라이브러리는 별도로 설치한 라이브러리를 ctypes로 호출하지만 향후 출시할 계획으로 보임
  - CUDA 패키지를 위한 추가 저장 공간을 요청하는 PR을 PyPI에 올렸지만 아직 승인되지 않은 듯함. 바인딩의 **개발자 경험(DX)** 을 개선하는 데 도움을 받고 싶음

- 마침 적절한 시기에 발견함. 프롬프트 도구에 **음성 합성(TTS)** 을 포함한다는 이야기를 자주 접해 직접 시험해보고 싶었음  
  떠오르는 생각을 길게 말해 문서로 만들고, 편집한 뒤 AI에 보내는 순환 작업이 매력적으로 보임

- 커뮤니티에 엄청난 기여인데 혼자 만들었다는 점이 놀라움. 끝부분에 Series A 투자 발표라도 나올 줄 알았음  
  AI로 저품질 결과물을 빠르게 쏟아낼 수도 있지만, 야망을 확장해 이전보다 더 엄밀하고 오래가는 것을 만들 수도 있음을 보여줌. Transcribe.cpp를 직접 앱에 넣기보다 이런 기능은 운영체제나 Handy 같은 앱을 통해 **어디서나 사용 가능**해야 한다고 봄
  - 작성자이자 유지보수자가 맞으며, 후원자와 Handy 커뮤니티의 기부가 큰 도움이 됐음. 특히 **Mozilla AI**가 초기 작업을 지원해 Handy를 위한 막연한 꿈을 실제 프로젝트로 발전시키고 v0.1.0을 출시할 시간을 확보해 줌  
    언젠가는 libtranscribe를 제대로 배포해 **시스템 라이브러리**처럼 만들고 싶음. 안정화에는 시간이 걸리겠지만 가능하다고 봄

- 기존 transcribe-rs보다 훨씬 잘 작동함. 오프라인 음성 입력 앱도 새 라이브러리를 사용하도록 갱신했더니 **속도가 크게 향상**됨: [https://github.com/notune/android_transcribe_app](<https://github.com/notune/android_transcribe_app>)

- 앞으로 여러 이유로 **로컬 추론**이 늘어날 것이며, 더 많은 앱이 이를 사용하려면 실행과 배포가 쉬워져야 한다는 진단이 정확함  
  글의 어떤 단어도 AI가 작성하지 않고 입이나 손가락에서 나왔다는 점도 프로젝트를 더 신뢰하고 쉽게 접근하게 해줌
  - 우리가 사용하는 도구는 사고를 형성하므로 이 주장에는 동의하기 어려움. 음성 인식 LLM도 결국 LLM이며, 학습 과정에 내재된 기대에 따라 오류가 형성되고 화면에 나타나는 단어에도 영향을 줌  
    자주 사용하다 보면 어떤 단어 배열이 정확히 전사되는지 학습하게 되고, 이것이 사고 과정의 일부가 됨. 시간이 지나면 **LLM과 사고가 얽히므로**, 이런 방식의 AI 사용도 최종 문장을 실제로 바꿀 수 있음

- 로컬에서 전사 API 서버를 운영하려고 알아보며 비슷한 문제를 겪었음. 가장 부족했던 것은 **스트리밍 지원**과 인식 시 우선순위를 높일 특수 단어 지원이었는데, 여기에는 스트리밍이 있어 반가움
  - whisper.cpp가 등장한 뒤 3090 Ti 서버에서 직접 운영 중임. 더 빠르고 좋은 대안이 나왔더라도 문제없이 계속 작동하고, 가중치가 작으며 필요한 것보다 충분히 빠름  
    아래처럼 로컬 홈 서버에 올리면 간단히 **로컬 전사 API**를 만들 수 있음. 추론 매개변수는 조금 조정해야 하지만 한번 확정하면 매우 잘 작동함
  
    `MODEL="/home/user/projects/ggml-org/whisper.cpp/models/ggml-large-v3-turbo.bin"`  
    `WHISPER_SERVER_BIN="/home/user/projects/ggml-org/whisper.cpp/build/bin/whisper-server"`  
    `"$WHISPER_SERVER_BIN" --model "$MODEL" --language en --host 127.0.0.1 --port 7812`
  - **단어 가중치 조정**은 훨씬 나중에 지원될 가능성이 크지만 스트리밍은 이미 제공됨  
    누군가 코드베이스에 좋은 서버 예제를 기여하고 문제 해결도 도와주거나, transcribe.cpp 또는 바인딩으로 다른 언어에서 견고한 서버를 만들어 주길 바람. 완성되면 메인 프로젝트에서 직접 연결할 의향도 있음
