Sprache-zu-Text mit OpenAI Whisper auf dem Raspberry Pi 5

Sprach-zu-Text mit OpenAI Whisper auf dem Raspberry Pi 5

1. Einleitung

Sprach-zu-Text (Speech-to-Text, STT) wandelt gesprochene Sprache in geschriebenen Text um und findet immer breiter Anwendung: von virtuellen Assistenten über automatische Untertitelung bis hin zu Smart-Home-Steuerung. In diesem Beitrag zeigen wir, wie Sie auf einem Raspberry Pi 5 mithilfe von OpenAIs Whisper eine lokale STT-Lösung aufsetzen und ausführen.

2. Was ist OpenAI Whisper?

OpenAI Whisper ist ein freies, neuronales Modell für automatische Spracherkennung (ASR). Es bietet:

  • Mehrsprachige Erkennung
  • Hohe Genauigkeit selbst bei Hintergrundgeräuschen
  • Offline-Verarbeitung – ideal für Edge-Geräte wie Raspberry Pi

3. Voraussetzungen

Bevor Sie starten, benötigen Sie:

  • Raspberry Pi 5 mit aktuell installiertem Raspberry Pi OS
  • USB-Mikrofon, das am Pi als ALSA-Gerät erkannt wird
  • Python 3 (>= 3.7) und pip
  • Internetverbindung zum Installieren der Python-Pakete

4. Installation

System-Abhängigkeiten installieren

sudo apt update
sudo apt install -y python3-pip libsndfile1

Python-Pakete installieren

pip3 install git+https://github.com/openai/whisper.git \
sounddevice soundfile numpy

5. Python-Skript Beispiel

Speichern Sie den folgenden Code beispielsweise als whisper_record.py:

#!/usr/bin/env python3
import argparse
import tempfile

import numpy as np
import sounddevice as sd
import soundfile as sf
import whisper


def list_devices():
    """Print a list of available input devices with their indices."""
    print("Available audio input devices:")
    for idx, dev in enumerate(sd.query_devices()):
        if dev['max_input_channels'] > 0:
            print(f"  [{idx}] {dev['name']} (default_samplerate: {dev['default_samplerate']:.0f})")


def record_audio(duration: float, device: int, samplerate: float) -> np.ndarray:
    """
    Records `duration` seconds of audio from the given device at its native samplerate.
    Returns a mono float32 NumPy array.
    """
    sd.default.device = device
    sd.default.samplerate = samplerate
    sd.default.channels = 1
    print(f"Recording {duration:.1f}s from device #{device} @ {samplerate:.0f} Hz...")
    audio = sd.rec(int(duration * samplerate), dtype='float32')
    sd.wait()
    return np.squeeze(audio)


def save_wav(audio: np.ndarray, samplerate: int, path: str):
    """Save the NumPy array to a WAV file."""
    sf.write(path, audio, samplerate)
    print(f"Audio written to {path}")


def transcribe(model_name: str, audio_path: str, language: str = None) -> str:
    """Load Whisper model and transcribe the WAV on disk."""
    print(f"Loading Whisper model '{model_name}'...")
    model = whisper.load_model(model_name)
    print("Transcribing...")
    opts = {}
    if language:
        opts["language"] = language
        opts["task"] = "transcribe"
    result = model.transcribe(audio_path, **opts)
    return result["text"].strip()


def main():
    parser = argparse.ArgumentParser(
        description="Record from a USB mic and transcribe locally with Whisper"
    )
    parser.add_argument("--list-devices", action="store_true",
                        help="List audio input devices and exit")
    parser.add_argument("--device", type=int, default=None,
                        help="ALSA device index (see --list-devices)")
    parser.add_argument("--duration", type=float, default=5.0,
                        help="Record length in seconds")
    parser.add_argument("--model", default="tiny",
                        help="Whisper model (tiny, base, small, medium, large)")
    parser.add_argument("--lang", default=None,
                        help="Force language code (e.g. 'en'), skips detection")
    args = parser.parse_args()

    if args.list_devices:
        list_devices()
        return

    if args.device is None:
        device = sd.default.device[0]
        print(f"No device specified; using default input device #{device}")
    else:
        device = args.device

    info = sd.query_devices(device, 'input')
    samplerate = info['default_samplerate']

    audio = record_audio(duration=args.duration, device=device, samplerate=samplerate)

    with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as tmp:
        save_wav(audio, samplerate=int(samplerate), path=tmp.name)
        text = transcribe(model_name=args.model, audio_path=tmp.name, language=args.lang)

    print("\nTranscription Result:")
    print("="*40)
    print(text)
    print("="*40)


if __name__ == "__main__":
    main()

6. Nutzung

So verwenden Sie das Skript:

1 - Mache das Skript ausführbar:

sudo chmod +x whisper_record.py

2 - Geräte auflisten:

./whisper_record.py --list-devices

3 - Aufnahme und Transkription starten (z. B. Gerät 2, 8 Sekunden, Modell small, Sprache en):

./whisper_record.py --device 2 --duration 8 --model small --lang en

4 - Das Skript zeigt nach Abschluss die erkannte Sprache als Text an.

7. Mehr KI Projekte

Mit diesem Setup verwandeln Sie Ihren Raspberry Pi 5 in eine lokale Speech-to-Text-Station – ganz ohne Cloud-Verbindung. OpenAI Whisper liefert zuverlässige Ergebnisse auch bei einfachen USB-Mikrofonen und lässt sich dank Python und pip unkompliziert installieren und nutzen.

Wir von pi3g, dem Team hinter buyzero.de, stehen Ihnen als erfahrene Partner im AI-Consulting zur Seite. Ob Konzeptentwicklung, Prototyping oder die Produktion skalierbarer KI-Hardwarelösungen – wir unterstützen Sie bei jedem Schritt Ihrer KI-Projekte. Dank unserer langjährigen Expertise in den Bereichen Künstliche Intelligenz und spezialisierter Embedded-Hardware realisieren wir maßgeschneiderte Lösungen, die genau auf Ihre Anforderungen zugeschnitten sind.

Jetzt Consulting vereinbaren!


AiAsrKiOpenaiPi 5Raspberry piRaspberry pi 5Speech recognitionSpeech to textWhisper

Kommentar hinterlassen

Alle Kommentare werden von einem Moderator vor der Veröffentlichung überprüft