Spaces:
Runtime error
Runtime error
| # pylint: disable=no-name-in-module | |
| # pylint: disable=no-member | |
| """ | |
| Author : Bastien GUILLAUME | |
| Version : 0.0.1 | |
| Date : 2023-03-16 | |
| Title : Inference With Gradio running an onnxruntime backend | |
| """ | |
| import inspect | |
| import os | |
| import shutil | |
| from pathlib import Path | |
| import gradio as gr | |
| import requests | |
| import sys | |
| sys.path.append(".") | |
| from config_parser import * | |
| from inferencer import * | |
| gr.close_all() | |
| def format_examples(task_number, product, product_example): | |
| response = requests.get(product_example) | |
| examples_folder = Path(f"examples/{product}") | |
| os.makedirs(examples_folder, exist_ok=True) | |
| filepath = Path(examples_folder / f'{product_example.split("/")[-1]}') | |
| if filepath.exists(): | |
| pass | |
| else: | |
| with open(filepath, "wb") as f: | |
| f.write(response.content) | |
| # return [f"task{task_number+1}", product, filepath] | |
| return [filepath] | |
| def generate_parralel_interface(task_number, product): | |
| logging.log(level=logging.INFO, msg=f"Entering generate_parralel_interface") | |
| generate_parralel_interface_list = [] | |
| number_of_model = len(config["tasks"][f"task{task_number+1}"]["models"][product]) | |
| task_info = config["tasks"][f"task{task_number+1}"] | |
| product_examples = ( | |
| [ | |
| format_examples(task_number, product, product_example) | |
| for product_example in task_info["examples"][product] | |
| ] | |
| if "examples" in task_info and product in task_info["examples"] | |
| else [] | |
| ) | |
| # product_examples = [test(task_number, product,product_example) for product_example in product_examples] | |
| # print(product_examples) | |
| # product_examples = [] | |
| logging.log(level=logging.INFO, msg=f"Real Number of model: {number_of_model}") | |
| logging.log(level=logging.DEBUG, msg=f"List of examples : {product_examples}") | |
| for model_number in range(0, number_of_model): | |
| logging.log(level=logging.INFO, msg=f"Building Interface for {product}") | |
| logging.log( | |
| level=logging.INFO, msg=f"Building Interface for Model n°{model_number+1}" | |
| ) | |
| generate_parralel_interface_list.append( | |
| create_interface(task_number, product, model_number) | |
| ) | |
| generated_parralel_interface = gr.Parallel( | |
| *generate_parralel_interface_list, | |
| title=tasks[task_number], | |
| description=tasks_description[task_number], | |
| allow_flagging="never", | |
| css="footer {visibility: hidden} body}, .gradio-container {background-color: white}", | |
| examples=product_examples, | |
| ) | |
| logging.log(level=logging.INFO, msg=f"Leaving generate_parralel_interface") | |
| return generated_parralel_interface | |
| def create_interface(task_number, product, model_number): | |
| logging.log(level=logging.INFO, msg=f"Entering create_interface") | |
| title = tasks[task_number] | |
| description = tasks_description[task_number] | |
| product_lists = tasks_products[task_number] | |
| model_info = config["tasks"][f"task{task_number+1}"]["models"][product][ | |
| model_number | |
| ] | |
| model_name = ( | |
| f'Résultst of {model_info["name"]}' if "name" in model_info else "Résultats" | |
| ) | |
| model_uuid = model_info["path"].split("/")[-2:-1][0] | |
| task_info = config["tasks"][f"task{task_number+1}"] | |
| product_examples = ( | |
| [ | |
| format_examples(task_number, product, product_example) | |
| for product_example in task_info["examples"][product] | |
| ] | |
| if "examples" in task_info | |
| and product in task_info["examples"] | |
| and inspect.currentframe().f_back.f_code.co_name == "interface_builder" | |
| else [] | |
| ) | |
| logging.log(level=logging.INFO, msg=f"Title : {title}") | |
| logging.log(level=logging.INFO, msg=f"Description : {description}") | |
| logging.log(level=logging.INFO, msg=f"Product list : {product_lists}") | |
| logging.log(level=logging.INFO, msg=f"Model Number: {model_number}") | |
| logging.log(level=logging.DEBUG, msg=f"List of examples : {product_examples}") | |
| created_interface = gr.Interface( | |
| title=title, | |
| description=description, | |
| fn=inferencer_arr[f"task{task_number+1}"][product][str(model_number)][model_uuid][ | |
| "function" | |
| ], | |
| # fn=lambda x: x, | |
| allow_flagging="never", | |
| css="footer {visibility: hidden} body}, .gradio-container {background-color: white}", | |
| inputs=[ | |
| # gr.Textbox( | |
| # value=f"task{task_number+1}", | |
| # label="Tasks", | |
| # visible=False, | |
| # interactive=False, | |
| # ), | |
| # gr.Dropdown( | |
| # tasks_products[task_number], | |
| # type="value", | |
| # value=product, | |
| # label="Choix", | |
| # # visible=True if len(tasks_products[task_number]) > 1 else False, | |
| # visible=False, | |
| # info="Sur quel type de produit, voulez vous lancer l'analyse ?", | |
| # ), | |
| gr.Image( | |
| label="Image à analyser", | |
| shape=None, | |
| image_mode="RGB", | |
| invert_colors=False, | |
| source="upload", | |
| tool="editor", | |
| type="numpy", | |
| ), | |
| ], | |
| outputs=gr.Label( | |
| label=model_name, | |
| ), | |
| examples=product_examples, | |
| ) | |
| logging.log(level=logging.INFO, msg=f"Leaving create_interface") | |
| return created_interface | |
| def interface_builder(): | |
| interface_builder_list = [] | |
| interface_builder_dict = {} | |
| logging.log(level=logging.INFO, msg=f"Building Interfaces") | |
| logging.log(level=logging.INFO, msg=f"Number of task(s) : {len(tasks)}") | |
| for task_number in range(0, len(tasks)): | |
| logging.log(level=logging.INFO, msg=f"Treating task n°{task_number+1}") | |
| logging.log(level=logging.INFO, msg=f"Building Interface n°{task_number+1}") | |
| interface_builder_dict[tasks[task_number]] = {} | |
| product_list = list(config["tasks"][f"task{task_number+1}"]["models"].keys()) | |
| logging.log(level=logging.DEBUG, msg=f"Products : {product_list}") | |
| interface_builder_product_level_list = [] | |
| for product in product_list: | |
| logging.log(level=logging.INFO, msg=f"Product : {product}") | |
| interface_builder_dict[tasks[task_number]][product] = [] | |
| if len(config["tasks"][f"task{task_number+1}"]["models"][product]) > 1: | |
| generated_parralel_interface = generate_parralel_interface( | |
| task_number, product | |
| ) | |
| interface_builder_dict[tasks[task_number]][product].append( | |
| generated_parralel_interface | |
| ) | |
| interface_builder_product_level_list.append( | |
| generated_parralel_interface | |
| ) | |
| else: | |
| generated_interface = create_interface( | |
| task_number=task_number, product=product, model_number=0 | |
| ) | |
| interface_builder_dict[tasks[task_number]][product].append( | |
| generated_interface | |
| ) | |
| interface_builder_product_level_list.append(generated_interface) | |
| interface_builder_list.append( | |
| gr.TabbedInterface( | |
| interface_list=interface_builder_product_level_list, | |
| tab_names=product_list, | |
| ) | |
| ) | |
| logging.log(level=logging.INFO, msg=f"Interfaces ready\n") | |
| # logging.log(level=logging.INFO, msg=f"Interfaces Dict {interface_dict}") | |
| logging.log(level=logging.DEBUG, msg=f"Interfaces List {interface_builder_list}") | |
| return interface_builder_list | |
| generated_interface = interface_builder() | |
| iface_generated = gr.TabbedInterface( | |
| interface_list=generated_interface, | |
| tab_names=tasks_name, | |
| title=f"{title} - {description}", | |
| css="footer {visibility: hidden} body}, .gradio-container {background-color: white}", | |
| ) | |
| if __name__ == "__main__": | |
| logging.log(level=logging.INFO, msg="Starting the Gradio server...") | |
| iface_generated.launch( | |
| server_name="0.0.0.0" | |
| ) | |
| # shutil.rmtree("examples") | |
| logging.log(level=logging.INFO, msg="Stopping the Gradio server...") | |