master
Kar 2025-06-14 20:43:59 +05:30
commit 788b2ea705
5 changed files with 64 additions and 0 deletions

20
Dockerfile Normal file
View File

@ -0,0 +1,20 @@
FROM python:3.10-slim
RUN apt-get update && apt-get install -y \
build-essential \
ffmpeg \
curl \
&& rm -rf /var/lib/apt/lists/*
# Install Python dependencies
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy app and download model
COPY app ./app
COPY download-model.sh .
RUN chmod +x download-model.sh && ./download-model.sh
EXPOSE 4002
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "4002"]

19
app/main.py Normal file
View File

@ -0,0 +1,19 @@
from fastapi import FastAPI, File, UploadFile
import os
import shutil
from whispercpp import Whisper
app = FastAPI()
model_path = "./app/model/ggml-base.en.bin"
whisper = Whisper(model_path)
@app.post("/transcribe")
async def transcribe_audio(audio: UploadFile = File(...)):
temp_file = f"temp_{audio.filename}"
with open(temp_file, "wb") as buffer:
shutil.copyfileobj(audio.file, buffer)
text = whisper.transcribe(temp_file)
os.remove(temp_file)
return {"text": text}

14
download-model.sh Executable file
View File

@ -0,0 +1,14 @@
#!/bin/bash
mkdir -p app/model
cd app/model
# You can choose other sizes too: tiny.en, base.en, etc.
MODEL_NAME="ggml-base.en.bin"
MODEL_URL="https://huggingface.co/ggerganov/whisper.cpp/resolve/main/$MODEL_NAME"
if [ ! -f "$MODEL_NAME" ]; then
echo "Downloading $MODEL_NAME..."
curl -L -o $MODEL_NAME $MODEL_URL
else
echo "$MODEL_NAME already exists."
fi

7
files.cli Normal file
View File

@ -0,0 +1,7 @@
whisper_cpp_api/
├── app/
│ ├── main.py
│ └── model/
├── Dockerfile
├── requirements.txt
└── download-model.sh

4
requirements.txt Normal file
View File

@ -0,0 +1,4 @@
fastapi
uvicorn
python-multipart
whispercpp