File size: 5,137 Bytes
e954652
 
 
 
 
 
 
 
 
 
 
b5daf8c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bee8f8a
b5daf8c
 
 
 
 
 
 
 
 
 
1f2f99c
b5daf8c
 
 
 
 
 
 
 
 
 
 
 
bee8f8a
b5daf8c
bee8f8a
e954652
 
bee8f8a
1f705ff
 
3d7c8ba
 
 
 
1f705ff
 
 
bee8f8a
 
1f705ff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bee8f8a
e954652
 
 
 
bee8f8a
e954652
 
bee8f8a
e954652
 
2354d1a
e954652
 
 
 
2354d1a
e954652
 
 
 
 
caa3d15
 
e954652
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1f705ff
 
 
 
 
 
 
 
27f9a84
e9d0e04
27f9a84
1f705ff
e954652
1f705ff
e954652
 
bee8f8a
7b2b1cd
 
 
bee8f8a
821f65e
e954652
 
7b2b1cd
 
 
1f705ff
e954652
 
7b2b1cd
 
 
6842c71
e954652
caa3d15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
import streamlit as st
import datetime
from transformers import pipeline
import gradio as gr

import tempfile
from typing import Optional
import numpy as np
from TTS.utils.manage import ModelManager
from TTS.utils.synthesizer import Synthesizer

# PersistDataset -----
import os
import csv
import gradio as gr
from gradio import inputs, outputs
import huggingface_hub
from huggingface_hub import Repository, hf_hub_download, upload_file
from datetime import datetime

# created new dataset as awacke1/MindfulStory.csv
DATASET_REPO_URL = "https://huggingface.co/datasets/awacke1/MindfulStory.csv"
DATASET_REPO_ID = "awacke1/MindfulStory.csv"
DATA_FILENAME = "MindfulStory.csv"
DATA_FILE = os.path.join("data", DATA_FILENAME)
HF_TOKEN = os.environ.get("HF_TOKEN")

# Download dataset repo using hub download
try:
    hf_hub_download(
        repo_id=DATASET_REPO_ID,
        filename=DATA_FILENAME,
        cache_dir=DATA_DIRNAME,
        force_filename=DATA_FILENAME
    )
except:
    print("file not found")
    
def AIMemory(name: str, message: str):
    if name and message:
        with open(DATA_FILE, "a") as csvfile:
            writer = csv.DictWriter(csvfile, fieldnames=["name", "message", "time"])
            writer.writerow({"name": name, "message": message, "time": str(datetime.now())})
        commit_url = repo.push_to_hub()
    return {"name": name, "message": message, "time": str(datetime.now())}

with open('Mindfulness.txt', 'r') as file:
        context = file.read()
   
# Set up cloned dataset from repo for operations
repo = Repository( local_dir="data", clone_from=DATASET_REPO_URL, use_auth_token=HF_TOKEN)

# set up ASR
asr = pipeline("automatic-speech-recognition", "facebook/wav2vec2-base-960h")

# set up TTS
MODEL_NAMES = [
    "en/ljspeech/tacotron2-DDC",
    "en/ljspeech/glow-tts",
    "en/ljspeech/speedy-speech-wn",
    "en/ljspeech/vits",
    "en/sam/tacotron-DDC",
    "fr/mai/tacotron2-DDC",
    "de/thorsten/tacotron2-DCA",
]

# Use Model Manager to load vocoders
MODELS = {}
manager = ModelManager()
for MODEL_NAME in MODEL_NAMES:
    print(f"downloading {MODEL_NAME}")
    model_path, config_path, model_item = manager.download_model(f"tts_models/{MODEL_NAME}")
    vocoder_name: Optional[str] = model_item["default_vocoder"]
    vocoder_path = None
    vocoder_config_path = None
    if vocoder_name is not None:
        vocoder_path, vocoder_config_path, _ = manager.download_model(vocoder_name)

    synthesizer = Synthesizer(
        model_path, config_path, None, vocoder_path, vocoder_config_path,
    )
    MODELS[MODEL_NAME] = synthesizer

# transcribe
def transcribe(audio):
    text = asr(audio)["text"]
    return text

#text classifier
classifier = pipeline("text-classification")


def speech_to_text(speech):
    text = asr(speech)["text"]
    #rMem = AIMemory("STT", text) 
    return text

def text_to_sentiment(text):
    sentiment = classifier(text)[0]["label"]
    #rMem = AIMemory(text, sentiment) 
    return sentiment 

def upsert(text):
    date_time =str(datetime.datetime.today())
    doc_ref = db.collection('Text2SpeechSentimentSave').document(date_time)
    doc_ref.set({u'firefield': 'Recognize Speech', u'first': 'https://huggingface.co/spaces/awacke1/TTS-STT-Blocks/', u'last': text, u'born': date_time,})
    saved = select('TTS-STT', date_time)
    return saved
      
def select(collection, document):
    doc_ref = db.collection(collection).document(document)
    doc = doc_ref.get()
    docid = ("The id is: ", doc.id)
    contents = ("The contents are: ", doc.to_dict())
    return contents
          
def selectall(text):
    docs = db.collection('Text2SpeechSentimentSave').stream()
    doclist=''
    for doc in docs:
        r=(f'{doc.id} => {doc.to_dict()}')
        doclist += r
    return doclist 
    
def tts(text: str, model_name: str):
    print(text, model_name)
    synthesizer = MODELS.get(model_name, None)
    if synthesizer is None:
        raise NameError("model not found")
    wavs = synthesizer.tts(text)
    with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as fp:
        synthesizer.save_wav(wavs, fp)
        
        #rMem = AIMemory("TTS", text + model_name) 
    
        return fp.name

demo = gr.Blocks()
with demo:
    audio_file = gr.inputs.Audio(source="microphone", type="filepath")
    text = gr.Textbox(label="Speech to Text")
    #label = gr.Label()
    #saved = gr.Textbox(label="Saved")
    #savedAll = gr.Textbox(label="SavedAll")
    TTSchoice = gr.inputs.Radio( label="Pick a Text to Speech Model", choices=MODEL_NAMES,   )
    audio = gr.Audio(label="Output", interactive=False)
    
    b1 = gr.Button("Recognize Speech")
    #b2 = gr.Button("Classify Sentiment")
    #b3 = gr.Button("Save Speech to Text")
    #b4 = gr.Button("Retrieve All")
    b5 = gr.Button("Read It Back Aloud")

    b1.click(speech_to_text, inputs=audio_file, outputs=text)
    #b2.click(text_to_sentiment, inputs=text, outputs=label)
    #b3.click(upsert, inputs=text, outputs=saved)
    #b4.click(selectall, inputs=text, outputs=savedAll)
    b5.click(tts,  inputs=[text,TTSchoice], outputs=audio)
    
demo.launch(share=True)