Spaces:
Sleeping
Sleeping
File size: 1,476 Bytes
10d4c94 58da6de 10d4c94 58da6de 10d4c94 58da6de 10d4c94 58da6de 10d4c94 58da6de 10d4c94 58da6de 10d4c94 58da6de 10d4c94 58da6de 10d4c94 58da6de 10d4c94 58da6de 10d4c94 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | import numpy as np
class RuleBasedQualityEvaluator:
def evaluate(self, f: dict, shape: str):
shape = shape.lower()
if shape == "circle":
circ = f["circularity"]
ecc = f["eccentricity"]
score = np.clip((circ - 0.8) / 0.2, 0, 1)
if circ >= 0.95 and ecc < 0.3:
return "perfect", float(score)
elif circ >= 0.85:
return "medium", float(score * 0.8)
else:
return "irregular", float(score * 0.6)
if shape in ["square", "rectangle"]:
ang = f["angle_error"]
side_var = f["side_length_variance"]
score = 1 - np.clip((ang/30 + side_var) / 2, 0, 1)
if ang <= 5 and side_var <= 0.05:
return "perfect", float(score)
elif ang <= 15 and side_var <= 0.15:
return "medium", float(score * 0.8)
else:
return "irregular", float(score * 0.6)
if shape == "triangle":
ang = f["angle_error"]
side_var = f["side_length_variance"]
score = 1 - np.clip((ang/25 + side_var) / 2, 0, 1)
if ang <= 5 and side_var <= 0.05:
return "perfect", float(score)
elif ang <= 15 and side_var <= 0.15:
return "medium", float(score * 0.8)
else:
return "irregular", float(score * 0.6)
return "unknown", 0.0
|