You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

38 lines
2.0 KiB

import csv
import json
from collections import deque
from pathlib import Path
from src.config_loader import TrackingLoggingSettings
from src.models import BoundingBox, FrameInfo, TrackEvent, TrackPoint, TrackedPerson, TrackState
from src.tracking_logger import TrackingLogger
def test_all_tracking_csv_logs_and_duplicate_summary(tmp_path: Path) -> None:
config = TrackingLoggingSettings(True, True, True, True, 1, str(tmp_path))
logger = TrackingLogger(config, "exp", "20260101_000000")
logger.open()
bbox = BoundingBox(1, 2, 11, 22)
tracked = TrackedPerson(1, bbox, .9, 0, "person", 6, 12, 6, 22, True, True, 3, 0)
point = TrackPoint(.1, "now", 1, 6, 12, 6, 22, bbox)
state = TrackState(1, "now", "later", 1, 2, entered_evaluation_region=True, trigger_crossed=True,
movement_direction="left_to_right", total_visible_frames=3, trajectory=deque([point]),
finalized=True, is_confirmed=True, first_seen_monotonic=.1, last_seen_monotonic=.5,
valid_for_counting=True, invalid_reason="")
logger.write_frame_tracks(FrameInfo(1, "now", .1, 100, 100, 20), [tracked], {1: state})
event = TrackEvent("trigger_crossed", 1, 1, "now", .1, 6, 22, "left_to_right", {"注記": "通過"})
logger.write_events([event])
logger.write_summary(state)
logger.write_summary(state)
logger.close()
logger.close()
paths = list(tmp_path.glob("*.csv"))
assert len(paths) == 3
assert all(path.read_bytes().startswith(b"\xef\xbb\xbf") for path in paths)
summary = next(path for path in paths if "summary" in path.name)
with summary.open(encoding="utf-8-sig", newline="") as stream:
assert len(list(csv.DictReader(stream))) == 1
events = next(path for path in paths if "events" in path.name)
with events.open(encoding="utf-8-sig", newline="") as stream:
row = next(csv.DictReader(stream))
assert json.loads(row["metadata_json"])["注記"] == "通過"