diff --git a/app/eva_common.py b/app/eva_common.py index bf1cc73..d471e19 100644 --- a/app/eva_common.py +++ b/app/eva_common.py @@ -740,49 +740,33 @@ def calc_inroad_imbalance_index(inroad_delay_pb_list): def _classify_angles_to_turn_types(angles, is_merge=False): - """ - 自适应阈值转向分类。 - 从实际角度数据中提取候选阈值,优先填满更多转向类型,其次选择最接近默认阈值的方案。 - """ if not angles: return set() default_straight = 30 default_uturn = 150 - abs_angles = sorted(set(round(abs(a)) for a in angles)) - - straight_candidates = set() - uturn_candidates = set() - for aa in abs_angles: - if 20 <= aa <= 50: - straight_candidates.add(aa) - if 135 <= aa <= 165: - uturn_candidates.add(aa) - straight_candidates.add(default_straight) - uturn_candidates.add(default_uturn) - straight_candidates = sorted(straight_candidates) - uturn_candidates = sorted(uturn_candidates) - - def classify(straight_thr, uturn_thr): - types = set() - for a in angles: - if abs(a) <= straight_thr: - types.add(0) - elif abs(a) >= uturn_thr: - types.add(3) - elif a > 0: - types.add(1 if is_merge else 2) - else: - types.add(2 if is_merge else 1) - return types + abs_angles = sorted(set(abs(a) for a in angles)) + straight_candidates = sorted(set(abs_angles + [default_straight])) + uturn_candidates = sorted(set(abs_angles + [default_uturn])) best_types = None best_score = (-1, float('inf'), float('inf')) for s_thr in straight_candidates: for u_thr in uturn_candidates: - types = classify(s_thr, u_thr) + if s_thr >= u_thr: + continue + types = set() + for a in angles: + if abs(a) <= s_thr: + types.add(0) + elif abs(a) >= u_thr: + types.add(3) + elif a > 0: + types.add(1 if is_merge else 2) + else: + types.add(2 if is_merge else 1) score = (len(types), -abs(s_thr - default_straight), -abs(u_thr - default_uturn)) if score > best_score: best_score = score