Skip to content

Commit f0f686a

Browse files
authored
Merge pull request #3563 from wdkwyf/Sept_version
Update smartlab demo with corner case consideration.
2 parents e3f46cc + 3d29e0f commit f0f686a

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

demos/smartlab_demo/python/evaluator.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def __init__(self):
3131
self.rider_portion = 6 # [IS_rider & MS_rider] divide the distance between 2 roundscrew1 into rider_portion portion, if rider falls in the first portion mean rider at zeroth position
3232
self.rider_move_threshold = 20 # [MS_rider_tweezers] if rider moves more than this value, check if tweezers or hand is used to move rider
3333
self.buffer_rider_size_limit = 30 # [MS_rider_tweezers]
34-
self.use_tweezers_threshold = 100 # [MS_rider_tweezers & MS_weights_tweezers] if tweezer and rider/weight distance more than tweezer treshold, consider use hand instead of use tweezer
34+
self.use_tweezers_threshold = 99 # [MS_rider_tweezers & MS_weights_tweezers] if tweezer and rider/weight distance more than tweezer treshold, consider use hand instead of use tweezer
3535
self.tweezers_warning_duration = 60 # [MS_rider_tweezers & MS_weights_tweezers] if score related to tweezers is 0 more than this duration/frames, score is 0 and unrevertible; else still revertible
3636
self.battery_aspect_ratio = 1.9
3737
self.reset()
@@ -424,7 +424,7 @@ def get_center_coordinate(self, coor):
424424
def is_inside(self, small_item_center_coor, big_item_coor):
425425
[big_x_min, big_y_min, big_x_max, big_y_max] = big_item_coor
426426
[small_center_x, small_center_y] = small_item_center_coor
427-
if small_center_x >= big_x_min and small_center_x <= big_x_max and small_center_y > big_y_min and small_center_y < big_y_max:
427+
if big_x_min <= small_center_x <= big_x_max and big_y_min < small_center_y < big_y_max:
428428
return True
429429
else:
430430
return False
@@ -574,12 +574,15 @@ def evaluate_rider_tweezers(self):
574574
elif np.linalg.norm(rider_min_coordinate - tweezers_min_coordinate) > self.use_tweezers_threshold:
575575
self.scoring['measuring_score_rider_tweezers'] = 0
576576
self.keyframe['measuring_score_rider_tweezers'] = self.frame_counter
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
577+
# once detected not using tweezers, will lose mark and not able to gain back this mark again
578+
self.rider_tweezers_lock_mark = True
579+
# corner case: rider and tweezer can't found correctly at the same time.
580+
# we only detect tweezer_coor whether under balance
579581
elif len(tweezers_coor) == 1 and len(self.side_object_dict['balance']) == 1:
580582
tweezers_coor = self.side_object_dict['tweezers'][0]
581583
balance_coor = self.side_object_dict['balance'][0]
582-
if self.is_behind(tweezers_coor, balance_coor):
584+
if self.is_behind(tweezers_coor, balance_coor) and self.is_inside(self.get_center_coordinate(tweezers_coor),
585+
balance_coor):
583586
self.scoring['measuring_score_rider_tweezers'] = 1
584587
self.keyframe['measuring_score_rider_tweezers'] = self.frame_counter
585588

@@ -789,7 +792,7 @@ def evaluate_weights_tweezers(self, weight_inside_tray):
789792
if not self.tweezers_warning \
790793
or self.frame_counter - self.tweezers_warning < self.tweezers_warning_duration:
791794
self.tweezers_warning = None
792-
if all(use_tweezers_bool):
795+
if all(use_tweezers_bool) and len(use_tweezers_bool) > 0:
793796
self.scoring['measuring_score_weights_tweezers'] = 1
794797
self.keyframe['measuring_score_weights_tweezers'] = self.frame_counter
795798
else:

0 commit comments

Comments
 (0)