CoolFace
Apppublic

sanjitaa/TranslationFastAPI

sourceHugging Facemitupdated 3y agoView on Hugging Face
0likes
main.py82 linesDownload Raw Back to root
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