simba-uw-tf-dev 4.7.6__py3-none-any.whl → 4.7.8__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.
Files changed (27) hide show
  1. simba/assets/.recent_projects.txt +1 -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 +35 -2
  5. simba/model/yolo_fit.py +42 -9
  6. simba/sandbox/clean_sleap.py +4 -0
  7. simba/third_party_label_appenders/transform/coco_keypoints_to_yolo.py +1 -2
  8. simba/third_party_label_appenders/transform/sleap_csv_to_yolo.py +21 -13
  9. simba/ui/create_project_ui.py +1 -1
  10. simba/ui/pop_ups/batch_preprocess_pop_up.py +2 -2
  11. simba/ui/pop_ups/simba_to_yolo_keypoints_popup.py +96 -96
  12. simba/ui/pop_ups/sleap_annotations_to_yolo_popup.py +32 -18
  13. simba/ui/pop_ups/sleap_csv_predictions_to_yolo_popup.py +15 -14
  14. simba/ui/pop_ups/video_processing_pop_up.py +8 -7
  15. simba/ui/pop_ups/yolo_plot_results.py +146 -153
  16. simba/ui/pop_ups/yolo_pose_train_popup.py +69 -23
  17. simba/ui/tkinter_functions.py +53 -6
  18. simba/utils/checks.py +2414 -2401
  19. simba/utils/read_write.py +22 -20
  20. simba/video_processors/batch_process_menus.py +22 -22
  21. simba/video_processors/video_processing.py +3 -2
  22. {simba_uw_tf_dev-4.7.6.dist-info → simba_uw_tf_dev-4.7.8.dist-info}/METADATA +1 -1
  23. {simba_uw_tf_dev-4.7.6.dist-info → simba_uw_tf_dev-4.7.8.dist-info}/RECORD +27 -24
  24. {simba_uw_tf_dev-4.7.6.dist-info → simba_uw_tf_dev-4.7.8.dist-info}/LICENSE +0 -0
  25. {simba_uw_tf_dev-4.7.6.dist-info → simba_uw_tf_dev-4.7.8.dist-info}/WHEEL +0 -0
  26. {simba_uw_tf_dev-4.7.6.dist-info → simba_uw_tf_dev-4.7.8.dist-info}/entry_points.txt +0 -0
  27. {simba_uw_tf_dev-4.7.6.dist-info → simba_uw_tf_dev-4.7.8.dist-info}/top_level.txt +0 -0
simba/utils/read_write.py CHANGED
@@ -71,7 +71,7 @@ from simba.utils.errors import (CorruptedFileError, DataHeaderError,
71
71
  NoFilesFoundError, NotDirectoryError,
72
72
  ParametersFileError, PermissionError,
73
73
  SimBAPAckageVersionError)
74
- from simba.utils.printing import SimbaTimer, stdout_success
74
+ from simba.utils.printing import SimbaTimer, stdout_information, stdout_success
75
75
  from simba.utils.warnings import (
76
76
  FileExistWarning, FrameRangeWarning, GPUToolsWarning, InvalidValueWarning,
77
77
  NoFileFoundWarning, ThirdPartyAnnotationsInvalidFileFormatWarning)
@@ -572,7 +572,9 @@ def get_video_info_ffmpeg(video_path: Union[str, os.PathLike]) -> Dict[str, Any]
572
572
  print(e.args)
573
573
  raise InvalidVideoFileError(msg=f'Cannot use FFMPEG to extract video meta data for video {video_name}, try OpenCV?', source=get_video_info_ffmpeg.__name__)
574
574
 
575
- def remove_a_folder(folder_dir: Union[str, os.PathLike], ignore_errors: Optional[bool] = True) -> None:
575
+ def remove_a_folder(folder_dir: Union[str, os.PathLike],
576
+ ignore_errors: Optional[bool] = True,
577
+ verbose: bool = False) -> None:
576
578
  """Helper to remove a directory"""
577
579
  valid_dir = check_if_dir_exists(in_dir=folder_dir, source=remove_a_folder.__name__, raise_error=False)
578
580
  if not valid_dir and not ignore_errors:
@@ -580,6 +582,7 @@ def remove_a_folder(folder_dir: Union[str, os.PathLike], ignore_errors: Optional
580
582
  if not valid_dir and ignore_errors:
581
583
  return
582
584
  try:
585
+ if verbose: stdout_information(msg=f'Removing directory {folder_dir}...')
583
586
  shutil.rmtree(folder_dir, ignore_errors=ignore_errors)
584
587
  except Exception as e:
585
588
  raise PermissionError(msg=f'Could not delete directory: {folder_dir}. is the directory or its content beeing used by anothe process?', source=remove_a_folder.__name__)
@@ -1759,7 +1762,9 @@ def read_roi_data(roi_path: Union[str, os.PathLike]) -> Tuple[pd.DataFrame, pd.D
1759
1762
 
1760
1763
 
1761
1764
 
1762
- def create_directory(paths: Union[str, os.PathLike, bytes, List[str], Tuple[str]], overwrite: bool = False) -> None:
1765
+ def create_directory(paths: Union[str, os.PathLike, bytes, List[str], Tuple[str]],
1766
+ overwrite: bool = False,
1767
+ verbose: bool = False) -> None:
1763
1768
 
1764
1769
  """
1765
1770
  Create one or multiple directories.
@@ -1779,15 +1784,17 @@ def create_directory(paths: Union[str, os.PathLike, bytes, List[str], Tuple[str]
1779
1784
  path = os.path.abspath(path)
1780
1785
  if not os.path.exists(path):
1781
1786
  try:
1787
+ if verbose: stdout_information(msg=f'Creating directory {path}...')
1782
1788
  os.makedirs(path)
1783
1789
  except Exception as e:
1784
- raise PermissionError(f'SimBA is not allowed to create the directory {path} ({e})')
1790
+ raise PermissionError(f'SimBA is not allowed to create the directory {path} ({e}). Is a file in this directory open in another process?')
1785
1791
  elif overwrite:
1786
1792
  try:
1787
1793
  remove_a_folder(folder_dir=path)
1794
+ if verbose: stdout_information(msg=f'Creating directory {path}...')
1788
1795
  os.makedirs(path)
1789
1796
  except Exception as e:
1790
- raise PermissionError(f'SimBA is not allowed to overwrite the directory {path} ({e})')
1797
+ raise PermissionError(f'SimBA is not allowed to overwrite the directory {path} ({e}). Is a file in this directory open in another process?')
1791
1798
 
1792
1799
 
1793
1800
  def find_max_vertices_coordinates(shapes: List[Union[Polygon, LineString, MultiPolygon, Point]], buffer: Optional[int] = None) -> Tuple[int, int]:
@@ -1935,7 +1942,8 @@ def read_dlc_superanimal_h5(path: Union[str, os.PathLike], col_names: List[str])
1935
1942
  return data
1936
1943
 
1937
1944
 
1938
- def clean_sleap_filenames_in_directory(dir: Union[str, os.PathLike]) -> None:
1945
+ def clean_sleap_filenames_in_directory(dir: Union[str, os.PathLike],
1946
+ verbose: bool = False) -> None:
1939
1947
  """
1940
1948
  Clean up SLEAP input filenames in the specified directory by removing a prefix
1941
1949
  and a suffix, and renaming the files to match the names of the original video files.
@@ -1949,24 +1957,18 @@ def clean_sleap_filenames_in_directory(dir: Union[str, os.PathLike]) -> None:
1949
1957
  >>> clean_sleap_filenames_in_directory(dir='/Users/simon/Desktop/envs/troubleshooting/Hornet_SLEAP/import/')
1950
1958
  """
1951
1959
 
1952
- SLEAP_CSV_SUBSTR = ".analysis"
1953
1960
  check_if_dir_exists(in_dir=dir)
1954
- for file_path in glob.glob(
1955
- dir + f"/*.{Formats.CSV.value}" + f"/*.{Formats.H5.value}"
1956
- ):
1957
- file_name = os.path.basename(p=file_path)
1958
- if (SLEAP_CSV_SUBSTR in file_name) and ("_" in file_name):
1959
- new_name = os.path.join(
1960
- dir,
1961
- file_name.replace(file_name.split("_")[0] + "_", "").replace(
1962
- SLEAP_CSV_SUBSTR, ""
1963
- ),
1964
- )
1965
- os.rename(file_path, new_name)
1961
+ data_paths = find_files_of_filetypes_in_directory(directory=dir, extensions=[f'.{Formats.H5.value}', f'.{Formats.CSV.value}'], raise_error=True, sort_alphabetically=True, as_dict=False)
1962
+ for file_path in data_paths:
1963
+ directory, file_name, ext = get_fn_ext(filepath=file_path)
1964
+ if verbose: print(f'Renaming {file_name} ...')
1965
+ new_name = clean_sleap_file_name(filename=file_name)
1966
+ new_path = os.path.join(directory, f'{new_name}{ext}')
1967
+ if new_path != file_path:
1968
+ os.rename(file_path, new_path)
1966
1969
  else:
1967
1970
  pass
1968
1971
 
1969
-
1970
1972
  def copy_files_in_directory(in_dir: Union[str, os.PathLike],
1971
1973
  out_dir: Union[str, os.PathLike],
1972
1974
  raise_error: bool = True,
@@ -20,7 +20,7 @@ from simba.utils.checks import (check_ffmpeg_available,
20
20
  check_if_string_value_is_valid_video_timestamp,
21
21
  check_int, check_nvidea_gpu_available,
22
22
  check_that_hhmmss_start_is_before_end)
23
- from simba.utils.enums import Formats, Keys, Links, Options, TextOptions
23
+ from simba.utils.enums import Formats, Keys, Links, Options
24
24
  from simba.utils.errors import (FFMPEGCodecGPUError, FFMPEGNotFoundError,
25
25
  NoFilesFoundError)
26
26
  from simba.utils.lookups import (get_color_dict, get_ffmpeg_encoders,
@@ -28,9 +28,7 @@ from simba.utils.lookups import (get_color_dict, get_ffmpeg_encoders,
28
28
  percent_to_crf_lookup,
29
29
  video_quality_to_preset_lookup)
30
30
  from simba.utils.printing import SimbaTimer, stdout_success
31
- from simba.utils.read_write import (
32
- check_if_hhmmss_timestamp_is_valid_part_of_video, get_fn_ext,
33
- get_video_meta_data, str_2_bool)
31
+ from simba.utils.read_write import (check_if_hhmmss_timestamp_is_valid_part_of_video, get_fn_ext, get_video_meta_data, str_2_bool, read_frm_of_video)
34
32
  from simba.video_processors.batch_process_create_ffmpeg_commands import \
35
33
  FFMPEGCommandCreator
36
34
  from simba.video_processors.roi_selector import ROISelector
@@ -76,12 +74,15 @@ class BatchProcessFrame(PopUpMixin):
76
74
  raise FFMPEGNotFoundError(msg='Cannot perform batch video processing: FFMPEG not found', source=self.__class__.__name__)
77
75
 
78
76
 
79
- PopUpMixin.__init__(self, title="BATCH PRE-PROCESS VIDEOS IN SIMBA", size=(2000, 600), icon='factory')
77
+
80
78
  self.input_dir, self.output_dir = input_dir, output_dir
81
79
  if not os.path.exists(self.output_dir):
82
80
  os.makedirs(self.output_dir)
83
81
  self.videos_in_dir_dict, self.crop_dict = {}, {}
84
82
  self.get_input_files()
83
+ if len(list(self.videos_in_dir_dict.keys())) == 0:
84
+ raise NoFilesFoundError(msg=f"The input directory {self.input_dir} contains ZERO video files in either .avi, .mp4, .mov, .flv, or m4v format", source=self.__class__.__name__)
85
+ PopUpMixin.__init__(self, title="BATCH PRE-PROCESS VIDEOS IN SIMBA", size=(2000, 600), icon='factory')
85
86
  self.red_drop_img = ImageTk.PhotoImage(image=PIL.Image.open(MENU_ICONS["crop_red"]["icon_path"]))
86
87
  self.black_crop_img = ImageTk.PhotoImage(image=PIL.Image.open(MENU_ICONS["crop"]["icon_path"]))
87
88
  self.percent_to_crf_lookup = percent_to_crf_lookup()
@@ -91,8 +92,7 @@ class BatchProcessFrame(PopUpMixin):
91
92
  self.video_quality_to_preset_lookup = video_quality_to_preset_lookup()
92
93
  self.clrs = get_color_dict()
93
94
  self.gpu_available_state = NORMAL if check_nvidea_gpu_available() else DISABLED
94
- if len(list(self.videos_in_dir_dict.keys())) == 0:
95
- raise NoFilesFoundError(msg=f"The input directory {self.input_dir} contains ZERO video files in either .avi, .mp4, .mov, .flv, or m4v format", source=self.__class__.__name__)
95
+
96
96
  self.max_char_vid_name = len(max(list(self.videos_in_dir_dict.keys()), key=len))
97
97
  self.root.lift()
98
98
  self.root.attributes("-topmost", True)
@@ -124,24 +124,24 @@ class BatchProcessFrame(PopUpMixin):
124
124
  self.quick_settings_frm = CreateLabelFrameWithIcon(parent=self.main_frm,header="QUICK SETTINGS",icon_name=Keys.DOCUMENTATION.value,icon_link=Links.BATCH_PREPROCESS.value)
125
125
 
126
126
  self.clip_video_settings_frm = CreateLabelFrameWithIcon(parent=self.quick_settings_frm, header='CLIP VIDEOS SETTING', icon_name='clip', padx=5, pady=5)
127
- self.quick_clip_start_entry_box = Entry_Box(parent=self.clip_video_settings_frm, fileDescription='START TIME: ', labelwidth=15, value="00:00:00", justify='center', img='play', entry_box_width=12)
128
- self.quick_clip_end_entry_box = Entry_Box(parent=self.clip_video_settings_frm, fileDescription='END TIME: ', labelwidth=15, value="00:00:00", justify='center', img='finish', entry_box_width=12)
127
+ self.quick_clip_start_entry_box = Entry_Box(parent=self.clip_video_settings_frm, fileDescription='START TIME: ', labelwidth=15, value="00:00:00", justify='center', img='play', entry_box_width=12, tooltip_key='BATCH_CLIP_START_TIME')
128
+ self.quick_clip_end_entry_box = Entry_Box(parent=self.clip_video_settings_frm, fileDescription='END TIME: ', labelwidth=15, value="00:00:00", justify='center', img='finish', entry_box_width=12, tooltip_key='BATCH_CLIP_END_TIME')
129
129
  self.quick_clip_apply = SimbaButton(parent=self.clip_video_settings_frm, txt='APPLY', img='arrow_down_green_2', cmd=self.apply_trim_to_all)
130
130
 
131
131
  self.quick_downsample_frm = CreateLabelFrameWithIcon(parent=self.quick_settings_frm, header='DOWNSAMPLE VIDEOS', icon_name='resize', padx=5, pady=5)
132
- self.quick_downsample_width = Entry_Box(parent=self.quick_downsample_frm, fileDescription='WIDTH: ', labelwidth=15, value=400, justify='center', img='width', entry_box_width=12)
133
- self.quick_downsample_height = Entry_Box(parent=self.quick_downsample_frm, fileDescription='HEIGHT: ', labelwidth=15, value=600, justify='center', img='height', entry_box_width=12)
132
+ self.quick_downsample_width = Entry_Box(parent=self.quick_downsample_frm, fileDescription='WIDTH: ', labelwidth=15, value=400, justify='center', img='width', entry_box_width=12, tooltip_key='BATCH_DOWNSAMPLE_WIDTH')
133
+ self.quick_downsample_height = Entry_Box(parent=self.quick_downsample_frm, fileDescription='HEIGHT: ', labelwidth=15, value=600, justify='center', img='height', entry_box_width=12, tooltip_key='BATCH_DOWNSAMPLE_HEIGHT')
134
134
  self.quick_downsample_apply = SimbaButton(parent=self.quick_downsample_frm, txt='APPLY', img='arrow_down_green_2', cmd=self.apply_resolution_to_all)
135
135
 
136
136
 
137
137
  self.quick_set_fps = CreateLabelFrameWithIcon(parent=self.quick_settings_frm, header="CHANGE FPS", icon_name='camera', padx=5, pady=12)
138
- self.quick_fps_entry_box = Entry_Box(parent=self.quick_set_fps, fileDescription='FPS: ', labelwidth=15, value=15.0, justify='center', img='camera', entry_box_width=12)
138
+ self.quick_fps_entry_box = Entry_Box(parent=self.quick_set_fps, fileDescription='FPS: ', labelwidth=15, value=15.0, justify='center', img='camera', entry_box_width=12, tooltip_key='BATCH_FPS')
139
139
  self.quick_fps_apply = SimbaButton(parent=self.quick_set_fps, txt='APPLY', img='arrow_down_green_2', cmd=self.apply_fps_to_all)
140
140
 
141
141
 
142
142
  self.quick_set_quality = CreateLabelFrameWithIcon(parent=self.quick_settings_frm, header="OUTPUT VIDEO QUALITY", icon_name='star', padx=5, pady=12)
143
- self.use_gpu_dropdown = SimBADropDown(parent=self.quick_set_quality, label="USE GPU", label_width=20, dropdown_options=['TRUE', 'FALSE'], value='FALSE', img='gpu_3', state=self.gpu_available_state, dropdown_width=15)
144
- self.quick_set_quality_dropdown = SimBADropDown(parent=self.quick_set_quality, label='VIDEO QUALITY %', label_width=20, dropdown_options=self.cpu_video_quality, value=60, img='star', dropdown_width=15)
143
+ self.use_gpu_dropdown = SimBADropDown(parent=self.quick_set_quality, label="USE GPU", label_width=20, dropdown_options=['TRUE', 'FALSE'], value='FALSE', img='gpu_3', state=self.gpu_available_state, dropdown_width=15, tooltip_key='USE_GPU')
144
+ self.quick_set_quality_dropdown = SimBADropDown(parent=self.quick_set_quality, label='VIDEO QUALITY %', label_width=20, dropdown_options=self.cpu_video_quality, value=60, img='star', dropdown_width=15, tooltip_key='OUTPUT_VIDEO_QUALITY')
145
145
  self.quick_set_quality_apply = SimbaButton(parent=self.quick_set_quality, txt='APPLY', img='arrow_down_green_2', cmd=self.apply_quality_to_all)
146
146
 
147
147
  self.quick_settings_frm.grid(row=0, column=0, sticky=W, padx=10)
@@ -224,15 +224,15 @@ class BatchProcessFrame(PopUpMixin):
224
224
  self.headings["start_time_col_head"] = SimBALabel(parent=self.videos_frm, txt='START \n TIME', font=Formats.FONT_REGULAR_BOLD.value, justify='center', padx=12, img='play')
225
225
  self.headings["end_time_col_head"] = SimBALabel(parent=self.videos_frm, txt='END \n TIME', font=Formats.FONT_REGULAR_BOLD.value, justify='center', img='stop', padx=12)
226
226
  self.headings["video_quality_head"] = SimBALabel(parent=self.videos_frm, txt='QUALITY', font=Formats.FONT_REGULAR_BOLD.value, justify='center', padx=12, img='star')
227
- self.headings["shorten_all_videos_cbox"], self.headings["clip_cb_var"] = SimbaCheckbox(parent=self.videos_frm, txt='APPLY \n CLIP', txt_img='clip', cmd=lambda: self.inverse_all_cb_ticks(variable_name="clip_cb_var"))
227
+ self.headings["shorten_all_videos_cbox"], self.headings["clip_cb_var"] = SimbaCheckbox(parent=self.videos_frm, txt='APPLY \n CLIP', txt_img='clip', cmd=lambda: self.inverse_all_cb_ticks(variable_name="clip_cb_var"), tooltip_key='BATCH_APPLY_CLIP')
228
228
  self.headings["video_width_col_head"] = SimBALabel(parent=self.videos_frm, txt='WIDTH', img='width', font=Formats.FONT_REGULAR_BOLD.value, justify='center', padx=12)
229
229
  self.headings["video_height_col_head"] = SimBALabel(parent=self.videos_frm, txt='HEIGHT', img='height', font=Formats.FONT_REGULAR_BOLD.value, justify='center', padx=12)
230
- self.headings["downsample_all_videos_cbox"], self.headings["downsample_cb_var"] = SimbaCheckbox(parent=self.videos_frm, txt='APPLY \n DOWNSAMPLE', cmd=lambda: self.inverse_all_cb_ticks(variable_name="downsample_cb_var"))
230
+ self.headings["downsample_all_videos_cbox"], self.headings["downsample_cb_var"] = SimbaCheckbox(parent=self.videos_frm, txt='APPLY \n DOWNSAMPLE', cmd=lambda: self.inverse_all_cb_ticks(variable_name="downsample_cb_var"), tooltip_key='BATCH_APPLY_DOWNSAMPLE')
231
231
  self.headings["fps_col_head"] = SimBALabel(parent=self.videos_frm, txt='FPS', img='camera', font=Formats.FONT_REGULAR_BOLD.value, justify='center', padx=12)
232
- self.headings["change_fps_all_videos_cbox"], self.headings["fps_cb_var"] = SimbaCheckbox(parent=self.videos_frm, txt='APPLY \n VIDEO FPS', cmd=lambda: self.inverse_all_cb_ticks(variable_name="fps_cb_var"))
233
- self.headings["grayscale_cbox"], self.headings["grayscale_cb_var"] = SimbaCheckbox(parent=self.videos_frm, txt='APPLY \n GREYSCALE', cmd=lambda: self.inverse_all_cb_ticks(variable_name="grayscale_cb_var"))
234
- self.headings["frame_cnt_cbox"], self.headings["frame_cnt_cb_var"] = SimbaCheckbox(parent=self.videos_frm, txt='APPLY \n FRAME COUNT', cmd=lambda: self.inverse_all_cb_ticks(variable_name="frame_cnt_cb_var"))
235
- self.headings["apply_clahe_cbox"], self.headings["apply_clahe_cb_var"] = SimbaCheckbox(parent=self.videos_frm, txt='APPLY \n CLAHE', cmd=lambda: self.inverse_all_cb_ticks(variable_name="apply_clahe_cb_var"))
232
+ self.headings["change_fps_all_videos_cbox"], self.headings["fps_cb_var"] = SimbaCheckbox(parent=self.videos_frm, txt='APPLY \n VIDEO FPS', cmd=lambda: self.inverse_all_cb_ticks(variable_name="fps_cb_var"), tooltip_key='BATCH_APPLY_FPS')
233
+ self.headings["grayscale_cbox"], self.headings["grayscale_cb_var"] = SimbaCheckbox(parent=self.videos_frm, txt='APPLY \n GREYSCALE', cmd=lambda: self.inverse_all_cb_ticks(variable_name="grayscale_cb_var"), tooltip_key='BATCH_APPLY_GREYSCALE')
234
+ self.headings["frame_cnt_cbox"], self.headings["frame_cnt_cb_var"] = SimbaCheckbox(parent=self.videos_frm, txt='APPLY \n FRAME COUNT', cmd=lambda: self.inverse_all_cb_ticks(variable_name="frame_cnt_cb_var"), tooltip_key='BATCH_APPLY_FRAME_COUNT')
235
+ self.headings["apply_clahe_cbox"], self.headings["apply_clahe_cb_var"] = SimbaCheckbox(parent=self.videos_frm, txt='APPLY \n CLAHE', cmd=lambda: self.inverse_all_cb_ticks(variable_name="apply_clahe_cb_var"), tooltip_key='BATCH_APPLY_CLAHE')
236
236
 
237
237
  self.videos_frm.grid(row=1, column=0, sticky=W, padx=5, pady=15)
238
238
  self.headings["video_name_col_head"].grid(row=0, column=0, sticky=NW)
@@ -270,12 +270,12 @@ class BatchProcessFrame(PopUpMixin):
270
270
  for w in self.videos_frm.grid_slaves():
271
271
  if int(w.grid_info()["row"]) > 1:
272
272
  w.destroy()
273
-
274
273
  for video_cnt, (name, data) in enumerate(self.videos_in_dir_dict.items()):
275
274
  self.videos[name] = {}
276
275
  row = video_cnt * 2 + 2
277
276
  row_color = '#f8f8f8' if video_cnt % 2 == 0 else '#e5e5e5'
278
- self.videos[name]["video_name_lbl"] = SimBALabel(parent=self.videos_frm, txt=name, font=Formats.FONT_REGULAR_BOLD.value, width=self.max_char_vid_name, justify='center', bg_clr=row_color)
277
+ img = read_frm_of_video(video_path=data['file_path'], frame_index=0, raise_error=False, size=(420, 280), keep_aspect_ratio=True)
278
+ self.videos[name]["video_name_lbl"] = SimBALabel(parent=self.videos_frm, txt=name, font=Formats.FONT_REGULAR_BOLD.value, width=self.max_char_vid_name, justify='center', bg_clr=row_color, hover_img=img)
279
279
  self.videos[name]["crop_btn"] = SimbaButton(parent=self.videos_frm, txt='CROP', txt_clr='black', cmd=lambda k=self.videos[name]["video_name_lbl"]["text"]: self.batch_process_crop_function(k), img='crop_2')
280
280
  self.videos[name]["start_entry"] = Entry_Box(parent=self.videos_frm, fileDescription='', value="00:00:00", justify='center', entry_font=Formats.FONT_REGULAR_BOLD.value, entry_box_width=12)
281
281
  self.videos[name]["end_entry"] = Entry_Box(parent=self.videos_frm, fileDescription='', value=data["video_length"], justify='center', entry_font=Formats.FONT_REGULAR_BOLD.value, entry_box_width=12)
@@ -53,10 +53,11 @@ from simba.utils.errors import (CountError, DirectoryExistError,
53
53
  NotDirectoryError, ResolutionError,
54
54
  SimBAGPUError)
55
55
  from simba.utils.lookups import (get_current_time, get_ffmpeg_codec,
56
- get_ffmpeg_crossfade_methods, get_fonts,
56
+ get_ffmpeg_crossfade_methods,
57
+ get_ffmpeg_encoders, get_fonts,
57
58
  get_named_colors, percent_to_crf_lookup,
58
59
  percent_to_qv_lk, quality_pct_to_crf,
59
- video_quality_to_preset_lookup, get_ffmpeg_encoders)
60
+ video_quality_to_preset_lookup)
60
61
  from simba.utils.printing import SimbaTimer, stdout_information, stdout_success
61
62
  from simba.utils.read_write import (
62
63
  check_if_hhmmss_timestamp_is_valid_part_of_video,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: simba-uw-tf-dev
3
- Version: 4.7.6
3
+ Version: 4.7.8
4
4
  Summary: Toolkit for computer classification and analysis of behaviors in experimental animals
5
5
  Home-page: https://github.com/sgoldenlab/simba
6
6
  Author: Simon Nilsson, Jia Jie Choong, Sophia Hwang
@@ -13,7 +13,7 @@ simba/__init__.py,sha256=Zbw277SaA4dLpF3IDQnIjzOb-GWKgF-V6caod95b4YA,539
13
13
  simba/requirements.txt,sha256=Ou1KKYqIsOaqQ10UeqxTPorpHWBH5rTMGzpFif1VRWc,2072
14
14
  simba/assets/.DS_Store,sha256=ElS4pjNueynnfN3F6ibhpIe9tS-jrVEx88jASA9_DYo,14340
15
15
  simba/assets/.env,sha256=bI_XK4TDnRDnV1M5SyZrEfeayi9ZK7rX2lrYQcJnH0s,538
16
- simba/assets/.recent_projects.txt,sha256=18t7rzwuoVChVyfpME5c11LShZT9Frb8rEj6Puvfba8,265
16
+ simba/assets/.recent_projects.txt,sha256=N08PrJVCrYbcdE6ZRhKBmRLcTQLD_jikoSrTWC41Gps,339
17
17
  simba/assets/TheGoldenLab.PNG,sha256=Dwg7zXASz_XDhJ_gDgKyBmAINxLL-Zkg-3xzy94YEsc,31812
18
18
  simba/assets/UbuntuMono-Regular.ttf,sha256=N0xTF4v7xLE_m2rVu8gaQ5OqZSZf_H0zqnvYnxKjDfg,189004
19
19
  simba/assets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -173,6 +173,8 @@ simba/assets/icons/flip_black.png,sha256=ZQ1SK3SNjwBeBBqxKLWVM4JXq_mTtIONmwLABR9
173
173
  simba/assets/icons/flip_green.png,sha256=G3ZISmJP44T-tYZZZrDu284Pxu7PMzwwE9gbi8XVXKI,1072
174
174
  simba/assets/icons/flip_red.png,sha256=Ow8sbCPAAwd3YuM5cP342zOBKntNLUePvZMgJLmHuj0,1132
175
175
  simba/assets/icons/folder.png,sha256=-kwt7XAbokXAM-AMw8nfoO8doamxNLUDA-cp4wFBpVs,464
176
+ simba/assets/icons/folder_2.png,sha256=-QJo11xbdkyGfngahvdQwO9NmMNVK6nYhVh2PKsTL3c,292
177
+ simba/assets/icons/folder_video.png,sha256=BmNs-5Q8M5uu9z5B8XAmhfuVN9oAPJl_0YvXcnBkYSM,428
176
178
  simba/assets/icons/font.png,sha256=ERoNS-BSd-E9kyU4Q96RCKdxTPguqICvPkh5jZu47vM,547
177
179
  simba/assets/icons/font_size.png,sha256=JK18ekjZkGi4hkauWxon4ecOlXPf7DSS7FQBYxN_QIY,390
178
180
  simba/assets/icons/forest.png,sha256=saOvtPz6P_-uF9ObNpVcpVAURzXW1-A_BSevzQS84Pc,588
@@ -462,7 +464,7 @@ simba/assets/lookups/critical_values_05.pickle,sha256=bYlqp9T6ehVIjIJr3Uwfulj-kS
462
464
  simba/assets/lookups/feature_extraction_headers.csv,sha256=I5TLfAihpHgzUZ7OUyGge-Yu-XGbQmHbDFAD4vVAc4w,2987
463
465
  simba/assets/lookups/features.csv,sha256=bc6aN2ZRa2J2dxur-Zjcpc4I3q6vd-gN2erwnhdzLIk,14175
464
466
  simba/assets/lookups/model_names.parquet,sha256=hOuvYONO8wZGcAwRNSf_hS_lUaynC8Gt24MLOg3w5ZA,270783
465
- simba/assets/lookups/tooptips.json,sha256=uPFy_Ew53vTtejvup5DsmvEyfZkUeaUyGeDxXrM0crU,6156
467
+ simba/assets/lookups/tooptips.json,sha256=OJurG8K738TNZVwAk-OfUFuC69ZW7UjiU-8mjowKcd8,11349
466
468
  simba/assets/lookups/unsupervised_example_x.csv,sha256=bc6aN2ZRa2J2dxur-Zjcpc4I3q6vd-gN2erwnhdzLIk,14175
467
469
  simba/assets/lookups/yolo.yaml,sha256=3Omt-t-w555E4oAJsRRblBjzyiTW9e5x-0VuyQ-t9C0,278
468
470
  simba/assets/lookups/yolo_schematics/yolo_1.csv,sha256=TzUzWAtia4P-5FRwLPnjU0zDSkAA-nItNFCcq6nG_iQ,72
@@ -644,7 +646,7 @@ simba/model/sam_inference.py,sha256=4Jwy-OU773iJI2Zyl-tVHLDaUU1BkjJpr_riRkPPTY8,
644
646
  simba/model/train_multiclass_rf.py,sha256=B445OFCLexqYYCeiaLe3-JI8PXm3JK3YcN8irAZFhNQ,15219
645
647
  simba/model/train_multilabel_rf.py,sha256=oZUrnd7bfhaXVMhedSL7q47taiCgh4mn8ONdvkVAeo4,7321
646
648
  simba/model/train_rf.py,sha256=OlF-Bq2TItMh7ao0xXKl43mFJkr2OHqIdwytPg41hCw,22700
647
- simba/model/yolo_fit.py,sha256=9LZHvytKFbfelqwm4y0We1neZOPEn-UCDXJhMdvOU_o,11382
649
+ simba/model/yolo_fit.py,sha256=uF-HYd6fxKupJ8TuZcx6V0JJvFbMloKr0ItuLF0bRbw,12680
648
650
  simba/model/yolo_inference.py,sha256=ZD-43PZB1Ja5f7W_kPWyRr4j8YvQkTkNsq7ois9JuHw,13565
649
651
  simba/model/yolo_pose_inference.py,sha256=kpHYnsS-eK2QmdXwiZfml8AGLCdQ4XZB-xBMXm7AZno,28202
650
652
  simba/model/yolo_pose_track_inference.py,sha256=gOopeNEUggqJfH73dDkjetHlpwsU-VrjCH4B4gKOktw,22917
@@ -845,6 +847,7 @@ simba/sandbox/clahe_fix.py,sha256=mX5kpUk4v9XRCq8ZMDN9N_-f9jaQ8c00EEdAqMZjP4A,65
845
847
  simba/sandbox/clahe_gpu.py,sha256=4un9bbVkNlhF2wmH7XSPy7BwhGiQt937qwLhCbm4JDY,3306
846
848
  simba/sandbox/clahe_mp.py,sha256=yM0aGRR0Kh5u7ENBhALmPVhAgQ1qw7-3X8RevIgeHE4,6631
847
849
  simba/sandbox/clean_features.py,sha256=yGjrcwKCdaaxDAF0qLT6-HZFsP8ETfRokx9yJQD_AsY,920
850
+ simba/sandbox/clean_sleap.py,sha256=_EqW7c06ytRdZF8i76GKSpOGMJcIKmVwkdIDwGnC3nw,205
848
851
  simba/sandbox/clean_sleap_filename.py,sha256=XyND8MT65SGi3c3QlLgLFzLLQ-BS7eNZr_vlBbf9ulI,959
849
852
  simba/sandbox/clip_multiple_videos_by_frame_numbers.py,sha256=nEk0uU0Jppm9ScHRRxZBX49RrwotIZVP0_4jLkDPbgc,11451
850
853
  simba/sandbox/clip_videos_by_frm.py,sha256=erJzAg1A_7aUwnrL-SOlO_Lm0M35Tm6x3HMAlY6kTa8,4550
@@ -1344,7 +1347,7 @@ simba/third_party_label_appenders/solomon_importer.py,sha256=YkHUgtQhLEzMVPvxTcK
1344
1347
  simba/third_party_label_appenders/third_party_appender.py,sha256=_jvK38h-qpVyNU6GKJlj0-uCBGyu9gwhkowtiWArbUg,21580
1345
1348
  simba/third_party_label_appenders/tools.py,sha256=-DzeTk7ULQML6r0zHPMjBw_x5oJD0WeN_4UpK6_dSYk,21212
1346
1349
  simba/third_party_label_appenders/transform/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1347
- simba/third_party_label_appenders/transform/coco_keypoints_to_yolo.py,sha256=9e8co8P-YbmpmNNQ0BOupB5MFTiX25LQpk_QdZMHdFI,15616
1350
+ simba/third_party_label_appenders/transform/coco_keypoints_to_yolo.py,sha256=1YCFPdpD50sCG22mw13j47AJ8GhiRSRTdl9M-deABpk,15608
1348
1351
  simba/third_party_label_appenders/transform/coco_keypoints_to_yolo_bbox.py,sha256=dP3cIM4uDPLrpADa_SJf8wvFOr8PqhQTVZ88gTEuvyA,15601
1349
1352
  simba/third_party_label_appenders/transform/coco_keypoints_to_yolo_seg.py,sha256=ko160LwH0px8iXhf_GG_nUi2bq4m9Ys0q5XyzFd2T5o,9536
1350
1353
  simba/third_party_label_appenders/transform/dlc_ma_h5_to_yolo.py,sha256=SkMPLpCoJRtFcuguoJd8RcdHj3-3gViqQkHisffkWFM,11151
@@ -1360,7 +1363,7 @@ simba/third_party_label_appenders/transform/labelme_to_yolo_seg.py,sha256=wJOGVZ
1360
1363
  simba/third_party_label_appenders/transform/simba_roi_to_yolo.py,sha256=i0bO_ZwjHSMzCfHlKecuqYXBvJgzhg2ohoVXdjzkemU,12969
1361
1364
  simba/third_party_label_appenders/transform/simba_to_yolo.py,sha256=9_gH94YxdeDwVfZF9Vlv-w5SiOu41X1Lpk98UWztXZ4,13570
1362
1365
  simba/third_party_label_appenders/transform/simba_to_yolo_seg.py,sha256=NzmzQj618_SqTn16b9PPohaFYjzmtFFMUKoDezN_wLA,12732
1363
- simba/third_party_label_appenders/transform/sleap_csv_to_yolo.py,sha256=JFfwYyxtWGchQITr25r6NVwastxu16abMVaHTNq1nLU,11611
1366
+ simba/third_party_label_appenders/transform/sleap_csv_to_yolo.py,sha256=lIPv-QhFO22OYHrcT9OaIjO7UVntZrUA3IzkYnu3fVI,12832
1364
1367
  simba/third_party_label_appenders/transform/sleap_h5_to_yolo.py,sha256=bb-5JgTp8rtOdJgkbsghQNyxM4BwQSRkY37-v2XVMHM,11036
1365
1368
  simba/third_party_label_appenders/transform/sleap_to_yolo.py,sha256=yorjyNlUnPzgVJDHahxBlIE2F-1JTvJaIXynnRZrAFw,10342
1366
1369
  simba/third_party_label_appenders/transform/utils.py,sha256=2W1G0pyUm7oHqu0xhyJowxPp9xxSmMpqXfNzGJIFjvo,31652
@@ -1369,14 +1372,14 @@ simba/ui/.DS_Store,sha256=iQb7oqWWyurQk2ZeMphWuiG7QX5btEEdLeeeHBL1zRU,10244
1369
1372
  simba/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1370
1373
  simba/ui/blob_quick_check_interface.py,sha256=DqedeHPFdbiYEX15V_wi5T5zJbgyn4mSbFdjFdmy7xM,12377
1371
1374
  simba/ui/blob_tracker_ui.py,sha256=42ojgDgXRyMqk_-v0S_0P4glFi-QVvSx0VNAlAjSIZc,36232
1372
- simba/ui/create_project_ui.py,sha256=HWhhcCOhsQcLJawMWizvMHb22014Jfj80TIaPA9uAq0,12526
1375
+ simba/ui/create_project_ui.py,sha256=lTl9qW8pnthKQafxWVvKzJ0eRW9NGb1Mh25FTR-ZPNk,12544
1373
1376
  simba/ui/get_tree_view.py,sha256=KpEs89bZ_XMoJVdH2G-J8tajBUAn8XToLzfnT1XnfcY,6432
1374
1377
  simba/ui/import_pose_frame.py,sha256=YTnbIXGiImkB3Nuxjyc6k2iE_bqD9tt7cLyhjCjae6Y,38518
1375
1378
  simba/ui/import_videos_frame.py,sha256=i0LnQzPLFne9dA_nvpVWAHYGmi0aTRXpiHzEog_-Raw,6614
1376
1379
  simba/ui/machine_model_settings_ui.py,sha256=hTfpBxtfYGH9Rsf3JdQ5Sc8z874tYAoZefvjF1JD6gA,38292
1377
1380
  simba/ui/ml_settings_frm.py,sha256=f1-E6pEGjWJVF3I6n0azO9zAnsskpZjInViguHIDntw,3101
1378
1381
  simba/ui/px_to_mm_ui.py,sha256=ETedZPFkloU0l3JeGnhiSIAsGBQzzv0YrDWtiVGOmJ4,9387
1379
- simba/ui/tkinter_functions.py,sha256=CUha5AY7iAuFL4Nt2oxHhV9eZIEuyDMq0J_VSoTjSio,41511
1382
+ simba/ui/tkinter_functions.py,sha256=2CFxlXZ8-gRxTRBPtcHsga1PkR8wlwJGIXYsxTgHrRk,43526
1380
1383
  simba/ui/user_defined_pose_creator.py,sha256=QAfdp8r225DONLaCgQJe6kXiZZLj20VQCLJEnCvZsKs,9249
1381
1384
  simba/ui/video_info_ui.py,sha256=ld_fN-3vCYJDFv1t9i5B-VVtoaBCspDmiDUIfOSJb_8,17262
1382
1385
  simba/ui/video_timelaps.py,sha256=GSQAD0Qg_7ctDsUsKFHm-6pSYGau_EZv5oBJ50ssUUE,26010
@@ -1387,7 +1390,7 @@ simba/ui/pop_ups/animal_directing_other_animals_pop_up.py,sha256=eaRVoEJ0WPnR15B
1387
1390
  simba/ui/pop_ups/append_roi_features_animals_pop_up.py,sha256=__UwX3PuzPIeg5mSOY2yk4rJPHwwyCsWpLuqcBhLgH0,3308
1388
1391
  simba/ui/pop_ups/append_roi_features_bodypart_pop_up.py,sha256=b21GIlgBCgAAM-MR_1LUmAdV9oiyHzO4fv_4HvqjVQM,1955
1389
1392
  simba/ui/pop_ups/archive_files_pop_up.py,sha256=4dByXZS0bCZxy06-7WoElmcFSMoKfBbX3ZgamkZgIfs,1734
1390
- simba/ui/pop_ups/batch_preprocess_pop_up.py,sha256=8-iWRgnWriZ4nBr9ci-ooZNdxrGbLWpN5_xfmzOIS8w,2818
1393
+ simba/ui/pop_ups/batch_preprocess_pop_up.py,sha256=DruWHeMYAlf18vK_LeyO9ewGFPKiGbCtIHGwHZQ9RQA,2869
1391
1394
  simba/ui/pop_ups/blob_visualizer_pop_up.py,sha256=6OzJMROHowZWIcI5FL9a8uIo70K_dZKaVNs9-rUWWbE,6924
1392
1395
  simba/ui/pop_ups/boolean_conditional_slicer_pup_up.py,sha256=q3IGjO4rwCCM8ODS2O7CueNRPFvSkJLHAgcV31sE0y4,5506
1393
1396
  simba/ui/pop_ups/change_speed_popup.py,sha256=59Ck0kzLTQpE5AXURVRcNdK-a0kFOnwvTE0RZjs0lfI,5940
@@ -1462,10 +1465,10 @@ simba/ui/pop_ups/select_video_for_pseudo_labelling_popup.py,sha256=KLih5Z-Pj_b0S
1462
1465
  simba/ui/pop_ups/set_machine_model_parameters_pop_up.py,sha256=hr3ekYbKZ_7NxeFbQwNpaeR7cRERHi4yrMSGriTdBj4,5881
1463
1466
  simba/ui/pop_ups/severity_analysis_pop_up.py,sha256=WkD85uom2qrsYwc-Ykppy9gEuI1jhCgMhoux9ayejn4,9015
1464
1467
  simba/ui/pop_ups/simba_rois_to_yolo_pop_up.py,sha256=1JI6iBjMFuO9C2-TWSL6wKVKYWCD0zIHAHsVVuIUJPc,4423
1465
- simba/ui/pop_ups/simba_to_yolo_keypoints_popup.py,sha256=XEuwZ7ijAB_jrnFJHUqUWfneEnZoXN5GiiJX9m5jKWE,5715
1468
+ simba/ui/pop_ups/simba_to_yolo_keypoints_popup.py,sha256=dnchG6IguHxD2gkFjyqIaER9Uj-7TEq8nGPGcoL2Hog,5931
1466
1469
  simba/ui/pop_ups/single_video_to_frames_popup.py,sha256=--Ex2j7sYdWbHC5Ea-Lf_FInCEXZShlzS9Idzt1s7f4,5326
1467
- simba/ui/pop_ups/sleap_annotations_to_yolo_popup.py,sha256=rcHZCZIh4jZX8zPzcY9NRlx2rTjSVWLNdQIDK52Zs6Q,4863
1468
- simba/ui/pop_ups/sleap_csv_predictions_to_yolo_popup.py,sha256=_sY7scL_Eb7duGqkYT2qwOfs7mB8ndMaCQvIZDNUKXo,7048
1470
+ simba/ui/pop_ups/sleap_annotations_to_yolo_popup.py,sha256=uJWvPuSgske-5p89entlomJF7qzDXXf_M4xtBvVliP8,5918
1471
+ simba/ui/pop_ups/sleap_csv_predictions_to_yolo_popup.py,sha256=AiG3pXXbBkinFyzgQrI8ADgIm2LZLOXDuB1EX7tQYu4,7446
1469
1472
  simba/ui/pop_ups/sleap_h5_inference_to_yolo_popup.py,sha256=B9ZROIFDL2TOQNkKXsyllOAeqzCDdHQ3E6bPu56xCiU,6609
1470
1473
  simba/ui/pop_ups/smoothing_popup.py,sha256=pR-xykkZwRkjyXt0Y1m6-4p4-83DEhBbUrULcBCCAcA,6092
1471
1474
  simba/ui/pop_ups/splash_popup.py,sha256=AB2RozaTYdaP5h56jR9dm2vLg5gBCx66Bp_j4Iv1lvw,4053
@@ -1474,11 +1477,11 @@ simba/ui/pop_ups/subset_feature_extractor_pop_up.py,sha256=M24iJSqh-DpYdpw1pSaIm
1474
1477
  simba/ui/pop_ups/targeted_annotation_clips_pop_up.py,sha256=PFh5ua2f_OMQ1Pth9Ha8Fo5lTPZNQV3bMnRGEoAPhTQ,6997
1475
1478
  simba/ui/pop_ups/third_party_annotator_appender_pop_up.py,sha256=Xnha2UwM-08djObCkL_EXK2L4pernyipzbyNKQvX5aQ,7694
1476
1479
  simba/ui/pop_ups/validation_plot_pop_up.py,sha256=yIo_el2dR_84ZAh_-2fYFg-BJDG0Eip_P_o9vzTQRkk,12174
1477
- simba/ui/pop_ups/video_processing_pop_up.py,sha256=_7nVjWkXoLuvxIjEEAJjzWe7Lf1H_HAWbNp31ZB6AvA,252019
1480
+ simba/ui/pop_ups/video_processing_pop_up.py,sha256=YPFbfbukxIOge2SO1pA57nxVoLwToPrJpsQ_cf1qU9A,252384
1478
1481
  simba/ui/pop_ups/visualize_pose_in_dir_pop_up.py,sha256=PpFs0zaqF4dnHJ_yH-PqYgsjAyxYPVP427Soj-kYtM0,8838
1479
1482
  simba/ui/pop_ups/yolo_inference_popup.py,sha256=C4_WDvEHLp9JMUTjLZuRpKHxMCGpa_pxXELuj-zerCs,14679
1480
- simba/ui/pop_ups/yolo_plot_results.py,sha256=yi9D3WquDu4L8PWJLZsODulojgakfy7Dzh_CpYK6Vgk,10096
1481
- simba/ui/pop_ups/yolo_pose_train_popup.py,sha256=yxu7UpePw94pHmEGFZ_4F8juZ8gZrPvTAsOvJtyhwzE,6369
1483
+ simba/ui/pop_ups/yolo_plot_results.py,sha256=WvDS3kCYZU_27EpADNev0tAKBPI-CUkYv9Dxz0eP83c,9803
1484
+ simba/ui/pop_ups/yolo_pose_train_popup.py,sha256=30CmqmhgFaFD4eRlENvP4D3Fh2eQ9rXIUPC47Z6dhbs,8904
1482
1485
  simba/unsupervised/.DS_Store,sha256=3YMgk5I3uoYy8KIh_EO-KH7CFu-0y7ileb-YFwM4ks4,6148
1483
1486
  simba/unsupervised/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1484
1487
  simba/unsupervised/bout_aggregator.py,sha256=FJiAdl3RWpCOPdi0Qzq3vPYzG62zQZqeo8mYUrTqRto,4674
@@ -1515,7 +1518,7 @@ simba/unsupervised/pop_ups/transform_cluster_popup.py,sha256=uWL-QySsInUsXx8CZ2C
1515
1518
  simba/unsupervised/pop_ups/transform_dim_reduction_popup.py,sha256=0eaq6iI6QRJ143OcN6VUwJGKYqtOSmmpRTR4DF3DAts,4092
1516
1519
  simba/utils/.DS_Store,sha256=dv7VXL3RuC-Ia6BytEmj0Ef07zH6aMabiQLXkJVn2N4,6148
1517
1520
  simba/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1518
- simba/utils/checks.py,sha256=e_rcZymSqzhw6kiBjeMVH3zKAV2jUaCrbrwglYho3YY,117243
1521
+ simba/utils/checks.py,sha256=AsRfz5GOiEJ1h_mNqHCMdgLvIuthRDiVyzi65ZCVvVM,115425
1519
1522
  simba/utils/config_creator.py,sha256=KxBdMOTf85bnAf9KprfIebzBbr5JlZl2EH0c-UMW45Y,14894
1520
1523
  simba/utils/custom_feature_extractor.py,sha256=lFOxtHQyKAB8PysXOzPXkUydmHUkkz0Tix-8KRI5-QE,11870
1521
1524
  simba/utils/data.py,sha256=IGYfzWKrlhwZL1LcDpQg84i-8A4RRLEU1lD8tqXUyQA,100777
@@ -1523,7 +1526,7 @@ simba/utils/enums.py,sha256=ZR2175N06ZHZNiHk8n757T-WGyt1-55LLpcg3Sbb91k,38668
1523
1526
  simba/utils/errors.py,sha256=aC-1qiGlh1vvHxUaPxBMQ9-LW-KKWXCGlH9acCPH0Cc,18788
1524
1527
  simba/utils/lookups.py,sha256=hVUIis9FxgoKvTa2S2Rhrqg_LKrzW13tEBr3Tt8ZP44,50458
1525
1528
  simba/utils/printing.py,sha256=2s-uESy1knuPiniqQ-q277uQ2teYM4OHo9Y4L20JQWM,5353
1526
- simba/utils/read_write.py,sha256=Rn4BavywRGn2MxioYlMMABAdcVGHcNLDDkqulR91_QM,189463
1529
+ simba/utils/read_write.py,sha256=dPVXv1lb748gZipOL6hP40_sRzk_gGsJpHYoJyI5w3o,190067
1527
1530
  simba/utils/warnings.py,sha256=K7w1RiDL4Un7rGaabOVCGc9fHcaKxk66iZyNLS_AtOE,8121
1528
1531
  simba/utils/yolo.py,sha256=UZzpnDqZj81SOMnwsWPQIhFAsHHSSaDawi1UUh0-uAA,19264
1529
1532
  simba/utils/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1532,7 +1535,7 @@ simba/video_processors/.DS_Store,sha256=6gsgZL1uIfKqBNSk6EAKBP9lJ1qMrQy6XrEvluyc
1532
1535
  simba/video_processors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1533
1536
  simba/video_processors/async_frame_reader.py,sha256=_17735pfAKUDHE18snAbWIbxUhIFkx3m-HipWqoE6r8,8059
1534
1537
  simba/video_processors/batch_process_create_ffmpeg_commands.py,sha256=qfGb6KeJ7kOpRreRfpV1Lb9zCOL2g7cDqUFbEk9or2k,14194
1535
- simba/video_processors/batch_process_menus.py,sha256=cLgJCx90wvgzZJX2ygoPIQc1f4cWPaC6O02XH7Ta458,37627
1538
+ simba/video_processors/batch_process_menus.py,sha256=ZyurUh8XPa9iT9vQXIBGCK41ryQT_YE1xp01g1M75jU,38224
1536
1539
  simba/video_processors/blob_tracking_executor.py,sha256=hyB-FYwbCmk44ytOmYQsiWHh7ecE0h5A0-ySjpYWyvY,18395
1537
1540
  simba/video_processors/brightness_contrast_ui.py,sha256=nWmzho1WeJuIp3CuDjJmqMIzge2sTZn6_H0lWyZYaz0,5202
1538
1541
  simba/video_processors/calculate_px_dist.py,sha256=se9M1Kv6VxjVTZqSBmdmx29fg10s-1tL1UqJ6353Iqc,10029
@@ -1544,11 +1547,11 @@ simba/video_processors/multi_cropper.py,sha256=1BI0Ami4kB9rdMUHR0EistmIKqc-E5FK5
1544
1547
  simba/video_processors/roi_selector.py,sha256=5N3s0Bi1Ub6c9gjE_-mV7AWr8Fqg7HQKdBKBF6whurg,8522
1545
1548
  simba/video_processors/roi_selector_circle.py,sha256=SD_lv6V3MGiIQd0VtUFSKe83ySW_qvE1t8xsgAlr2hI,6436
1546
1549
  simba/video_processors/roi_selector_polygon.py,sha256=DMtilt__gGwNu6VV73CWbnPqrPBXkan1_akUqGEzfGw,6742
1547
- simba/video_processors/video_processing.py,sha256=SOocFxbo5O5TXpH1ClO19-Rhn7CKHQ82wLasfmTUT8M,327985
1550
+ simba/video_processors/video_processing.py,sha256=hYyAqBQfSwPFruqLvjGr1nBG7Tfp9VAWySh4HN_SPpA,328019
1548
1551
  simba/video_processors/videos_to_frames.py,sha256=8hltNZpwUfb3GFi-63D0PsySmD5l59pbzQGJx8SscgU,7818
1549
- simba_uw_tf_dev-4.7.6.dist-info/LICENSE,sha256=Sjn362upcvYFypam-b-ziOXU1Wl5GGuTt5ICrGimzyA,1720
1550
- simba_uw_tf_dev-4.7.6.dist-info/METADATA,sha256=hp7yO2XbbWvm182wc7TgReqkM40vYpLB591vqNKNlc4,11432
1551
- simba_uw_tf_dev-4.7.6.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
1552
- simba_uw_tf_dev-4.7.6.dist-info/entry_points.txt,sha256=Nfh_EbfDGdKftLjCnGWtQrBHENiDYMdgupwLyLpU5dc,44
1553
- simba_uw_tf_dev-4.7.6.dist-info/top_level.txt,sha256=ogtimvlqDxDTOBAPfT2WaQ2pGAAbKRXG8z8eUTzf6TU,14
1554
- simba_uw_tf_dev-4.7.6.dist-info/RECORD,,
1552
+ simba_uw_tf_dev-4.7.8.dist-info/LICENSE,sha256=Sjn362upcvYFypam-b-ziOXU1Wl5GGuTt5ICrGimzyA,1720
1553
+ simba_uw_tf_dev-4.7.8.dist-info/METADATA,sha256=eOVBjatTdeyGOyU4tVJ14bW-G7vZd6kOoxRW-GH-MDw,11432
1554
+ simba_uw_tf_dev-4.7.8.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
1555
+ simba_uw_tf_dev-4.7.8.dist-info/entry_points.txt,sha256=Nfh_EbfDGdKftLjCnGWtQrBHENiDYMdgupwLyLpU5dc,44
1556
+ simba_uw_tf_dev-4.7.8.dist-info/top_level.txt,sha256=ogtimvlqDxDTOBAPfT2WaQ2pGAAbKRXG8z8eUTzf6TU,14
1557
+ simba_uw_tf_dev-4.7.8.dist-info/RECORD,,