simba-uw-tf-dev 4.7.5__py3-none-any.whl → 4.7.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of simba-uw-tf-dev might be problematic. Click here for more details.

Files changed (29) hide show
  1. simba/assets/.recent_projects.txt +2 -0
  2. simba/assets/icons/folder_2.png +0 -0
  3. simba/assets/icons/folder_video.png +0 -0
  4. simba/assets/lookups/tooptips.json +24 -2
  5. simba/mixins/feature_extraction_mixin.py +0 -2
  6. simba/model/yolo_fit.py +42 -9
  7. simba/sandbox/av1.py +5 -0
  8. simba/sandbox/clean_sleap.py +4 -0
  9. simba/sandbox/denoise_hqdn3d.py +266 -0
  10. simba/sandbox/extract_random_frames.py +126 -0
  11. simba/third_party_label_appenders/transform/coco_keypoints_to_yolo.py +1 -2
  12. simba/third_party_label_appenders/transform/sleap_csv_to_yolo.py +18 -12
  13. simba/ui/create_project_ui.py +1 -1
  14. simba/ui/pop_ups/batch_preprocess_pop_up.py +1 -1
  15. simba/ui/pop_ups/simba_to_yolo_keypoints_popup.py +96 -96
  16. simba/ui/pop_ups/sleap_annotations_to_yolo_popup.py +32 -18
  17. simba/ui/pop_ups/sleap_csv_predictions_to_yolo_popup.py +15 -14
  18. simba/ui/pop_ups/video_processing_pop_up.py +1 -1
  19. simba/ui/pop_ups/yolo_plot_results.py +146 -153
  20. simba/ui/pop_ups/yolo_pose_train_popup.py +69 -23
  21. simba/utils/checks.py +2414 -2401
  22. simba/utils/read_write.py +22 -20
  23. simba/video_processors/video_processing.py +21 -13
  24. {simba_uw_tf_dev-4.7.5.dist-info → simba_uw_tf_dev-4.7.7.dist-info}/METADATA +1 -1
  25. {simba_uw_tf_dev-4.7.5.dist-info → simba_uw_tf_dev-4.7.7.dist-info}/RECORD +29 -23
  26. {simba_uw_tf_dev-4.7.5.dist-info → simba_uw_tf_dev-4.7.7.dist-info}/LICENSE +0 -0
  27. {simba_uw_tf_dev-4.7.5.dist-info → simba_uw_tf_dev-4.7.7.dist-info}/WHEEL +0 -0
  28. {simba_uw_tf_dev-4.7.5.dist-info → simba_uw_tf_dev-4.7.7.dist-info}/entry_points.txt +0 -0
  29. {simba_uw_tf_dev-4.7.5.dist-info → simba_uw_tf_dev-4.7.7.dist-info}/top_level.txt +0 -0
@@ -19,10 +19,10 @@ from simba.utils.checks import (check_float, check_if_dir_exists, check_int,
19
19
  check_valid_dataframe, check_valid_tuple)
20
20
  from simba.utils.enums import Options
21
21
  from simba.utils.errors import NoFilesFoundError
22
- from simba.utils.printing import SimbaTimer, stdout_success
22
+ from simba.utils.printing import SimbaTimer, stdout_success, stdout_information
23
23
  from simba.utils.read_write import (create_directory,
24
24
  find_files_of_filetypes_in_directory,
25
- get_video_meta_data, read_frm_of_video)
25
+ get_video_meta_data, read_frm_of_video, copy_files_to_directory, clean_sleap_filenames_in_directory, remove_a_folder)
26
26
  from simba.utils.yolo import keypoint_array_to_yolo_annotation_str
27
27
 
28
28
 
@@ -70,11 +70,16 @@ class Sleap2Yolo:
70
70
  padding: float = 0.00,
71
71
  single_id: Optional[str] = None):
72
72
 
73
+ check_if_dir_exists(in_dir=save_dir)
73
74
  self.data_paths = find_files_of_filetypes_in_directory(directory=data_dir, extensions=['.csv'], as_dict=True, raise_error=True)
75
+ self.data_temp_dir = os.path.join(data_dir, '.temp')
76
+ create_directory(paths=self.data_temp_dir, overwrite=True, verbose=True)
77
+ copy_files_to_directory(file_paths=list(self.data_paths.values()), dir=self.data_temp_dir, verbose=False, integer_save_names=False)
78
+ clean_sleap_filenames_in_directory(dir=self.data_temp_dir, verbose=True)
79
+ self.data_paths = find_files_of_filetypes_in_directory(directory=self.data_temp_dir, extensions=['.csv'], as_dict=True, raise_error=True)
74
80
  self.video_paths = find_files_of_filetypes_in_directory(directory=video_dir, extensions=Options.ALL_VIDEO_FORMAT_OPTIONS.value, as_dict=True, raise_error=True)
75
81
  missing_video_paths = [x for x in self.video_paths.keys() if x not in self.data_paths.keys()]
76
82
  missing_data_paths = [x for x in self.data_paths.keys() if x not in self.video_paths.keys()]
77
- check_if_dir_exists(in_dir=save_dir)
78
83
  self.img_dir, self.lbl_dir = os.path.join(save_dir, 'images'), os.path.join(save_dir, 'labels')
79
84
  self.img_train_dir, self.img_val_dir = os.path.join(save_dir, 'images', 'train'), os.path.join(save_dir, 'images', 'val')
80
85
  self.lbl_train_dir, self.lb_val_dir = os.path.join(save_dir, 'labels', 'train'), os.path.join(save_dir, 'labels', 'val')
@@ -92,15 +97,15 @@ class Sleap2Yolo:
92
97
  if frms_cnt is not None:
93
98
  check_int(name=f'{self.__class__.__name__} frms_cnt', value=frms_cnt, min_value=1, raise_error=True)
94
99
  if len(missing_video_paths) > 0:
95
- raise NoFilesFoundError(msg=f'Video(s) {missing_video_paths} could not be found in {video_dir} directory', source=self.__class__.__name__)
100
+ remove_a_folder(folder_dir=self.data_temp_dir, ignore_errors=True)
101
+ raise NoFilesFoundError(msg=f'{len(missing_video_paths)} video(s) {missing_video_paths} (of {len(self.data_paths.keys())} expected) could not be found in {video_dir} directory', source=self.__class__.__name__)
96
102
  if len(missing_data_paths) > 0:
97
- raise NoFilesFoundError(msg=f'CSV data for {missing_data_paths} could not be found in {data_dir} directory', source=self.__class__.__name__)
103
+ remove_a_folder(folder_dir=self.data_temp_dir, ignore_errors=True)
104
+ raise NoFilesFoundError(msg=f'{len(missing_data_paths)} CSV data for {missing_data_paths} (of {len(self.video_paths.keys())} could not be found in {data_dir} directory', source=self.__class__.__name__)
98
105
  self.verbose, self.instance_threshold, self.frms_cnt = verbose, instance_threshold, frms_cnt
99
106
  self.names, self.greyscale, self.train_size, self.clahe = names, greyscale, train_size, clahe
100
107
  self.padding, self.flip_idx, self.save_dir, self.single_id = padding, flip_idx, save_dir, single_id
101
108
 
102
-
103
-
104
109
  def run(self):
105
110
  dfs, timer, bp_cols = [], SimbaTimer(start=True), []
106
111
  for file_cnt, (file_name, file_path) in enumerate(self.data_paths.items()):
@@ -115,6 +120,7 @@ class Sleap2Yolo:
115
120
  dfs.append(df)
116
121
 
117
122
  dfs = pd.concat(dfs, axis=0)
123
+ dfs['track'] = dfs['track'].fillna(-1)
118
124
  unique_tracks_lk = {v: k for k, v in enumerate(dfs['track'].unique())}
119
125
  if self.names is not None:
120
126
  check_valid_tuple(x=self.names, source=f'{self.__class__.__name__} names', valid_dtypes=(str,), accepted_lengths=(len(list(unique_tracks_lk.keys())),))
@@ -125,14 +131,13 @@ class Sleap2Yolo:
125
131
  train_idx = random.sample(list(dfs['id'].unique()), int(len(dfs['frame_idx'].unique()) * self.train_size))
126
132
  if self.flip_idx is None:
127
133
  self.flip_idx = get_yolo_keypoint_flip_idx(x=list(dict.fromkeys([x[:-2] for x in bp_cols])))
128
-
129
134
  for frm_cnt, frm_id in enumerate(dfs['id'].unique()):
130
135
  frm_data = dfs[dfs['id'] == frm_id]
131
136
  video_path = list(frm_data['video'])[0]
132
137
  frm_idx = list(frm_data['frame_idx'])[0]
133
138
  video_meta = get_video_meta_data(video_path=video_path)
134
139
  if self.verbose:
135
- print(f'Processing frame: {frm_cnt + 1}/{len(list(dfs["id"].unique()))} ...')
140
+ stdout_information(msg=f'Processing frame: {frm_cnt + 1}/{len(list(dfs["id"].unique()))} ...', source=self.__class__.__name__)
136
141
  img = read_frm_of_video(video_path=video_path, frame_index=frm_idx, greyscale=self.greyscale, clahe=self.clahe)
137
142
  img_h, img_w = img.shape[0], img.shape[1]
138
143
  if list(frm_data['id'])[0] in train_idx:
@@ -155,12 +160,13 @@ class Sleap2Yolo:
155
160
 
156
161
  create_yolo_keypoint_yaml(path=self.save_dir, train_path=self.img_train_dir, val_path=self.img_val_dir, names=map_dict, save_path=self.map_path, kpt_shape=(len(self.flip_idx), 3), flip_idx=tuple(self.flip_idx))
157
162
  timer.stop_timer()
163
+ remove_a_folder(folder_dir=self.data_temp_dir, ignore_errors=True)
158
164
  stdout_success(msg=f'YOLO formated data saved in {self.save_dir} directory', source=self.__class__.__name__, elapsed_time=timer.elapsed_time_str)
159
165
 
160
166
 
161
- # DATA_DIR = r'D:\ares\data\ant\sleap_csv'
162
- # VIDEO_DIR = r'D:\ares\data\ant\sleap_video'
163
- # SAVE_DIR = r"D:\imgs\sleap_csv"
167
+ # DATA_DIR = r'E:\troubleshooting\mitra_pbn\raw_data\yolo\tracking'
168
+ # VIDEO_DIR = r'E:\troubleshooting\mitra_pbn\raw_data\yolo\videos'
169
+ # SAVE_DIR = r"E:\troubleshooting\mitra_pbn\raw_data\yolo\data"
164
170
  #
165
171
  # runner = Sleap2Yolo(data_dir=DATA_DIR, video_dir=VIDEO_DIR, frms_cnt=50, train_size=0.8, instance_threshold=0.9, save_dir=SAVE_DIR, single_id='ant')
166
172
  # runner.run()
@@ -66,7 +66,7 @@ class ProjectCreatorPopUp():
66
66
  self.settings_frm = CreateLabelFrameWithIcon(parent=self.create_project_tab, header="SETTINGS", icon_name=Keys.DOCUMENTATION.value, icon_link=Links.CREATE_PROJECT.value)
67
67
  self.general_settings_frm = CreateLabelFrameWithIcon(parent=self.settings_frm, header="GENERAL PROJECT SETTINGS", icon_name='settings', icon_link=Links.CREATE_PROJECT.value, padx=5, pady=5, relief='solid')
68
68
  self.project_dir_select = FolderSelect(self.general_settings_frm, "PROJECT DIRECTORY:", lblwidth=35, entry_width=35, font=Formats.FONT_REGULAR.value, lbl_icon='browse')
69
- self.project_name_eb = Entry_Box(self.general_settings_frm, "PROJECT NAME:", labelwidth=35, entry_box_width=35, img='id_card_2')
69
+ self.project_name_eb = Entry_Box(self.general_settings_frm, "PROJECT NAME:", labelwidth=35, entry_box_width=35, img='id_card_2', justify='center')
70
70
  self.file_type_dropdown = SimBADropDown(parent=self.general_settings_frm, dropdown_options=Options.WORKFLOW_FILE_TYPE_OPTIONS.value, label='WORKFLOW FILE TYPE:', label_width=35, dropdown_width=35, value=Options.WORKFLOW_FILE_TYPE_OPTIONS.value[0], img='file_type')
71
71
 
72
72
  self.ml_settings_frm = GetMLSettingsFrame(parent=self.create_project_tab, lbl_width=35, bx_width=22)
@@ -21,7 +21,7 @@ class BatchPreProcessPopUp(PopUpMixin):
21
21
  PopUpMixin.__init__(self, title="BATCH PROCESS VIDEO", size=(600, 400), icon='stack')
22
22
  selections_frm = CreateLabelFrameWithIcon(parent=self.main_frm, header="SELECTIONS", icon_name=Keys.DOCUMENTATION.value, icon_link=Links.BATCH_PREPROCESS.value,)
23
23
  self.input_folder_select = FolderSelect(selections_frm, "INPUT VIDEO DIRECTORY:", title="Select Folder with Input Videos", lblwidth=30, lbl_icon='folder')
24
- self.output_folder_select = FolderSelect(selections_frm, "OUTPUT VIDEO DIRECTORY:", title="Select Folder for Output videos", lblwidth=30, lbl_icon='folder')
24
+ self.output_folder_select = FolderSelect(selections_frm, "OUTPUT VIDEO DIRECTORY:", title="Select Folder for Output videos", lblwidth=30, lbl_icon='folder_2')
25
25
 
26
26
  confirm_btn = SimbaButton(parent=selections_frm, txt="CONFIRM", img='tick', txt_clr='blue', font=Formats.FONT_REGULAR.value, cmd=self.run)
27
27
  selections_frm.grid(row=0, column=0, sticky=NW)
@@ -1,96 +1,96 @@
1
- __author__ = "Simon Nilsson; sronilsson@gmail.com"
2
-
3
- from tkinter import *
4
-
5
- import numpy as np
6
-
7
- from simba.mixins.config_reader import ConfigReader
8
- from simba.mixins.pop_up_mixin import PopUpMixin
9
- from simba.third_party_label_appenders.transform.simba_to_yolo import \
10
- SimBA2Yolo
11
- from simba.third_party_label_appenders.transform.utils import (
12
- get_yolo_keypoint_bp_id_idx, get_yolo_keypoint_flip_idx)
13
- from simba.ui.tkinter_functions import (CreateLabelFrameWithIcon, FileSelect,
14
- FolderSelect, SimBADropDown)
15
- from simba.utils.read_write import str_2_bool
16
-
17
- TRAIN_SIZE_OPTIONS = np.arange(10, 110, 10)
18
- SAMPLE_SIZE_OPTIONS = list(np.arange(50, 650, 50))
19
-
20
- THRESHOLD_OPTIONS = list(np.arange(0.1, 1.1, 0.1))
21
-
22
- PADDING_OPTIONS = list(np.round(np.arange(0.01, 10.05, 0.05),2).astype(str))
23
- PADDING_OPTIONS = list(np.insert(PADDING_OPTIONS, 0, 'None'))
24
-
25
- class SimBA2YoloKeypointsPopUp(PopUpMixin):
26
-
27
- """
28
- :example:
29
- >>> SimBA2YoloKeypointsPopUp()
30
- """
31
- def __init__(self):
32
- PopUpMixin.__init__(self, title="SIMBA TO YOLO KEYPOINTS", icon='SimBA_logo_3_small')
33
- settings_frm = CreateLabelFrameWithIcon(parent=self.main_frm, header="SETTINGS", icon_name='settings')
34
- self.config_select = FileSelect(parent=settings_frm, fileDescription='SIMBA PROJECT CONFIG (.INI): ', lblwidth=35, file_types=[("INI FILE", (".ini", ".INI",))], entry_width=40, initialdir=r"C:\troubleshooting\mitra\project_folder", lbl_icon='ini')
35
- self.save_dir = FolderSelect(settings_frm, folderDescription="SAVE DIRECTORY:", lblwidth=35, entry_width=40, initialdir=r'C:\troubleshooting\mitra\yolo', lbl_icon='folder')
36
- self.train_size_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=TRAIN_SIZE_OPTIONS, label="TRAIN SIZE (%): ", label_width=35, dropdown_width=40, value=70, img='pct_2')
37
- self.verbose_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="VERBOSE: ", label_width=35, dropdown_width=40, value='TRUE', img='verbose')
38
- self.padding_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=PADDING_OPTIONS, label="PADDING: ", label_width=35, dropdown_width=40, value='None', img='size_black')
39
- self.sample_size_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=SAMPLE_SIZE_OPTIONS, label="FRAME SAMPLES PER VIDEO: ", label_width=35, dropdown_width=40, value=100, img='frames')
40
- self.threshold_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=THRESHOLD_OPTIONS, label="CONFIDENCE THRESHOLD: ", label_width=35, dropdown_width=40, value='None', img='threshold')
41
- self.grey_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="GREYSCALE: ", label_width=35, dropdown_width=40, value='FALSE', img='grey')
42
- self.clahe_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="CLAHE: ", label_width=35, dropdown_width=40, value='FALSE', img='clahe')
43
-
44
- settings_frm.grid(row=0, column=0, sticky=NW)
45
- self.config_select.grid(row=0, column=0, sticky=NW)
46
- self.save_dir.grid(row=1, column=0, sticky=NW)
47
- self.train_size_dropdown.grid(row=2, column=0, sticky=NW)
48
-
49
- self.verbose_dropdown.grid(row=3, column=0, sticky=NW)
50
- self.padding_dropdown.grid(row=4, column=0, sticky=NW)
51
- self.sample_size_dropdown.grid(row=5, column=0, sticky=NW)
52
- self.threshold_dropdown.grid(row=6, column=0, sticky=NW)
53
- self.grey_dropdown.grid(row=7, column=0, sticky=NW)
54
- self.clahe_dropdown.grid(row=8, column=0, sticky=NW)
55
-
56
- self.create_run_frm(run_function=self.run)
57
- self.main_frm.mainloop()
58
-
59
-
60
- def run(self):
61
- config_path = self.config_select.file_path
62
- config = ConfigReader(config_path=config_path)
63
- animal_names = list(config.animal_bp_dict.keys())
64
- bps = [x[:-2] for x in config.animal_bp_dict[animal_names[0]]['X_bps']]
65
- flip_idx = get_yolo_keypoint_flip_idx(x=bps)
66
- #map_dict = {c: k for c, k in enumerate(animal_names)}
67
- bp_id_idx = None
68
- if len(animal_names) > 1:
69
- bp_id_idx = get_yolo_keypoint_bp_id_idx(animal_bp_dict=config.animal_bp_dict)
70
- train_size = int(self.train_size_dropdown.get_value()) / 100
71
- verbose = str_2_bool(self.verbose_dropdown.get_value())
72
- save_dir = self.save_dir.folder_path
73
- padding = float(self.padding_dropdown.get_value()) if self.padding_dropdown.get_value() != 'None' else 0.0
74
- sample_size = int(self.sample_size_dropdown.get_value())
75
- grey = str_2_bool(self.grey_dropdown.get_value())
76
- clahe = str_2_bool(self.clahe_dropdown.get_value())
77
- threshold = float(self.threshold_dropdown.get_value())
78
-
79
- runner = SimBA2Yolo(config_path=config_path,
80
- save_dir=save_dir,
81
- data_dir=None,
82
- train_size=train_size,
83
- threshold=threshold,
84
- verbose=verbose,
85
- greyscale=grey,
86
- padding=padding,
87
- flip_idx=flip_idx,
88
- names=tuple(animal_names),
89
- sample_size=sample_size,
90
- bp_id_idx=bp_id_idx,
91
- clahe=clahe)
92
- runner.run()
93
-
94
-
95
- #SimBA2YoloKeypointsPopUp()
96
- #simba_to_yolo_keypoints(config_path=r"C:\troubleshooting\mitra\project_folder\project_config.ini", save_dir=r'C:\troubleshooting\mitra\yolo', sample_size=150, verbose=True)
1
+ __author__ = "Simon Nilsson; sronilsson@gmail.com"
2
+
3
+ from tkinter import *
4
+
5
+ import numpy as np
6
+
7
+ from simba.mixins.config_reader import ConfigReader
8
+ from simba.mixins.pop_up_mixin import PopUpMixin
9
+ from simba.third_party_label_appenders.transform.simba_to_yolo import \
10
+ SimBA2Yolo
11
+ from simba.third_party_label_appenders.transform.utils import (
12
+ get_yolo_keypoint_bp_id_idx, get_yolo_keypoint_flip_idx)
13
+ from simba.ui.tkinter_functions import (CreateLabelFrameWithIcon, FileSelect,
14
+ FolderSelect, SimBADropDown)
15
+ from simba.utils.read_write import str_2_bool
16
+
17
+ TRAIN_SIZE_OPTIONS = np.arange(10, 110, 10)
18
+ SAMPLE_SIZE_OPTIONS = list(np.arange(50, 650, 50))
19
+
20
+ THRESHOLD_OPTIONS = [round(x, 2) for x in np.arange(0.1, 1.1, 0.1)]
21
+
22
+ PADDING_OPTIONS = list(np.round(np.arange(0.01, 10.05, 0.05),2).astype(str))
23
+ PADDING_OPTIONS = list(np.insert(PADDING_OPTIONS, 0, 'None'))
24
+
25
+ class SimBA2YoloKeypointsPopUp(PopUpMixin):
26
+
27
+ """
28
+ :example:
29
+ >>> SimBA2YoloKeypointsPopUp()
30
+ """
31
+ def __init__(self):
32
+ PopUpMixin.__init__(self, title="SIMBA TO YOLO KEYPOINTS", icon='SimBA_logo_3_small')
33
+ settings_frm = CreateLabelFrameWithIcon(parent=self.main_frm, header="SETTINGS", icon_name='settings')
34
+ self.config_select = FileSelect(parent=settings_frm, fileDescription='SIMBA PROJECT CONFIG (.INI): ', lblwidth=35, file_types=[("INI FILE", (".ini", ".INI",))], entry_width=40, initialdir=r"C:\troubleshooting\mitra\project_folder", lbl_icon='ini', tooltip_key='simba2yolo_config')
35
+ self.save_dir = FolderSelect(settings_frm, folderDescription="SAVE DIRECTORY:", lblwidth=35, entry_width=40, initialdir=r'C:\troubleshooting\mitra\yolo', lbl_icon='folder', tooltip_key='SAVE_DIR')
36
+ self.train_size_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=TRAIN_SIZE_OPTIONS, label="TRAIN SIZE (%): ", label_width=35, dropdown_width=40, value=70, img='pct_2', tooltip_key='simba2yolo_train_size')
37
+ self.verbose_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="VERBOSE: ", label_width=35, dropdown_width=40, value='TRUE', img='verbose', tooltip_key='verbose_dropdown')
38
+ self.padding_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=PADDING_OPTIONS, label="PADDING: ", label_width=35, dropdown_width=40, value='None', img='size_black', tooltip_key='simba2yolo_padding')
39
+ self.sample_size_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=SAMPLE_SIZE_OPTIONS, label="FRAME SAMPLES PER VIDEO: ", label_width=35, dropdown_width=40, value=100, img='frames', tooltip_key='simba2yolo_sample_size')
40
+ self.threshold_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=THRESHOLD_OPTIONS, label="CONFIDENCE THRESHOLD: ", label_width=35, dropdown_width=40, value='None', img='threshold', tooltip_key='threshold_dropdown')
41
+ self.grey_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="GREYSCALE: ", label_width=35, dropdown_width=40, value='FALSE', img='grey', tooltip_key='simba2yolo_grey')
42
+ self.clahe_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="CLAHE: ", label_width=35, dropdown_width=40, value='FALSE', img='clahe', tooltip_key='simba2yolo_clahe')
43
+
44
+ settings_frm.grid(row=0, column=0, sticky=NW)
45
+ self.config_select.grid(row=0, column=0, sticky=NW)
46
+ self.save_dir.grid(row=1, column=0, sticky=NW)
47
+ self.train_size_dropdown.grid(row=2, column=0, sticky=NW)
48
+
49
+ self.verbose_dropdown.grid(row=3, column=0, sticky=NW)
50
+ self.padding_dropdown.grid(row=4, column=0, sticky=NW)
51
+ self.sample_size_dropdown.grid(row=5, column=0, sticky=NW)
52
+ self.threshold_dropdown.grid(row=6, column=0, sticky=NW)
53
+ self.grey_dropdown.grid(row=7, column=0, sticky=NW)
54
+ self.clahe_dropdown.grid(row=8, column=0, sticky=NW)
55
+
56
+ self.create_run_frm(run_function=self.run)
57
+ self.main_frm.mainloop()
58
+
59
+
60
+ def run(self):
61
+ config_path = self.config_select.file_path
62
+ config = ConfigReader(config_path=config_path)
63
+ animal_names = list(config.animal_bp_dict.keys())
64
+ bps = [x[:-2] for x in config.animal_bp_dict[animal_names[0]]['X_bps']]
65
+ flip_idx = get_yolo_keypoint_flip_idx(x=bps)
66
+ #map_dict = {c: k for c, k in enumerate(animal_names)}
67
+ bp_id_idx = None
68
+ if len(animal_names) > 1:
69
+ bp_id_idx = get_yolo_keypoint_bp_id_idx(animal_bp_dict=config.animal_bp_dict)
70
+ train_size = int(self.train_size_dropdown.get_value()) / 100
71
+ verbose = str_2_bool(self.verbose_dropdown.get_value())
72
+ save_dir = self.save_dir.folder_path
73
+ padding = float(self.padding_dropdown.get_value()) if self.padding_dropdown.get_value() != 'None' else 0.0
74
+ sample_size = int(self.sample_size_dropdown.get_value())
75
+ grey = str_2_bool(self.grey_dropdown.get_value())
76
+ clahe = str_2_bool(self.clahe_dropdown.get_value())
77
+ threshold = float(self.threshold_dropdown.get_value())
78
+
79
+ runner = SimBA2Yolo(config_path=config_path,
80
+ save_dir=save_dir,
81
+ data_dir=None,
82
+ train_size=train_size,
83
+ threshold=threshold,
84
+ verbose=verbose,
85
+ greyscale=grey,
86
+ padding=padding,
87
+ flip_idx=flip_idx,
88
+ names=tuple(animal_names),
89
+ sample_size=sample_size,
90
+ bp_id_idx=bp_id_idx,
91
+ clahe=clahe)
92
+ runner.run()
93
+
94
+
95
+ #SimBA2YoloKeypointsPopUp()
96
+ #simba_to_yolo_keypoints(config_path=r"C:\troubleshooting\mitra\project_folder\project_config.ini", save_dir=r'C:\troubleshooting\mitra\yolo', sample_size=150, verbose=True)
@@ -20,8 +20,9 @@ from simba.utils.read_write import (find_files_of_filetypes_in_directory,
20
20
  TRAIN_SIZE_OPTIONS = list(np.arange(10, 110, 10))
21
21
  SAMPLE_SIZE_OPTIONS = list(np.arange(50, 650, 50))
22
22
 
23
- PADDING_OPTIONS = list(np.round(np.arange(0.01, 10.05, 0.05),2).astype(str))
24
- PADDING_OPTIONS = list(np.insert(PADDING_OPTIONS, 0, 'None'))
23
+ _padding_arr = np.concatenate([[0.01], np.arange(0.05, 10.05, 0.05)])
24
+ PADDING_OPTIONS = [f"{x:.2f}" for x in np.round(_padding_arr, 2)]
25
+ PADDING_OPTIONS = ['None'] + PADDING_OPTIONS
25
26
 
26
27
 
27
28
 
@@ -37,26 +38,28 @@ class SLEAPAnnotations2YoloPopUp(PopUpMixin):
37
38
  def __init__(self):
38
39
  PopUpMixin.__init__(self, title="SLEAP ANNOTATIONS TO YOLO POSE ESTIMATION ANNOTATIONS", icon='sleap_small')
39
40
  settings_frm = CreateLabelFrameWithIcon(parent=self.main_frm, header="SETTINGS", icon_name='settings')
40
- self.sleap_dir = FolderSelect(settings_frm, folderDescription="SLEAP DATA DIRECTORY (.SLP):", lblwidth=35, entry_width=40, initialdir=r"D:\troubleshooting\two_animals_sleap\import_data", lbl_icon='folder')
41
- self.save_dir = FolderSelect(settings_frm, folderDescription="SAVE DIRECTORY:", lblwidth=35, entry_width=40, initialdir=r"D:\troubleshooting\two_animals_sleap\yolo_kpts_2", lbl_icon='folder')
41
+ self.sleap_dir = FolderSelect(settings_frm, folderDescription="SLEAP DATA DIRECTORY (.SLP):", lblwidth=35, entry_width=40, lbl_icon='folder', tooltip_key='SLEAP_SLP_DATA_DIR')
42
+ self.video_dir = FolderSelect(settings_frm, folderDescription="VIDEO DIRECTORY:", lblwidth=35, entry_width=40, lbl_icon='folder_video', tooltip_key='VIDEO_DIR')
43
+ self.save_dir = FolderSelect(settings_frm, folderDescription="SAVE DIRECTORY:", lblwidth=35, entry_width=40, initialdir=r"D:\troubleshooting\two_animals_sleap\yolo_kpts_2", lbl_icon='folder', tooltip_key='SAVE_DIR')
42
44
 
43
- self.verbose_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="VERBOSE: ", label_width=35, dropdown_width=40, value='TRUE', img='verbose')
44
- self.train_size_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=TRAIN_SIZE_OPTIONS, label="TRAIN SIZE (%): ", label_width=35, dropdown_width=40, value=70, img='pct_2')
45
- self.grey_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="GREYSCALE: ", label_width=35, dropdown_width=40, value='FALSE', img='grey')
46
- self.padding_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=PADDING_OPTIONS, label="PADDING: ", label_width=35, dropdown_width=40, value='None', img='size_black')
47
- self.clahe_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="CLAHE: ", label_width=35, dropdown_width=40, value='FALSE', img='clahe')
48
- self.single_id_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="REMOVE ANIMAL ID'S", label_width=35, dropdown_width=40, value='FALSE', img='mouse_head')
45
+ self.verbose_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="VERBOSE: ", label_width=35, dropdown_width=40, value='TRUE', img='verbose', tooltip_key='verbose_dropdown')
46
+ self.train_size_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=TRAIN_SIZE_OPTIONS, label="TRAIN SIZE (%): ", label_width=35, dropdown_width=40, value=70, img='pct_2', tooltip_key='simba2yolo_train_size')
47
+ self.grey_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="GREYSCALE: ", label_width=35, dropdown_width=40, value='FALSE', img='grey', tooltip_key='simba2yolo_grey')
48
+ self.padding_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=PADDING_OPTIONS, label="PADDING: ", label_width=35, dropdown_width=40, value='None', img='size_black', tooltip_key='simba2yolo_padding')
49
+ self.clahe_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="CLAHE: ", label_width=35, dropdown_width=40, value='FALSE', img='clahe', tooltip_key='simba2yolo_clahe')
50
+ self.single_id_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="REMOVE ANIMAL ID'S", label_width=35, dropdown_width=40, value='FALSE', img='mouse_head', tooltip_key='sleap_remove_animal_ids')
49
51
 
50
52
  settings_frm.grid(row=0, column=0, sticky=NW)
51
53
  self.sleap_dir .grid(row=0, column=0, sticky=NW)
52
- self.save_dir.grid(row=1, column=0, sticky=NW)
54
+ self.video_dir.grid(row=1, column=0, sticky=NW)
55
+ self.save_dir.grid(row=2, column=0, sticky=NW)
53
56
 
54
- self.verbose_dropdown.grid(row=2, column=0, sticky=NW)
55
- self.train_size_dropdown.grid(row=3, column=0, sticky=NW)
56
- self.grey_dropdown.grid(row=4, column=0, sticky=NW)
57
- self.clahe_dropdown.grid(row=5, column=0, sticky=NW)
58
- self.padding_dropdown.grid(row=6, column=0, sticky=NW)
59
- self.single_id_dropdown.grid(row=7, column=0, sticky=NW)
57
+ self.verbose_dropdown.grid(row=3, column=0, sticky=NW)
58
+ self.train_size_dropdown.grid(row=4, column=0, sticky=NW)
59
+ self.grey_dropdown.grid(row=5, column=0, sticky=NW)
60
+ self.clahe_dropdown.grid(row=6, column=0, sticky=NW)
61
+ self.padding_dropdown.grid(row=7, column=0, sticky=NW)
62
+ self.single_id_dropdown.grid(row=8, column=0, sticky=NW)
60
63
 
61
64
  self.create_run_frm(run_function=self.run)
62
65
  self.main_frm.mainloop()
@@ -65,9 +68,12 @@ class SLEAPAnnotations2YoloPopUp(PopUpMixin):
65
68
  def run(self):
66
69
  sleap_dir = self.sleap_dir.folder_path
67
70
  save_dir = self.save_dir.folder_path
71
+ video_dir = self.video_dir.folder_path
68
72
 
69
73
  check_if_dir_exists(in_dir=sleap_dir, source=f'{self.__class__.__name__} SLEAP DATA DIRECTORY', raise_error=True)
70
74
  check_if_dir_exists(in_dir=save_dir, source=f'{self.__class__.__name__} SAVE DIRECTORY', raise_error=True)
75
+ video_dir_exist = check_if_dir_exists(in_dir=video_dir, source=f'{self.__class__.__name__} VIDEO DIRECTORY', raise_error=False)
76
+ video_dir = video_dir if video_dir_exist else None
71
77
  _ = find_files_of_filetypes_in_directory(directory=sleap_dir, extensions=['.slp'], raise_error=True)
72
78
 
73
79
  grey = str_2_bool(self.grey_dropdown.get_value())
@@ -77,7 +83,15 @@ class SLEAPAnnotations2YoloPopUp(PopUpMixin):
77
83
  padding = float(self.padding_dropdown.get_value()) if self.padding_dropdown.get_value() != 'None' else 0.0
78
84
  single_id = 'animal_1' if str_2_bool(self.single_id_dropdown.get_value()) else None
79
85
 
80
- runner = SleapAnnotations2Yolo(sleap_dir=sleap_dir, save_dir=save_dir, padding=padding, train_size=train_size, verbose=verbose, greyscale=grey, clahe=clahe, single_id=single_id)
86
+ runner = SleapAnnotations2Yolo(sleap_dir=sleap_dir,
87
+ save_dir=save_dir,
88
+ video_dir=video_dir,
89
+ padding=padding,
90
+ train_size=train_size,
91
+ verbose=verbose,
92
+ greyscale=grey,
93
+ clahe=clahe,
94
+ single_id=single_id)
81
95
  runner.run()
82
96
 
83
97
 
@@ -21,7 +21,8 @@ TRAIN_SIZE_OPTIONS = np.arange(10, 110, 10)
21
21
  SAMPLE_SIZE_OPTIONS = list(np.arange(50, 650, 50))
22
22
 
23
23
  PADDING_OPTIONS = list(np.round(np.arange(0.01, 10.05, 0.05),2).astype(str))
24
- PADDING_OPTIONS = np.insert(PADDING_OPTIONS, 0, 'None')
24
+ PADDING_OPTIONS = list(np.insert(PADDING_OPTIONS, 0, 'None'))
25
+
25
26
 
26
27
  THRESHOLD_OPTION = list(range(10, 110, 10))
27
28
 
@@ -38,19 +39,19 @@ class SLEAPcsvInference2Yolo(PopUpMixin):
38
39
  def __init__(self):
39
40
  PopUpMixin.__init__(self, title="SLEAP CSV PREDICTIONS TO YOLO POSE ESTIMATION ANNOTATIONS", icon='sleap_small')
40
41
  settings_frm = CreateLabelFrameWithIcon(parent=self.main_frm, header="SETTINGS", icon_name='settings')
41
- self.sleap_dir = FolderSelect(settings_frm, folderDescription="SLEAP DATA DIRECTORY:", lblwidth=35, entry_width=40, initialdir=r"D:\troubleshooting\two_animals_sleap\import_data", lbl_icon='folder')
42
- self.video_dir = FolderSelect(settings_frm, folderDescription="VIDEO DIRECTORY:", lblwidth=35, entry_width=40, initialdir=r"D:\troubleshooting\two_animals_sleap\project_folder\videos", lbl_icon='folder')
43
- self.save_dir = FolderSelect(settings_frm, folderDescription="SAVE DIRECTORY:", lblwidth=35, entry_width=40, initialdir=r"D:\troubleshooting\two_animals_sleap\yolo_kpts_2", lbl_icon='folder')
44
-
45
- self.frm_cnt_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=SAMPLE_SIZE_OPTIONS, label="FRAMES (PER VIDEO): ", label_width=35, dropdown_width=40, value=100, img='frames')
46
- self.verbose_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="VERBOSE: ", label_width=35, dropdown_width=40, value='TRUE', img='frames')
47
- self.threshold_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=THRESHOLD_OPTION, label="THRESHOLD (%): ", label_width=35, dropdown_width=40, value=90, img='threshold')
48
- self.train_size_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=TRAIN_SIZE_OPTIONS, label="TRAIN SIZE (%): ", label_width=35, dropdown_width=40, value=70, img='pct_2')
49
- self.grey_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="GREYSCALE: ", label_width=35, dropdown_width=40, value='FALSE', img='grey')
50
- self.padding_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=PADDING_OPTIONS, label="PADDING: ", label_width=35, dropdown_width=40, value='None', img='resize')
51
- self.animal_cnt_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=list(range(1, 10, 1)), label="ANIMAL COUNT: ", label_width=35, dropdown_width=40, value=2, img='abacus_2')
52
- self.clahe_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="CLAHE: ", label_width=35, dropdown_width=40, value='FALSE', img='clahe')
53
- self.single_id_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="REMOVE ANIMAL ID'S", label_width=35, dropdown_width=40, value='FALSE', img='mouse_head')
42
+ self.sleap_dir = FolderSelect(settings_frm, folderDescription="SLEAP DATA DIRECTORY:", lblwidth=35, entry_width=40, initialdir=r"D:\troubleshooting\two_animals_sleap\import_data", lbl_icon='folder', tooltip_key='SLEAP_DATA_DIR')
43
+ self.video_dir = FolderSelect(settings_frm, folderDescription="VIDEO DIRECTORY:", lblwidth=35, entry_width=40, initialdir=r"D:\troubleshooting\two_animals_sleap\project_folder\videos", lbl_icon='folder_video', tooltip_key='VIDEO_DIR')
44
+ self.save_dir = FolderSelect(settings_frm, folderDescription="SAVE DIRECTORY:", lblwidth=35, entry_width=40, initialdir=r"D:\troubleshooting\two_animals_sleap\yolo_kpts_2", lbl_icon='folder_2', tooltip_key='SAVE_DIR')
45
+
46
+ self.frm_cnt_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=SAMPLE_SIZE_OPTIONS, label="FRAMES (PER VIDEO): ", label_width=35, dropdown_width=40, value=100, img='frames', tooltip_key='simba2yolo_sample_size')
47
+ self.verbose_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="VERBOSE: ", label_width=35, dropdown_width=40, value='TRUE', img='verbose', tooltip_key='verbose_dropdown')
48
+ self.threshold_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=THRESHOLD_OPTION, label="THRESHOLD (%): ", label_width=35, dropdown_width=40, value=90, img='threshold', tooltip_key='sleap_threshold')
49
+ self.train_size_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=TRAIN_SIZE_OPTIONS, label="TRAIN SIZE (%): ", label_width=35, dropdown_width=40, value=70, img='pct_2', tooltip_key='simba2yolo_train_size')
50
+ self.grey_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="GREYSCALE: ", label_width=35, dropdown_width=40, value='FALSE', img='grey', tooltip_key='simba2yolo_grey')
51
+ self.padding_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=PADDING_OPTIONS, label="PADDING: ", label_width=35, dropdown_width=40, value='None', img='resize', tooltip_key='simba2yolo_padding')
52
+ self.animal_cnt_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=list(range(1, 10, 1)), label="ANIMAL COUNT: ", label_width=35, dropdown_width=40, value=2, img='abacus_2', tooltip_key='ANIMAL_COUNT')
53
+ self.clahe_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="CLAHE: ", label_width=35, dropdown_width=40, value='FALSE', img='clahe', tooltip_key='simba2yolo_clahe')
54
+ self.single_id_dropdown = SimBADropDown(parent=settings_frm, dropdown_options=['TRUE', 'FALSE'], label="REMOVE ANIMAL ID'S", label_width=35, dropdown_width=40, value='FALSE', img='mouse_head', tooltip_key='sleap_remove_animal_ids')
54
55
 
55
56
  settings_frm.grid(row=0, column=0, sticky=NW)
56
57
  self.sleap_dir .grid(row=0, column=0, sticky=NW)
@@ -2495,7 +2495,7 @@ class Convert2WEBMPopUp(PopUpMixin):
2495
2495
  def __init__(self):
2496
2496
  super().__init__(title="CONVERT VIDEOS TO WEBM", icon='webm')
2497
2497
  settings_frm = CreateLabelFrameWithIcon(parent=self.main_frm, header="SETTINGS", icon_name=Keys.DOCUMENTATION.value, icon_link=Links.VIDEO_TOOLS.value)
2498
- self.WEBM_CODEC_LK = {'VP8': 'vp8', 'VP9': 'vp9'}
2498
+ self.WEBM_CODEC_LK = {'VP8': 'vp8', 'VP9': 'vp9', 'AV1': 'av1'}
2499
2499
 
2500
2500
  self.quality_dropdown = SimBADropDown(parent=settings_frm, label="OUTPUT VIDEO QUALITY:", dropdown_options=list(range(10, 110, 10)), label_width=25, value=60, img='pct', dropdown_width=30)
2501
2501
  self.codec_dropdown = SimBADropDown(parent=settings_frm, label="COMPRESSION CODEC:", dropdown_options=list(self.WEBM_CODEC_LK.keys()), label_width=25, value='VP9', img='file_type', dropdown_width=30)