#!/usr/bin/env python3
import argparse
import numpy as np
import matplotlib . pyplot as plt
from openpilot . tools . lib . logreader import LogReader
if __name__ == ' __main__ ' :
parser = argparse . ArgumentParser ( )
parser . add_argument ( ' --width ' , default = 2160 , type = int )
parser . add_argument ( ' --height ' , default = 1080 , type = int )
parser . add_argument ( ' --route ' , default = ' rlog ' , type = str )
args = parser . parse_args ( )
w = args . width
h = args . height
route = args . route
fingers = [ [ - 1 , - 1 ] ] * 5
touch_points = [ ]
current_slot = 0
lr = list ( LogReader ( route ) )
for msg in lr :
if msg . which ( ) == ' touch ' :
for event in msg . touch :
if event . type == 3 and event . code == 47 :
current_slot = event . value
elif event . type == 3 and event . code == 57 and event . value == - 1 :
fingers [ current_slot ] = [ - 1 , - 1 ]
elif event . type == 3 and event . code == 53 :
fingers [ current_slot ] [ 1 ] = h - ( h - event . value )
if fingers [ current_slot ] [ 0 ] != - 1 :
touch_points . append ( fingers [ current_slot ] . copy ( ) )
elif event . type == 3 and event . code == 54 :
fingers [ current_slot ] [ 0 ] = w - event . value
if fingers [ current_slot ] [ 1 ] != - 1 :
touch_points . append ( fingers [ current_slot ] . copy ( ) )
if not touch_points :
print ( f ' No touch events found for { route } ' )
quit ( )
unique_points , counts = np . unique ( touch_points , axis = 0 , return_counts = True )
plt . figure ( figsize = ( 10 , 3 ) )
plt . scatter ( unique_points [ : , 0 ] , unique_points [ : , 1 ] , c = counts , s = counts * 20 , edgecolors = ' red ' )
plt . colorbar ( )
plt . title ( f ' Touches for { route } ' )
plt . xlim ( 0 , w )
plt . ylim ( 0 , h )
plt . grid ( True )
plt . show ( )