openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
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.

80 lines
2.5 KiB

#!/usr/bin/env python3
import argparse
import time
import os
from tqdm import tqdm
from cereal.messaging import PubMaster, recv_one, sub_sock
from cereal.services import service_list
from tools.lib.logreader import LogReader
from xx.chffr.lib.route import Route, RouteSegment
from tools.lib.route_framereader import RouteFrameReader
from common.column_store import save_dict_as_column_store
from xx.pipeline.lib.log_time_series import append_dict
from selfdrive.test.process_replay.compare_logs import save_log
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Run visiond on segment")
parser.add_argument("segment_name", help="The segment to run")
parser.add_argument("output_path", help="The output file")
args = parser.parse_args()
segment = RouteSegment.from_canonical_name(args.segment_name)
route = Route(segment._name._route_name)
frame_id_lookup = {}
frame_reader = RouteFrameReader(route.camera_paths(), None, frame_id_lookup, readahead=True)
msgs = list(LogReader(segment.log_path))
pm = PubMaster(['liveCalibration', 'frame'])
model_sock = sub_sock('model')
# Read encodeIdx
for msg in msgs:
if msg.which() == 'encodeIdx':
frame_id_lookup[msg.encodeIdx.frameId] = (msg.encodeIdx.segmentNum, msg.encodeIdx.segmentId)
# Send some livecalibration messages to initalize visiond
for msg in msgs:
if msg.which() == 'liveCalibration':
pm.send('liveCalibration', msg.as_builder())
time.sleep(1.0)
values = {}
out_msgs = []
for msg in tqdm(msgs):
w = msg.which()
if w == 'liveCalibration':
pm.send(w, msg.as_builder())
if w == 'frame':
msg = msg.as_builder()
frame_id = msg.frame.frameId
img = frame_reader.get(frame_id, pix_fmt="rgb24")[:,:,::-1]
msg.frame.image = img.flatten().tobytes()
pm.send(w, msg)
model = recv_one(model_sock)
model = model.as_builder()
model.logMonoTime = 0
model = model.as_reader()
out_msgs.append(model)
save_log(args.output_path, out_msgs)
# tm = model.logMonoTime / 1.0e9
# model = model.model
# append_dict("model/data/path", tm, model.path.to_dict(), values)
# append_dict("model/data/left_lane", tm, model.leftLane.to_dict(), values)
# append_dict("model/data/right_lane", tm, model.rightLane.to_dict(), values)
# append_dict("model/data/lead", tm, model.lead.to_dict(), values)
# save_dict_as_column_store(values, os.path.join(args.output_path, "LiveVisionD", args.segment_name))