feat: 降低 NSFW 检测阈值,显示更多检测结果
This commit is contained in:
@@ -2,35 +2,23 @@ package classify
|
||||
|
||||
import "fmt"
|
||||
|
||||
// neutralMargin 判定"中性图"的最小分差:
|
||||
// 如果亮色占比和暗色占比相差不到这个值,就认为这张图不亮不暗,归为「mid」中性。
|
||||
const neutralMargin = 0.15
|
||||
|
||||
// BrightnessName 根据暗色/亮色像素占比,给图片定"明暗等级",返回类似:
|
||||
// - "dark_80" → 暗色像素占 70%~90% 的暗图
|
||||
// - "bright_40" → 亮色像素占 30%~50% 的亮图
|
||||
// - "mid" → 明暗差不多,不好说谁多,归中性
|
||||
// - "dark_75" → 暗色像素占 50%~75% 的暗图
|
||||
// - "bright" → 亮色像素比暗色多的亮图(不分子档位)
|
||||
//
|
||||
// 判断规则(大白话):谁占得多、而且多出明显一截(超过 neutralMargin),
|
||||
// 就按谁命名,数字是占比取整到 20% 一档。
|
||||
// 判断规则:亮色占比 > 暗色占比 → bright;否则按暗色占比取整到 25% 一档。
|
||||
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"
|
||||
if lightScore > darkScore {
|
||||
return "bright"
|
||||
}
|
||||
return fmt.Sprintf("dark_%d", brightnessTier(darkScore))
|
||||
}
|
||||
|
||||
// brightnessTier 把占比(0~1)取整到"最接近的 20%"作为档位数字,范围 20~100。
|
||||
// 例:0.30~0.50 → "40";0.96 以上 → "100"。
|
||||
// 这样文件夹名里的数字不会出现"明明很少却挂个大数字"的情况。
|
||||
// brightnessTier 把暗色占比(0~1)取整到最接近的 25% 档位,范围 25~100。
|
||||
func brightnessTier(score float64) int {
|
||||
tier := int(score*100+10) / 20 * 20
|
||||
if tier < 20 {
|
||||
return 20
|
||||
tier := int(score*100+12) / 25 * 25
|
||||
if tier < 25 {
|
||||
return 25
|
||||
}
|
||||
if tier > 100 {
|
||||
return 100
|
||||
|
||||
Reference in New Issue
Block a user