Add DuckTrack as initial annotation tool; Initial multimodal test
This commit is contained in:
60
annotation/ducktrack/metadata.py
Normal file
60
annotation/ducktrack/metadata.py
Normal file
@@ -0,0 +1,60 @@
|
||||
import json
|
||||
import os
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
from platform import uname
|
||||
|
||||
from screeninfo import get_monitors
|
||||
|
||||
|
||||
class MetadataManager:
|
||||
"""
|
||||
Handles various system metadata collection.
|
||||
"""
|
||||
|
||||
def __init__(self, recording_path: str, natural_scrolling: bool):
|
||||
self.recording_path = recording_path
|
||||
|
||||
self.metadata = uname()._asdict()
|
||||
|
||||
self.metadata["id"] = uuid.getnode()
|
||||
|
||||
main_monitor = get_monitors()[0]
|
||||
self.metadata["screen_width"] = main_monitor.width
|
||||
self.metadata["screen_height"] = main_monitor.height
|
||||
|
||||
try:
|
||||
match self.metadata["system"]:
|
||||
case "Windows":
|
||||
import wmi
|
||||
for item in wmi.WMI().Win32_ComputerSystem():
|
||||
self.metadata["model"] = item.Model
|
||||
break
|
||||
case "Darwin":
|
||||
import subprocess
|
||||
model = subprocess.check_output(["sysctl", "-n", "hw.model"]).decode().strip()
|
||||
self.metadata["model"] = model
|
||||
case "Linux":
|
||||
with open("/sys/devices/virtual/dmi/id/product_name", "r") as f:
|
||||
self.metadata["model"] = f.read().strip()
|
||||
except:
|
||||
self.metadata["model"] = "Unknown"
|
||||
|
||||
self.metadata["scroll_direction"] = -1 if natural_scrolling else 1
|
||||
|
||||
def save_metadata(self):
|
||||
metadata_path = os.path.join(self.recording_path, "metadata.json")
|
||||
with open(metadata_path, "w") as f:
|
||||
json.dump(self.metadata, f, indent=4)
|
||||
|
||||
def collect(self):
|
||||
self.metadata["start_time"] = self._get_time_stamp()
|
||||
|
||||
def end_collect(self):
|
||||
self.metadata["stop_time"] = self._get_time_stamp()
|
||||
|
||||
def add_obs_record_state_timings(self, record_state_events: dict[str, float]):
|
||||
self.metadata["obs_record_state_timings"] = record_state_events
|
||||
|
||||
def _get_time_stamp(self):
|
||||
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
Reference in New Issue
Block a user