Spaces:
Running
Running
import firebase_admin | |
from firebase_admin import credentials | |
from firebase_admin import firestore | |
import io | |
from fastapi import FastAPI, File, UploadFile | |
from werkzeug.utils import secure_filename | |
import speech_recognition as sr | |
import subprocess | |
import os | |
import requests | |
import random | |
import pandas as pd | |
from pydub import AudioSegment | |
from datetime import datetime | |
from datetime import date | |
import numpy as np | |
from sklearn.ensemble import RandomForestRegressor | |
import shutil | |
import json | |
from transformers import AutoModelForQuestionAnswering, AutoTokenizer, pipeline | |
from pydantic import BaseModel | |
from typing import Annotated | |
from transformers import BertTokenizerFast, EncoderDecoderModel | |
import torch | |
import random | |
import string | |
import time | |
from fastapi import Form | |
class Query(BaseModel): | |
text: str | |
code:str | |
# device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') | |
# tokenizer = BertTokenizerFast.from_pretrained('mrm8488/bert-small2bert-small-finetuned-cnn_daily_mail-summarization') | |
# model = EncoderDecoderModel.from_pretrained('mrm8488/bert-small2bert-small-finetuned-cnn_daily_mail-summarization').to(device) | |
from fairseq.checkpoint_utils import load_model_ensemble_and_task_from_hf_hub | |
from fairseq.models.text_to_speech.hub_interface import TTSHubInterface | |
import IPython.display as ipd | |
models, cfg, task = load_model_ensemble_and_task_from_hf_hub( | |
"facebook/fastspeech2-en-ljspeech", | |
# 'facebook/fastspeech2-en-200_speaker-cv4', | |
arg_overrides={"vocoder": "hifigan", "fp16": False} | |
) | |
model = models[0] | |
TTSHubInterface.update_cfg_with_data_cfg(cfg, task.data_cfg) | |
generator = task.build_generator([model], cfg) | |
from fastapi import FastAPI, Request, Depends, UploadFile, File | |
from fastapi.exceptions import HTTPException | |
from fastapi.middleware.cors import CORSMiddleware | |
from fastapi.responses import JSONResponse | |
app = FastAPI() | |
app.add_middleware( | |
CORSMiddleware, | |
allow_origins=['*'], | |
allow_credentials=True, | |
allow_methods=['*'], | |
allow_headers=['*'], | |
) | |
# cred = credentials.Certificate('key.json') | |
# app1 = firebase_admin.initialize_app(cred) | |
# db = firestore.client() | |
# data_frame = pd.read_csv('data.csv') | |
async def startup_event(): | |
print("on startup") | |
audio_space="https://audiospace-1-u9912847.deta.app/upload" | |
# @app.post("/code") | |
# async def get_code(request: Request): | |
# data = await request.form() | |
# code = data.get("code") | |
# global audio_space | |
# print("code ="+code) | |
# audio_space= audio_space+code | |
import threading | |
async def get_answer(q: Query ): | |
text = q.text | |
code= q.code | |
N = 20 | |
res = ''.join(random.choices(string.ascii_uppercase + | |
string.digits, k=N)) | |
res= res+ str(time.time()) | |
filename= res | |
t = threading.Thread(target=do_ML, args=(filename,text,code)) | |
t.start() | |
return JSONResponse({"id": filename}) | |
return "hello" | |
import requests | |
import io | |
import torch | |
from scipy.io import wavfile | |
import soundfile as sf | |
import wave | |
import audioop | |
import io | |
def do_ML(filename:str,text:str,code:str): | |
sample = TTSHubInterface.get_model_input(task, text) | |
wav, rate = TTSHubInterface.get_prediction(task, model, generator, sample) | |
def compress_audio_wav_bytes(wav_bytes, output_format): | |
# Load the WAV data from bytes | |
audio_data, sample_rate = sf.read((wav_bytes)) | |
# Compress and save the audio data with the specified output format | |
output_bytes = io.BytesIO() | |
sf.write(output_bytes, audio_data, sample_rate, format=output_format) | |
# Retrieve the compressed audio data as bytes | |
compressed_bytes = output_bytes.getvalue() | |
return compressed_bytes | |
wav_bytes = io.BytesIO() | |
# Write the audio data to the byte stream | |
sf.write(wav_bytes, wav.numpy(), rate, format='WAV', subtype='PCM_16') | |
# Set the position of the byte stream to the beginning | |
wav_bytes.seek(0) | |
format = 'flac' # Specify the output format ('flac', 'mp3', etc.) | |
wav_bytes = compress_audio_wav_bytes(wav_bytes, format) | |
files = {'file': wav_bytes} | |
# global audio_space | |
url = code | |
data = {"filename": filename} | |
response = requests.post(url, files=files,data= data) | |
print(response.text) | |
if response.status_code == 200: | |
print("File uploaded successfully.") | |
# Handle the response as needed | |
else: | |
print("File upload failed.") | |