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))
							 |