rrantsa/screenkb-vision-ocr
GitHub: rrantsa/screenkb-vision-ocr
一个离线图像分析工具,结合 OCR、计算机视觉与规则知识库,将各类图片转化为结构化 JSON 输出,专为 AI Agent 消费而优化。
Stars: 0 | Forks: 0
# screenkb
**分析任何图像** —— 截图、照片、扫描文档 —— 结合 OCR + 计算机视觉 + 布局检测 + 基于规则的知识库。生成结构化的 JSON 输出。无需 GPU。完全离线。
## 功能
- **OCR** (Tesseract) —— 带坐标的文本提取
- **布局检测** (OpenCV) —— 面板、工具栏、侧边栏、终端面板
- **计算机视觉分析** (OpenCV) —— 人脸、肤色、边缘、MSER、场景分类
- **标注检测** —— 手绘圆圈、下划线、彩色高亮
- **知识库** (SQLite) —— 可学习的 IF-THEN 规则 + 模式匹配
- **所有图像类型** —— 不仅仅是 UI 截图。人物、文档、风景、物体的照片均可自动检测并分类。
- **紧凑输出**(约 200 个 token)—— 专为 AI agent 消耗而优化
## Pipeline
```
Image Path
→ Image Loader (Pillow — PNG/JPG/BMP/WEBP, normalize+resize)
→ OCR Engine (pytesseract — text regions with coordinates)
→ Layout Analyzer (OpenCV — panels, toolbars, sidebars, terminal)
→ CV Analyzer (OpenCV — faces, skin, edges, MSER, scene type)
→ Feature Extractor (keyword matching → feature list)
→ KB Matcher (SQLite rules + learned patterns)
→ Reasoning Engine (IF-THEN scoring + CV fallback → winner selection)
→ JSON Output
```
## 场景类型(CV 自动检测)
| 类型 | 示例 |
|------|---------|
| `people_photo` | 合影、自拍、肖像 |
| `building_photo` | 建筑、建筑外观 |
| `document` | 纸张照片、身份证、扫描件 |
| `landscape` | 户外风景、天空、自然 |
| `object_photo` | 产品照片、物体特写 |
| `ui_screenshot` | 桌面/移动应用屏幕 |
## 环境要求
- Python 3.10+
- [Tesseract OCR](https://github.com/UB-Mannheim/tesseract/wiki)(二进制文件,必须单独安装)
## 安装说明
```
pip install -r requirements.txt
pip install -e .
```
在 Windows 上,从 https://github.com/UB-Mannheim/tesseract/wiki 安装 Tesseract
默认安装路径:`C:\Program Files\Tesseract-OCR\tesseract.exe`(自动检测)。
如果安装在其他位置,通过环境变量覆盖:
```
$env:TESSERACT_CMD = "D:\tools\Tesseract-OCR\tesseract.exe"
```
## 运行 screenkb
### analyze —— 完整 pipeline → JSON
```
screenkb analyze screenshot.png # Default: ~500 tokens
screenkb analyze screenshot.png --compact # Agent-friendly: ~200 tokens
screenkb analyze screenshot.png --extended # Full data: ~1700 tokens
screenkb analyze screenshot.png --verbose # Show pipeline steps
screenkb analyze screenshot.png --output result.json
screenkb analyze screenshot.png --llm # LLM enhancement
screenkb analyze screenshot.png --llm --llm-backend deepseek
screenkb analyze screenshot.png --annotations # Detect hand-drawn marks
```
### ocr —— 原始文本提取
```
screenkb ocr screenshot.png
```
### layout —— 检测 UI 区域
```
screenkb layout screenshot.png
```
返回包含检测到的面板、工具栏、侧边栏、终端面板等的 JSON。
### learn —— 存储修正
```
screenkb learn screenshot.png screen_type=login_form
screenkb learn photo.jpg screen_type=people_photo
screenkb learn scan.png screen_type=document
```
将图像的特征指纹存储在 SQLite 知识库中。未来相似的图像将获得对该 `screen_type` 的置信度提升。
### explain —— 显示匹配的规则
```
screenkb explain screenshot.png
```
显示哪些 IF-THEN 规则被触发、它们的得分以及最终的分类结果。
### rules —— 列出所有知识库规则
```
screenkb rules
```
## LLM 增强(可选)
使用 `--llm` 启用。LLM 仅接收提取的特征 + OCR 文本,绝不接收原始图像。
支持的后端:
| 后端 | 环境变量 | 模型环境变量 |
|---------|---------|---------------|
| DeepSeek | `DEEPSEEK_API_KEY` | `SCREENKB_LLM_MODEL`(默认:`deepseek-chat`) |
| OpenAI | `OPENAI_API_KEY` | `SCREENKB_LLM_MODEL`(默认:`gpt-4o-mini`) |
| Ollama | `OLLAMA_BASE_URL`(默认:`http://localhost:11434`) | `SCREENKB_LLM_MODEL`(默认:`llama3`) |
后端选择:`--llm-backend deepseek|openai|ollama` 或 `SCREENKB_LLM` 环境变量,或从 API key 自动检测。
## 知识库
位置:`%APPDATA%\screenkb\screenkb.db`(Windows)/ `~/.config/screenkb/screenkb.db`(Linux)
覆盖:`SCREENKB_DB=/path/to/screenkb.db`
手动初始化 schema:
```
python migrate_db.py
```
## 编译为 .exe(可选)
```
pip install pyinstaller
pyinstaller --onefile --name screenkb screenkb/cli.py
# 输出: dist/screenkb.exe
# 复制到: tools/bin/screenkb.exe
```
标签:OCR, OpenCV, Tesseract, 图像分析, 布局检测, 计算机视觉, 逆向工具