@@ -146,7 +146,7 @@ def inference(self,
146
146
if action_seg_results == "adjust_rider" :
147
147
self .evaluate_rider_tweezers ()
148
148
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,
150
150
self .evaluate_end_tidy () # then can start evaluate whether they keep the apparatus
151
151
152
152
self .check_score_validity ()
@@ -429,6 +429,13 @@ def is_inside(self, small_item_center_coor, big_item_coor):
429
429
else :
430
430
return False
431
431
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
+
432
439
def classify_state (self , action_seg_results ):
433
440
"""
434
441
filter input data for action so that only action persists
@@ -439,16 +446,10 @@ def classify_state(self, action_seg_results):
439
446
action_seg_results: str
440
447
action label
441
448
"""
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" ]:
447
450
self .is_put_take_observed = True
448
-
449
- if self .is_put_take_observed == True :
450
451
self .state = "Measuring"
451
- elif self .is_put_take_observed == False :
452
+ elif not self .is_put_take_observed :
452
453
self .state = "Initial"
453
454
454
455
def rotate (self , left , right , center ):
@@ -574,6 +575,13 @@ def evaluate_rider_tweezers(self):
574
575
self .scoring ['measuring_score_rider_tweezers' ] = 0
575
576
self .keyframe ['measuring_score_rider_tweezers' ] = self .frame_counter
576
577
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
577
585
578
586
def evaluate_object_left (self ):
579
587
object_left_score , _ = self .evaluate_object_left_from_view (view = 'top' )
@@ -862,7 +870,7 @@ def get_balance_mark(self):
862
870
if self .state == 'Initial' :
863
871
self .scoring ['initial_score_balance' ] = 1
864
872
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 :
866
874
# double check object left in case 'end_score_tidy' not getting marks but object has been removed
867
875
object_left_score , _ = self .evaluate_object_left_from_view (view = 'top' )
868
876
if object_left_score is not None and object_left_score >= 0 :
0 commit comments