jaccard, temp, etc.
This commit is contained in:
parent
c33d577bb6
commit
b2cc817911
@ -7,8 +7,9 @@ import examine.metric
|
|||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
|
||||||
UTTERANCE_LEN = 16 #<--------------- these should be in config
|
UTTERANCE_LEN = 16 #<--------------- these should be in config
|
||||||
NUM_METRIC_GEN = 50
|
NUM_METRIC_GEN = 75
|
||||||
NUM_SAMPLE_VOICES = 3
|
NUM_SAMPLE_VOICES = 3
|
||||||
|
RANDOM_SEED_TIMER_MIN = 2
|
||||||
broadcast = None
|
broadcast = None
|
||||||
metric = None
|
metric = None
|
||||||
exit = False
|
exit = False
|
||||||
@ -52,7 +53,11 @@ def broadcast_utterance(v, utterance):
|
|||||||
temp = format(v.temp, '.2f')
|
temp = format(v.temp, '.2f')
|
||||||
text = f"{v.name.upper()}: {temp}\n"
|
text = f"{v.name.upper()}: {temp}\n"
|
||||||
else:
|
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)
|
broadcast.utterance(text, v.channel)
|
||||||
terminal_utterance(text)
|
terminal_utterance(text)
|
||||||
@ -113,7 +118,7 @@ def main() -> int:
|
|||||||
p = argparse.ArgumentParser()
|
p = argparse.ArgumentParser()
|
||||||
p.add_argument("-c", "--config", type=str, default="voice.config.json", help="configuratin file")
|
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("-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()
|
args = p.parse_args()
|
||||||
|
|
||||||
logging.info(f"INIT::loading config file - {args.config}")
|
logging.info(f"INIT::loading config file - {args.config}")
|
||||||
@ -135,6 +140,8 @@ def main() -> int:
|
|||||||
model = v['model']
|
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 = 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_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)
|
voices.append(voice)
|
||||||
|
|
||||||
|
|
||||||
@ -152,11 +159,12 @@ def main() -> int:
|
|||||||
if type(temp) == str and temp == "DEBUG":
|
if type(temp) == str and temp == "DEBUG":
|
||||||
debug = name
|
debug = name
|
||||||
logging.info(f"DEBUG MODE: {debug}")
|
logging.info(f"DEBUG MODE: {debug}")
|
||||||
else:
|
else: # temperature
|
||||||
for v in voices:
|
for v in voices:
|
||||||
if v.name == name:
|
if v.name == name:
|
||||||
print(f'{name} - {temp}')
|
print(f'{name} - {temp}')
|
||||||
v.temp = 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)
|
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")
|
logging.info("INIT::SEEDING RANDOM")
|
||||||
random.seed(time.time())
|
random.seed(time.time())
|
||||||
if not exit:
|
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.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()
|
t_random_seed.start()
|
||||||
|
|
||||||
#--------------------#
|
#--------------------#
|
||||||
@ -206,7 +214,19 @@ def main() -> int:
|
|||||||
|
|
||||||
# ok here we need to randomise maybe...?!
|
# ok here we need to randomise maybe...?!
|
||||||
# ([d, t, v])
|
# ([d, t, v])
|
||||||
|
|
||||||
|
|
||||||
choice = results[0]
|
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]
|
v = choice[2]
|
||||||
uv = choice[1]
|
uv = choice[1]
|
||||||
uv_vec = metric.vector(uv)
|
uv_vec = metric.vector(uv)
|
||||||
|
|||||||
@ -37,6 +37,11 @@ class OscBroadcaster:
|
|||||||
osc_send(msg, self.name)
|
osc_send(msg, self.name)
|
||||||
update()
|
update()
|
||||||
|
|
||||||
|
def temperature(self, temp: float, channel: str):
|
||||||
|
msg = oscbuildparse.OSCMessage(channel, None, [temp])
|
||||||
|
osc_send(msg, self.name)
|
||||||
|
update()
|
||||||
|
|
||||||
class OscReceiver:
|
class OscReceiver:
|
||||||
|
|
||||||
def __init__(self, name: str, host: str, port: str, callback_fn=None):
|
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:
|
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):
|
def fragments(utterance: str):
|
||||||
frags = []
|
frags = []
|
||||||
|
|||||||
@ -1,6 +1,9 @@
|
|||||||
from aitextgen import aitextgen
|
from aitextgen import aitextgen
|
||||||
import utterance.utils
|
import utterance.utils
|
||||||
import regex, string, time
|
import gensim, regex, string, time
|
||||||
|
|
||||||
|
UTTERANCE_MEMORY_LEN = 15
|
||||||
|
UTTERANCE_MEMORY_MIN_DIST = 0.2
|
||||||
|
|
||||||
class Voice:
|
class Voice:
|
||||||
|
|
||||||
@ -9,6 +12,7 @@ class Voice:
|
|||||||
self.temp = temp
|
self.temp = temp
|
||||||
self.lenght = lenght
|
self.lenght = lenght
|
||||||
self.v = aitextgen(model_folder=model, tokenizer_file=tokenizer)
|
self.v = aitextgen(model_folder=model, tokenizer_file=tokenizer)
|
||||||
|
self.utterances = []
|
||||||
|
|
||||||
def utter_n(self, n: int, temp: float = None, lenght: int = None):
|
def utter_n(self, n: int, temp: float = None, lenght: int = None):
|
||||||
t = self.temp if temp == None else temp
|
t = self.temp if temp == None else temp
|
||||||
@ -20,12 +24,49 @@ class Voice:
|
|||||||
l = self.lenght if lenght == None else lenght
|
l = self.lenght if lenght == None else lenght
|
||||||
return self.utter_n(n=1, temp=temp, lenght=lenght)[0]
|
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):
|
def set_channel(self, root: str, endpoint: str):
|
||||||
self.channel = root + endpoint
|
self.channel = root + endpoint
|
||||||
|
|
||||||
def channel(self):
|
def channel(self):
|
||||||
return self.channel
|
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):
|
def fragments(self, utt: str):
|
||||||
self.utterance = utt
|
self.utterance = utt
|
||||||
self.utterance_fragments = utterance.utils.fragments(utt)
|
self.utterance_fragments = utterance.utils.fragments(utt)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user