sanjitaa/TranslationFastAPI
0
1#uvicorn app789:app --host 0.0.0.0 --port 8000 --reload2 3from fastapi import FastAPI, UploadFile, Form4from fastapi.responses import HTMLResponse5import librosa6import io7import json8import requests9import textwrap310 11import whisper12model = whisper.load_model("medium")13 14app = FastAPI()15 16# from faster_whisper import WhisperModel17# model_size = "medium"18# ts_model = WhisperModel(model_size, device="cpu", compute_type="int8")19 20@app.get("/")21def read_root():22 html_form = """23 <html>24 <body>25 <h2>Audio Transcription</h2>26 <form action="/transcribe" method="post" enctype="multipart/form-data">27 <label for="audio_file">Upload an audio file (MP3 or WAV):</label>28 <input type="file" id="audio_file" name="audio_file" accept=".mp3, .wav" required><br><br>29 <label for="language_select">Select Target Language:</label>30 <select id="language_select" name="tgt_lang">31 <option value="fr_XX">French</option>32 <option value="es_XX">Spanish</option>33 <option value="de_DE">German</option>34 <option value="hi_IN">Hindi</option>35 <option value="en_XX">English</option>36 <option value="ja_XX">Japanese</option>37 <option value="ne_NP">Nepali</option>38 <option value="zh_CN">Chinese</option>39 <option value="pt_XX">Portuguese</option>40 <!-- Add more language options here -->41 </select><br><br>42 <input type="submit" value="Transcribe">43 </form>44 </body>45 </html>46 """47 return HTMLResponse(content=html_form, status_code=200)48 49@app.post("/transcribe")50async def transcribe_audio(audio_file: UploadFile, tgt_lang: str = Form(...)):51 audio_data = await audio_file.read()52 53 audio_data, _ = librosa.load(io.BytesIO(audio_data), sr=16000)54 result = model.transcribe(audio_data, task = "translate")55 transcribed_text = result['text']56 57 if tgt_lang == 'en_XX':58 return transcribed_text59 60 else:61 chunks = textwrap3.wrap(transcribed_text, 100)62 #segments, _ = ts_model.transcribe(audio_data, task="translate")63 # lst = []64 # for segment in segments:65 # lst.append(segment.text)66 67 headers = {"Authorization": f"Bearer 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"}68 API_URL = "https://api-inference.huggingface.co/pipeline/translation/facebook/mbart-large-50-many-to-many-mmt"69 70 def query(payload):71 data = json.dumps(payload)72 response = requests.request("POST", API_URL, headers=headers, data=data)73 return json.loads(response.content.decode("utf-8"))74 75 translated_text = ''76 77 for i in chunks:78 result = query({"inputs": i, "parameters": {"src_lang": "en_XX", "tgt_lang": tgt_lang}})79 translated_text = translated_text + result[0]['translation_text']80 81 return translated_text82 