File size: 5,162 Bytes
9a069e7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# 蓝屏时序预处理脚本说明

本目录用于检测胃肠镜视频中的冻结蓝屏区段、细化时间边界,并将结果整理为可发布的数据集。所有检测脚本均以原始视频为只读输入,不会裁剪、覆盖或移动源视频。

## 推荐流程

```text
视频目录
  -> process_blue_screen_dataset.py
  -> results/{intervals.csv,videos.jsonl,per_video/,evidence/,summary.json}
  -> 结果验收及 validation.json
  -> prepare_blue_screen_hf_release.py
  -> 可上传的 HF Dataset 目录
```

正式批量处理优先使用 `process_blue_screen_dataset.py`。`blue_screen_detector.py`、`fast_blue_screen_detector.py` 和 `refine_blue_intervals.py` 主要用于方法验证、单视频诊断和边界复核,不应替代正式批处理入口。

## 脚本清单

### `process_blue_screen_dataset.py`

正式的全数据集粗到细检测入口。

- 输入:包含 `.avi`、`.mp4`、`.mov` 或 `.mkv` 视频的目录。
- 粗检:顺序解码视频,每秒抽取一次圆形内镜 ROI,对 ROI 像素计算哈希和蓝色比例,定位连续静止蓝屏候选区段。
- 精修:只对候选区段及其前后缓冲区逐帧扫描,以原生 FPS 确定准确的开始帧和结束帧。
- 判定:ROI 解码帧哈希完全相同,同时蓝色比例达到阈值并满足最短持续时间。
- 支持 `--resume`,可复用已经完成的逐视频 JSON 结果。
- 输出:
  - `intervals.csv`:每个蓝屏区段一行,是主要时序标注。
  - `videos.jsonl`:每个视频一行,包含视频信息和全部区段。
  - `per_video/<video_id>.json`:逐视频检查点和详细结果。
  - `evidence/<video_id>/`:每个区段的前一帧、起始帧、结束帧和后一帧证据图。
  - `summary.json`:全数据集汇总统计。

正式 HeiCo 运行使用的主要参数为:1 秒粗采样、最短静止 6 秒、蓝色比例阈值 0.45、候选区段前后各扩展 5 秒、粗检尺寸 96、精修尺寸 160。

### `fast_blue_screen_detector.py`

单视频快速哈希检测工具,用于验证“蓝屏期间抽样帧是否完全相同”的假设。

- 顺序解码视频,但默认只每秒生成一个 ROI 哈希和蓝色比例。
- 将连续相同哈希且持续时间足够长的样本合并为粗粒度区段。
- 可通过重复传入 `--reference START END` 与用户提供的参考区段计算近似秒级 precision/recall。
- 输出单个 JSON;时间边界精度由 `--sample-seconds` 决定,不能代替逐帧精修结果。

### `refine_blue_intervals.py`

针对已知粗区段的单视频逐帧边界精修工具。

- 通过一个或多个 `--interval START END` 接收粗区段。
- 在粗区段前后增加 `--pad` 秒扫描范围。
- 逐帧计算圆形 ROI 蓝色比例,并通过连续确认帧抑制孤立噪声。
- 输出精修后的帧号、秒级时间、持续时长和平均蓝色比例。
- 适合人工复核或早期实验;正式批处理采用 `process_blue_screen_dataset.py` 内置的“完全重复帧哈希 + 蓝色比例”精修实现。

### `blue_screen_detector.py`

早期单视频候选检测工具,用于验证基于颜色和纹理的蓝屏判定方法。

- 自动估计圆形内镜 ROI,忽略外围黑色区域。
- 稀疏抽帧后计算蓝色比例、拉普拉斯纹理强度、平均色相和有效像素比例。
- 将高蓝色比例、低纹理且持续时间足够长的样本合并为候选区段。
- 输出详细 JSON 和区段 CSV。
- 该方法没有完全相同帧哈希约束,结果属于候选范围,不作为当前正式蓝屏时序标注。

### `prepare_blue_screen_hf_release.py`

将已经验收通过的运行结果整理为可移植的 Hugging Face Dataset 发布目录。

- 要求源运行包含 `run.json`、`results/intervals.csv`、`videos.jsonl`、`summary.json`、`validation.json` 和 `evidence/`。
- 只有 `validation.json` 状态为 `PASS` 时才允许打包。
- 删除结果中的服务器绝对视频路径,改用 `video_id` 和 `video_filename`。
- 复制边界证据图并生成便携的 provenance、summary、validation 和 release manifest。
- 对视频数、区段数和证据图数量进行一致性核验。
- 为避免误覆盖,目标输出目录已存在时会直接停止。

## 时间区间语义

蓝屏区段统一使用半开区间 `[start_seconds, end_seconds)`:开始时间包含在区段内,结束时间指向蓝屏结束后的第一个时间位置。逐帧结果同时提供 `start_frame` 和 `end_frame`,其中帧号边界为首尾均包含。

## 依赖与运行环境

- Python 3
- OpenCV (`cv2`)
- NumPy

FVQA 项目中的正式运行应使用 `fvqa-harness.yaml` 指定的 Conda 环境。蓝屏检测只使用 CPU,不需要占用 GPU。

## 当前正式结果

HeiCo 30 个视频的已验收结果位于 HF Dataset 仓库 `Gbone3176/orena-seg` 的 `blue_screen_temporal_annotations/` 子目录:共 323 个蓝屏区段和 1,291 张边界证据图。该结果通过了文件覆盖、逐帧解码、区段边界和汇总一致性检查;这里的 `PASS` 表示产物一致性验收通过,不代表基于独立人工金标准计算的检测准确率。