from huggingface_hub import hf_hub_download import os import time import gradio as gr import yt_dlp import sys import uuid import traceback import tensorflow import csv embed_html1 = '' # NO GPU # os.environ['CUDA_VISIBLE_DEVICES'] = '-1' os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3" # tensorflow.config.threading.set_intra_op_parallelism_threads(8) # tensorflow.config.threading.set_inter_op_parallelism_threads(8) print(tensorflow.config.list_physical_devices("GPU")) # python_path = hf_hub_download( repo_id=os.environ["REPO_ID"], repo_type="space", filename=os.environ["MODEL_FILE"], use_auth_token=os.environ["TOKEN"], ) # print("PATH : ", python_path) sys.path.append(os.environ["PRIVATE_DIR"]) from models import * max_results = 100 max_output = 50 # global (faster) ind = get_index() ind_filenames = get_audio_names() catalog = get_catalog() url_dict = get_durl_myma() dict_catalog = get_dict_catalog() def download_audio_(link): file_name = f"{uuid.uuid4()}.mp3" with yt_dlp.YoutubeDL( {"extract_audio": True, "format": "bestaudio", "outtmpl": file_name} ) as video: video.download(link) return file_name def download_audio(id_video): id = id_video.split("?v=")[-1][:11] file_name = download_audio_(id_video) embed_html_all = embed_html1 + id + embed_html2 return file_name, embed_html_all def process_url(input_path): # setup the client # try : file_name, embed_html_all = download_audio(input_path) return process(file_name, embed_html_all) # except: # return "", "Erreur Input", "", "Erreur Input", "", "Erreur Input", "", "Erreur Input", "", "Erreur Input", "", "Erreur Input", "", "Erreur Input", "", "Erreur Input", "", "Erreur Input", "", "Erreur Input", "" def process_file(input_path): return process(input_path, "")[1:] def process(file_name, embed_html_all): """try :""" emb, _ = get_embed(file_name) try: os.remove(file_name) except: print(traceback.format_exc()) # => global timestart = time.time() _, I = do_search(emb, ind) print("search time :", time.time() - timestart) tops = get_topN(I, ind_filenames, url_dict, catalog, max_results) formated = [] output_csv = f"{file_name}_results.csv" with open(output_csv, "w") as w: writer = csv.writer(w) num_results = 0 header = False for top in tops: if num_results > max_output: break file = os.path.splitext(os.path.basename(top))[0] if file in dict_catalog: if not header: writer.writerow(list(dict_catalog[file].keys())) header = True writer.writerow(dict_catalog[file].values()) else: writer.writerow([file, "no metadata provided"]) formated.append(file) formated.append(top) num_results += 1 return (embed_html_all, output_csv, *formated) """except: return embed_html_all, "Erreur Input", "", "Erreur Input", "", "Erreur Input", "", "Erreur Input", "", "Erreur Input", "", "Erreur Input", "", "Erreur Input", "", "Erreur Input", "", "Erreur Input", "", "Erreur Input", "" """ with gr.Blocks() as demo: tops = [] with gr.Row(): with gr.Column(): with gr.Row(): # gr.HTML(embed_html) html = gr.HTML() with gr.Row(): with gr.Column(): audio_url_input = gr.Textbox( placeholder="YouTube video URL", label="YouTube video URL" ) analyze_url_btn = gr.Button("Search from URL") with gr.Row(): with gr.Column(): audio_input_file = gr.Audio(type="filepath", label="Audio Input") analyze_file_btn = gr.Button("Search from file") with gr.Row(): with gr.Column(): results = gr.File() with gr.Row(): with gr.Column(): for i in range(max_output): tops.append( gr.Textbox(label=f"top{i} track name", show_label=True) ) tops.append(gr.Audio(label=f"top{i}", show_label=False)) analyze_url_btn.click( process_url, inputs=[audio_url_input], outputs=[html, results] + tops ) gr.Examples( examples=[ "https://www.youtube.com/watch?v=aNzCDt2eidg", "https://www.youtube.com/watch?v=NBE-uBgtINg", "https://www.youtube.com/watch?v=5NV6Rdv1a3I", "https://www.youtube.com/watch?v=OiC1rgCPmUQ", # "https://www.youtube.com/watch?v=dRX0wDNK6S4", # "https://www.youtube.com/watch?v=Guzu9aAeDIc", ], inputs=[audio_url_input], outputs=[html, results] + tops, fn=process_url, cache_examples=False, ) analyze_file_btn.click( process_file, inputs=[audio_input_file], outputs=[results] + tops, ) demo.launch(debug=False)