|
|
@@ -14,6 +14,9 @@ def env_bool(name: str, default: bool = False) -> bool:
|
|
|
|
|
|
LOG_LEVEL = os.getenv("WHISPER_LOG_LEVEL", "INFO").upper()
|
|
|
VAD_ENABLED = env_bool("WHISPER_VAD", True)
|
|
|
+MODEL_SIZE = str(os.getenv("MODEL_SIZE", "small").lower())
|
|
|
+MIN_AUDIO_SEC = float(os.getenv("MIN_AUDIO_SEC", "2.0"))
|
|
|
+MAX_AUDIO_SEC = float(os.getenv("MAX_AUDIO_SEC", "10.0"))
|
|
|
|
|
|
logging.basicConfig(
|
|
|
level=getattr(logging, LOG_LEVEL, logging.INFO),
|
|
|
@@ -33,11 +36,7 @@ app = FastAPI()
|
|
|
# =========================
|
|
|
# Whisper model (shared)
|
|
|
# =========================
|
|
|
-model = WhisperModel(
|
|
|
- "small",
|
|
|
- device="cuda",
|
|
|
- compute_type="float32" # GTX 1050 Ti compatible
|
|
|
-)
|
|
|
+model = WhisperModel(MODEL_SIZE, device="cuda", compute_type="float32")
|
|
|
|
|
|
# =========================
|
|
|
# REST API (Swagger / tests)
|
|
|
@@ -68,8 +67,6 @@ async def transcribe(file: UploadFile = File(...)):
|
|
|
# =========================
|
|
|
|
|
|
SAMPLE_RATE = 16000
|
|
|
-MIN_AUDIO_SEC = 0.5
|
|
|
-MAX_AUDIO_SEC = 10.0
|
|
|
|
|
|
@app.websocket("/ws/transcribe")
|
|
|
async def ws_transcribe(ws: WebSocket):
|
|
|
@@ -88,6 +85,12 @@ async def ws_transcribe(ws: WebSocket):
|
|
|
|
|
|
# PCM int16 → float32
|
|
|
pcm = np.frombuffer(data, dtype=np.int16).astype(np.float32) / 32768.0
|
|
|
+
|
|
|
+ # silence pur → on reset le buffer
|
|
|
+ if np.abs(pcm).mean() < 0.001:
|
|
|
+ audio_buffer.clear()
|
|
|
+ continue
|
|
|
+
|
|
|
audio_buffer.append(pcm)
|
|
|
|
|
|
audio_len = sum(len(chunk) for chunk in audio_buffer) / SAMPLE_RATE
|