debu stopping complet

This commit is contained in:
Foufure13
2025-01-10 15:53:17 +01:00
parent af359e9c70
commit a22a825704
12 changed files with 262 additions and 235 deletions
+64 -50
View File
@@ -130,8 +130,9 @@ class RecordTwitch:
self.verif_record_move()
sprint(self.script_name,"yellow", f"wait {intervalle}s for next scan file completed.")
time.sleep(intervalle)
except KeyboardInterrupt:
sprint(self.script_name,"red", "STOP LOOP.")
#except KeyboardInterrupt:
except Exception as e:
sprint(self.script_name,"red", "STOP loop_run Error : "+ str(e))
finally:
self.running = False # Assurez-vous que le drapeau est désactivé
@@ -244,24 +245,25 @@ class RecordTwitch:
class Subtitle_translation:
def __init__(self, pathjson):
self.script_name = "translation"
self.pathjson = pathjson
self.reload_json()
self.dir_whisperX = "whisperX"
self.subtitle = {}
self.all_subtitle = ""
self.is_running = True
self.loop_timer = 30
self.loop_timer = 20
self.language = get_value_json("language", self.config)
self.dir_record = "record"
def stop(self):
hprint("yellow",f"Arrêt loop subtitle")
sprint(self.script_name,"yellow",f"Arrêt loop subtitle")
self.is_running = False
if self.loop_thread.is_alive():
# self.loop_thread.join() # Attend la fin du thread pour un arrêt propre
hprint("red", "Boucle de traitement arrêtée.")
sprint(self.script_name,"red", "Boucle de traitement arrêtée.")
else :
hprint("yellow",f"loop subtitle déja arreté")
sprint(self.script_name,"yellow",f"loop subtitle déja arreté")
def reload_json(self):
with open(self.pathjson, 'r') as file:
@@ -272,7 +274,7 @@ class Subtitle_translation:
for file in os.listdir(self.dir_record):
file_path = os.path.join(self.dir_record, file)
if os.path.isfile(file_path):
hprint("blue",f"File find -> transcribe.")
sprint(self.script_name,"blue",f"File find -> transcribe.")
# Exécuter une fonction sur le fichier
self.auto_create_subtitle(file)
@@ -289,7 +291,7 @@ class Subtitle_translation:
:param message: Le message sous forme de chaîne de caractères
:return: Le message sans répétitions
"""
hprint("yellow", "remove_repetitions start for: \n" +message)
sprint(self.script_name,"yellow", "remove_repetitions start for: \n" +message)
words = message.split() # Découpe le texte en mots
seen = set() # Pour suivre les mots déjà rencontrés
@@ -301,30 +303,30 @@ class Subtitle_translation:
result.append(word)
seen.add(word)
hprint("green", "remove_repetitions cleaned text : \n" +" ".join(result))
sprint(self.script_name,"green", "remove_repetitions cleaned text : \n" +" ".join(result))
return " ".join(result)## str this switch
def print_allsubtitle(self):
os.system('clear')
hprint("yellow", "\n\n All subtitle Print\n ")
sprint(self.script_name,"yellow", "\n\n All subtitle Print\n ")
for key, text in self.subtitle.items():
hprint("yellow", " time "+ str(key)+" = "+ text+" \n\n")
sprint(self.script_name,"yellow", " time "+ str(key)+" = "+ text+" \n\n")
def get_lasttext(self):
# Vérifie que le dictionnaire n'est pas vide
if not self.subtitle:
hprint("red", "Aucun sous-titre disponible.")
sprint(self.script_name,"red", "Aucun sous-titre disponible.")
return ""
# Récupère la dernière clé et valeur
last_time, last_text = list(self.subtitle.items())[-1]
hprint("magenta", f"Dernier sous-titre à {last_time} = {last_text}")
sprint(self.script_name,"magenta", f"Dernier sous-titre à {last_time} = {last_text}")
return last_text
def auto_create_subtitle(self,file):
hprint("green",f"start auto_create_subtitle")
sprint(self.script_name,"green",f"start auto_create_subtitle")
del_file("","*.txt")
del_file("","*.srt")
del_file("","*.vtt")
@@ -335,7 +337,7 @@ class Subtitle_translation:
# os.makedirs(subtitle_directory, exist_ok=True)
# os.chdir(subtitle_directory)
spead_find = ""
hprint("green", "translation : "+file+" ")
sprint(self.script_name,"green", "translation : "+file+" ")
# whisperx --language fr --compute_type float32 ../record/final_output_audio.mp3
# record_twitch = ['whisperx', '--language',self.language, '--compute_type','float32', '../'+self.dir_record+"/"+file] #ancienne version
@@ -355,23 +357,25 @@ class Subtitle_translation:
self.all_subtitle += spead_find+"\n"
num_ext = get_current_time()
self.subtitle[str(num_ext)] = spead_find
hprint("yellow", "parole du streamer : \n" +spead_find)
sprint(self.script_name,"yellow", "parole du streamer : \n" +spead_find)
# attention a No active speech found in audio
# os.chdir("../")
console.print("[bold PURPLE] finish create_subtitle [/bold PURPLE]")
sprint(self.script_name,"green","finish create_subtitle")
def main_loop(self):
time.sleep(45)
hprint("green", "start main boucle_traitement record")
sprint(self.script_name,"green", "start main boucle_traitement record")
try:
while self.is_running:
hprint("blue",f"wait {self.loop_timer}s loop main translation.")
sprint(self.script_name,"blue",f"wait {self.loop_timer}s loop main translation.")
# Attend 'intervalle' secondes avant la prochaine itération
self.verif_file_transcribe()
time.sleep(self.loop_timer)
except KeyboardInterrupt:
print("Arrêt du script.")
# except KeyboardInterrupt:
# print("Arrêt du script.")
except Exception as e:
sprint(self.script_name,"red", "STOP main_loop Error : "+ str(e))
# #console.print("[bold green]Enregistrement terminé, le programme va se terminer.[/bold green]")
@@ -415,26 +419,28 @@ class Subtitle_translation:
class IA_generator:
def __init__(self,pathjson):
self.script_name = "IA_generator"
self.pathjson = pathjson
self.reload_json()
self.subtitle = {}
self.all_subtitle = ""
self.is_running = True
self.loop_timer = 60
self.ia_running = True
self.loop_timer_ia = 20
self.streamer_word = ""
self.last_streamer_word = None
self.index_prompt = 0
self.response_generation = {}
self.list_prompt = get_value_json("list_prompt", self.config)
self.bad_answer = get_value_json("bad_answer", self.config)
def stop(self):
hprint("yellow",f"Arrêt loop subtitle")
self.is_running = False
sprint(self.script_name,"yellow",f"Arrêt loop subtitle")
self.ia_running = False
if self.loop_thread.is_alive():
# self.loop_thread.join() # Attend la fin du thread pour un arrêt propre
hprint("red", "Boucle de traitement arrêtée.")
sprint(self.script_name,"red", "Boucle de traitement arrêtée.")
else :
hprint("yellow",f"loop subtitle déja arreté")
sprint(self.script_name,"yellow",f"loop subtitle déja arreté")
def change_prompt(self):
@@ -456,18 +462,18 @@ class IA_generator:
def print_allgeneration(self):
os.system('clear')
hprint("yellow", "\n\n Print All response_generation \n ")
sprint(self.script_name,"yellow", "\n\n Print All response_generation \n ")
for key, text in self.response_generation.items():
hprint("yellow", " key = "+ str(key)+" = "+ text+" \n\n")
sprint(self.script_name,"yellow", " key = "+ str(key)+" = "+ text+" \n\n")
def getlast_generation(self):
# return self.response_generation
if not self.response_generation:
hprint("red", "Aucun response_generation disponible.")
sprint(self.script_name,"red", "Aucun response_generation disponible.")
return ""
# Récupère la dernière clé et valeur
key, last_generation = list(self.response_generation.items())[-1]
hprint("magenta", f"Dernier response_generation key : {key} = {last_generation}")
sprint(self.script_name,"magenta", f"Dernier response_generation key : {key} = {last_generation}")
return last_generation
def clear_response(self, text):
@@ -480,25 +486,27 @@ class IA_generator:
return text
def imagine_response(self):
hprint("green",f"start imagine_response\n")
# hprint("magenta",f"streamer_word : \n"+str(self.streamer_word))
# hprint("magenta",f"streamer_word : \n"+str(len(self.streamer_word[0])))
sprint(self.script_name,"green",f"start imagine_response\n")
# sprint(self.script_name,"magenta",f"streamer_word : \n"+str(self.streamer_word))
# sprint(self.script_name,"magenta",f"streamer_word : \n"+str(len(self.streamer_word[0])))
if str(self.streamer_word) == "":
hprint("magenta",f"pas encore de sosu titre on quitte génération")
sprint(self.script_name,"magenta",f"pas encore de sous titre on quitte génération")
return
prompt_gpt = ['tgpt','-q','-w', '"'+self.list_prompt[self.index_prompt]+' "'+ str(self.streamer_word)+'"']
hprint("DARKCYAN","index preprompt : "+str(self.index_prompt)+"\n")
hprint("DARKCYAN","\nPrompt demandé : "+str(prompt_gpt)+"\n")
sprint(self.script_name,"DARKCYAN","index preprompt : "+str(self.index_prompt)+"\n")
sprint(self.script_name,"DARKCYAN","\nPrompt demandé : "+str(prompt_gpt)+"\n")
process = subprocess.run(prompt_gpt, capture_output=True, text=True, check=False)
text_generation = process.stdout.replace("'", "").replace('"', "").replace("\n", "")
# hprint("CYAN","réponse imaginé sans formatage : \n"+text_generation+"\n\n") #debug
# sprint(self.script_name,"CYAN","réponse imaginé sans formatage : \n"+text_generation+"\n\n") #debug
textfinal = self.clear_response(text_generation)
# nombre_de_mots = len(textfinal.split())
# nombre_de_caracteres = len(textfinal)
hprint("CYAN","réponse imaginé : \n"+textfinal+"\n\n")
self.last_streamer_word = self.streamer_word
sprint(self.script_name,"CYAN","réponse imaginé : \n"+textfinal+"\n\n")
self.change_prompt()
key = get_current_time()
@@ -512,25 +520,31 @@ class IA_generator:
return ''.join(values[-n:])
def main_ask(self, streamer_word_text):
hprint("blue", "imagine_response start")
sprint(self.script_name,"blue", "imagine_response start")
self.streamer_word = streamer_word_text
imagine_response_thread = Thread(target=self.imagine_response)
imagine_response_thread.start()
def main_loop(self):
hprint("blue", "main_loop imagine_response start")
time.sleep(100)
def main_loop_ia(self):
sprint(self.script_name,"blue", "main_loop_ia imagine_response start")
time.sleep(20)
try:
while self.is_running:
hprint("blue",f"wait {self.loop_timer}s loop main imagine_response.")
self.imagine_response()
time.sleep(self.loop_timer)
except KeyboardInterrupt:
print("Arrêt du script.")
while self.ia_running:
time.sleep(self.loop_timer_ia)
sprint(self.script_name,"yellow",f"wait {self.loop_timer_ia}s main_loop_ia imagine_response.")
if(self.last_streamer_word != self.streamer_word):
self.imagine_response()
else:
sprint(self.script_name,"yellow",f"génération déja créer")
# except KeyboardInterrupt:
# print("Arrêt du script.")
except Exception as e:
sprint(self.script_name,"red", "STOP main_loop_ia Error : "+ str(e))
def start_main_loop(self):
"""Lance dans un thread pour ne pas bloquer le code principal."""
self.loop_thread = threading.Thread(target=self.main_loop)
self.ia_running = True
self.loop_thread = threading.Thread(target=self.main_loop_ia)
self.loop_thread.start() # Démarre dans un thread séparé