@@ -98,6 +98,12 @@ def __init__(self, max_trackable):
9898 self .cfactor_pitch = 1.
9999 self .cfactor_yaw = 1.
100100
101+ class DriverPhone :
102+ def __init__ (self , max_trackable ):
103+ self .prob = 0.
104+ self .prob_offseter = RunningStatFilter (max_trackable = max_trackable )
105+ self .prob_calibrated = False
106+
101107class DriverBlink :
102108 def __init__ (self ):
103109 self .left = 0.
@@ -136,10 +142,8 @@ def __init__(self, rhd_saved=False, settings=None, always_on=False):
136142 # init driver status
137143 self .wheelpos_learner = RunningStatFilter ()
138144 self .pose = DriverPose (self .settings ._POSE_OFFSET_MAX_COUNT )
145+ self .phone = DriverPhone (self .settings ._POSE_OFFSET_MAX_COUNT )
139146 self .blink = DriverBlink ()
140- self .phone_prob = 0.
141- self .phone_offseter = RunningStatFilter (max_trackable = self .settings ._POSE_OFFSET_MAX_COUNT )
142- self .phone_calibrated = False
143147
144148 self .always_on = always_on
145149 self .distracted_types = []
@@ -237,11 +241,11 @@ def _get_distracted_types(self):
237241 if (self .blink .left + self .blink .right )* 0.5 > self .settings ._BLINK_THRESHOLD :
238242 distracted_types .append (DistractedType .DISTRACTED_BLINK )
239243
240- if self .phone_calibrated :
241- using_phone = self .phone_prob > max (min (self .phone_offseter .filtered_stat .M , self .settings ._PHONE_MAX_OFFSET ), self .settings ._PHONE_MIN_OFFSET ) \
242- * self .settings ._PHONE_THRESH2
244+ if self .phone . prob_calibrated :
245+ using_phone = self .phone . prob > max (min (self .phone_offseter .filtered_stat .M , self .settings ._PHONE_MAX_OFFSET ), self .settings ._PHONE_MIN_OFFSET ) \
246+ * self .settings ._PHONE_THRESH2
243247 else :
244- using_phone = self .phone_prob > self .settings ._PHONE_THRESH
248+ using_phone = self .phone . prob > self .settings ._PHONE_THRESH
245249 if using_phone :
246250 distracted_types .append (DistractedType .DISTRACTED_PHONE )
247251
@@ -275,14 +279,15 @@ def _update_states(self, driver_state, cal_rpy, car_speed, op_engaged, standstil
275279 model_std_max = max (self .pose .pitch_std , self .pose .yaw_std )
276280 self .pose .low_std = model_std_max < self .settings ._POSESTD_THRESHOLD
277281 self .blink .left = driver_data .leftBlinkProb * (driver_data .leftEyeProb > self .settings ._EYE_THRESHOLD ) \
278- * (driver_data .sunglassesProb < self .settings ._SG_THRESHOLD )
282+ * (driver_data .sunglassesProb < self .settings ._SG_THRESHOLD )
279283 self .blink .right = driver_data .rightBlinkProb * (driver_data .rightEyeProb > self .settings ._EYE_THRESHOLD ) \
280- * (driver_data .sunglassesProb < self .settings ._SG_THRESHOLD )
281- self .phone_prob = driver_data .phoneProb
284+ * (driver_data .sunglassesProb < self .settings ._SG_THRESHOLD )
285+ self .phone . prob = driver_data .phoneProb
282286
283287 self .distracted_types = self ._get_distracted_types ()
284- self .driver_distracted = (DistractedType .DISTRACTED_PHONE in self .distracted_types or DistractedType .DISTRACTED_POSE in self .distracted_types
285- or DistractedType .DISTRACTED_BLINK in self .distracted_types ) \
288+ self .driver_distracted = (DistractedType .DISTRACTED_PHONE in self .distracted_types
289+ or DistractedType .DISTRACTED_POSE in self .distracted_types
290+ or DistractedType .DISTRACTED_BLINK in self .distracted_types ) \
286291 and driver_data .faceProb > self .settings ._FACE_THRESHOLD and self .pose .low_std
287292 self .driver_distraction_filter .update (self .driver_distracted )
288293
@@ -291,11 +296,11 @@ def _update_states(self, driver_state, cal_rpy, car_speed, op_engaged, standstil
291296 if self .face_detected and car_speed > self .settings ._POSE_CALIB_MIN_SPEED and self .pose .low_std and (not op_engaged or not self .driver_distracted ):
292297 self .pose .pitch_offseter .push_and_update (self .pose .pitch )
293298 self .pose .yaw_offseter .push_and_update (self .pose .yaw )
294- self .phone_offseter . push_and_update (self .phone_prob )
299+ self .phone . prob_offseter . push_and_update (self .phone . prob )
295300
296301 self .pose .calibrated = self .pose .pitch_offseter .filtered_stat .n > self .settings ._POSE_OFFSET_MIN_COUNT and \
297- self .pose .yaw_offseter .filtered_stat .n > self .settings ._POSE_OFFSET_MIN_COUNT
298- self .phone_calibrated = self .phone_offseter .filtered_stat .n > self .settings ._POSE_OFFSET_MIN_COUNT
302+ self .pose .yaw_offseter .filtered_stat .n > self .settings ._POSE_OFFSET_MIN_COUNT
303+ self .phone . prob_calibrated = self .phone . prob_offseter .filtered_stat .n > self .settings ._POSE_OFFSET_MIN_COUNT
299304
300305 if self .face_detected and not self .driver_distracted :
301306 if model_std_max > self .settings ._DCAM_UNCERTAIN_ALERT_THRESHOLD :
@@ -401,6 +406,8 @@ def get_state_packet(self, valid=True):
401406 "posePitchValidCount" : self .pose .pitch_offseter .filtered_stat .n ,
402407 "poseYawOffset" : self .pose .yaw_offseter .filtered_stat .mean (),
403408 "poseYawValidCount" : self .pose .yaw_offseter .filtered_stat .n ,
409+ "phoneProbOffset" : self .phone .prob_offseter .filtered_stat .mean (),
410+ "phoneProbalidCount" : self .phone .prob_offseter .filtered_stat .n ,
404411 "stepChange" : self .step_change ,
405412 "awarenessActive" : self .awareness_active ,
406413 "awarenessPassive" : self .awareness_passive ,
0 commit comments