feat: 断点续传与色情识别提速/修复,支持 Linux 交叉编译

- feat: 新增续传表 scan_log,重扫跳过已归类文件(尺寸/头尾指纹校验)
- fix: 色情识别记录批量入库超 SQLite 999 变量上限,改每 100 条一批
- perf: NudeNet 检测改为多线程推理池(每线程独立模型实例)
- perf: 明暗分析 JPEG(YCbCr) 快路径;SQLite 读并发放开;加阶段耗时统计
- fix: 前端色情识别状态由后端如实上报(配置开关+检测服务是否起来)
- feat: ffprobe 内嵌按平台拆分,Linux 构建回退系统 ffprobe,支持交叉编译
- docs: README 补充断点续传与 CentOS 交叉编译步骤
- chore: organize.workers 默认 8
This commit is contained in:
2025-06-19 21:07:35 +08:00
parent ea134afa27
commit 957dfe1134
18 changed files with 908 additions and 111 deletions
+17
View File
@@ -152,6 +152,23 @@ func analyzeBrightness(img image.Image) (darkScore float64, lightScore float64)
offset++
}
}
case *image.YCbCr:
// JPEG 解码出来是 YCbCr:Y 平面就是亮度,直接翻数组。
// 这是最常见的照片格式,走这分支能避开 default 里逐像素 img.At().RGBA() 的慢路径。
pix := m.Y
for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
offset := y*m.YStride + bounds.Min.X
for x := bounds.Min.X; x < bounds.Max.X; x++ {
v := float64(pix[offset])
if v < 80 {
darkCount++
} else if v > 175 {
lightCount++
}
sampleCount++
offset++
}
}
default:
// 其他格式:用通用的读法
for y := bounds.Min.Y; y < bounds.Max.Y; y++ {