Skip to content

Commit fb44c10

Browse files
Merge pull request #4 from TravisWheelerLab/develop
New Release: v0.0.9
2 parents be157a8 + b52db74 commit fb44c10

File tree

13 files changed

+159
-14
lines changed

13 files changed

+159
-14
lines changed

RELEASE_NOTES.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
Changes for this version of diplomat:
2-
- Improved video player widget, with lag reduction when backtracking.
3-
- Two new UI labelers for source only placement of points.
4-
- Less lag for plots on the side in the UI when scrolling.
5-
- UI moved to it's own module and added to documentation.
6-
- Several additional minor bug fixes.
1+
Changes for this version of DIPLOMAT:
2+
- Fixed installation process for DIPLOMAT with SLEAP on windows by adding keras dependency.
3+
- Added support for changing some UI appearance settings to DIPLOMAT's supervised and tweak UI.
4+
- Make SLEAP frontend error out unless a user explicitly passes a number of outputs parameter.
5+
- Improved point rendering in the UI (proper alpha transparency support and smoother point rendering).

conda-environments/DIPLOMAT-SLEAP-CPU.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ dependencies:
3737
- conda-forge::seaborn
3838
- tensorflow >=2.6.0,<2.11 # No windows GPU support for >2.10
3939
- tensorflow-hub # Pinned in meta.yml, but no problems here... yet
40+
- keras
4041

4142
# Packages required by tensorflow to find/use GPUs
4243
- conda-forge::cudatoolkit ==11.3.1

conda-environments/DIPLOMAT-SLEAP.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ dependencies:
3737
- conda-forge::seaborn
3838
- tensorflow-gpu >=2.6.0,<2.11 # No windows GPU support for >2.10
3939
- tensorflow-hub # Pinned in meta.yml, but no problems here... yet
40+
- keras
4041

4142
# Packages required by tensorflow to find/use GPUs
4243
- conda-forge::cudatoolkit ==11.3.1

diplomat/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
A tool providing multi-animal tracking capabilities on top of other Deep learning based tracking software.
33
"""
44

5-
__version__ = "0.0.8"
5+
__version__ = "0.0.9"
66
# Can be used by functions to determine if diplomat was invoked through it's CLI interface.
77
CLI_RUN = False
88

diplomat/frontends/sleap/predict_frames_sleap.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ def analyze_frames(
6565
"""
6666
import sleap
6767
batch_size = _get_default_value(sleap.load_model, "batch_size", 4) if (batch_size is None) else batch_size
68-
num_outputs = 1 if (num_outputs is None) else num_outputs
68+
if(num_outputs is None):
69+
raise ValueError("'num_outputs' is not set! Please set it to the number of bodies you are tracking.")
6970

7071
print("Loading Config...")
7172
config = _load_config(_paths_to_str(config))[0]

diplomat/frontends/sleap/predict_videos_sleap.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ def analyze_videos(
5959

6060
import sleap
6161
batch_size = _get_default_value(sleap.load_model, "batch_size", 4) if(batch_size is None) else batch_size
62-
num_outputs = 1 if(num_outputs is None) else num_outputs
62+
if(num_outputs is None):
63+
raise ValueError("'num_outputs' is not set! Please set it to the number of bodies you are tracking.")
6364

6465
print("Loading Model...")
6566
model = sleap.load_model(_paths_to_str(config), batch_size=batch_size)

diplomat/predictors/supervised_sfpe/supervised_segmented_frame_pass_engine.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,14 @@ def _on_end(self, progress_bar: ProgressBar) -> Optional[Pose]:
595595
self._frame_holder.metadata["segments"] = self._segments.tolist()
596596
self._frame_holder.metadata["segment_scores"] = self._segment_scores.tolist()
597597
else:
598+
progress_bar.reset(self._frame_holder.num_frames * self._frame_holder.num_bodyparts)
599+
progress_bar.message("Restoring Partial Frames")
600+
for frame_list in self._frame_holder.frames:
601+
for frame in frame_list:
602+
if(frame.frame_probs is None):
603+
frame.frame_probs = frame.src_data.probs[:]
604+
progress_bar.update()
605+
598606
self._width = self._frame_holder.metadata.width
599607
self._height = self._frame_holder.metadata.height
600608
self._resolve_frame_orderings(progress_bar)

diplomat/wx_gui/fpe_editor.py

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@
1212
from diplomat.utils.colormaps import iter_colormap
1313
from diplomat.utils.track_formats import to_diplomat_table, save_diplomat_table
1414
from diplomat.wx_gui.id_swap_dialog import IdSwapDialog
15+
from diplomat.wx_gui.labeler_lib import SettingCollection
1516
from diplomat.wx_gui.point_edit import PointEditor, PointViewNEdit, PoseLabeler
1617
from diplomat.wx_gui.progress_dialog import FBProgressDialog
1718
from diplomat.wx_gui.score_lib import ScoreEngine, ScoreEngineDisplayer
1819
from diplomat.wx_gui.scroll_image_list import ScrollImageList
1920
from diplomat.processing import Pose, ProgressBar
2021
from diplomat.wx_gui.helpdialog import HelpDialog
22+
from diplomat.wx_gui.settings_dialog import SettingsDialog
2123
from diplomat.wx_gui.video_player import VideoController
2224
from wx.lib.scrolledpanel import ScrolledPanel
2325
from collections import deque
@@ -435,6 +437,9 @@ def _build_toolbar(self):
435437
export_csv_bmp = icons.to_wx_bitmap(icons.SAVE_TRACKS_ICON, icons.SAVE_TRACKS_SIZE,
436438
self.GetForegroundColour(), self.TOOLBAR_ICON_SIZE)
437439

440+
settings_bmp = icons.to_wx_bitmap(icons.SETTINGS_ICON, icons.SETTINGS_SIZE,
441+
self.GetForegroundColour(), self.TOOLBAR_ICON_SIZE)
442+
438443
spin_ctrl = wx.SpinCtrl(self._toolbar, min=1, max=50, initial=PointViewNEdit.DEF_FAST_MODE_SPEED_FRACTION)
439444
spin_ctrl.SetMaxSize(wx.Size(-1, self.TOOLBAR_ICON_SIZE[1]))
440445
spin_ctrl.Bind(wx.EVT_SPINCTRL, self._on_spin)
@@ -474,8 +479,10 @@ def _build_toolbar(self):
474479
self._toolbar.AddTool(self._save)
475480
self._toolbar.AddSeparator()
476481

477-
self._turtle = self._toolbar.CreateTool(wx.ID_ANY, "Edit CTRL Speed: ", turtle_bmp, turtle_bmp,
478-
shortHelp="Modify the labeling speed when CTRL Key is pressed (fast labeling mode).")
482+
self._turtle = self._toolbar.CreateTool(
483+
wx.ID_ANY, "Edit CTRL Speed: ", turtle_bmp, turtle_bmp,
484+
shortHelp="Modify the labeling speed when CTRL Key is pressed (fast labeling mode)."
485+
)
479486
self._toolbar.AddTool(self._turtle)
480487
self._toolbar.EnableTool(self._turtle.GetId(), False)
481488
self._toolbar.AddControl(spin_ctrl)
@@ -489,6 +496,10 @@ def _build_toolbar(self):
489496
shortHelp="Export current tracks to a csv file from the UI.")
490497
self._toolbar.AddTool(self._export_to_csv)
491498

499+
self._visual_settings = self._toolbar.CreateTool(wx.ID_ANY, "Visual Settings", settings_bmp,
500+
shortHelp="Adjust some visual settings of the editor.")
501+
self._toolbar.AddTool(self._visual_settings)
502+
492503
self._help = self._toolbar.CreateTool(wx.ID_ANY, "Help", help_bmp, shortHelp="Display the help dialog.")
493504
self._toolbar.AddTool(self._help)
494505

@@ -506,6 +517,7 @@ def _build_toolbar(self):
506517
self._turtle,
507518
self._export_btn,
508519
self._export_to_csv,
520+
self._visual_settings,
509521
self._help
510522
]
511523
self._bitmaps = [
@@ -519,6 +531,7 @@ def _build_toolbar(self):
519531
turtle_bmp,
520532
export_bmp,
521533
export_csv_bmp,
534+
settings_bmp,
522535
help_bmp
523536
]
524537

@@ -697,9 +710,32 @@ def on_tool(self, evt: wx.CommandEvent):
697710
self._move_to_poor_label(False)
698711
elif(evt.GetId() == self._export_to_csv.GetId()):
699712
self._save_to_csv()
713+
elif(evt.GetId() == self._visual_settings.GetId()):
714+
self._change_visual_settings()
700715
elif((self._identity_swapper is not None) and (evt.GetId() == self._swap_id.GetId())):
701716
self._display_id_swap_dialog()
702717

718+
def _change_visual_settings(self):
719+
from diplomat.wx_gui.labeler_lib import Slider, FloatSpin
720+
from diplomat.wx_gui.settings_dialog import DropDown
721+
from matplotlib import colormaps
722+
point_video_viewer = self.video_player.video_viewer
723+
724+
sorted_colormaps = sorted(colormaps)
725+
726+
with SettingsDialog(self, title="Visual Settings", settings=SettingCollection(
727+
colormap=DropDown([point_video_viewer.get_colormap()] + sorted_colormaps, ["CURRENT"] + sorted_colormaps),
728+
point_radius=FloatSpin(1, 1000, point_video_viewer.get_point_radius(), increment=1, digits=0),
729+
point_alpha=FloatSpin(0, 1, point_video_viewer.get_point_alpha(), increment=0.01, digits=2),
730+
plot_threshold=FloatSpin(0, 1, point_video_viewer.get_plot_threshold(), increment=0.001, digits=3),
731+
line_thickness=Slider(1, 10, point_video_viewer.get_line_thickness())
732+
)) as dlg:
733+
if(dlg.ShowModal() == wx.ID_OK):
734+
for k, v in dlg.get_values().items():
735+
getattr(point_video_viewer, f"set_{k}")(v)
736+
self.Refresh()
737+
self.Update()
738+
703739
def _save_to_csv(self):
704740
with wx.FileDialog(self, "Select FrameStore Save Location",
705741
wildcard="CSV File (*.csv)",

diplomat/wx_gui/icons.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,31 @@ def _dump_pic(file):
197197
3NrxABagAUKi4lIyssyEFWMDrNy8IAMkOAgrxQ6YOXj5BXlZyNUOAuS2VgYSAAD00GPz
198198
"""
199199

200+
SETTINGS_SIZE = (64, 64)
201+
SETTINGS_ICON = b"""
202+
eJzll11oFFcUgG/WNSEBKUJqjGti0gi1IoXaSOJGLNo+WSTZTX8otS+aGHzoj8aArdDKsomhD6WF
203+
UgMVXWkL27R9K8UaLLTrg5jfTZHGNjQ2G92wuzFKfpowd+7pmTtzZ+/MzizbvHpeZu495zv37vm5
204+
c5eQx0CKvP8TqH7nG480PDAfaS4tGPa0/MoAXpFmoiqFf6NFBfK/AAWgw9mJCgVQ/ix0/TDTzKHF
205+
nDinTdCvC+Wf5jhN+ozxzmXu8FShPImr3EGitQQHpW9lKHf4QsH8ZzpAYfnOyOQKcG8AdQXzYYOw
206+
yrMF8z9TJ76zUNzPnHD1QaVpUeTJg9clHZcHdaJKLHDz/RzqyPWgXuR+FxzjmW7VDGq+B6Y8b8Mr
207+
5hkkQ43V/j7FgqdS8g5g8KOTUQWjSyfWW/koTjLGbYSkL7dUFRNSXBW4nM56AMP92xZ8d07IEkfX
208+
ZdXeYzM2NXuwQeZ/tPFqyNauZWGLhcrOyFrPl8xSMgu8d9btO98fi/X3NPFsBRelSK68aovfoVnJ
209+
/4IWXW+HuefEcS019QsmPpVbi0/0gfCgaqvXjZuxxEf8KZwKGGN6d3MOjvKecB/CQVMGAz14qt7n
210+
23N6CF8zfpwMGwb7nXBCYnpqZsoIqU0BvX9YKJqxpOa2YytPc4MpZ1xs4Cj+9nGgo9lyJ5VjFOIY
211+
gzaeumsu/GscT2PeO3D1Slm1BXfQjn4zmsWgC3+C85cwcRj5w1ZdC2YB0xjRLB65dN8nPL7NhOwD
212+
OmRXDquAIQzwJRqd+d95AqsJOe9wWJwG6Mbe4/n8whHfrxc2tsx3AHvs2gaAb7GZ+BLqAQd86xRP
213+
XwpfbwD4ctQAMXzwTqSroe029ebOh3r20ziIOfO/4SOj55jB/I0LAdFju84OM1GsDM/8fuf9Rwkp
214+
yXYJo1CvqxpB7j6MX49D/LoAwkb8TNmkq560TGLzNIGak78RFfZiE8uWq+KD/EiejeBxkOBlIAsm
215+
fhrL5opkyMaE8pp8ZKaxzo/j19NSv75ZCm1Yv3OSofq50H6gB88IwjG0iwMd2yLhcQqj2BftxsrK
216+
0MBQir0p1Dt6e0++/tIbX6ncwz3s3xrs36R5AQji6nP4+SxN6HzfRm22OOdS9PIqTw/Gmfi182O4
217+
q8Hna+gawdc0Bk/LiyYf2zlTOvXtBfC1Li6fX6O1ONXKvdOR9a689w+OLGiF4W1PiEhNt2nfgnrj
218+
AD7oihsHDMCitgPi8XdHY7Fo917e7606zsbz4KRc5DZcZlWU9RiVqzg3r5BlseeZNim83vZ7Yl65
219+
kA/fKH1FMpHgNmymkm3BK1LZsL/z3R1OgE0s329dOtzxTRnHm5NF1OUdbrjnqjvOFMX4bXS8xIX/
220+
0DCAiYE7AFIoGGO3L12Mi7tDrzO+Ia2fjpPa4bP1TNJ0QJdC1ZrBoTnNAU26/YCd2tWJ/lVuuPtB
221+
bHhanJbP4FVWvVvrGr+a20ydNdXFcWO/L5oGuxdhoNwVxw69+HBXdnREx+9LfxwOnsuXfpQK6d2n
222+
J+yn/IS7FK1ovBJZK08mefg+XTN/lWfg3TXzZ6eXlv659dya+cdA/gPgZyV7
223+
"""
224+
200225

201226
def to_wx_bitmap(icon_bytes: bytes, icon_size: Tuple[int, int], fg_color: wx.Colour, bitmap_size: Tuple[int, int] = None):
202227
"""
@@ -227,7 +252,7 @@ def _main():
227252
# Tests icon loading code above by displaying the help icon in a wx Frame...,
228253
app = wx.App()
229254
frame = wx.Frame(None, title="Image Test!")
230-
bitmap = to_wx_bitmap(SAVE_TRACKS_ICON, SAVE_TRACKS_SIZE, frame.GetForegroundColour())
255+
bitmap = to_wx_bitmap(SETTINGS_ICON, SETTINGS_SIZE, frame.GetForegroundColour())
231256
icon = wx.StaticBitmap(frame, wx.ID_ANY, bitmap)
232257
frame.Show(1)
233258
app.MainLoop()

diplomat/wx_gui/labeler_lib.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ def __init__(
325325
self,
326326
*args,
327327
title: str = "Advanced Settings",
328-
collapsable = True,
328+
collapsable: bool = True,
329329
**kwargs
330330
):
331331
"""
@@ -387,9 +387,11 @@ def _force_layout_fix(self, evt):
387387
# This is stupid, but by setting the sizer again we force the
388388
# window to resize to fit everything...
389389
self.SetSizerAndFit(self._main_layout)
390+
self.Layout()
390391
# This is also stupid...
391392
window = wx.GetTopLevelParent(self)
392393
w, h = window.GetSize()
394+
window.Layout()
393395
window.SetSize(w + 1, h + 1)
394396
window.SetSize(w, h)
395397

0 commit comments

Comments
 (0)