|
|
from fastapi import FastAPI |
|
|
from fastapi.responses import StreamingResponse |
|
|
from transformers import AutoTokenizer, VitsModel |
|
|
import torch |
|
|
import soundfile as sf |
|
|
import io |
|
|
|
|
|
app = FastAPI() |
|
|
|
|
|
|
|
|
tokenizer = AutoTokenizer.from_pretrained("facebook/mms-tts-ara") |
|
|
model = VitsModel.from_pretrained("facebook/mms-tts-ara") |
|
|
|
|
|
@app.post("/tts") |
|
|
async def tts_endpoint(text: str): |
|
|
""" |
|
|
تستقبل نص عربي وترجع ملف صوت WAV |
|
|
""" |
|
|
inputs = tokenizer(text, return_tensors="pt") |
|
|
|
|
|
with torch.no_grad(): |
|
|
output = model(**inputs).waveform |
|
|
|
|
|
audio = output.squeeze().cpu().numpy() |
|
|
|
|
|
buffer = io.BytesIO() |
|
|
sf.write(buffer, audio, 16000, format="WAV") |
|
|
buffer.seek(0) |
|
|
|
|
|
return StreamingResponse(buffer, media_type="audio/wav") |
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
import uvicorn |
|
|
uvicorn.run(app, host="0.0.0.0", port=7860) |
|
|
|