package classify import "fmt" // neutralMargin 判定明暗主导的最小分差:两分差幅小于该值视为中性图 const neutralMargin = 0.15 // BrightnessName 判定图片明暗等级,返回如 "dark_70" / "bright_40" / "mid"。 // 以主导分差幅判定亮暗:lightScore 高于 darkScore neutralMargin 以上归 bright, // 反之归 dark,两者接近视为中性 mid(不再强制二选一)。 func BrightnessName(darkScore, lightScore float64) string { switch { case lightScore > darkScore+neutralMargin: return fmt.Sprintf("bright_%d", brightnessTier(lightScore)) case darkScore > lightScore+neutralMargin: return fmt.Sprintf("dark_%d", brightnessTier(darkScore)) default: return "mid" } } // brightnessTier 将占比分档到最接近的 10%,表示命中区间 [N-5%, N+5%),最小 10、最大 100。 // 例如 0.30~0.39 归 "30",0.96 以上归 "100",避免占比不足却挂高档名。 func brightnessTier(score float64) int { tier := int(score*100+5) / 10 * 10 if tier < 10 { return 10 } if tier > 100 { return 100 } return tier }