sherpa-onnx

Local AI RunnersCLIC++

★ 14,743주당 +125조회 3

무엇인가

sherpa-onnx는 음성 관련 모델을 기기 안에서 실행하는 C++ 추론 라이브러리다. 클라우드 음성 API가 서버에서 처리하던 음성 인식, 음성 합성, 화자 분리, 음성 구간 검출, 음원 분리를 로컬 프로세스로 옮기는 자리에 놓인다. next-gen Kaldi(k2/icefall)로 학습한 모델을 ONNX Runtime으로 실행하는 것이 기본 구조다.

어떻게 동작하나

핵심은 C++로 작성된 하나의 런타임과 그 위의 얇은 바인딩이다. 모델은 ONNX 형식 파일로 배포되고 onnxruntime이 CPU·GPU·NPU 백엔드에서 그래프를 실행한다. 스트리밍 ASR은 오디오를 청크 단위로 넣어 부분 결과를 계속 내보내고, 비스트리밍 ASR은 파일 전체를 한 번에 처리한다. VAD는 silero-vad 모델로 발화 구간을 잘라 인식기에 넘기고, 화자 분리는 세그먼트별 화자 임베딩을 비교해 화자를 묶는다. TTS는 VITS·Piper·Kokoro 계열 모델을 쓴다. C API를 공통 경계로 두어 C++, C, Python, Go, C#, Java, Kotlin, JavaScript, Swift, Rust, Dart, Object Pascal 바인딩이 같은 코어를 호출한다. WebSocket 서버·클라이언트 모드로 원격에서도 같은 런타임을 쓴다.

무엇과 다른가

클라우드 음성 API와 달리 요청당 과금이나 네트워크 왕복이 없고 오디오가 기기를 떠나지 않는다. ASR 하나만 다루는 실행기와 달리 인식·합성·화자 분리·VAD·키워드 검출·음원 분리를 한 런타임에 모은다. 모델 형식을 ONNX로 고정했기 때문에 같은 모델 파일을 x86_64 서버, ARM 보드, RK NPU, Ascend NPU에서 백엔드만 바꿔 실행할 수 있다.

어떻게 쓰나

배포 경로는 언어별 바인딩과 사전 빌드 앱 두 갈래다. Android APK, Flutter 앱, Tauri 앱, Lazarus 앱이 릴리스 태그로 올라와 있고 HuggingFace Spaces에서 브라우저로 바로 시험할 수 있다. 코드에서는 모델 디렉터리 경로와 설정값을 넘겨 recognizer나 synthesizer 객체를 만들고 오디오 스트림을 밀어 넣는 방식으로 호출한다. 서버로 쓸 때는 WebSocket 서버를 띄우고 클라이언트가 오디오를 전송한다.

전제와 한계

인터넷 연결은 필요 없지만 모델 파일은 미리 받아 둬야 한다. 실행할 수 있는 것은 ONNX로 변환된 모델뿐이고, 학습이나 모델 변환은 이 저장소의 범위가 아니다. NPU 실행은 RK NPU, Ascend NPU, Axera NPU, OpenVINO NPU처럼 문서에 적힌 칩에 한정된다. iOS용 Flutter 앱은 사전 빌드가 없어 소스에서 직접 빌드해야 한다.

유사 도구