117 lines
2.4 KiB
Python
117 lines
2.4 KiB
Python
import argparse, json, sys, time, random
|
|
import utterance.voice
|
|
import utterance.utils
|
|
import examine.metric
|
|
|
|
def format_str(text: str) -> str:
|
|
t = utterance.utils.clean(text)
|
|
return utterance.utils.format(t)
|
|
|
|
|
|
def main() -> int:
|
|
|
|
p = argparse.ArgumentParser()
|
|
p.add_argument("-c", "--config", type=str, default="config.json", help="configuratin file")
|
|
p.add_argument("-i", "--iterations", type=int, default=10, help="number of iterations")
|
|
args = p.parse_args()
|
|
|
|
print(args)
|
|
|
|
with open(args.config) as f:
|
|
conf = json.load(f)
|
|
|
|
voices = []
|
|
for v in conf['voices']:
|
|
voice = utterance.voice.Voice(name=v["name"].upper(), model=v['model_dir'], tokenizer=v['tokeniser_file'], temp=float(v["temperature"]), lenght=16)
|
|
voices.append(voice)
|
|
|
|
nbr_voices = len(voices)
|
|
|
|
state = 'c'
|
|
|
|
metric = examine.metric.Metric(model_input='data/models/doc2vec.model')
|
|
|
|
s = set(range(0, nbr_voices - 1))
|
|
|
|
rindex = random.sample(s, 1)[0]
|
|
|
|
v = voices[rindex]
|
|
uv = v.utter_one()
|
|
uv = format_str(uv)
|
|
|
|
v_vec = metric.vector(uv)
|
|
|
|
|
|
while state == 'c':
|
|
|
|
candidates = random.sample(s, 3)
|
|
|
|
results = []
|
|
for c in candidates:
|
|
if c == rindex:
|
|
continue
|
|
vc = voices[c]
|
|
vc_texts = vc.utter_n(n=150)
|
|
for t in vc_texts:
|
|
t = format_str(t)
|
|
t_vec = metric.vector(t)
|
|
d = examine.metric.cos_dist(v_vec, t_vec)
|
|
results.append([d, t, c])
|
|
|
|
# vv = voices[rrindex]
|
|
# texts = vv.utter_n(n=150)
|
|
# # texts = v.utter_n(n=150)
|
|
# results = []
|
|
# for t in texts:
|
|
# t = format_str(t)
|
|
# t_vec = metric.vector(uv)
|
|
# d = examine.metric.cos_dist(v_vec, t_vec)
|
|
# results.append((d, t))
|
|
|
|
results.sort(key=lambda t: t[0], reverse=True)
|
|
|
|
print('----------------------------')
|
|
print(v.name + ":")
|
|
print(uv)
|
|
print('----------------------------')
|
|
|
|
for r in results[:2]:
|
|
print('-->' + str(r[0]))
|
|
print(r[1])
|
|
print('+++++++++++++++++++++++++')
|
|
|
|
|
|
# new round
|
|
|
|
top = results[0]
|
|
rindex = top[2]
|
|
v = voices[rindex]
|
|
uv = top[1]
|
|
v_vec = metric.vector(top[1])
|
|
|
|
|
|
state = input("Continue? ")
|
|
|
|
|
|
|
|
|
|
# nbr_voices = len(voices)
|
|
# current_voice = ""
|
|
# for i in range(args.iterations):
|
|
# rindex = random.randint(0, nbr_voices - 1)
|
|
# v = voices[rindex]
|
|
# if v.name != current_voice:
|
|
# print("==========")
|
|
# print(v.name + ":")
|
|
# current_voice = v.name
|
|
# t = v.utter_one()
|
|
# if t != None:
|
|
# t = utterance.utils.clean(t)
|
|
# t = utterance.utils.format(t)
|
|
# print(t)
|
|
|
|
# time.sleep(4)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main()) |