Source code for simba.pose_processors.pose_reset

__author__ = "Simon Nilsson; sronilsson@gmail.com"

import os
import shutil
from tkinter import *
from typing import Optional

import pandas as pd

import simba
from simba.utils.checks import check_file_exist_and_readable
from simba.utils.lookups import get_bp_config_codes
from simba.utils.printing import stdout_trash


[docs]class PoseResetter(object): """ Launch GUI for deleting all **user-defined** pose-estimation schematics, diagrams and other settings from the SimBA installation. :param Optional[TopLevel] master: Tkinter TopLevel window. Default: None. Examples ---------- >>> _ = PoseResetter(master=None) """ def __init__(self, master: Optional[Toplevel] = None): self.default_pose_configs_cnt = len(get_bp_config_codes().keys()) self.simba_dir = os.path.dirname(simba.__file__) self.pose_configs_dir = os.path.join(self.simba_dir, "pose_configurations") self.archive_dir = os.path.join(self.simba_dir, "pose_configurations_archive") if not os.path.exists(self.archive_dir): os.makedirs(self.archive_dir) self.archive_folders_cnt = len(os.listdir(self.archive_dir)) self.archive_subdir = os.path.join( self.archive_dir, "pose_configurations_archive_{}".format(str(self.archive_folders_cnt + 1)), ) shutil.copytree(self.pose_configs_dir, self.archive_subdir) self.bp_names_csv_path = os.path.join( self.pose_configs_dir, "bp_names", "bp_names.csv" ) self.pose_config_names_csv_path = os.path.join( self.pose_configs_dir, "configuration_names", "pose_config_names.csv" ) self.no_animals_csv_path = os.path.join( self.pose_configs_dir, "no_animals", "no_animals.csv" ) self.schematics_path = os.path.join(self.pose_configs_dir, "schematics") for file_path in [ self.bp_names_csv_path, self.pose_config_names_csv_path, self.no_animals_csv_path, self.no_animals_csv_path, ]: check_file_exist_and_readable(file_path=file_path) try: df = pd.read_csv(file_path, header=None, error_bad_lines=False) except TypeError: df = pd.read_csv(file_path, header=None, on_bad_lines='skip') df = df.iloc[0 : self.default_pose_configs_cnt] df.to_csv(file_path, index=False, header=False) default_pic_list = [] user_pic_lst = os.listdir(self.schematics_path) for idx in range(self.default_pose_configs_cnt): default_pic_list.append(f"{idx + 1}.png") for i in list(set(user_pic_lst) - set(default_pic_list)): os.remove(os.path.join(self.schematics_path, i)) stdout_trash( msg="User-defined pose-estimation configuration reset. User-defined poses removed." ) if master is not None: master.destroy()
# test = PoseResetter()