Skip to content

Commit 0c2ad34

Browse files
committed
add corner case for "measuring_score_rider_tweezers" when rider can't be detected at the right hand in side view.
1 parent 0ed1af0 commit 0c2ad34

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

demos/smartlab_demo/python/evaluator.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ def inference(self,
146146
if action_seg_results == "adjust_rider":
147147
self.evaluate_rider_tweezers()
148148

149-
if self.is_object_put == True and self.is_weights_put == True: # if object and weights are put no matter at left/right tray,
149+
if self.is_object_put and self.is_weights_put: # if object and weights are put no matter at left/right tray,
150150
self.evaluate_end_tidy() # then can start evaluate whether they keep the apparatus
151151

152152
self.check_score_validity()
@@ -429,6 +429,13 @@ def is_inside(self, small_item_center_coor, big_item_coor):
429429
else:
430430
return False
431431

432+
def is_behind(self, small_item_coor, big_item_coor):
433+
[big_x_min, big_y_min, big_x_max, big_y_max] = big_item_coor
434+
[small_x_min, small_y_min, small_x_max, small_y_max] = small_item_coor
435+
if (big_y_min + big_y_max) / 2 < small_y_min:
436+
return True
437+
return False
438+
432439
def classify_state(self, action_seg_results):
433440
"""
434441
filter input data for action so that only action persists
@@ -439,16 +446,10 @@ def classify_state(self, action_seg_results):
439446
action_seg_results: str
440447
action label
441448
"""
442-
if action_seg_results == "put_left" or \
443-
action_seg_results == "put_right" or \
444-
action_seg_results == "take_left" or \
445-
action_seg_results == "take_right" or \
446-
action_seg_results == 'put_take':
449+
if action_seg_results in ["put_left", "put_right", "take_left", "take_right", "put_take"]:
447450
self.is_put_take_observed = True
448-
449-
if self.is_put_take_observed == True:
450451
self.state = "Measuring"
451-
elif self.is_put_take_observed == False:
452+
elif not self.is_put_take_observed:
452453
self.state = "Initial"
453454

454455
def rotate(self, left, right, center):
@@ -574,6 +575,13 @@ def evaluate_rider_tweezers(self):
574575
self.scoring['measuring_score_rider_tweezers'] = 0
575576
self.keyframe['measuring_score_rider_tweezers'] = self.frame_counter
576577
self.rider_tweezers_lock_mark = True # once detected not using tweezers, will lose mark and not able to gain back this mark again
578+
# corner case: rider and tweezer can't found correctly at the same time. we only detect tweezer_coor whether under balance
579+
elif len(tweezers_coor) == 1 and len(self.side_object_dict['balance']) == 1:
580+
tweezers_coor = self.side_object_dict['tweezers'][0]
581+
balance_coor = self.side_object_dict['balance'][0]
582+
if self.is_behind(tweezers_coor, balance_coor):
583+
self.scoring['measuring_score_rider_tweezers'] = 1
584+
self.keyframe['measuring_score_rider_tweezers'] = self.frame_counter
577585

578586
def evaluate_object_left(self):
579587
object_left_score, _ = self.evaluate_object_left_from_view(view='top')
@@ -862,7 +870,7 @@ def get_balance_mark(self):
862870
if self.state == 'Initial':
863871
self.scoring['initial_score_balance'] = 1
864872
self.keyframe['initial_score_balance'] = self.frame_counter
865-
elif self.state == "Measuring" and self.is_object_put == True and self.scoring['end_score_tidy'] == 0:
873+
elif self.state == "Measuring" and self.is_object_put and self.scoring['end_score_tidy'] == 0:
866874
# double check object left in case 'end_score_tidy' not getting marks but object has been removed
867875
object_left_score, _ = self.evaluate_object_left_from_view(view='top')
868876
if object_left_score is not None and object_left_score >= 0:

0 commit comments

Comments
 (0)