jaccard, temp, etc.
This commit is contained in:
parent
c33d577bb6
commit
b2cc817911
@ -7,8 +7,9 @@ import examine.metric
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
UTTERANCE_LEN = 16 #<--------------- these should be in config
|
||||
NUM_METRIC_GEN = 50
|
||||
NUM_METRIC_GEN = 75
|
||||
NUM_SAMPLE_VOICES = 3
|
||||
RANDOM_SEED_TIMER_MIN = 2
|
||||
broadcast = None
|
||||
metric = None
|
||||
exit = False
|
||||
@ -52,7 +53,11 @@ def broadcast_utterance(v, utterance):
|
||||
temp = format(v.temp, '.2f')
|
||||
text = f"{v.name.upper()}: {temp}\n"
|
||||
else:
|
||||
text = f"{v.name.upper()}:\n"
|
||||
text = f""
|
||||
|
||||
# Send all text to server to calculate bounds in advance
|
||||
broadcast.utterance(utterance, v.calculate)
|
||||
|
||||
|
||||
broadcast.utterance(text, v.channel)
|
||||
terminal_utterance(text)
|
||||
@ -113,7 +118,7 @@ def main() -> int:
|
||||
p = argparse.ArgumentParser()
|
||||
p.add_argument("-c", "--config", type=str, default="voice.config.json", help="configuratin file")
|
||||
p.add_argument("-i", "--iterations", type=int, default=10, help="number of iterations")
|
||||
p.add_argument("-t", "--terminal", action=argparse.BooleanOptionalAction, help="print to terminal")
|
||||
p.add_argument("-t", "--terminal", action='store_true', help="print to terminal")
|
||||
args = p.parse_args()
|
||||
|
||||
logging.info(f"INIT::loading config file - {args.config}")
|
||||
@ -135,6 +140,8 @@ def main() -> int:
|
||||
model = v['model']
|
||||
voice = utterance.voice.Voice(name=v["name"].upper(), model=model['model_dir'], tokenizer=model['tokeniser_file'], temp=float(model["temperature"]), lenght=UTTERANCE_LEN)
|
||||
voice.set_channel(v['osc_channel']['root'], v['osc_channel']['utterance'])
|
||||
voice.set_calculate(v['osc_channel']['root'], v['osc_channel']['calculate'])
|
||||
voice.set_temperature(v['osc_channel']['root'], v['osc_channel']['temperature'])
|
||||
voices.append(voice)
|
||||
|
||||
|
||||
@ -152,11 +159,12 @@ def main() -> int:
|
||||
if type(temp) == str and temp == "DEBUG":
|
||||
debug = name
|
||||
logging.info(f"DEBUG MODE: {debug}")
|
||||
else:
|
||||
else: # temperature
|
||||
for v in voices:
|
||||
if v.name == name:
|
||||
print(f'{name} - {temp}')
|
||||
v.temp = temp
|
||||
broadcast.temperature(temp, v.temperature)
|
||||
|
||||
receiver = utterance.osc.OscReceiver(name="osc_receiver", host=conf['host_machinespeak'], port=conf['port_machinespeak'], callback_fn=receiver_cb)
|
||||
|
||||
@ -176,10 +184,10 @@ def main() -> int:
|
||||
logging.info("INIT::SEEDING RANDOM")
|
||||
random.seed(time.time())
|
||||
if not exit:
|
||||
t_random_seed = threading.Timer(random.randint(60, 60 * 4), random_seed)
|
||||
t_random_seed = threading.Timer(random.randint(60, 60 * RANDOM_SEED_TIMER_MIN), random_seed)
|
||||
t_random_seed.start()
|
||||
|
||||
t_random_seed = threading.Timer(random.randint(60, 60 * 4), random_seed)
|
||||
t_random_seed = threading.Timer(random.randint(60, 60 * RANDOM_SEED_TIMER_MIN), random_seed)
|
||||
t_random_seed.start()
|
||||
|
||||
#--------------------#
|
||||
@ -206,7 +214,19 @@ def main() -> int:
|
||||
|
||||
# ok here we need to randomise maybe...?!
|
||||
# ([d, t, v])
|
||||
|
||||
|
||||
choice = results[0]
|
||||
# makse sure we don't say the same thing over and over again
|
||||
for r in results:
|
||||
v = r[2]
|
||||
u = r[1]
|
||||
if v.select(u):
|
||||
choice = r
|
||||
break
|
||||
else:
|
||||
logging.info(f"LOOP::reduncancy {v.name}")
|
||||
|
||||
v = choice[2]
|
||||
uv = choice[1]
|
||||
uv_vec = metric.vector(uv)
|
||||
|
||||
@ -37,6 +37,11 @@ class OscBroadcaster:
|
||||
osc_send(msg, self.name)
|
||||
update()
|
||||
|
||||
def temperature(self, temp: float, channel: str):
|
||||
msg = oscbuildparse.OSCMessage(channel, None, [temp])
|
||||
osc_send(msg, self.name)
|
||||
update()
|
||||
|
||||
class OscReceiver:
|
||||
|
||||
def __init__(self, name: str, host: str, port: str, callback_fn=None):
|
||||
|
||||
@ -16,7 +16,7 @@ def clean(text: str) -> str:
|
||||
|
||||
def format(text: str) -> str:
|
||||
|
||||
return text.replace('\r\n', '\n').replace('\n\n', '\n')
|
||||
return text.replace('\r\n', '\n').replace('\n\n', '\n').replace('‘', "'").replace("’", "'")
|
||||
|
||||
def fragments(utterance: str):
|
||||
frags = []
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
from aitextgen import aitextgen
|
||||
import utterance.utils
|
||||
import regex, string, time
|
||||
import gensim, regex, string, time
|
||||
|
||||
UTTERANCE_MEMORY_LEN = 15
|
||||
UTTERANCE_MEMORY_MIN_DIST = 0.2
|
||||
|
||||
class Voice:
|
||||
|
||||
@ -9,6 +12,7 @@ class Voice:
|
||||
self.temp = temp
|
||||
self.lenght = lenght
|
||||
self.v = aitextgen(model_folder=model, tokenizer_file=tokenizer)
|
||||
self.utterances = []
|
||||
|
||||
def utter_n(self, n: int, temp: float = None, lenght: int = None):
|
||||
t = self.temp if temp == None else temp
|
||||
@ -20,12 +24,49 @@ class Voice:
|
||||
l = self.lenght if lenght == None else lenght
|
||||
return self.utter_n(n=1, temp=temp, lenght=lenght)[0]
|
||||
|
||||
def select(self, utterance: str) -> bool:
|
||||
|
||||
# fuction making sure to not say the same thing
|
||||
|
||||
print("select;")
|
||||
|
||||
toks = set(gensim.utils.tokenize(utterance))
|
||||
|
||||
i = 0
|
||||
for u in self.utterances:
|
||||
d = gensim.matutils.jaccard_distance(toks, u)
|
||||
print(f"{i} - d: {d}")
|
||||
if d < UTTERANCE_MEMORY_MIN_DIST:
|
||||
return False
|
||||
|
||||
self.utterances.append(toks)
|
||||
|
||||
print(len(self.utterances))
|
||||
|
||||
if len(self.utterances) > UTTERANCE_MEMORY_LEN:
|
||||
self.utterances.pop(0)
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def set_channel(self, root: str, endpoint: str):
|
||||
self.channel = root + endpoint
|
||||
|
||||
def channel(self):
|
||||
return self.channel
|
||||
|
||||
def set_calculate(self, root: str, endpoint: str):
|
||||
self.calculate = root + endpoint
|
||||
|
||||
def calculate(self):
|
||||
return self.calculate
|
||||
|
||||
def set_temperature(self, root: str, endpoint: str):
|
||||
self.temperature = root + endpoint
|
||||
|
||||
def calculate(self):
|
||||
return self.temperature
|
||||
|
||||
def fragments(self, utt: str):
|
||||
self.utterance = utt
|
||||
self.utterance_fragments = utterance.utils.fragments(utt)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user