simba-uw-tf-dev 4.7.7__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.
- simba/assets/lookups/tooptips.json +12 -1
- simba/third_party_label_appenders/transform/sleap_csv_to_yolo.py +5 -3
- simba/ui/pop_ups/batch_preprocess_pop_up.py +2 -2
- simba/ui/pop_ups/video_processing_pop_up.py +8 -7
- simba/ui/pop_ups/yolo_pose_train_popup.py +1 -1
- simba/ui/tkinter_functions.py +53 -6
- simba/utils/read_write.py +1 -1
- simba/video_processors/batch_process_menus.py +22 -22
- {simba_uw_tf_dev-4.7.7.dist-info → simba_uw_tf_dev-4.7.8.dist-info}/METADATA +1 -1
- {simba_uw_tf_dev-4.7.7.dist-info → simba_uw_tf_dev-4.7.8.dist-info}/RECORD +14 -14
- {simba_uw_tf_dev-4.7.7.dist-info → simba_uw_tf_dev-4.7.8.dist-info}/LICENSE +0 -0
- {simba_uw_tf_dev-4.7.7.dist-info → simba_uw_tf_dev-4.7.8.dist-info}/WHEEL +0 -0
- {simba_uw_tf_dev-4.7.7.dist-info → simba_uw_tf_dev-4.7.8.dist-info}/entry_points.txt +0 -0
- {simba_uw_tf_dev-4.7.7.dist-info → simba_uw_tf_dev-4.7.8.dist-info}/top_level.txt +0 -0
|
@@ -65,5 +65,16 @@
|
|
|
65
65
|
"ANIMAL_COUNT": "Number of animals (tracks) in the videos. Used to name classes (e.g. animal_1, animal_2) in the YOLO dataset.",
|
|
66
66
|
"sleap_remove_animal_ids": "If TRUE, merge all tracks into a single identity (animal_1). Use when animal IDs are not meaningful or for single-animal data.",
|
|
67
67
|
"sleap_threshold": "Minimum SLEAP instance confidence (the instance.score column in the CSV). Only pose predictions with score ≥ this value are used when building the YOLO dataset. E.g. 90 means keep instances where instance.score ≥ 0.9; lower values include more frames but may add noisy predictions.",
|
|
68
|
-
"SLEAP_SLP_DATA_DIR": "Directory containing SLEAP .SLP project/annotation files. Each .SLP file is converted to YOLO pose format."
|
|
68
|
+
"SLEAP_SLP_DATA_DIR": "Directory containing SLEAP .SLP project/annotation files. Each .SLP file is converted to YOLO pose format.",
|
|
69
|
+
"BATCH_CLIP_START_TIME": "Start time for clipping all videos. Use HH:MM:SS (e.g. 00:00:10). Click APPLY to copy this value to every video row.",
|
|
70
|
+
"BATCH_CLIP_END_TIME": "End time for clipping all videos. Use HH:MM:SS (e.g. 00:01:30). Must be after start time. Click APPLY to copy this value to every video row.",
|
|
71
|
+
"BATCH_DOWNSAMPLE_WIDTH": "Output width in pixels when downsampling all videos. Must be even. Click APPLY to copy to every video row.",
|
|
72
|
+
"BATCH_DOWNSAMPLE_HEIGHT": "Output height in pixels when downsampling all videos. Must be even. Click APPLY to copy to every video row.",
|
|
73
|
+
"BATCH_FPS": "Target frames per second for all videos. Click APPLY to copy this value to every video row.",
|
|
74
|
+
"BATCH_APPLY_DOWNSAMPLE": "Tick to check the downsample box for all videos (all will be downsampled on execute). Untick to uncheck all. Set width and height in the DOWNSAMPLE VIDEOS panel, then click APPLY there to copy those values to every row.",
|
|
75
|
+
"BATCH_APPLY_FPS": "Tick to enable FPS change for all videos.\nUntick to disable for all.\nSet FPS in CHANGE FPS panel, then APPLY there.",
|
|
76
|
+
"BATCH_APPLY_GREYSCALE": "Tick to enable greyscale for all videos.\nUntick to disable for all.",
|
|
77
|
+
"BATCH_APPLY_FRAME_COUNT": "Tick to superimpose frame numbers on all videos.\nUntick to disable for all.",
|
|
78
|
+
"BATCH_APPLY_CLAHE": "Tick to apply CLAHE (contrast) to all videos.\nUntick to disable for all.",
|
|
79
|
+
"BATCH_APPLY_CLIP": "Tick to enable clipping for all videos.\nUntick to disable for all.\nSet start/end in CLIP VIDEOS SETTING, then APPLY there."
|
|
69
80
|
}
|
|
@@ -19,10 +19,12 @@ 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,
|
|
23
|
-
from simba.utils.read_write import (
|
|
22
|
+
from simba.utils.printing import SimbaTimer, stdout_information, stdout_success
|
|
23
|
+
from simba.utils.read_write import (clean_sleap_filenames_in_directory,
|
|
24
|
+
copy_files_to_directory, create_directory,
|
|
24
25
|
find_files_of_filetypes_in_directory,
|
|
25
|
-
get_video_meta_data, read_frm_of_video,
|
|
26
|
+
get_video_meta_data, read_frm_of_video,
|
|
27
|
+
remove_a_folder)
|
|
26
28
|
from simba.utils.yolo import keypoint_array_to_yolo_annotation_str
|
|
27
29
|
|
|
28
30
|
|
|
@@ -20,8 +20,8 @@ class BatchPreProcessPopUp(PopUpMixin):
|
|
|
20
20
|
def __init__(self):
|
|
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
|
-
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_2')
|
|
23
|
+
self.input_folder_select = FolderSelect(selections_frm, "INPUT VIDEO DIRECTORY:", title="Select Folder with Input Videos", lblwidth=30, lbl_icon='folder', tooltip_key='VIDEO_DIR')
|
|
24
|
+
self.output_folder_select = FolderSelect(selections_frm, "OUTPUT VIDEO DIRECTORY:", title="Select Folder for Output videos", lblwidth=30, lbl_icon='folder_2', tooltip_key='SAVE_DIR')
|
|
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)
|
|
@@ -51,7 +51,7 @@ from simba.utils.read_write import (
|
|
|
51
51
|
concatenate_videos_in_folder, find_all_videos_in_directory, find_core_cnt,
|
|
52
52
|
find_files_of_filetypes_in_directory, find_video_of_file, get_fn_ext,
|
|
53
53
|
get_video_meta_data, seconds_to_timestamp, str_2_bool,
|
|
54
|
-
timestamp_to_seconds)
|
|
54
|
+
timestamp_to_seconds, read_frm_of_video)
|
|
55
55
|
from simba.utils.warnings import FrameRangeWarning
|
|
56
56
|
from simba.video_processors.brightness_contrast_ui import BrightnessContrastUI
|
|
57
57
|
from simba.video_processors.clahe_ui import interactive_clahe_ui
|
|
@@ -1590,7 +1590,6 @@ class ClipMultipleVideosByFrameNumbersPopUp(PopUpMixin):
|
|
|
1590
1590
|
check_if_dir_exists(in_dir=data_dir, source=self.__class__.__name__, create_if_not_exist=False )
|
|
1591
1591
|
check_if_dir_exists(in_dir=save_dir, source=self.__class__.__name__, create_if_not_exist=True)
|
|
1592
1592
|
self.video_paths = find_all_videos_in_directory(directory=data_dir, as_dict=True, raise_error=True)
|
|
1593
|
-
print(self.video_paths)
|
|
1594
1593
|
self.video_meta_data = [get_video_meta_data(video_path=x)["frame_count"]for x in list(self.video_paths.values())]
|
|
1595
1594
|
max_video_name_len = len(max(list(self.video_paths.keys())))
|
|
1596
1595
|
super().__init__(title="CLIP MULTIPLE VIDEOS BY FRAME NUMBERS", icon='clip')
|
|
@@ -1606,9 +1605,10 @@ class ClipMultipleVideosByFrameNumbersPopUp(PopUpMixin):
|
|
|
1606
1605
|
seperator.grid(row=1, column=0, columnspan=5, rowspan=1, sticky="ew")
|
|
1607
1606
|
|
|
1608
1607
|
self.entry_boxes, self.interactive_btns = {}, {}
|
|
1609
|
-
for cnt, video_name in enumerate(self.video_paths.
|
|
1608
|
+
for cnt, (video_name, video_path) in enumerate(self.video_paths.items()):
|
|
1610
1609
|
self.entry_boxes[video_name] = {}
|
|
1611
|
-
|
|
1610
|
+
img = read_frm_of_video(video_path=video_path, frame_index=0, size=(420, 280), keep_aspect_ratio=True, raise_error=False)
|
|
1611
|
+
SimBALabel(parent=data_frm, font=Formats.FONT_REGULAR_BOLD.value, txt=video_name + f' (frames: { self.video_meta_data[cnt]})', justify='left', hover_img=img).grid(row=cnt + 2, column=0, padx=padx, sticky=NW)
|
|
1612
1612
|
self.entry_boxes[video_name]["start"] = Entry_Box(data_frm, fileDescription="", labelwidth=0, validation="numeric", justify='center')
|
|
1613
1613
|
self.entry_boxes[video_name]["end"] = Entry_Box(data_frm, fileDescription="", labelwidth=0, validation="numeric", justify='center')
|
|
1614
1614
|
self.entry_boxes[video_name]["start"].grid(row=cnt + 2, column=2, sticky=NW, padx=padx)
|
|
@@ -1732,7 +1732,7 @@ class InitiateClipMultipleVideosByFrameNumbersPopUp(PopUpMixin):
|
|
|
1732
1732
|
icon_link=Links.VIDEO_TOOLS.value,
|
|
1733
1733
|
)
|
|
1734
1734
|
self.input_folder = FolderSelect(
|
|
1735
|
-
data_frm, "VIDEO DIRECTORY:", title="Select Folder with videos", lblwidth=30, lbl_icon='
|
|
1735
|
+
data_frm, "VIDEO DIRECTORY:", title="Select Folder with videos", lblwidth=30, lbl_icon='folder_video'
|
|
1736
1736
|
)
|
|
1737
1737
|
self.output_folder = FolderSelect(
|
|
1738
1738
|
data_frm,
|
|
@@ -1814,9 +1814,10 @@ class ClipMultipleVideosByTimestamps(PopUpMixin):
|
|
|
1814
1814
|
seperator.grid(row=1, column=0, columnspan=5, rowspan=1, sticky="ew")
|
|
1815
1815
|
|
|
1816
1816
|
self.entry_boxes, self.interactive_btns = {}, {}
|
|
1817
|
-
for cnt, video_name in enumerate(self.video_paths.
|
|
1817
|
+
for cnt, (video_name, video_path) in enumerate(self.video_paths.items()):
|
|
1818
1818
|
self.entry_boxes[video_name] = {}
|
|
1819
|
-
|
|
1819
|
+
img = read_frm_of_video(video_path=video_path, frame_index=0, size=(420, 280), keep_aspect_ratio=True, raise_error=False)
|
|
1820
|
+
SimBALabel(parent=data_frm, txt=video_name, justify='center', hover_img=img, font=Formats.FONT_REGULAR_BOLD.value).grid(row=cnt + 2, column=0, sticky=NW, padx=padx)
|
|
1820
1821
|
video_length = self.video_meta_data[cnt]["video_length_s"]
|
|
1821
1822
|
video_length_hhmmss = seconds_to_timestamp(seconds=video_length)
|
|
1822
1823
|
SimBALabel(data_frm, txt=video_length_hhmmss, justify='center').grid(row=cnt + 2, column=1, sticky=NW, padx=padx)
|
simba/ui/tkinter_functions.py
CHANGED
|
@@ -17,12 +17,14 @@ try:
|
|
|
17
17
|
except:
|
|
18
18
|
from typing_extensions import Literal
|
|
19
19
|
|
|
20
|
+
import numpy as np
|
|
20
21
|
import PIL.Image
|
|
21
22
|
from PIL import ImageTk
|
|
22
23
|
|
|
23
24
|
from simba.utils.enums import Defaults, Formats, TkBinds
|
|
24
25
|
from simba.utils.lookups import get_icons_paths, get_tooltips
|
|
25
26
|
from simba.utils.read_write import get_fn_ext
|
|
27
|
+
from simba.utils.checks import check_if_valid_img
|
|
26
28
|
|
|
27
29
|
MENU_ICONS = get_icons_paths()
|
|
28
30
|
TOOLTIPS = get_tooltips()
|
|
@@ -593,7 +595,8 @@ def SimbaCheckbox(parent: Union[Frame, Toplevel, LabelFrame, Canvas],
|
|
|
593
595
|
state: Literal["disabled", 'normal'] = NORMAL,
|
|
594
596
|
indicatoron: bool = True,
|
|
595
597
|
cmd: Optional[Callable] = None,
|
|
596
|
-
tooltip_txt: Optional[str] = None
|
|
598
|
+
tooltip_txt: Optional[str] = None,
|
|
599
|
+
tooltip_key: Optional[str] = None):
|
|
597
600
|
|
|
598
601
|
var = BooleanVar(value=False)
|
|
599
602
|
if val: var.set(True)
|
|
@@ -610,6 +613,8 @@ def SimbaCheckbox(parent: Union[Frame, Toplevel, LabelFrame, Canvas],
|
|
|
610
613
|
|
|
611
614
|
if isinstance(tooltip_txt, str):
|
|
612
615
|
CreateToolTip(widget=cb, text=tooltip_txt)
|
|
616
|
+
elif isinstance(tooltip_key, str) and tooltip_key in TOOLTIPS.keys():
|
|
617
|
+
CreateToolTip(widget=cb, text=TOOLTIPS[tooltip_key])
|
|
613
618
|
|
|
614
619
|
return cb, var
|
|
615
620
|
|
|
@@ -630,14 +635,56 @@ def SimBALabel(parent: Union[Frame, Canvas, LabelFrame, Toplevel],
|
|
|
630
635
|
cursor: Optional[str] = None,
|
|
631
636
|
img: Optional[str] = None,
|
|
632
637
|
anchor: Optional[str] = None,
|
|
633
|
-
tooltip_key: Optional[str] = None
|
|
634
|
-
|
|
638
|
+
tooltip_key: Optional[str] = None,
|
|
639
|
+
hover_img: Optional[np.ndarray] = None):
|
|
640
|
+
|
|
641
|
+
|
|
642
|
+
def _hover_enter(e):
|
|
643
|
+
w = e.widget
|
|
644
|
+
if hover_img is not None and check_if_valid_img(data=hover_img, raise_error=False):
|
|
645
|
+
arr = np.asarray(hover_img, dtype=np.uint8)
|
|
646
|
+
if arr.ndim == 3 and arr.shape[2] == 3:
|
|
647
|
+
arr = arr[:, :, ::-1]
|
|
648
|
+
pil_img = PIL.Image.fromarray(arr)
|
|
649
|
+
photo = ImageTk.PhotoImage(pil_img)
|
|
650
|
+
tw = Toplevel(w)
|
|
651
|
+
tw.wm_overrideredirect(True)
|
|
652
|
+
tw.attributes("-topmost", True)
|
|
653
|
+
tw.wm_geometry("+%d+%d" % (w.winfo_rootx() + w.winfo_width() + 4, w.winfo_rooty()))
|
|
654
|
+
frm = Frame(tw, relief="solid", bd=2, bg="#f0f0f0")
|
|
655
|
+
frm.pack(padx=2, pady=2)
|
|
656
|
+
lbl_hover = Label(frm, image=photo, bg="#f0f0f0")
|
|
657
|
+
lbl_hover.image = photo
|
|
658
|
+
lbl_hover.pack(padx=4, pady=(4, 2))
|
|
659
|
+
caption_lbl = Label(frm, text=txt, font=font, fg=txt_clr, bg=bg_clr)
|
|
660
|
+
caption_lbl.pack(pady=(0, 4))
|
|
661
|
+
tw.lift()
|
|
662
|
+
w._hover_toplevel = tw
|
|
663
|
+
elif hover_fg_clr is not None or hover_font is not None:
|
|
664
|
+
w.config(fg=hover_fg_clr, font=hover_font)
|
|
665
|
+
|
|
666
|
+
def _hover_leave(e):
|
|
667
|
+
w = e.widget
|
|
668
|
+
if getattr(w, "_hover_toplevel", None) is not None:
|
|
669
|
+
try:
|
|
670
|
+
w._hover_toplevel.destroy()
|
|
671
|
+
except tkinter.TclError:
|
|
672
|
+
pass
|
|
673
|
+
w._hover_toplevel = None
|
|
674
|
+
if hover_fg_clr is not None or hover_font is not None:
|
|
675
|
+
w.config(fg=txt_clr, bg=bg_clr, font=font)
|
|
635
676
|
|
|
636
677
|
def on_enter(e):
|
|
637
|
-
|
|
678
|
+
if hover_img is not None:
|
|
679
|
+
_hover_enter(e)
|
|
680
|
+
else:
|
|
681
|
+
e.widget.config(fg=hover_fg_clr, font=hover_font)
|
|
638
682
|
|
|
639
683
|
def on_leave(e):
|
|
640
|
-
|
|
684
|
+
if hover_img is not None:
|
|
685
|
+
_hover_leave(e)
|
|
686
|
+
else:
|
|
687
|
+
e.widget.config(fg=txt_clr, bg=bg_clr, font=font)
|
|
641
688
|
|
|
642
689
|
anchor = 'w' if anchor is None else anchor
|
|
643
690
|
if isinstance(img, str) and img in MENU_ICONS.keys():
|
|
@@ -673,7 +720,7 @@ def SimBALabel(parent: Union[Frame, Canvas, LabelFrame, Toplevel],
|
|
|
673
720
|
elif tooltip_key in TOOLTIPS.keys():
|
|
674
721
|
CreateToolTip(widget=lbl, text=TOOLTIPS[tooltip_key])
|
|
675
722
|
|
|
676
|
-
if hover_font is not None or hover_fg_clr is not None:
|
|
723
|
+
if hover_font is not None or hover_fg_clr is not None or hover_img is not None:
|
|
677
724
|
lbl.bind(TkBinds.ENTER.value, on_enter)
|
|
678
725
|
lbl.bind(TkBinds.LEAVE.value, on_leave)
|
|
679
726
|
|
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,
|
|
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)
|
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: simba-uw-tf-dev
|
|
3
|
-
Version: 4.7.
|
|
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
|
|
@@ -464,7 +464,7 @@ simba/assets/lookups/critical_values_05.pickle,sha256=bYlqp9T6ehVIjIJr3Uwfulj-kS
|
|
|
464
464
|
simba/assets/lookups/feature_extraction_headers.csv,sha256=I5TLfAihpHgzUZ7OUyGge-Yu-XGbQmHbDFAD4vVAc4w,2987
|
|
465
465
|
simba/assets/lookups/features.csv,sha256=bc6aN2ZRa2J2dxur-Zjcpc4I3q6vd-gN2erwnhdzLIk,14175
|
|
466
466
|
simba/assets/lookups/model_names.parquet,sha256=hOuvYONO8wZGcAwRNSf_hS_lUaynC8Gt24MLOg3w5ZA,270783
|
|
467
|
-
simba/assets/lookups/tooptips.json,sha256=
|
|
467
|
+
simba/assets/lookups/tooptips.json,sha256=OJurG8K738TNZVwAk-OfUFuC69ZW7UjiU-8mjowKcd8,11349
|
|
468
468
|
simba/assets/lookups/unsupervised_example_x.csv,sha256=bc6aN2ZRa2J2dxur-Zjcpc4I3q6vd-gN2erwnhdzLIk,14175
|
|
469
469
|
simba/assets/lookups/yolo.yaml,sha256=3Omt-t-w555E4oAJsRRblBjzyiTW9e5x-0VuyQ-t9C0,278
|
|
470
470
|
simba/assets/lookups/yolo_schematics/yolo_1.csv,sha256=TzUzWAtia4P-5FRwLPnjU0zDSkAA-nItNFCcq6nG_iQ,72
|
|
@@ -1363,7 +1363,7 @@ simba/third_party_label_appenders/transform/labelme_to_yolo_seg.py,sha256=wJOGVZ
|
|
|
1363
1363
|
simba/third_party_label_appenders/transform/simba_roi_to_yolo.py,sha256=i0bO_ZwjHSMzCfHlKecuqYXBvJgzhg2ohoVXdjzkemU,12969
|
|
1364
1364
|
simba/third_party_label_appenders/transform/simba_to_yolo.py,sha256=9_gH94YxdeDwVfZF9Vlv-w5SiOu41X1Lpk98UWztXZ4,13570
|
|
1365
1365
|
simba/third_party_label_appenders/transform/simba_to_yolo_seg.py,sha256=NzmzQj618_SqTn16b9PPohaFYjzmtFFMUKoDezN_wLA,12732
|
|
1366
|
-
simba/third_party_label_appenders/transform/sleap_csv_to_yolo.py,sha256=
|
|
1366
|
+
simba/third_party_label_appenders/transform/sleap_csv_to_yolo.py,sha256=lIPv-QhFO22OYHrcT9OaIjO7UVntZrUA3IzkYnu3fVI,12832
|
|
1367
1367
|
simba/third_party_label_appenders/transform/sleap_h5_to_yolo.py,sha256=bb-5JgTp8rtOdJgkbsghQNyxM4BwQSRkY37-v2XVMHM,11036
|
|
1368
1368
|
simba/third_party_label_appenders/transform/sleap_to_yolo.py,sha256=yorjyNlUnPzgVJDHahxBlIE2F-1JTvJaIXynnRZrAFw,10342
|
|
1369
1369
|
simba/third_party_label_appenders/transform/utils.py,sha256=2W1G0pyUm7oHqu0xhyJowxPp9xxSmMpqXfNzGJIFjvo,31652
|
|
@@ -1379,7 +1379,7 @@ simba/ui/import_videos_frame.py,sha256=i0LnQzPLFne9dA_nvpVWAHYGmi0aTRXpiHzEog_-R
|
|
|
1379
1379
|
simba/ui/machine_model_settings_ui.py,sha256=hTfpBxtfYGH9Rsf3JdQ5Sc8z874tYAoZefvjF1JD6gA,38292
|
|
1380
1380
|
simba/ui/ml_settings_frm.py,sha256=f1-E6pEGjWJVF3I6n0azO9zAnsskpZjInViguHIDntw,3101
|
|
1381
1381
|
simba/ui/px_to_mm_ui.py,sha256=ETedZPFkloU0l3JeGnhiSIAsGBQzzv0YrDWtiVGOmJ4,9387
|
|
1382
|
-
simba/ui/tkinter_functions.py,sha256=
|
|
1382
|
+
simba/ui/tkinter_functions.py,sha256=2CFxlXZ8-gRxTRBPtcHsga1PkR8wlwJGIXYsxTgHrRk,43526
|
|
1383
1383
|
simba/ui/user_defined_pose_creator.py,sha256=QAfdp8r225DONLaCgQJe6kXiZZLj20VQCLJEnCvZsKs,9249
|
|
1384
1384
|
simba/ui/video_info_ui.py,sha256=ld_fN-3vCYJDFv1t9i5B-VVtoaBCspDmiDUIfOSJb_8,17262
|
|
1385
1385
|
simba/ui/video_timelaps.py,sha256=GSQAD0Qg_7ctDsUsKFHm-6pSYGau_EZv5oBJ50ssUUE,26010
|
|
@@ -1390,7 +1390,7 @@ simba/ui/pop_ups/animal_directing_other_animals_pop_up.py,sha256=eaRVoEJ0WPnR15B
|
|
|
1390
1390
|
simba/ui/pop_ups/append_roi_features_animals_pop_up.py,sha256=__UwX3PuzPIeg5mSOY2yk4rJPHwwyCsWpLuqcBhLgH0,3308
|
|
1391
1391
|
simba/ui/pop_ups/append_roi_features_bodypart_pop_up.py,sha256=b21GIlgBCgAAM-MR_1LUmAdV9oiyHzO4fv_4HvqjVQM,1955
|
|
1392
1392
|
simba/ui/pop_ups/archive_files_pop_up.py,sha256=4dByXZS0bCZxy06-7WoElmcFSMoKfBbX3ZgamkZgIfs,1734
|
|
1393
|
-
simba/ui/pop_ups/batch_preprocess_pop_up.py,sha256=
|
|
1393
|
+
simba/ui/pop_ups/batch_preprocess_pop_up.py,sha256=DruWHeMYAlf18vK_LeyO9ewGFPKiGbCtIHGwHZQ9RQA,2869
|
|
1394
1394
|
simba/ui/pop_ups/blob_visualizer_pop_up.py,sha256=6OzJMROHowZWIcI5FL9a8uIo70K_dZKaVNs9-rUWWbE,6924
|
|
1395
1395
|
simba/ui/pop_ups/boolean_conditional_slicer_pup_up.py,sha256=q3IGjO4rwCCM8ODS2O7CueNRPFvSkJLHAgcV31sE0y4,5506
|
|
1396
1396
|
simba/ui/pop_ups/change_speed_popup.py,sha256=59Ck0kzLTQpE5AXURVRcNdK-a0kFOnwvTE0RZjs0lfI,5940
|
|
@@ -1477,11 +1477,11 @@ simba/ui/pop_ups/subset_feature_extractor_pop_up.py,sha256=M24iJSqh-DpYdpw1pSaIm
|
|
|
1477
1477
|
simba/ui/pop_ups/targeted_annotation_clips_pop_up.py,sha256=PFh5ua2f_OMQ1Pth9Ha8Fo5lTPZNQV3bMnRGEoAPhTQ,6997
|
|
1478
1478
|
simba/ui/pop_ups/third_party_annotator_appender_pop_up.py,sha256=Xnha2UwM-08djObCkL_EXK2L4pernyipzbyNKQvX5aQ,7694
|
|
1479
1479
|
simba/ui/pop_ups/validation_plot_pop_up.py,sha256=yIo_el2dR_84ZAh_-2fYFg-BJDG0Eip_P_o9vzTQRkk,12174
|
|
1480
|
-
simba/ui/pop_ups/video_processing_pop_up.py,sha256=
|
|
1480
|
+
simba/ui/pop_ups/video_processing_pop_up.py,sha256=YPFbfbukxIOge2SO1pA57nxVoLwToPrJpsQ_cf1qU9A,252384
|
|
1481
1481
|
simba/ui/pop_ups/visualize_pose_in_dir_pop_up.py,sha256=PpFs0zaqF4dnHJ_yH-PqYgsjAyxYPVP427Soj-kYtM0,8838
|
|
1482
1482
|
simba/ui/pop_ups/yolo_inference_popup.py,sha256=C4_WDvEHLp9JMUTjLZuRpKHxMCGpa_pxXELuj-zerCs,14679
|
|
1483
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=
|
|
1484
|
+
simba/ui/pop_ups/yolo_pose_train_popup.py,sha256=30CmqmhgFaFD4eRlENvP4D3Fh2eQ9rXIUPC47Z6dhbs,8904
|
|
1485
1485
|
simba/unsupervised/.DS_Store,sha256=3YMgk5I3uoYy8KIh_EO-KH7CFu-0y7ileb-YFwM4ks4,6148
|
|
1486
1486
|
simba/unsupervised/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1487
1487
|
simba/unsupervised/bout_aggregator.py,sha256=FJiAdl3RWpCOPdi0Qzq3vPYzG62zQZqeo8mYUrTqRto,4674
|
|
@@ -1526,7 +1526,7 @@ simba/utils/enums.py,sha256=ZR2175N06ZHZNiHk8n757T-WGyt1-55LLpcg3Sbb91k,38668
|
|
|
1526
1526
|
simba/utils/errors.py,sha256=aC-1qiGlh1vvHxUaPxBMQ9-LW-KKWXCGlH9acCPH0Cc,18788
|
|
1527
1527
|
simba/utils/lookups.py,sha256=hVUIis9FxgoKvTa2S2Rhrqg_LKrzW13tEBr3Tt8ZP44,50458
|
|
1528
1528
|
simba/utils/printing.py,sha256=2s-uESy1knuPiniqQ-q277uQ2teYM4OHo9Y4L20JQWM,5353
|
|
1529
|
-
simba/utils/read_write.py,sha256=
|
|
1529
|
+
simba/utils/read_write.py,sha256=dPVXv1lb748gZipOL6hP40_sRzk_gGsJpHYoJyI5w3o,190067
|
|
1530
1530
|
simba/utils/warnings.py,sha256=K7w1RiDL4Un7rGaabOVCGc9fHcaKxk66iZyNLS_AtOE,8121
|
|
1531
1531
|
simba/utils/yolo.py,sha256=UZzpnDqZj81SOMnwsWPQIhFAsHHSSaDawi1UUh0-uAA,19264
|
|
1532
1532
|
simba/utils/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -1535,7 +1535,7 @@ simba/video_processors/.DS_Store,sha256=6gsgZL1uIfKqBNSk6EAKBP9lJ1qMrQy6XrEvluyc
|
|
|
1535
1535
|
simba/video_processors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1536
1536
|
simba/video_processors/async_frame_reader.py,sha256=_17735pfAKUDHE18snAbWIbxUhIFkx3m-HipWqoE6r8,8059
|
|
1537
1537
|
simba/video_processors/batch_process_create_ffmpeg_commands.py,sha256=qfGb6KeJ7kOpRreRfpV1Lb9zCOL2g7cDqUFbEk9or2k,14194
|
|
1538
|
-
simba/video_processors/batch_process_menus.py,sha256=
|
|
1538
|
+
simba/video_processors/batch_process_menus.py,sha256=ZyurUh8XPa9iT9vQXIBGCK41ryQT_YE1xp01g1M75jU,38224
|
|
1539
1539
|
simba/video_processors/blob_tracking_executor.py,sha256=hyB-FYwbCmk44ytOmYQsiWHh7ecE0h5A0-ySjpYWyvY,18395
|
|
1540
1540
|
simba/video_processors/brightness_contrast_ui.py,sha256=nWmzho1WeJuIp3CuDjJmqMIzge2sTZn6_H0lWyZYaz0,5202
|
|
1541
1541
|
simba/video_processors/calculate_px_dist.py,sha256=se9M1Kv6VxjVTZqSBmdmx29fg10s-1tL1UqJ6353Iqc,10029
|
|
@@ -1549,9 +1549,9 @@ simba/video_processors/roi_selector_circle.py,sha256=SD_lv6V3MGiIQd0VtUFSKe83ySW
|
|
|
1549
1549
|
simba/video_processors/roi_selector_polygon.py,sha256=DMtilt__gGwNu6VV73CWbnPqrPBXkan1_akUqGEzfGw,6742
|
|
1550
1550
|
simba/video_processors/video_processing.py,sha256=hYyAqBQfSwPFruqLvjGr1nBG7Tfp9VAWySh4HN_SPpA,328019
|
|
1551
1551
|
simba/video_processors/videos_to_frames.py,sha256=8hltNZpwUfb3GFi-63D0PsySmD5l59pbzQGJx8SscgU,7818
|
|
1552
|
-
simba_uw_tf_dev-4.7.
|
|
1553
|
-
simba_uw_tf_dev-4.7.
|
|
1554
|
-
simba_uw_tf_dev-4.7.
|
|
1555
|
-
simba_uw_tf_dev-4.7.
|
|
1556
|
-
simba_uw_tf_dev-4.7.
|
|
1557
|
-
simba_uw_tf_dev-4.7.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|