1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #!/usr/bin/env python3
- import sys
- import math
- import datetime
- from collections import Counter
- from pprint import pprint
- from tqdm import tqdm
- from typing import cast
- from cereal.services import service_list
- from tools.lib.route import Route
- from tools.lib.logreader import LogReader
- if __name__ == "__main__":
- r = Route(sys.argv[1])
- cnt_valid: Counter = Counter()
- cnt_events: Counter = Counter()
- cams = [s for s in service_list if s.endswith('CameraState')]
- cnt_cameras = dict.fromkeys(cams, 0)
- start_time = math.inf
- end_time = -math.inf
- for q in tqdm(r.qlog_paths()):
- if q is None:
- continue
- lr = list(LogReader(q))
- for msg in lr:
- if msg.which() == 'carEvents':
- for e in msg.carEvents:
- cnt_events[e.name] += 1
- elif msg.which() in cams:
- cnt_cameras[msg.which()] += 1
- if not msg.valid:
- cnt_valid[msg.which()] += 1
- end_time = max(end_time, msg.logMonoTime)
- start_time = min(start_time, msg.logMonoTime)
- duration = (end_time - start_time) / 1e9
- print("Events")
- pprint(cnt_events)
- print("\n")
- print("Not valid")
- pprint(cnt_valid)
- print("\n")
- print("Cameras")
- for k, v in cnt_cameras.items():
- s = service_list[k]
- expected_frames = int(s.frequency * duration / cast(float, s.decimation))
- print(" ", k.ljust(20), f"{v}, {v/expected_frames:.1%} of expected")
- print("\n")
- print("Route duration", datetime.timedelta(seconds=duration))
|