simba-uw-tf-dev 4.5.8__py3-none-any.whl → 4.7.1__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 (98) hide show
  1. simba/SimBA.py +2 -2
  2. simba/assets/.recent_projects.txt +1 -0
  3. simba/assets/icons/frames_2.png +0 -0
  4. simba/assets/lookups/tooptips.json +15 -1
  5. simba/data_processors/agg_clf_counter_mp.py +52 -53
  6. simba/data_processors/blob_location_computer.py +1 -1
  7. simba/data_processors/circling_detector.py +30 -13
  8. simba/data_processors/cuda/geometry.py +45 -27
  9. simba/data_processors/cuda/image.py +1648 -1598
  10. simba/data_processors/cuda/statistics.py +72 -26
  11. simba/data_processors/cuda/timeseries.py +1 -1
  12. simba/data_processors/cue_light_analyzer.py +5 -9
  13. simba/data_processors/egocentric_aligner.py +25 -7
  14. simba/data_processors/freezing_detector.py +55 -47
  15. simba/data_processors/kleinberg_calculator.py +61 -29
  16. simba/feature_extractors/feature_subsets.py +14 -7
  17. simba/feature_extractors/mitra_feature_extractor.py +2 -2
  18. simba/feature_extractors/straub_tail_analyzer.py +4 -6
  19. simba/labelling/standard_labeller.py +1 -1
  20. simba/mixins/config_reader.py +5 -2
  21. simba/mixins/geometry_mixin.py +22 -36
  22. simba/mixins/image_mixin.py +24 -28
  23. simba/mixins/plotting_mixin.py +28 -10
  24. simba/mixins/statistics_mixin.py +48 -11
  25. simba/mixins/timeseries_features_mixin.py +1 -1
  26. simba/mixins/train_model_mixin.py +67 -29
  27. simba/model/inference_batch.py +1 -1
  28. simba/model/yolo_seg_inference.py +3 -3
  29. simba/outlier_tools/skip_outlier_correction.py +1 -1
  30. simba/plotting/ROI_feature_visualizer_mp.py +3 -5
  31. simba/plotting/clf_validator_mp.py +4 -5
  32. simba/plotting/cue_light_visualizer.py +6 -7
  33. simba/plotting/directing_animals_visualizer_mp.py +2 -3
  34. simba/plotting/distance_plotter_mp.py +378 -378
  35. simba/plotting/frame_mergerer_ffmpeg.py +137 -196
  36. simba/plotting/gantt_creator.py +29 -10
  37. simba/plotting/gantt_creator_mp.py +96 -33
  38. simba/plotting/geometry_plotter.py +270 -272
  39. simba/plotting/heat_mapper_clf_mp.py +4 -6
  40. simba/plotting/heat_mapper_location_mp.py +2 -2
  41. simba/plotting/light_dark_box_plotter.py +2 -2
  42. simba/plotting/path_plotter_mp.py +26 -29
  43. simba/plotting/plot_clf_results_mp.py +455 -454
  44. simba/plotting/pose_plotter_mp.py +28 -29
  45. simba/plotting/probability_plot_creator_mp.py +288 -288
  46. simba/plotting/roi_plotter_mp.py +31 -31
  47. simba/plotting/single_run_model_validation_video_mp.py +427 -427
  48. simba/plotting/spontaneous_alternation_plotter.py +2 -3
  49. simba/plotting/yolo_pose_track_visualizer.py +32 -27
  50. simba/plotting/yolo_pose_visualizer.py +35 -36
  51. simba/plotting/yolo_seg_visualizer.py +2 -3
  52. simba/pose_importers/simba_blob_importer.py +3 -3
  53. simba/roi_tools/roi_aggregate_stats_mp.py +5 -4
  54. simba/roi_tools/roi_clf_calculator_mp.py +4 -4
  55. simba/sandbox/analyze_runtimes.py +30 -0
  56. simba/sandbox/cuda/egocentric_rotator.py +374 -0
  57. simba/sandbox/get_cpu_pool.py +5 -0
  58. simba/sandbox/proboscis_to_tip.py +28 -0
  59. simba/sandbox/test_directionality.py +47 -0
  60. simba/sandbox/test_nonstatic_directionality.py +27 -0
  61. simba/sandbox/test_pycharm_cuda.py +51 -0
  62. simba/sandbox/test_simba_install.py +41 -0
  63. simba/sandbox/test_static_directionality.py +26 -0
  64. simba/sandbox/test_static_directionality_2d.py +26 -0
  65. simba/sandbox/verify_env.py +42 -0
  66. simba/third_party_label_appenders/transform/coco_keypoints_to_yolo.py +3 -3
  67. simba/third_party_label_appenders/transform/coco_keypoints_to_yolo_bbox.py +2 -2
  68. simba/ui/pop_ups/clf_add_remove_print_pop_up.py +37 -30
  69. simba/ui/pop_ups/clf_plot_pop_up.py +2 -2
  70. simba/ui/pop_ups/egocentric_alignment_pop_up.py +20 -21
  71. simba/ui/pop_ups/fsttc_pop_up.py +27 -25
  72. simba/ui/pop_ups/gantt_pop_up.py +31 -6
  73. simba/ui/pop_ups/interpolate_pop_up.py +2 -4
  74. simba/ui/pop_ups/kleinberg_pop_up.py +39 -40
  75. simba/ui/pop_ups/multiple_videos_to_frames_popup.py +10 -11
  76. simba/ui/pop_ups/single_video_to_frames_popup.py +10 -10
  77. simba/ui/pop_ups/video_processing_pop_up.py +186 -174
  78. simba/ui/tkinter_functions.py +10 -1
  79. simba/utils/custom_feature_extractor.py +1 -1
  80. simba/utils/data.py +90 -14
  81. simba/utils/enums.py +1 -0
  82. simba/utils/errors.py +441 -440
  83. simba/utils/lookups.py +1203 -1203
  84. simba/utils/printing.py +124 -124
  85. simba/utils/read_write.py +3769 -3721
  86. simba/utils/yolo.py +10 -1
  87. simba/video_processors/blob_tracking_executor.py +2 -2
  88. simba/video_processors/clahe_ui.py +66 -23
  89. simba/video_processors/egocentric_video_rotator.py +46 -44
  90. simba/video_processors/multi_cropper.py +1 -1
  91. simba/video_processors/video_processing.py +5264 -5300
  92. simba/video_processors/videos_to_frames.py +43 -32
  93. {simba_uw_tf_dev-4.5.8.dist-info → simba_uw_tf_dev-4.7.1.dist-info}/METADATA +4 -3
  94. {simba_uw_tf_dev-4.5.8.dist-info → simba_uw_tf_dev-4.7.1.dist-info}/RECORD +98 -86
  95. {simba_uw_tf_dev-4.5.8.dist-info → simba_uw_tf_dev-4.7.1.dist-info}/LICENSE +0 -0
  96. {simba_uw_tf_dev-4.5.8.dist-info → simba_uw_tf_dev-4.7.1.dist-info}/WHEEL +0 -0
  97. {simba_uw_tf_dev-4.5.8.dist-info → simba_uw_tf_dev-4.7.1.dist-info}/entry_points.txt +0 -0
  98. {simba_uw_tf_dev-4.5.8.dist-info → simba_uw_tf_dev-4.7.1.dist-info}/top_level.txt +0 -0
@@ -24,15 +24,16 @@ from simba.utils.checks import (check_file_exist_and_readable, check_float,
24
24
  check_valid_boolean, check_valid_lst,
25
25
  check_video_and_data_frm_count_align)
26
26
  from simba.utils.data import (create_color_palettes, detect_bouts,
27
- slice_roi_dict_for_video)
27
+ get_cpu_pool, slice_roi_dict_for_video,
28
+ terminate_cpu_pool)
28
29
  from simba.utils.enums import ROI_SETTINGS, Formats, Keys, Paths, TextOptions
29
30
  from simba.utils.errors import (BodypartColumnNotFoundError, DuplicationError,
30
31
  NoFilesFoundError, NoROIDataError,
31
32
  ROICoordinatesNotFoundError)
32
33
  from simba.utils.printing import SimbaTimer, stdout_success
33
34
  from simba.utils.read_write import (concatenate_videos_in_folder,
34
- find_core_cnt, get_video_meta_data,
35
- read_df)
35
+ find_core_cnt, get_current_time,
36
+ get_video_meta_data, read_df)
36
37
  from simba.utils.warnings import (DuplicateNamesWarning, FrameRangeWarning,
37
38
  GPUToolsWarning)
38
39
 
@@ -117,7 +118,7 @@ def _roi_plotter_mp(data: Tuple[int, pd.DataFrame],
117
118
 
118
119
  writer.write(img)
119
120
  current_frm += 1
120
- if verbose: print(f"Multi-processing video frame {current_frm} on core {group_cnt}...")
121
+ if verbose: print(f"[{get_current_time()}] Multi-processing video frame {current_frm}/{video_meta_data['frame_count']} (core batch: {group_cnt}, video: {video_meta_data['video_name']})...")
121
122
  else:
122
123
  FrameRangeWarning(msg=f'Could not read frame {current_frm} in video {video_meta_data["video_name"]}', source=_roi_plotter_mp.__name__)
123
124
  break
@@ -363,34 +364,33 @@ class ROIPlotMultiprocess(ConfigReader):
363
364
  del self.data_df
364
365
  del self.roi_analyzer.logger
365
366
  if self.verbose: print(f"Creating ROI images, multiprocessing (chunksize: {self.multiprocess_chunksize}, cores: {self.core_cnt})...")
366
- with multiprocessing.Pool(self.core_cnt, maxtasksperchild=self.maxtasksperchild) as pool:
367
- constants = functools.partial(_roi_plotter_mp,
368
- loc_dict=self.loc_dict,
369
- font_size=self.font_size,
370
- circle_sizes=self.circle_sizes,
371
- save_temp_directory=self.temp_folder,
372
- body_part_dict=self.bp_dict,
373
- input_video_path=self.video_path,
374
- roi_dfs_dict=self.sliced_roi_dict,
375
- roi_dict = self.roi_dict_,
376
- video_shape_names=self.shape_names,
377
- bp_colors=self.color_lst,
378
- show_animal_name=self.show_animal_name,
379
- show_pose=self.show_pose,
380
- animal_ids=self.animal_names,
381
- threshold=self.threshold,
382
- outside_roi=self.outside_roi,
383
- verbose=self.verbose,
384
- border_bg_clr=self.border_bg_clr,
385
- animal_bp_dict=self.animal_bp_dict,
386
- show_bbox=self.show_bbox)
387
-
388
- for cnt, batch_cnt in enumerate(pool.imap(constants, data, chunksize=self.multiprocess_chunksize)):
389
- print(f'Image batch {batch_cnt+1} / {self.core_cnt} complete...')
367
+ self.pool = get_cpu_pool(core_cnt=self.core_cnt, maxtasksperchild=self.maxtasksperchild, source=self.__class__.__name__, verbose=True)
368
+ constants = functools.partial(_roi_plotter_mp,
369
+ loc_dict=self.loc_dict,
370
+ font_size=self.font_size,
371
+ circle_sizes=self.circle_sizes,
372
+ save_temp_directory=self.temp_folder,
373
+ body_part_dict=self.bp_dict,
374
+ input_video_path=self.video_path,
375
+ roi_dfs_dict=self.sliced_roi_dict,
376
+ roi_dict = self.roi_dict_,
377
+ video_shape_names=self.shape_names,
378
+ bp_colors=self.color_lst,
379
+ show_animal_name=self.show_animal_name,
380
+ show_pose=self.show_pose,
381
+ animal_ids=self.animal_names,
382
+ threshold=self.threshold,
383
+ outside_roi=self.outside_roi,
384
+ verbose=self.verbose,
385
+ border_bg_clr=self.border_bg_clr,
386
+ animal_bp_dict=self.animal_bp_dict,
387
+ show_bbox=self.show_bbox)
388
+
389
+ for cnt, batch_cnt in enumerate(self.pool.imap(constants, data, chunksize=self.multiprocess_chunksize)):
390
+ print(f'Image batch {batch_cnt+1} / {self.core_cnt} complete...')
390
391
  print(f"Joining {self.video_name} multi-processed ROI video...")
391
- concatenate_videos_in_folder(in_folder=self.temp_folder, save_path=self.save_path, video_format="mp4", remove_splits=True, gpu=self.gpu)
392
- pool.terminate()
393
- pool.join()
392
+ concatenate_videos_in_folder(in_folder=self.temp_folder, save_path=self.save_path, video_format="mp4", remove_splits=True, gpu=self.gpu)
393
+ terminate_cpu_pool(pool=self.pool, force=False, source=self.__class__.__name__)
394
394
  video_timer.stop_timer()
395
395
  stdout_success(msg=f"Video {self.video_name} created. ROI video saved at {self.save_path}", elapsed_time=video_timer.elapsed_time_str, source=self.__class__.__name__, )
396
396