from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.responses import JSONResponse, RedirectResponse from tempfile import NamedTemporaryFile from typing import List from transformers import pipeline # Specify the model name model_name = "openai/whisper-small" whisper_asr = pipeline( "automatic-speech-recognition", model = model_name, chunk_length_s = 30, device = "cpu" ) app = FastAPI() @app.post("/whisper/") async def handler(files: List[UploadFile] = File(...)): if not files: raise HTTPException(status_code=400, detail="No files were provided") # For each file, let's store the results in a list of dictionaries. results = [] for file in files: # Create a temporary file. with NamedTemporaryFile(delete=True) as temp: # Write the user's uploaded file to the temporary file. with open(temp.name, "wb") as temp_file: temp_file.write(file.file.read()) # Let's get the transcript of the temporary file. result = whisper_asr(temp.name, return_timestamps=False) # Now we can store the result object for this file. results.append({ 'filename': file.filename, 'transcript': result['text'], }) return JSONResponse(content={'results': results}) @app.get("/", response_class=RedirectResponse) async def redirect_to_docs(): return "/docs"