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
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"])["注記"] == "通過"
|
|
|