
음성을 텍스트로 바꾸는 작업을 기기 안에서 처리하고 싶다면 모델 크기와 실행 환경이 먼저 눈에 들어옵니다. Cactus Compute가 공개한 Whistle은 16.9MB 모델 파일 하나로 동작하는 온디바이스 음성 인식 모델입니다. CPU에서 실행되고, 브라우저 데모도 첫 다운로드 뒤 음성을 기기 안에서 처리합니다.
Whistle은 Cactus의 Needle과 같은 C++ 엔진과 컨테이너를 사용합니다. 스마트폰과 웨어러블부터 로봇, 스마트홈, 차량, 마이크로컨트롤러까지 작은 기기에서 음성 입력을 처리하는 것을 목표로 합니다.
브라우저에서 바로 전사해 볼 수 있습니다
Cactus 공식 Whistle 데모는 첫 실행 때 16.9MB 모델과 WebAssembly 실행 엔진을 내려받습니다. 녹음한 음성을 16kHz 모노 형식으로 바꿔 브라우저 안에서 처리하고, 전사 데이터는 기기 밖으로 보내지 않습니다. 최초 다운로드에는 인터넷 연결이 필요하지만, 음성을 인식하는 과정은 로컬에서 이뤄집니다.
한 번에 처리하는 입력은 최대 30초입니다. 영어, 독일어, 프랑스어, 스페인어, 이탈리아어, 네덜란드어, 폴란드어 등 7개 언어를 지원하며 언어를 지정하지 않으면 자동으로 감지합니다. 키워드를 넣어 사람 이름이나 제품명 같은 표현을 전사에 반영할 수도 있죠.
전사 외에도 단어마다 시작·종료 시각과 확률을 제공하는 타임스탬프, 80ms 단위 음성 임베딩을 지원합니다.
출처: X @cactuscompute
Whisper base보다 파일은 작고, CPU 벤치마크의 응답 지연은 짧았습니다
Cactus가 공개한 모델 파일 크기는 Whistle 16.9MB, Whisper base 145.3MB입니다. Whistle 모델 파일은 약 8.6배 작습니다. 이는 가중치 파일 크기 비교로, 메모리 사용량이나 설치 전체 크기를 비교한 수치는 아닙니다.
속도 측정은 10초 오디오를 Apple M4 Pro CPU에서 각 모델의 공식 런타임 기본 설정으로 처리한 결과입니다. 첫 토큰까지 걸린 시간(time-to-first-token)은 Whistle 11.1ms, Whisper base 73.2ms였습니다. 이 지표는 첫 결과가 나오기까지의 지연을 뜻합니다.
같은 조건에서 디코딩 처리량은 Whistle 초당 1,319토큰, Whisper base 266토큰으로 집계됐습니다. 이 값은 오디오 인코더 실행 뒤 디코딩 구간만 계산한 처리량입니다. 첫 토큰 지연과 디코딩 속도는 서로 다른 지표이며, 전체 전사 시간이 같은 배율로 줄었다는 뜻은 아닙니다.
단어 오류율(WER)은 테스트셋에 따라 결과가 달랐습니다. Whistle은 LibriSpeech test-clean·test-other, SPGISpeech, Earnings-22, FLEURS 평균에서 Whisper base보다 낮은 WER를 기록했습니다. Whisper base는 TED-LIUM, AMI, MLS 평균에서 앞섰습니다. 발표 자료의 Whisper AMI 값은 다른 모델과 다른 AMI-IHM 하위 집합에서 나온 수치입니다. 따라서 한 모델이 모든 음성에서 더 정확하다고 일반화하기보다, 사용 사례와 가까운 평가 세트의 결과를 함께 보는 편이 적절합니다.
Moonshine tiny v2도 비교표에 포함돼 있습니다. 다만 Moonshine은 영어 전용이며, 발표된 데이터셋이 모델마다 달라 일부 비교 항목은 비어 있습니다. WER는 Whisper 정규화 기준으로 계산했고, Whistle 측정치는 86,174개 발화를 대상으로 했다고 Cactus는 설명합니다.
Python으로 설치하고 WAV 파일을 전사하는 방법
공식 패키지는 PyPI에서 설치할 수 있습니다. 16kHz WAV 파일 또는 원시 오디오 샘플에는 기본 설치만 필요합니다.
pip install cactus-needle
import needle
result = needle.transcribe("clip.wav")
print(result["text"])다른 샘플레이트를 변환하거나 마이크 입력을 받으려면 마이크 옵션을 추가합니다.
pip install "cactus-needle[mic]"전사 결과에는 텍스트와 언어, 첫 토큰까지의 시간, 디코더의 초당 토큰 수가 포함됩니다. 단어별 시각과 확률은 word_timestamps=True, 고유명사 힌트는 keywords=["Siobhan", "Krzysztof"], 언어 고정은 language="de"로 지정할 수 있습니다. 터미널에서 마이크를 바로 사용하려면 needle whistle playground를, 같은 음성을 Whistle·Whisper·Moonshine으로 나란히 실행하려면 needle whistle compare를 사용합니다.
17개 배포 타깃에서 같은 엔진을 활용합니다
Cactus는 macOS Apple Silicon, Linux(x86-64·ARM64·ARMv7·RISC-V·MIPS32), Windows(x64·ARM), Android(ARM64·ARMv7·RISC-V), iOS(기기·시뮬레이터), watchOS, tvOS, 브라우저/WebAssembly, WASI component 등 17개 배포 타깃용 엔진을 제공합니다. 이 숫자는 운영체제 종류가 아니라 아키텍처와 기기 변형을 포함한 배포 타깃 수입니다. 코드와 빌드 파일은 GitHub 저장소에서, 모델 가중치와 플랫폼 엔진은 Hugging Face 모델 카드에서 확인할 수 있습니다.
Whistle은 크기가 작은 CPU 기반 음성 인식 모델을 앱이나 기기에 직접 포함하려는 개발자에게 살펴볼 만한 선택지입니다. 공개 벤치마크에서는 Whisper base보다 훨씬 작은 파일 크기와 낮은 첫 토큰 지연을 보였고, 전사 정확도는 평가 세트에 따라 우위가 달랐습니다. 지원 언어와 플랫폼, 실제 입력 환경에 맞춰 공식 데모와 비교 명령으로 먼저 확인해 볼 수 있습니다.
함께 읽기: Microsoft MAI 실시간 음성 모델 3종, Grok 음성 모델 비교, Eleven v4 음성 생성.



