Update obsidian-kb skill and add find-skills

- obsidian-kb: Add OCR processors (easyocr, tesseract)
- obsidian-kb: Fix subtitle detection with test files
- obsidian-kb: Add cookie verification script
- Add find-skills skill for discovering capabilities
- Add video processing scripts
- Update clawhub lock file
This commit is contained in:
OpenClaw Agent
2026-02-09 11:53:42 +08:00
parent d66eade77e
commit e0a2b323d9
33 changed files with 3555 additions and 36 deletions
+143
View File
@@ -208,6 +208,51 @@ bilibili_extraction:
enable_danmaku: false # 启用弹幕提取
timeout_seconds: 30 # 超时时间
max_retries: 3 # 最大重试次数
# 硬字幕提取配置 (OCR 方式)
hard_subtitle:
# 是否启用硬字幕提取功能
enabled: true
# OCR 引擎选择
# 可选值: "paddleocr" (推荐), "tesseract"
engine: "paddleocr"
# 字幕区域检测配置
detection:
# 默认字幕区域: "bottom" (底部), "full" (全屏), "auto" (自动检测)
default_region: "bottom"
# 当默认区域未检测到字幕时,是否自动回退到全屏模式
fallback_auto: true
# 是否缓存字幕区域检测结果(提升处理速度)
cache_region: true
# OCR 识别配置
ocr:
# 置信度阈值: 低于此值的识别结果将被过滤
confidence_threshold: 0.7
# 批处理大小: 每次处理的帧数(影响内存使用和速度)
batch_size: 32
# 最大并发工作线程数
max_workers: 4
# 视频帧提取配置
video:
# 抽帧间隔 (秒): 每隔多少秒抽取一帧进行识别
interval_seconds: 5
# 最大抽取帧数: 防止处理过长视频导致资源耗尽
max_frames: 500
# 流式处理模式: 逐步读取视频帧,避免一次性加载整个视频
stream_mode: true
# 后处理配置
postprocess:
# 是否启用去重: 去除连续相同的字幕文本
deduplicate: true
# 最小文本长度: 少于此长度的识别结果将被视为噪声
min_length: 2
# 是否过滤噪声: 使用规则过滤明显错误的识别结果
filter_noise: true
```
### 环境变量
@@ -319,6 +364,104 @@ else:
content["subtitle_text"] = subtitle_text
```
### 硬字幕提取功能
当视频没有内置字幕时,硬字幕提取功能可以通过 OCR(光学字符识别)技术从视频画面中识别字幕文本。
**功能介绍:**
- 自动检测和识别视频画面中的字幕文本
- 支持多种 OCR 引擎(PaddleOCR、Tesseract)
- 智能字幕区域检测(底部、全屏、自动)
- 自动去重和噪声过滤
- 支持流式处理,降低内存占用
**使用场景:**
- 视频没有提供 CC 字幕或 AI 字幕
- 字幕嵌入在视频画面中(硬编码字幕)
- 需要提取非标准格式的字幕
**配置说明:**
```yaml
hard_subtitle:
# 是否启用硬字幕提取功能
enabled: true
# OCR 引擎选择
# 可选值: "paddleocr" (推荐), "tesseract"
engine: "paddleocr"
# 字幕区域检测配置
detection:
# 默认字幕区域: "bottom" (底部), "full" (全屏), "auto" (自动检测)
default_region: "bottom"
# 当默认区域未检测到字幕时,是否自动回退到全屏模式
fallback_auto: true
# 是否缓存字幕区域检测结果(提升处理速度)
cache_region: true
# OCR 识别配置
ocr:
# 置信度阈值: 低于此值的识别结果将被过滤
confidence_threshold: 0.7
# 批处理大小: 每次处理的帧数(影响内存使用和速度)
batch_size: 32
# 最大并发工作线程数
max_workers: 4
# 视频帧提取配置
video:
# 抽帧间隔 (秒): 每隔多少秒抽取一帧进行识别
interval_seconds: 5
# 最大抽取帧数: 防止处理过长视频导致资源耗尽
max_frames: 500
# 流式处理模式: 逐步读取视频帧,避免一次性加载整个视频
stream_mode: true
# 后处理配置
postprocess:
# 是否启用去重: 去除连续相同的字幕文本
deduplicate: true
# 最小文本长度: 少于此长度的识别结果将被视为噪声
min_length: 2
# 是否过滤噪声: 使用规则过滤明显错误的识别结果
filter_noise: true
```
**使用示例:**
```python
from obsidian_kb.extractors.bilibili import BilibiliExtractor
# 创建提取器实例(自动启用硬字幕提取)
extractor = BilibiliExtractor(
use_playwright=True,
headless=True
)
# 当视频没有内置字幕时,会自动尝试硬字幕提取
subtitle = extractor.extract_subtitle("https://www.bilibili.com/video/BV1xx411c7mD")
print(f"识别到的字幕: {subtitle}")
```
**注意事项:**
1. **性能考虑**:硬字幕提取需要较高的计算资源,建议在配置合理的机器上运行
2. **识别准确度**:OCR 识别准确度受字幕字体、颜色、背景等因素影响,可能存在误差
3. **处理时间**:硬字幕提取比软字幕提取慢,对于长视频需要较长时间处理
4. **依赖安装**:使用前需要安装 OCR 引擎依赖:
- PaddleOCR: `pip install paddleocr paddlepaddle`
- Tesseract: 需要安装 Tesseract OCR 引擎和语言包
5. **网络视频**:流式处理需要稳定的网络连接
6. **字幕格式**:不同视频的字幕样式差异较大,可能需要调整配置参数以获得最佳效果
**最佳实践:**
- 对于短视频(<30分钟),可以减小 `interval_seconds` 以提高识别精度
- 对于长视频,增加 `interval_seconds` 和减少 `max_frames` 以平衡速度和质量
- 如果字幕位置固定在底部,使用 `default_region: "bottom"` 可以提升速度
- 首次使用建议先测试一段视频,根据结果调整配置参数
### ZhihuDrissionExtractor 类
知乎 DrissionPage 提取器提供知乎内容的完整提取功能: