File size: 1,419 Bytes
2528190 e8d2326 e011168 2528190 e8d2326 2528190 e8d2326 2528190 e8d2326 e011168 2528190 e8d2326 e011168 2528190 e8d2326 e011168 2528190 e011168 e8d2326 e011168 e8d2326 e011168 e8d2326 2528190 e8d2326 2528190 e8d2326 2528190 e011168 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
import os
import time
import json
import tempfile
import threading
from typing import Optional
from datetime import datetime, timezone
import httpx
import whisper
import nltk
from nltk.tokenize import sent_tokenize
from fastapi import FastAPI, UploadFile, File, Form, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from transformers import pipeline
# ---------------- Fix Whisper cache issue ----------------
os.environ["XDG_CACHE_HOME"] = "/tmp/.cache"
# ---------------- Config ----------------
UPLOAD_DIR = "uploads"
os.makedirs(UPLOAD_DIR, exist_ok=True)
# Initialize FastAPI
app = FastAPI()
# Allow CORS for all origins
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Load Whisper model (small for speed)
model = whisper.load_model("small")
@app.post("/transcribe/")
async def transcribe_audio(file: UploadFile = File(...)):
try:
# Save uploaded file temporarily
file_path = os.path.join(UPLOAD_DIR, file.filename)
with open(file_path, "wb") as f:
f.write(await file.read())
# Transcribe with Whisper
result = model.transcribe(file_path)
# Return text output
return {"filename": file.filename, "transcription": result["text"]}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
|