大法师

This commit is contained in:
coco
2026-07-17 15:37:35 +08:00
parent 5a58127ee5
commit 0b5ad29d15
571 changed files with 5751 additions and 545 deletions
@@ -0,0 +1,40 @@
# Plan: 对齐 C++ C/T 线检测逻辑
## 问题
当前 Kotlin 代码跳过条带定位步骤,直接在整张相机画面(960×1280)上用极低阈值检测 C/T 线,导致噪声轮廓大量通过,C 线检测不稳定。
C++ 方案正确:**先找绿色定位块 → 裁剪旋转条带区域 → 在裁剪后的条带上检测 C/T 线**。
## 修改范围
### 1. `StripLocator.kt``locate()` 函数(主路径)
**a) 放宽 center distance ratio(第 408 行)**
- `1.65``1.7`(对齐 C++
**b) C/T 线过滤顺序和阈值(第 542-548 行)**
- 当前:Width(0.03~0.25) → Height(0.4~1.1)
- 改为:Height(0.7~1.1) → Width(0.045~0.20)(对齐 C++
**c) 去重逻辑(第 556-569 行)**
- 当前:保留离图像中心最近的 2 个轮廓
- 改为:左右两侧各保留 1 个(最靠近中心线的),对齐 C++
### 2. `StripLocator.kt``locateCroppedStrip()` 函数(回退路径)
**a) 过滤顺序和阈值(第 850-856 行)**
- 当前:Width(0.005~0.35) → Height(0.02~1.1)
- 改为:Height(0.15~1.1) → Width(0.01~0.25)
**b) 去重逻辑(第 864-879 行)**
- 同 `locate()`,改为左右各保留 1 个
### 3. `ScanViewModel.kt``processFrameInternal()`(第 161-166 行)
- 当前:直接调用 `locateCroppedStrip(rgbMat)`
- 改为:先 try `locate(srcRgba, roiRect, false)`,失败再 fallback 到 `locateCroppedStrip`
## 预期效果
- C/T 线检测在裁剪后的条带区域上进行,过滤阈值合理
- C 线检测更稳定,减少"只检测到 1 条线"的情况
- 即使 `locate()` 失败,fallback 路径也有改善的阈值