Picovoice/speech-to-text-benchmark

speech to text benchmark framework

Python

698

28 commits

updated Oct 7, 2026

See the code

README

Speech-to-Text Benchmark

Made in Vancouver, Canada by Picovoice

This repo is a minimalist and extensible framework for benchmarking different speech-to-text engines.

Table of Contents

Data

Metrics

Word Error Rate

Word error rate (WER) is the ratio of edit distance between words in a reference transcript and the words in the output of the speech-to-text engine to the number of words in the reference transcript.

Character Error Rate

Character error rate (CER) is the ratio of edit distance between characters in a reference transcript and the characters in the output of the speech-to-text engine to the number of characters in the reference transcript. CER is reported for Korean and Japanese following industry standards.

Punctuation Error Rate

Punctuation Error Rate (PER) is the ratio of punctuation-specific errors between a reference transcript and the output of a speech-to-text engine to the number of punctuation-related operations in the reference transcript (more details in Section 3 of Meister et al.). We report PER results for periods (.) and question marks (?).

Core-Hour

The Core-Hour metric is used to evaluate the computational efficiency of the speech-to-text engine, indicating the number of CPU hours required to process one hundred hours of audio. A speech-to-text engine with lower Core-Hour is more computationally efficient. We omit this metric for cloud-based engines.

Word Emission Latency

Word emission latency is used to evaluate the responsiveness of streaming speech-to-text engines. It measures the average delay from the point a word has finished being spoken to when its transcription is emitted by the engine. We measure this metric only for streaming engines.

Model Size

The aggregate size of models (acoustic and language), in MB. We omit this metric for cloud-based engines.

Engines

Usage

This benchmark has been developed and tested on Ubuntu 22.04 with Python 3.12.

  • Install FFmpeg
  • Download datasets.
  • Install the requirements:
pip3 install -r requirements.txt

Benchmark Usage

In the following, we provide instructions for running the benchmark for each engine. The supported datasets are: COMMON_VOICE, LIBRI_SPEECH_TEST_CLEAN, LIBRI_SPEECH_TEST_OTHER, TED_LIUM, MLS, VOX_POPULI, FLEURS, ZEROTH_KOREAN, PANSORI and JSUT_BASIC. The supported languages are: EN, FR, DE, ES, IT, PT-BR, PT-PT, KO and JA.

To evaluate Punctuation Error Rate, use the --punctuation flag. Use --punctuation-set ${PUNCTUATION_SET} to select which punctuation marks to calculate PER against, where ${PUNCTUATION_SET} is one or more of ., ? and , (default .?).

Amazon Transcribe Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset, ${LANGUAGE} with the target language, ${AWS_LOCATION} with the name of the AWS server and ${AWS_PROFILE} with the name of the AWS profile you wish to use.

python3 benchmark.py \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--engine AMAZON_TRANSCRIBE \
--aws-profile ${AWS_PROFILE} \
--aws-location ${AWS_LOCATION}

Set --engine to AMAZON_TRANSCRIBE_STREAMING to use Amazon Transcribe in streaming mode.

Azure Speech-to-Text Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset, ${LANGUAGE} with the target language, ${AZURE_SPEECH_KEY} and ${AZURE_SPEECH_LOCATION} information from your Azure account.

python3 benchmark.py \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--engine AZURE_SPEECH_TO_TEXT \
--azure-speech-key ${AZURE_SPEECH_KEY} \
--azure-speech-location ${AZURE_SPEECH_LOCATION}

Set --engine to AZURE_SPEECH_TO_TEXT_REAL_TIME to use Azure Speech-to-text in streaming mode.

Google Speech-to-Text Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset, ${LANGUAGE} with the target language and ${GOOGLE_APPLICATION_CREDENTIALS} with credentials download from Google Cloud Platform.

python3 benchmark.py \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--engine GOOGLE_SPEECH_TO_TEXT \
--google-application-credentials ${GOOGLE_APPLICATION_CREDENTIALS}

Set --engine to GOOGLE_SPEECH_TO_TEXT_STREAMING to use Google Speech-to-text in streaming mode.

IBM Watson Speech-to-Text Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset and ${WATSON_SPEECH_TO_TEXT_API_KEY}/${${WATSON_SPEECH_TO_TEXT_URL}} with credentials from your IBM account. This engine only supports English.

python3 benchmark.py \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language EN \
--engine IBM_WATSON_SPEECH_TO_TEXT \
--watson-speech-to-text-api-key ${WATSON_SPEECH_TO_TEXT_API_KEY} \
--watson-speech-to-text-url ${WATSON_SPEECH_TO_TEXT_URL}

OpenAI Whisper Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset, ${LANGUAGE} with the target language and ${WHISPER_MODEL} with the whisper model type (WHISPER_TINY, WHISPER_BASE, WHISPER_SMALL, WHISPER_MEDIUM, WHISPER_LARGE, WHISPER_LARGE_V2, WHISPER_LARGE_V3 or WHISPER_LARGE_TURBO)

python3 benchmark.py \
--engine ${WHISPER_MODEL} \
--dataset ${DATASET} \
--language ${LANGUAGE} \
--dataset-folder ${DATASET_FOLDER} \

Whisper.cpp Streaming Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset, ${LANGUAGE} with the target language, and ${WHISPER_CPP_MODEL} with the Whisper.cpp streaming model type (WHISPER_CPP_STREAMING_TINY, WHISPER_CPP_STREAMING_BASE, WHISPER_CPP_STREAMING_SMALL, WHISPER_CPP_STREAMING_MEDIUM, WHISPER_CPP_STREAMING_LARGE_V3 or WHISPER_CPP_STREAMING_LARGE_TURBO).

python3 benchmark.py \
--engine ${WHISPER_CPP_MODEL} \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \

Moonshine Streaming Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset and ${MOONSHINE_MODEL} with the Moonshine streaming model type (MOONSHINE_STREAMING_TINY, MOONSHINE_STREAMING_SMALL or MOONSHINE_STREAMING_MEDIUM). This engine only supports English.

python3 benchmark.py \
--engine ${MOONSHINE_MODEL} \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language EN \

Vosk Streaming Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset and ${VOSK_MODEL} with the Vosk streaming model type (VOSK_STREAMING_SMALL or VOSK_STREAMING_LARGE). This engine only supports English.

python3 benchmark.py \
--engine ${VOSK_MODEL} \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language EN

Nemotron 3.5 ASR Streaming Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset, ${LANGUAGE} with the target language, and ${CHUNK_SIZE_MS} with a supported chunk size: 80, 160, 320, 560 or 1120 (default 560).

python3 benchmark.py \
--engine NEMOTRON_3_5_ASR_STREAMING \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--streaming-chunk-size-ms ${CHUNK_SIZE_MS}

Picovoice Cheetah Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset, ${LANGUAGE} with the target language, and ${PICOVOICE_ACCESS_KEY} with AccessKey obtained from Picovoice Console. By default, the Cheetah English model is used. For non-English languages models replace ${PICOVOICE_MODEL_PATH} with the path to a model file acquired from the Cheetah Github Repo.

python3 benchmark.py \
--engine PICOVOICE_CHEETAH \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--picovoice-access-key ${PICOVOICE_ACCESS_KEY} \
--picovoice-model-path ${PICOVOICE_MODEL_PATH}

Picovoice Leopard Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset, ${LANGUAGE} with the target language, and ${PICOVOICE_ACCESS_KEY} with AccessKey obtained from Picovoice Console. If benchmarking a non-English language, include --picovoice-model-path and replace ${PICOVOICE_MODEL_PATH} with the path to a model file acquired from the Leopard Github Repo.

python3 benchmark.py \
--engine PICOVOICE_LEOPARD \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--picovoice-access-key ${PICOVOICE_ACCESS_KEY} \
--picovoice-model-path ${PICOVOICE_MODEL_PATH}

Latency Benchmark Usage

In the following, we provide instructions for running the latency benchmark for each streaming engine. To run the benchmark, generate word timing alignment information for one of the supported datasets by following the instructions found here. Replace ${DATASET_PATH} with the path to the outputted folder from this process in the following commands.

Amazon Transcribe Instructions

Replace ${DATASET_FOLDER} with the path to an aligned dataset, ${LANGUAGE} with the target language, ${AWS_LOCATION} with the name of the AWS server and ${AWS_PROFILE} with the name of the AWS profile you wish to use.

python3 benchmark_latency.py \
--engine AMAZON_TRANSCRIBE_STREAMING \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--aws-profile ${AWS_PROFILE} \
--aws-location ${AWS_LOCATION}

Azure Speech-to-Text Instructions

Replace ${DATASET_FOLDER} with the path to an aligned dataset, ${LANGUAGE} with the target language, ${AZURE_SPEECH_KEY} and ${AZURE_SPEECH_LOCATION} information from your Azure account.

python3 benchmark_latency.py \
--engine AZURE_SPEECH_TO_TEXT_REAL_TIME \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--azure-speech-key ${AZURE_SPEECH_KEY} \
--azure-speech-location ${AZURE_SPEECH_LOCATION}

Google Speech-to-Text Instructions

Replace ${DATASET_FOLDER} with the path to an aligned dataset, ${LANGUAGE} with the target language, and ${GOOGLE_APPLICATION_CREDENTIALS} with credentials download from Google Cloud Platform.

python3 benchmark_latency.py \
--engine GOOGLE_SPEECH_TO_TEXT_STREAMING \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--google-application-credentials ${GOOGLE_APPLICATION_CREDENTIALS}

Whisper.cpp Streaming Instructions

Replace ${DATASET_FOLDER} with the path to an aligned dataset, ${LANGUAGE} with the target language, and ${WHISPER_CPP_MODEL} with the Whisper.cpp streaming model type (WHISPER_CPP_STREAMING_TINY, WHISPER_CPP_STREAMING_BASE, WHISPER_CPP_STREAMING_SMALL, WHISPER_CPP_STREAMING_MEDIUM, WHISPER_CPP_STREAMING_LARGE_V3 or WHISPER_CPP_STREAMING_LARGE_TURBO).

python3 benchmark_latency.py \
--engine ${WHISPER_CPP_MODEL} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE}

Moonshine Streaming Instructions

Replace ${DATASET_FOLDER} with the path to an aligned dataset and ${MOONSHINE_MODEL} with the Moonshine streaming model type (MOONSHINE_STREAMING_TINY, MOONSHINE_STREAMING_SMALL or MOONSHINE_STREAMING_MEDIUM). This engine only supports English.

python3 benchmark_latency.py \
--engine ${MOONSHINE_MODEL} \
--dataset-folder ${DATASET_FOLDER} \
--language EN

Vosk Streaming Instructions

Replace ${DATASET_FOLDER} with the path to an aligned dataset and ${VOSK_MODEL} with the Vosk streaming model type (VOSK_STREAMING_SMALL or VOSK_STREAMING_LARGE).

python3 benchmark_latency.py \
--engine ${VOSK_MODEL} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE}

Nemotron 3.5 ASR Streaming Instructions

Replace ${DATASET_FOLDER} with the path to an aligned dataset, ${LANGUAGE} with the target language, and ${CHUNK_SIZE_MS} with a supported chunk size: 80, 160, 320, 560 or 1120 (default 560).

python3 benchmark_latency.py \
--engine NEMOTRON_3_5_ASR_STREAMING \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--chunk-size-ms ${CHUNK_SIZE_MS}

Picovoice Cheetah Instructions

Replace ${DATASET_FOLDER} with the path to an aligned dataset, ${LANGUAGE} with the target language, and ${PICOVOICE_ACCESS_KEY} with an AccessKey obtained from Picovoice Console. By default, the Cheetah English model is used. For non-English languages models replace ${PICOVOICE_MODEL_PATH} with the path to a model file obtained from the Cheetah Github Repo.

python3 benchmark_latency.py \
--engine PICOVOICE_CHEETAH \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--picovoice-access-key ${PICOVOICE_ACCESS_KEY} \
--picovoice-model-path ${PICOVOICE_MODEL_PATH}

Results

English

Batch Engines Word Error Rate

EngineLibriSpeech test-cleanLibriSpeech test-otherTED-LIUMCommonVoiceAverage
Amazon Transcribe2.3%4.6%4.0%6.4%4.3%
Azure Speech-to-Text2.9%6.0%4.6%8.4%5.5%
Google Speech-to-Text5.3%10.5%5.5%14.3%8.9%
IBM Watson Speech-to-Text10.9%26.2%11.7%39.4%22.0%
Whisper Large V33.7%5.4%4.6%9.0%5.7%
Whisper Medium3.3%6.2%4.6%10.2%6.1%
Whisper Small3.3%7.2%4.8%12.7%7.0%
Whisper Base4.3%10.4%5.4%17.9%9.5%
Whisper Tiny5.9%13.8%6.6%24.4%12.7%
Picovoice Leopard5.1%11.1%6.4%16.1%9.7%

Streaming Engines Word Error Rate

EngineLibriSpeech test-cleanLibriSpeech test-otherTED-LIUMCommonVoiceAverage
Amazon Transcribe Streaming2.5%5.1%5.2%8.2%5.3%
Azure Speech-to-Text Real Time3.4%6.7%4.5%9.0%5.9%
Google Speech-to-Text Streaming5.3%10.6%5.5%14.4%9.0%
Nemotron 3.5 ASR Streaming3.4%7.8%4.9%15.0%7.8%
Whisper.cpp Streaming Tiny12.7%23.3%16.0%37.5%22.4%
Whisper.cpp Streaming Base11.9%19.9%14.2%33.2%19.8%
Vosk Small9.9%21.0%10.7%32.1%18.4%
Vosk Large5.4%12.7%6.6%21.4%11.5%
Moonshine Tiny11.8%28.7%12.5%42.4%23.9%
Moonshine Small7.0%15.0%6.9%24.8%13.4%
Moonshine Medium5.9%11.4%6.5%18.7%10.6%
Picovoice Cheetah3.3%7.9%5.1%14.4%7.7%

Streaming Engines Punctuation Error Rate

EngineCommonVoiceFleursVoxPopuliAverage
Amazon Transcribe Streaming8.1%27.4%23.5%19.7%
Azure Speech-to-Text Real Time6.2%21.5%28.6%18.8%
Google Speech-to-Text Streaming20.5%45.3%43.0%36.3%
Nemotron 3.5 ASR Streaming20.5%26.7%27.6%24.9%
Whisper.cpp Streaming Tiny41.2%57.9%62.1%53.7%
Whisper.cpp Streaming Base43.2%56.4%62.8%54.1%
Moonshine Tiny21.0%46.5%59.1%42.2%
Moonshine Small30.5%45.3%59.5%45.1%
Moonshine Medium32.3%46.1%55.4%44.6%
Picovoice Cheetah4.8%14.8%17.9%12.5%

Core-Hour & Model Size

To obtain these results, we ran the benchmark across the entire LibriSpeech test-clean dataset and recorded the processing time. The measurement is carried out on an Ubuntu 22.04 machine with AMD CPU (AMD Ryzen 9 5900X (12) @ 3.70GHz), 64 GB of RAM, and NVMe storage, using 10 cores simultaneously. We omit Whisper Large from this benchmark.

EngineCore-HoursModel Size / MB
Whisper Medium152.21457
Whisper Small98.8462
Whisper Base32.3139
Whisper Tiny15.873
Whisper.cpp Streaming Base166.8139
Whisper.cpp Streaming Tiny76.773
Vosk Large33.62733
Vosk Small11.768
Moonshine Streaming Tiny103.049
Moonshine Streaming Small222.0158
Moonshine Streaming Medium336.0290
Nemotron 3.5 ASR Streaming243.02210
Picovoice Leopard2.637
Picovoice Cheetah8.734

Word Emission Latency

To obtain these results, we used 100 randomly selected files from the LibriSpeech test-clean dataset.

EngineLatency (ms)
Azure Speech-to-Text Real-time520
Amazon Transcribe Streaming290
Google Speech-to-Text Streaming830
Nemotron 3.5 ASR Streaming450
Whisper.cpp Streaming Tiny1240
Whisper.cpp Streaming Base1240
Vosk Small920
Vosk Large2000
Moonshine Tiny780
Moonshine Small650
Moonshine Medium640
Picovoice Cheetah560

French

Batch Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechVoxPopuliAverage
Amazon Transcribe6.0%4.4%8.6%6.3%
Azure Speech-to-Text11.1%9.0%11.8%10.6%
Google Speech-to-Text14.3%14.2%15.1%14.5%
Whisper Large9.3%4.6%10.9%8.3%
Whisper Medium13.1%8.6%12.1%11.3%
Whisper Small19.2%13.5%15.3%16.0%
Whisper Base35.4%24.4%23.3%27.7%
Whisper Tiny49.8%36.2%32.1%39.4%
Picovoice Leopard15.9%19.2%17.5%17.5%

Streaming Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechVoxPopuliAverage
Amazon Transcribe Streaming9.7%7.7%10.7%9.4%
Azure Speech-to-Text Real Time11.5%8.9%13.1%11.2%
Google Speech-to-Text Streaming15.0%14.5%15.3%14.9%
Nemotron 3.5 ASR Streaming11.3%8.0%11.4%10.2%
Picovoice Cheetah10.6%7.5%11.1%9.7%

Streaming Engines Punctuation Error Rate

EngineCommonVoiceFleursVoxPopuliAverage
Amazon Transcribe Streaming8.1%20.2%23.7%17.3%
Azure Speech-to-Text Real Time7.6%20.1%31.2%19.6%
Google Speech-to-Text Streaming26.5%22.7%28.4%25.9%
Nemotron 3.5 ASR Streaming20.2%30.6%28.2%26.3%
Picovoice Cheetah5.2%17.2%30.4%17.6%

German

Batch Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechVoxPopuliAverage
Amazon Transcribe5.3%2.9%14.6%7.6%
Azure Speech-to-Text6.9%5.4%13.1%8.5%
Google Speech-to-Text9.2%13.9%17.2%13.4%
Whisper Large5.3%4.4%12.5%7.4%
Whisper Medium8.3%7.6%13.5%9.8%
Whisper Small13.8%11.2%16.2%13.7%
Whisper Base26.9%19.8%24.0%23.6%
Whisper Tiny39.5%28.6%33.0%33.7%
Picovoice Leopard8.2%11.6%23.6%14.5%

Streaming Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechVoxPopuliAverage
Amazon Transcribe Streaming6.1%6.5%11.6%8.1%
Azure Speech-to-Text Real Time6.4%5.1%13.4%8.3%
Google Speech-to-Text Streaming9.4%14.0%17.5%13.6%
Nemotron 3.5 ASR Streaming10.2%9.0%14.3%11.2%
Picovoice Cheetah7.3%7.6%13.3%9.4%

Streaming Engines Punctuation Error Rate

EngineCommonVoiceFleursVoxPopuliAverage
Amazon Transcribe Streaming3.6%23.4%20.1%15.7%
Azure Speech-to-Text Real Time5.7%29.3%28.6%21.2%
Google Speech-to-Text Streaming16.4%27.5%28.5%24.1%
Nemotron 3.5 ASR Streaming17.2%26.1%31.0%24.8%
Picovoice Cheetah2.1%24.9%25.1%17.4%

Italian

Batch Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechVoxPopuliAverage
Amazon Transcribe4.1%9.1%16.1%9.8%
Azure Speech-to-Text5.8%14.0%17.8%12.5%
Google Speech-to-Text5.5%19.6%18.7%14.6%
Whisper Large4.9%8.8%21.8%11.8%
Whisper Medium8.7%14.9%19.3%14.3%
Whisper Small15.4%20.6%22.7%19.6%
Whisper Base32.3%31.6%31.6%31.8%
Whisper Tiny48.1%43.3%43.5%45.0%
Picovoice Leopard13.0%27.7%22.2%21.0%

Streaming Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechVoxPopuliAverage
Amazon Transcribe Streaming4.9%10.8%20.7%12.1%
Azure Speech-to-Text Real Time5.9%14.2%19.4%13.2%
Google Speech-to-Text Streaming5.7%20.1%18.8%14.9%
Nemotron 3.5 ASR Streaming8.4%18.5%23.5%16.8%
Picovoice Cheetah7.7%13.2%17.7%12.9%

Streaming Engines Punctuation Error Rate

EngineCommonVoiceFleursVoxPopuliAverage
Amazon Transcribe Streaming4.2%27.7%34.7%22.2%
Azure Speech-to-Text Real Time6.1%28.6%41.6%25.4%
Google Speech-to-Text Streaming27.3%23.3%45.0%31.9%
Nemotron 3.5 ASR Streaming23.9%23.2%42.3%29.8%
Picovoice Cheetah2.6%25.0%47.4%25.0%

Spanish

Batch Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechVoxPopuliAverage
Amazon Transcribe3.9%3.3%8.7%5.3%
Azure Speech-to-Text6.3%5.8%9.4%7.2%
Google Speech-to-Text6.6%9.2%11.6%9.1%
Whisper Large4.0%2.9%9.7%5.5%
Whisper Medium6.2%4.8%9.7%6.9%
Whisper Small9.8%7.7%11.4%9.6%
Whisper Base20.2%13.0%15.3%16.2%
Whisper Tiny33.3%20.6%22.7%25.5%
Picovoice Leopard7.6%14.9%14.1%12.2%

Streaming Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechVoxPopuliAverage
Amazon Transcribe Streaming5.2%4.8%8.7%6.2%
Azure Speech-to-Text Real Time6.4%6.1%9.4%7.3%
Google Speech-to-Text Streaming6.6%9.2%11.6%9.1%
Nemotron 3.5 ASR Streaming7.2%5.4%8.5%7.0%
Picovoice Cheetah7.5%5.5%9.8%7.6%

Streaming Engines Punctuation Error Rate

EngineCommonVoiceFleursVoxPopuliAverage
Amazon Transcribe Streaming6.3%18.7%25.0%16.7%
Azure Speech-to-Text Real Time4.4%18.6%27.3%16.8%
Google Speech-to-Text Streaming58.7%45.0%41.9%48.5%
Nemotron 3.5 ASR Streaming19.2%20.0%32.0%23.7%
Picovoice Cheetah3.1%18.5%35.5%19.0%

Portuguese

For Amazon Transcribe, Azure Speech-to-Text, and Google Speech-to-Text, we report results with the language set to PT-BR, as this achieves better results compared to PT-PT across all engines.

Batch Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechAverage
Amazon Transcribe5.4%7.8%6.6%
Azure Speech-to-Text7.4%9.0%8.2%
Google Speech-to-Text8.8%14.2%11.5%
Whisper Large5.9%5.4%5.7%
Whisper Medium9.6%8.1%8.9%
Whisper Small15.6%13.0%14.3%
Whisper Base31.2%22.7%27.0%
Whisper Tiny47.7%34.6%41.2%
Picovoice Leopard17.1%20.0%18.6%

Streaming Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechAverage
Amazon Transcribe Streaming6.2%9.4%7.8%
Azure Speech-to-Text Real Time7.5%8.7%8.1%
Google Speech-to-Text Streaming9.0%14.0%11.5%
Nemotron 3.5 ASR Streaming10.2%8.3%9.3%
Picovoice Cheetah8.1%10.3%9.2%

Streaming Engines Punctuation Error Rate

EngineCommonVoiceFleursAverage
Amazon Transcribe Streaming10.0%28.8%19.4%
Azure Speech-to-Text Real Time13.6%28.2%20.9%
Google Speech-to-Text Streaming30.9%31.7%31.3%
Nemotron 3.5 ASR Streaming38.8%39.2%39.0%
Picovoice Cheetah7.7%24.4%16.1%

Korean

Streaming Engines Character Error Rate

EngineCommonVoiceZeroth KoreanPansoriAverage
Amazon Transcribe Streaming14.8%13.3%12.1%13.4%
Azure Speech-to-Text Real Time8.1%8.6%5.1%7.3%
Google Speech-to-Text Streaming32.0%33.7%13.5%26.4%
Vosk Small39.0%12.7%40.7%30.8%
Picovoice Cheetah7.0%3.7%6.5%5.7%

Streaming Engines Punctuation Error Rate

EngineCommonVoiceFleursAverage
Amazon Transcribe Streaming6.5%9.4%8.0%
Azure Speech-to-Text Real Time11.7%11.6%11.7%
Google Speech-to-Text Streaming12.1%9.3%10.7%
Picovoice Cheetah12.5%2.9%7.7%

Japanese

Streaming Engines Character Error Rate

EngineCommonVoiceJSUT BasicFleursAverage
Amazon Transcribe Streaming23.2%10.0%10.7%14.6%
Azure Speech-to-Text Real-time16.6%7.6%6.2%10.1%
Google Speech-to-Text Streaming20.1%9.3%8.6%12.7%
Vosk Streaming Large23.6%7.1%17.5%16.1%
Vosk Streaming Small31.1%11.0%21.4%21.2%
Picovoice Cheetah14.1%8.6%7.8%10.2%

Streaming Engines Punctuation Error Rate

EngineCommonVoiceFleursAverage
Amazon Transcribe Streaming20.7%5.5%13.1%
Azure Speech-to-Text Real-time23.7%20.0%21.9%
Google Speech-to-Text Streaming28.6%22.3%25.5%
Picovoice Cheetah26.3%2.6%14.5%
aws-transcribe
cheetah
deep-learning
deep-neural-networks
deepspeech
edge-ai
google-speech-to-text
mozilla-deepspeech
offline
picovoice
pocketsphinx
privacy
speech-recognition
speech-to-text
voice-recognition

Picovoice/speech-to-text-benchmark

speech to text benchmark framework

Python

698

28 commits

updated Oct 7, 2026

See the code

README

Speech-to-Text Benchmark

Made in Vancouver, Canada by Picovoice

This repo is a minimalist and extensible framework for benchmarking different speech-to-text engines.

Table of Contents

Data

Metrics

Word Error Rate

Word error rate (WER) is the ratio of edit distance between words in a reference transcript and the words in the output of the speech-to-text engine to the number of words in the reference transcript.

Character Error Rate

Character error rate (CER) is the ratio of edit distance between characters in a reference transcript and the characters in the output of the speech-to-text engine to the number of characters in the reference transcript. CER is reported for Korean and Japanese following industry standards.

Punctuation Error Rate

Punctuation Error Rate (PER) is the ratio of punctuation-specific errors between a reference transcript and the output of a speech-to-text engine to the number of punctuation-related operations in the reference transcript (more details in Section 3 of Meister et al.). We report PER results for periods (.) and question marks (?).

Core-Hour

The Core-Hour metric is used to evaluate the computational efficiency of the speech-to-text engine, indicating the number of CPU hours required to process one hundred hours of audio. A speech-to-text engine with lower Core-Hour is more computationally efficient. We omit this metric for cloud-based engines.

Word Emission Latency

Word emission latency is used to evaluate the responsiveness of streaming speech-to-text engines. It measures the average delay from the point a word has finished being spoken to when its transcription is emitted by the engine. We measure this metric only for streaming engines.

Model Size

The aggregate size of models (acoustic and language), in MB. We omit this metric for cloud-based engines.

Engines

Usage

This benchmark has been developed and tested on Ubuntu 22.04 with Python 3.12.

  • Install FFmpeg
  • Download datasets.
  • Install the requirements:
pip3 install -r requirements.txt

Benchmark Usage

In the following, we provide instructions for running the benchmark for each engine. The supported datasets are: COMMON_VOICE, LIBRI_SPEECH_TEST_CLEAN, LIBRI_SPEECH_TEST_OTHER, TED_LIUM, MLS, VOX_POPULI, FLEURS, ZEROTH_KOREAN, PANSORI and JSUT_BASIC. The supported languages are: EN, FR, DE, ES, IT, PT-BR, PT-PT, KO and JA.

To evaluate Punctuation Error Rate, use the --punctuation flag. Use --punctuation-set ${PUNCTUATION_SET} to select which punctuation marks to calculate PER against, where ${PUNCTUATION_SET} is one or more of ., ? and , (default .?).

Amazon Transcribe Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset, ${LANGUAGE} with the target language, ${AWS_LOCATION} with the name of the AWS server and ${AWS_PROFILE} with the name of the AWS profile you wish to use.

python3 benchmark.py \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--engine AMAZON_TRANSCRIBE \
--aws-profile ${AWS_PROFILE} \
--aws-location ${AWS_LOCATION}

Set --engine to AMAZON_TRANSCRIBE_STREAMING to use Amazon Transcribe in streaming mode.

Azure Speech-to-Text Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset, ${LANGUAGE} with the target language, ${AZURE_SPEECH_KEY} and ${AZURE_SPEECH_LOCATION} information from your Azure account.

python3 benchmark.py \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--engine AZURE_SPEECH_TO_TEXT \
--azure-speech-key ${AZURE_SPEECH_KEY} \
--azure-speech-location ${AZURE_SPEECH_LOCATION}

Set --engine to AZURE_SPEECH_TO_TEXT_REAL_TIME to use Azure Speech-to-text in streaming mode.

Google Speech-to-Text Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset, ${LANGUAGE} with the target language and ${GOOGLE_APPLICATION_CREDENTIALS} with credentials download from Google Cloud Platform.

python3 benchmark.py \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--engine GOOGLE_SPEECH_TO_TEXT \
--google-application-credentials ${GOOGLE_APPLICATION_CREDENTIALS}

Set --engine to GOOGLE_SPEECH_TO_TEXT_STREAMING to use Google Speech-to-text in streaming mode.

IBM Watson Speech-to-Text Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset and ${WATSON_SPEECH_TO_TEXT_API_KEY}/${${WATSON_SPEECH_TO_TEXT_URL}} with credentials from your IBM account. This engine only supports English.

python3 benchmark.py \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language EN \
--engine IBM_WATSON_SPEECH_TO_TEXT \
--watson-speech-to-text-api-key ${WATSON_SPEECH_TO_TEXT_API_KEY} \
--watson-speech-to-text-url ${WATSON_SPEECH_TO_TEXT_URL}

OpenAI Whisper Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset, ${LANGUAGE} with the target language and ${WHISPER_MODEL} with the whisper model type (WHISPER_TINY, WHISPER_BASE, WHISPER_SMALL, WHISPER_MEDIUM, WHISPER_LARGE, WHISPER_LARGE_V2, WHISPER_LARGE_V3 or WHISPER_LARGE_TURBO)

python3 benchmark.py \
--engine ${WHISPER_MODEL} \
--dataset ${DATASET} \
--language ${LANGUAGE} \
--dataset-folder ${DATASET_FOLDER} \

Whisper.cpp Streaming Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset, ${LANGUAGE} with the target language, and ${WHISPER_CPP_MODEL} with the Whisper.cpp streaming model type (WHISPER_CPP_STREAMING_TINY, WHISPER_CPP_STREAMING_BASE, WHISPER_CPP_STREAMING_SMALL, WHISPER_CPP_STREAMING_MEDIUM, WHISPER_CPP_STREAMING_LARGE_V3 or WHISPER_CPP_STREAMING_LARGE_TURBO).

python3 benchmark.py \
--engine ${WHISPER_CPP_MODEL} \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \

Moonshine Streaming Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset and ${MOONSHINE_MODEL} with the Moonshine streaming model type (MOONSHINE_STREAMING_TINY, MOONSHINE_STREAMING_SMALL or MOONSHINE_STREAMING_MEDIUM). This engine only supports English.

python3 benchmark.py \
--engine ${MOONSHINE_MODEL} \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language EN \

Vosk Streaming Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset and ${VOSK_MODEL} with the Vosk streaming model type (VOSK_STREAMING_SMALL or VOSK_STREAMING_LARGE). This engine only supports English.

python3 benchmark.py \
--engine ${VOSK_MODEL} \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language EN

Nemotron 3.5 ASR Streaming Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset, ${LANGUAGE} with the target language, and ${CHUNK_SIZE_MS} with a supported chunk size: 80, 160, 320, 560 or 1120 (default 560).

python3 benchmark.py \
--engine NEMOTRON_3_5_ASR_STREAMING \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--streaming-chunk-size-ms ${CHUNK_SIZE_MS}

Picovoice Cheetah Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset, ${LANGUAGE} with the target language, and ${PICOVOICE_ACCESS_KEY} with AccessKey obtained from Picovoice Console. By default, the Cheetah English model is used. For non-English languages models replace ${PICOVOICE_MODEL_PATH} with the path to a model file acquired from the Cheetah Github Repo.

python3 benchmark.py \
--engine PICOVOICE_CHEETAH \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--picovoice-access-key ${PICOVOICE_ACCESS_KEY} \
--picovoice-model-path ${PICOVOICE_MODEL_PATH}

Picovoice Leopard Instructions

Replace ${DATASET} with one of the supported datasets, ${DATASET_FOLDER} with the path to the dataset, ${LANGUAGE} with the target language, and ${PICOVOICE_ACCESS_KEY} with AccessKey obtained from Picovoice Console. If benchmarking a non-English language, include --picovoice-model-path and replace ${PICOVOICE_MODEL_PATH} with the path to a model file acquired from the Leopard Github Repo.

python3 benchmark.py \
--engine PICOVOICE_LEOPARD \
--dataset ${DATASET} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--picovoice-access-key ${PICOVOICE_ACCESS_KEY} \
--picovoice-model-path ${PICOVOICE_MODEL_PATH}

Latency Benchmark Usage

In the following, we provide instructions for running the latency benchmark for each streaming engine. To run the benchmark, generate word timing alignment information for one of the supported datasets by following the instructions found here. Replace ${DATASET_PATH} with the path to the outputted folder from this process in the following commands.

Amazon Transcribe Instructions

Replace ${DATASET_FOLDER} with the path to an aligned dataset, ${LANGUAGE} with the target language, ${AWS_LOCATION} with the name of the AWS server and ${AWS_PROFILE} with the name of the AWS profile you wish to use.

python3 benchmark_latency.py \
--engine AMAZON_TRANSCRIBE_STREAMING \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--aws-profile ${AWS_PROFILE} \
--aws-location ${AWS_LOCATION}

Azure Speech-to-Text Instructions

Replace ${DATASET_FOLDER} with the path to an aligned dataset, ${LANGUAGE} with the target language, ${AZURE_SPEECH_KEY} and ${AZURE_SPEECH_LOCATION} information from your Azure account.

python3 benchmark_latency.py \
--engine AZURE_SPEECH_TO_TEXT_REAL_TIME \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--azure-speech-key ${AZURE_SPEECH_KEY} \
--azure-speech-location ${AZURE_SPEECH_LOCATION}

Google Speech-to-Text Instructions

Replace ${DATASET_FOLDER} with the path to an aligned dataset, ${LANGUAGE} with the target language, and ${GOOGLE_APPLICATION_CREDENTIALS} with credentials download from Google Cloud Platform.

python3 benchmark_latency.py \
--engine GOOGLE_SPEECH_TO_TEXT_STREAMING \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--google-application-credentials ${GOOGLE_APPLICATION_CREDENTIALS}

Whisper.cpp Streaming Instructions

Replace ${DATASET_FOLDER} with the path to an aligned dataset, ${LANGUAGE} with the target language, and ${WHISPER_CPP_MODEL} with the Whisper.cpp streaming model type (WHISPER_CPP_STREAMING_TINY, WHISPER_CPP_STREAMING_BASE, WHISPER_CPP_STREAMING_SMALL, WHISPER_CPP_STREAMING_MEDIUM, WHISPER_CPP_STREAMING_LARGE_V3 or WHISPER_CPP_STREAMING_LARGE_TURBO).

python3 benchmark_latency.py \
--engine ${WHISPER_CPP_MODEL} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE}

Moonshine Streaming Instructions

Replace ${DATASET_FOLDER} with the path to an aligned dataset and ${MOONSHINE_MODEL} with the Moonshine streaming model type (MOONSHINE_STREAMING_TINY, MOONSHINE_STREAMING_SMALL or MOONSHINE_STREAMING_MEDIUM). This engine only supports English.

python3 benchmark_latency.py \
--engine ${MOONSHINE_MODEL} \
--dataset-folder ${DATASET_FOLDER} \
--language EN

Vosk Streaming Instructions

Replace ${DATASET_FOLDER} with the path to an aligned dataset and ${VOSK_MODEL} with the Vosk streaming model type (VOSK_STREAMING_SMALL or VOSK_STREAMING_LARGE).

python3 benchmark_latency.py \
--engine ${VOSK_MODEL} \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE}

Nemotron 3.5 ASR Streaming Instructions

Replace ${DATASET_FOLDER} with the path to an aligned dataset, ${LANGUAGE} with the target language, and ${CHUNK_SIZE_MS} with a supported chunk size: 80, 160, 320, 560 or 1120 (default 560).

python3 benchmark_latency.py \
--engine NEMOTRON_3_5_ASR_STREAMING \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--chunk-size-ms ${CHUNK_SIZE_MS}

Picovoice Cheetah Instructions

Replace ${DATASET_FOLDER} with the path to an aligned dataset, ${LANGUAGE} with the target language, and ${PICOVOICE_ACCESS_KEY} with an AccessKey obtained from Picovoice Console. By default, the Cheetah English model is used. For non-English languages models replace ${PICOVOICE_MODEL_PATH} with the path to a model file obtained from the Cheetah Github Repo.

python3 benchmark_latency.py \
--engine PICOVOICE_CHEETAH \
--dataset-folder ${DATASET_FOLDER} \
--language ${LANGUAGE} \
--picovoice-access-key ${PICOVOICE_ACCESS_KEY} \
--picovoice-model-path ${PICOVOICE_MODEL_PATH}

Results

English

Batch Engines Word Error Rate

EngineLibriSpeech test-cleanLibriSpeech test-otherTED-LIUMCommonVoiceAverage
Amazon Transcribe2.3%4.6%4.0%6.4%4.3%
Azure Speech-to-Text2.9%6.0%4.6%8.4%5.5%
Google Speech-to-Text5.3%10.5%5.5%14.3%8.9%
IBM Watson Speech-to-Text10.9%26.2%11.7%39.4%22.0%
Whisper Large V33.7%5.4%4.6%9.0%5.7%
Whisper Medium3.3%6.2%4.6%10.2%6.1%
Whisper Small3.3%7.2%4.8%12.7%7.0%
Whisper Base4.3%10.4%5.4%17.9%9.5%
Whisper Tiny5.9%13.8%6.6%24.4%12.7%
Picovoice Leopard5.1%11.1%6.4%16.1%9.7%

Streaming Engines Word Error Rate

EngineLibriSpeech test-cleanLibriSpeech test-otherTED-LIUMCommonVoiceAverage
Amazon Transcribe Streaming2.5%5.1%5.2%8.2%5.3%
Azure Speech-to-Text Real Time3.4%6.7%4.5%9.0%5.9%
Google Speech-to-Text Streaming5.3%10.6%5.5%14.4%9.0%
Nemotron 3.5 ASR Streaming3.4%7.8%4.9%15.0%7.8%
Whisper.cpp Streaming Tiny12.7%23.3%16.0%37.5%22.4%
Whisper.cpp Streaming Base11.9%19.9%14.2%33.2%19.8%
Vosk Small9.9%21.0%10.7%32.1%18.4%
Vosk Large5.4%12.7%6.6%21.4%11.5%
Moonshine Tiny11.8%28.7%12.5%42.4%23.9%
Moonshine Small7.0%15.0%6.9%24.8%13.4%
Moonshine Medium5.9%11.4%6.5%18.7%10.6%
Picovoice Cheetah3.3%7.9%5.1%14.4%7.7%

Streaming Engines Punctuation Error Rate

EngineCommonVoiceFleursVoxPopuliAverage
Amazon Transcribe Streaming8.1%27.4%23.5%19.7%
Azure Speech-to-Text Real Time6.2%21.5%28.6%18.8%
Google Speech-to-Text Streaming20.5%45.3%43.0%36.3%
Nemotron 3.5 ASR Streaming20.5%26.7%27.6%24.9%
Whisper.cpp Streaming Tiny41.2%57.9%62.1%53.7%
Whisper.cpp Streaming Base43.2%56.4%62.8%54.1%
Moonshine Tiny21.0%46.5%59.1%42.2%
Moonshine Small30.5%45.3%59.5%45.1%
Moonshine Medium32.3%46.1%55.4%44.6%
Picovoice Cheetah4.8%14.8%17.9%12.5%

Core-Hour & Model Size

To obtain these results, we ran the benchmark across the entire LibriSpeech test-clean dataset and recorded the processing time. The measurement is carried out on an Ubuntu 22.04 machine with AMD CPU (AMD Ryzen 9 5900X (12) @ 3.70GHz), 64 GB of RAM, and NVMe storage, using 10 cores simultaneously. We omit Whisper Large from this benchmark.

EngineCore-HoursModel Size / MB
Whisper Medium152.21457
Whisper Small98.8462
Whisper Base32.3139
Whisper Tiny15.873
Whisper.cpp Streaming Base166.8139
Whisper.cpp Streaming Tiny76.773
Vosk Large33.62733
Vosk Small11.768
Moonshine Streaming Tiny103.049
Moonshine Streaming Small222.0158
Moonshine Streaming Medium336.0290
Nemotron 3.5 ASR Streaming243.02210
Picovoice Leopard2.637
Picovoice Cheetah8.734

Word Emission Latency

To obtain these results, we used 100 randomly selected files from the LibriSpeech test-clean dataset.

EngineLatency (ms)
Azure Speech-to-Text Real-time520
Amazon Transcribe Streaming290
Google Speech-to-Text Streaming830
Nemotron 3.5 ASR Streaming450
Whisper.cpp Streaming Tiny1240
Whisper.cpp Streaming Base1240
Vosk Small920
Vosk Large2000
Moonshine Tiny780
Moonshine Small650
Moonshine Medium640
Picovoice Cheetah560

French

Batch Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechVoxPopuliAverage
Amazon Transcribe6.0%4.4%8.6%6.3%
Azure Speech-to-Text11.1%9.0%11.8%10.6%
Google Speech-to-Text14.3%14.2%15.1%14.5%
Whisper Large9.3%4.6%10.9%8.3%
Whisper Medium13.1%8.6%12.1%11.3%
Whisper Small19.2%13.5%15.3%16.0%
Whisper Base35.4%24.4%23.3%27.7%
Whisper Tiny49.8%36.2%32.1%39.4%
Picovoice Leopard15.9%19.2%17.5%17.5%

Streaming Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechVoxPopuliAverage
Amazon Transcribe Streaming9.7%7.7%10.7%9.4%
Azure Speech-to-Text Real Time11.5%8.9%13.1%11.2%
Google Speech-to-Text Streaming15.0%14.5%15.3%14.9%
Nemotron 3.5 ASR Streaming11.3%8.0%11.4%10.2%
Picovoice Cheetah10.6%7.5%11.1%9.7%

Streaming Engines Punctuation Error Rate

EngineCommonVoiceFleursVoxPopuliAverage
Amazon Transcribe Streaming8.1%20.2%23.7%17.3%
Azure Speech-to-Text Real Time7.6%20.1%31.2%19.6%
Google Speech-to-Text Streaming26.5%22.7%28.4%25.9%
Nemotron 3.5 ASR Streaming20.2%30.6%28.2%26.3%
Picovoice Cheetah5.2%17.2%30.4%17.6%

German

Batch Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechVoxPopuliAverage
Amazon Transcribe5.3%2.9%14.6%7.6%
Azure Speech-to-Text6.9%5.4%13.1%8.5%
Google Speech-to-Text9.2%13.9%17.2%13.4%
Whisper Large5.3%4.4%12.5%7.4%
Whisper Medium8.3%7.6%13.5%9.8%
Whisper Small13.8%11.2%16.2%13.7%
Whisper Base26.9%19.8%24.0%23.6%
Whisper Tiny39.5%28.6%33.0%33.7%
Picovoice Leopard8.2%11.6%23.6%14.5%

Streaming Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechVoxPopuliAverage
Amazon Transcribe Streaming6.1%6.5%11.6%8.1%
Azure Speech-to-Text Real Time6.4%5.1%13.4%8.3%
Google Speech-to-Text Streaming9.4%14.0%17.5%13.6%
Nemotron 3.5 ASR Streaming10.2%9.0%14.3%11.2%
Picovoice Cheetah7.3%7.6%13.3%9.4%

Streaming Engines Punctuation Error Rate

EngineCommonVoiceFleursVoxPopuliAverage
Amazon Transcribe Streaming3.6%23.4%20.1%15.7%
Azure Speech-to-Text Real Time5.7%29.3%28.6%21.2%
Google Speech-to-Text Streaming16.4%27.5%28.5%24.1%
Nemotron 3.5 ASR Streaming17.2%26.1%31.0%24.8%
Picovoice Cheetah2.1%24.9%25.1%17.4%

Italian

Batch Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechVoxPopuliAverage
Amazon Transcribe4.1%9.1%16.1%9.8%
Azure Speech-to-Text5.8%14.0%17.8%12.5%
Google Speech-to-Text5.5%19.6%18.7%14.6%
Whisper Large4.9%8.8%21.8%11.8%
Whisper Medium8.7%14.9%19.3%14.3%
Whisper Small15.4%20.6%22.7%19.6%
Whisper Base32.3%31.6%31.6%31.8%
Whisper Tiny48.1%43.3%43.5%45.0%
Picovoice Leopard13.0%27.7%22.2%21.0%

Streaming Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechVoxPopuliAverage
Amazon Transcribe Streaming4.9%10.8%20.7%12.1%
Azure Speech-to-Text Real Time5.9%14.2%19.4%13.2%
Google Speech-to-Text Streaming5.7%20.1%18.8%14.9%
Nemotron 3.5 ASR Streaming8.4%18.5%23.5%16.8%
Picovoice Cheetah7.7%13.2%17.7%12.9%

Streaming Engines Punctuation Error Rate

EngineCommonVoiceFleursVoxPopuliAverage
Amazon Transcribe Streaming4.2%27.7%34.7%22.2%
Azure Speech-to-Text Real Time6.1%28.6%41.6%25.4%
Google Speech-to-Text Streaming27.3%23.3%45.0%31.9%
Nemotron 3.5 ASR Streaming23.9%23.2%42.3%29.8%
Picovoice Cheetah2.6%25.0%47.4%25.0%

Spanish

Batch Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechVoxPopuliAverage
Amazon Transcribe3.9%3.3%8.7%5.3%
Azure Speech-to-Text6.3%5.8%9.4%7.2%
Google Speech-to-Text6.6%9.2%11.6%9.1%
Whisper Large4.0%2.9%9.7%5.5%
Whisper Medium6.2%4.8%9.7%6.9%
Whisper Small9.8%7.7%11.4%9.6%
Whisper Base20.2%13.0%15.3%16.2%
Whisper Tiny33.3%20.6%22.7%25.5%
Picovoice Leopard7.6%14.9%14.1%12.2%

Streaming Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechVoxPopuliAverage
Amazon Transcribe Streaming5.2%4.8%8.7%6.2%
Azure Speech-to-Text Real Time6.4%6.1%9.4%7.3%
Google Speech-to-Text Streaming6.6%9.2%11.6%9.1%
Nemotron 3.5 ASR Streaming7.2%5.4%8.5%7.0%
Picovoice Cheetah7.5%5.5%9.8%7.6%

Streaming Engines Punctuation Error Rate

EngineCommonVoiceFleursVoxPopuliAverage
Amazon Transcribe Streaming6.3%18.7%25.0%16.7%
Azure Speech-to-Text Real Time4.4%18.6%27.3%16.8%
Google Speech-to-Text Streaming58.7%45.0%41.9%48.5%
Nemotron 3.5 ASR Streaming19.2%20.0%32.0%23.7%
Picovoice Cheetah3.1%18.5%35.5%19.0%

Portuguese

For Amazon Transcribe, Azure Speech-to-Text, and Google Speech-to-Text, we report results with the language set to PT-BR, as this achieves better results compared to PT-PT across all engines.

Batch Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechAverage
Amazon Transcribe5.4%7.8%6.6%
Azure Speech-to-Text7.4%9.0%8.2%
Google Speech-to-Text8.8%14.2%11.5%
Whisper Large5.9%5.4%5.7%
Whisper Medium9.6%8.1%8.9%
Whisper Small15.6%13.0%14.3%
Whisper Base31.2%22.7%27.0%
Whisper Tiny47.7%34.6%41.2%
Picovoice Leopard17.1%20.0%18.6%

Streaming Engines Word Error Rate

EngineCommonVoiceMultilingual LibriSpeechAverage
Amazon Transcribe Streaming6.2%9.4%7.8%
Azure Speech-to-Text Real Time7.5%8.7%8.1%
Google Speech-to-Text Streaming9.0%14.0%11.5%
Nemotron 3.5 ASR Streaming10.2%8.3%9.3%
Picovoice Cheetah8.1%10.3%9.2%

Streaming Engines Punctuation Error Rate

EngineCommonVoiceFleursAverage
Amazon Transcribe Streaming10.0%28.8%19.4%
Azure Speech-to-Text Real Time13.6%28.2%20.9%
Google Speech-to-Text Streaming30.9%31.7%31.3%
Nemotron 3.5 ASR Streaming38.8%39.2%39.0%
Picovoice Cheetah7.7%24.4%16.1%

Korean

Streaming Engines Character Error Rate

EngineCommonVoiceZeroth KoreanPansoriAverage
Amazon Transcribe Streaming14.8%13.3%12.1%13.4%
Azure Speech-to-Text Real Time8.1%8.6%5.1%7.3%
Google Speech-to-Text Streaming32.0%33.7%13.5%26.4%
Vosk Small39.0%12.7%40.7%30.8%
Picovoice Cheetah7.0%3.7%6.5%5.7%

Streaming Engines Punctuation Error Rate

EngineCommonVoiceFleursAverage
Amazon Transcribe Streaming6.5%9.4%8.0%
Azure Speech-to-Text Real Time11.7%11.6%11.7%
Google Speech-to-Text Streaming12.1%9.3%10.7%
Picovoice Cheetah12.5%2.9%7.7%

Japanese

Streaming Engines Character Error Rate

EngineCommonVoiceJSUT BasicFleursAverage
Amazon Transcribe Streaming23.2%10.0%10.7%14.6%
Azure Speech-to-Text Real-time16.6%7.6%6.2%10.1%
Google Speech-to-Text Streaming20.1%9.3%8.6%12.7%
Vosk Streaming Large23.6%7.1%17.5%16.1%
Vosk Streaming Small31.1%11.0%21.4%21.2%
Picovoice Cheetah14.1%8.6%7.8%10.2%

Streaming Engines Punctuation Error Rate

EngineCommonVoiceFleursAverage
Amazon Transcribe Streaming20.7%5.5%13.1%
Azure Speech-to-Text Real-time23.7%20.0%21.9%
Google Speech-to-Text Streaming28.6%22.3%25.5%
Picovoice Cheetah26.3%2.6%14.5%
aws-transcribe
cheetah
deep-learning
deep-neural-networks
deepspeech
edge-ai
google-speech-to-text
mozilla-deepspeech
offline
picovoice
pocketsphinx
privacy
speech-recognition
speech-to-text
voice-recognition

Significant stargazers

Martin Habovštiak

398 followers · starred Mar 2019

OMAR.A

47 followers · starred Jan 2026

Paul-Louis NECH

139 followers · starred Sep 2019