Speech Recognition on Your Own Machine with Whisper

OpenAI’s Whisper models are open-weight, genuinely accurate, and light enough to run comfortably on a CPU for shorter clips — no cloud API, no per-minute cost, and no audio ever leaving your machine.

The Fastest Path: faster-whisper

pip install faster-whisper
from faster_whisper import WhisperModel

# "base" runs comfortably on CPU; "large-v3" needs a GPU for reasonable speed
model = WhisperModel("base", device="cpu", compute_type="int8")

segments, info = model.transcribe("meeting.mp3", beam_size=5)

print(f"Detected language: {info.language}")
for segment in segments:
    print(f"[{segment.start:.1f}s -> {segment.end:.1f}s] {segment.text}")

Model Size Trade-offs

tiny    ~75MB   fastest, noticeably less accurate
base    ~145MB  good balance for CPU use
small   ~500MB  solid accuracy, still CPU-usable
medium  ~1.5GB  needs a decent GPU for real-time speed
large-v3 ~3GB   best accuracy, GPU strongly recommended

Real-Time Transcription from a Microphone

import sounddevice as sd
import numpy as np
from faster_whisper import WhisperModel

model = WhisperModel("base", device="cpu", compute_type="int8")

def callback(indata, frames, time, status):
    audio = np.squeeze(indata)
    segments, _ = model.transcribe(audio, language="en")
    for seg in segments:
        print(seg.text, end=" ", flush=True)

with sd.InputStream(callback=callback, channels=1, samplerate=16000, blocksize=16000*5):
    print("Listening... Ctrl+C to stop")
    while True:
        pass

Where This Is Genuinely Useful

Transcribing meetings and interviews without sending recordings to a third party, building accessibility features into your own tools, and subtitle generation for personal video projects — anywhere the privacy or cost of a cloud transcription API is a real concern rather than a hypothetical one.