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
			
		
		
			
		
	
	
					80 lines
				
				2.5 KiB
			| 
											6 years ago
										 | #!/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))
 |