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.
- simba/assets/.recent_projects.txt +2 -0
- simba/assets/icons/folder_2.png +0 -0
- simba/assets/icons/folder_video.png +0 -0
- simba/assets/lookups/tooptips.json +24 -2
- simba/mixins/feature_extraction_mixin.py +0 -2
- simba/model/yolo_fit.py +42 -9
- simba/sandbox/av1.py +5 -0
- simba/sandbox/clean_sleap.py +4 -0
- simba/sandbox/denoise_hqdn3d.py +266 -0
- simba/sandbox/extract_random_frames.py +126 -0
- simba/third_party_label_appenders/transform/coco_keypoints_to_yolo.py +1 -2
- simba/third_party_label_appenders/transform/sleap_csv_to_yolo.py +18 -12
- simba/ui/create_project_ui.py +1 -1
- simba/ui/pop_ups/batch_preprocess_pop_up.py +1 -1
- simba/ui/pop_ups/simba_to_yolo_keypoints_popup.py +96 -96
- simba/ui/pop_ups/sleap_annotations_to_yolo_popup.py +32 -18
- simba/ui/pop_ups/sleap_csv_predictions_to_yolo_popup.py +15 -14
- simba/ui/pop_ups/video_processing_pop_up.py +1 -1
- simba/ui/pop_ups/yolo_plot_results.py +146 -153
- simba/ui/pop_ups/yolo_pose_train_popup.py +69 -23
- simba/utils/checks.py +2414 -2401
- simba/utils/read_write.py +22 -20
- simba/video_processors/video_processing.py +21 -13
- {simba_uw_tf_dev-4.7.5.dist-info → simba_uw_tf_dev-4.7.7.dist-info}/METADATA +1 -1
- {simba_uw_tf_dev-4.7.5.dist-info → simba_uw_tf_dev-4.7.7.dist-info}/RECORD +29 -23
- {simba_uw_tf_dev-4.7.5.dist-info → simba_uw_tf_dev-4.7.7.dist-info}/LICENSE +0 -0
- {simba_uw_tf_dev-4.7.5.dist-info → simba_uw_tf_dev-4.7.7.dist-info}/WHEEL +0 -0
- {simba_uw_tf_dev-4.7.5.dist-info → simba_uw_tf_dev-4.7.7.dist-info}/entry_points.txt +0 -0
- {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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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'
|
|
162
|
-
# VIDEO_DIR = r'
|
|
163
|
-
# SAVE_DIR = r"
|
|
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()
|
simba/ui/create_project_ui.py
CHANGED
|
@@ -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='
|
|
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 =
|
|
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
|
-
|
|
24
|
-
PADDING_OPTIONS =
|
|
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,
|
|
41
|
-
self.
|
|
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.
|
|
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=
|
|
55
|
-
self.train_size_dropdown.grid(row=
|
|
56
|
-
self.grey_dropdown.grid(row=
|
|
57
|
-
self.clahe_dropdown.grid(row=
|
|
58
|
-
self.padding_dropdown.grid(row=
|
|
59
|
-
self.single_id_dropdown.grid(row=
|
|
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,
|
|
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='
|
|
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='
|
|
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='
|
|
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)
|