Source code for simba.ui.pop_ups.pose_reorganizer_pop_up
__author__ = "Simon Nilsson; sronilsson@gmail.com"
from tkinter import *
from simba.mixins.pop_up_mixin import PopUpMixin
from simba.pose_processors.reorganize_keypoint import KeypointReorganizer
from simba.ui.tkinter_functions import (CreateLabelFrameWithIcon, DropDownMenu,
FolderSelect, hxtScrollbar)
from simba.utils.enums import Formats, Keys, Links
[docs]class PoseReorganizerPopUp(PopUpMixin):
def __init__(self):
PopUpMixin.__init__(self, title="RE-ORGANIZE POSE_ESTIMATION DATA", size=(500, 800))
settings_frm = CreateLabelFrameWithIcon(parent=self.main_frm, header="SETTINGS", icon_name=Keys.DOCUMENTATION.value, icon_link=Links.VIDEO_TOOLS.value)
self.data_folder = FolderSelect(settings_frm, "DATA FOLDER: ", lblwidth="10")
self.pose_tool_dropdown = DropDownMenu(settings_frm, "Tracking tool", ["DLC", "maDLC"], "10")
self.pose_tool_dropdown.setChoices("DLC")
self.file_format = DropDownMenu(settings_frm, "FILE TYPE: ", ["csv", "h5"], "10")
self.file_format.setChoices("csv")
confirm_btn = Button(settings_frm, text="Confirm", font=Formats.FONT_REGULAR.value, command=lambda: self.confirm())
settings_frm.grid(row=0, sticky=NW)
self.data_folder.grid(row=0, sticky=NW, columnspan=3)
self.pose_tool_dropdown.grid(row=1, sticky=NW)
self.file_format.grid(row=2, sticky=NW)
confirm_btn.grid(row=2, column=1, sticky=NW)
[docs] def confirm(self):
if hasattr(self, "table"):
self.table.destroy()
self.keypoint_reorganizer = KeypointReorganizer(
data_folder=self.data_folder.folder_path,
pose_tool=self.pose_tool_dropdown.getChoices(),
file_format=self.file_format.getChoices(),
)
self.table = LabelFrame(
self.main_frm,
text="SET NEW ORDER",
font=Formats.LABELFRAME_HEADER_FORMAT.value,
pady=5,
padx=5,
)
self.current_order = LabelFrame(self.table, text="CURRENT ORDER:")
self.new_order = LabelFrame(self.table, text="NEW ORDER:")
self.table.grid(row=1, sticky=W, pady=10)
self.current_order.grid(row=0, column=0, sticky=NW, pady=5)
self.new_order.grid(row=0, column=1, sticky=NW, padx=5, pady=5)
idx1, idx2, oldanimallist, oldbplist, self.newanimallist, self.newbplist = (
[0] * len(self.keypoint_reorganizer.bp_list) for i in range(6)
)
if self.keypoint_reorganizer.animal_list:
animal_list_reduced = list(set(self.keypoint_reorganizer.animal_list))
self.pose_tool = "maDLC"
for i in range(len(self.keypoint_reorganizer.bp_list)):
idx1[i] = Label(self.current_order, text=str(i + 1) + ".")
oldanimallist[i] = Label(
self.current_order,
text=str(self.keypoint_reorganizer.animal_list[i]),
)
oldbplist[i] = Label(
self.current_order, text=str(self.keypoint_reorganizer.bp_list[i])
)
idx1[i].grid(row=i, column=0, sticky=W)
oldanimallist[i].grid(row=i, column=1, sticky=W, ipady=5)
oldbplist[i].grid(row=i, column=2, sticky=W, ipady=5)
idx2[i] = Label(self.new_order, text=str(i + 1) + ".")
self.newanimallist[i] = DropDownMenu(
self.new_order, " ", animal_list_reduced, "10"
)
self.newbplist[i] = DropDownMenu(
self.new_order, " ", self.keypoint_reorganizer.bp_list, "10"
)
self.newanimallist[i].setChoices(
self.keypoint_reorganizer.animal_list[i]
)
self.newbplist[i].setChoices(self.keypoint_reorganizer.bp_list[i])
idx2[i].grid(row=i, column=0, sticky=W)
self.newanimallist[i].grid(row=i, column=1, sticky=W)
self.newbplist[i].grid(row=i, column=2, sticky=W)
else:
self.pose_tool = "DLC"
for i in range(len(self.keypoint_reorganizer.bp_list)):
idx1[i] = Label(self.current_order, text=str(i + 1) + ".")
oldbplist[i] = Label(
self.current_order, text=str(self.keypoint_reorganizer.bp_list[i])
)
idx1[i].grid(row=i, column=0, sticky=W, ipady=5)
oldbplist[i].grid(row=i, column=2, sticky=W, ipady=5)
idx2[i] = Label(self.new_order, text=str(i + 1) + ".")
self.newbplist[i] = StringVar()
oldanimallist[i] = OptionMenu(
self.new_order,
self.newbplist[i],
*self.keypoint_reorganizer.bp_list
)
self.newbplist[i].set(self.keypoint_reorganizer.bp_list[i])
idx2[i].grid(row=i, column=0, sticky=W)
oldanimallist[i].grid(row=i, column=1, sticky=W)
button_run = Button(
self.table,
text="Run re-organization",
command=lambda: self.run_reorganization(),
)
button_run.grid(row=2, column=1, sticky=W)
[docs] def run_reorganization(self):
if self.pose_tool == "DLC":
new_bp_list = []
for curr_choice in self.newbplist:
new_bp_list.append(curr_choice.get())
self.keypoint_reorganizer.run(animal_list=None, bp_lst=new_bp_list)
if self.pose_tool == "maDLC":
new_bp_list, new_animal_list = [], []
for curr_animal, curr_bp in zip(self.newanimallist, self.newbplist):
new_bp_list.append(curr_bp.getChoices())
new_animal_list.append(curr_animal.getChoices())
self.keypoint_reorganizer.run(
animal_list=new_animal_list, bp_lst=new_bp_list
)