refactor: 重构为极简截图上传工具
- 简化项目定位:从智能工具转为极简截图上传工具 - 移除重型依赖:torch、transformers、paddleocr、SQLAlchemy - 新增轻量级核心模块: - config.py: 简化 YAML 配置管理 - database.py: 原生 SQLite 存储 - screenshot.py: 截图功能(全屏/区域) - uploader.py: 云端上传(支持 custom/telegraph/imgur) - plugins/ocr.py: 可选 RapidOCR 插件 - 重写主窗口:专注核心功能,移除复杂 UI - 更新依赖:核心 ~50MB,OCR 可选 - 更新文档:新的 README 和需求分析 v2 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
302
docs/需求分析报告.md
Normal file
302
docs/需求分析报告.md
Normal file
@@ -0,0 +1,302 @@
|
||||
# CutThenThink 需求分析报告
|
||||
|
||||
## 项目现状评估
|
||||
|
||||
### 原始需求回顾
|
||||
|
||||
**CutThenThink** 应当是一个**轻量级截图工具**,核心功能包括:
|
||||
|
||||
1. **截图功能** - 支持多种截图方式
|
||||
2. **云端存储** - 数据存储在云端
|
||||
3. **OCR 扫描** - 文字识别,云端部署
|
||||
4. **AI 分类解析** - 智能分类和内容生成,服务提供商 API 或本地 LLM
|
||||
|
||||
### 当前实现状态
|
||||
|
||||
#### ✅ 已完成的功能模块
|
||||
|
||||
| 模块 | 状态 | 说明 |
|
||||
|------|------|------|
|
||||
| 数据模型 | 完成 | SQLAlchemy Record 模型 |
|
||||
| 配置管理 | 完成 | 完善的 Settings 配置系统 |
|
||||
| OCR 模块 | 部分完成 | 仅支持云端 API,但无本地降级方案 |
|
||||
| AI 模块 | 完成 | 支持 OpenAI/Claude/通义/Ollama |
|
||||
| 存储模块 | 部分完成 | 仅有 JSON 文件存储,无云端存储 |
|
||||
| 处理流程 | 完成 | OCR→AI→Storage 流程整合 |
|
||||
| GUI 框架 | 部分完成 | PyQt6 主窗口和部分组件 |
|
||||
|
||||
#### ❌ 存在的问题
|
||||
|
||||
### 问题一:架构过度复杂
|
||||
|
||||
**设计文档中的架构**:
|
||||
```
|
||||
多用户系统 → 云端 API → 复杂配置
|
||||
```
|
||||
|
||||
**实际需求**:
|
||||
```
|
||||
轻量级工具 → 简单配置 → 本地使用为主
|
||||
```
|
||||
|
||||
**具体表现**:
|
||||
1. 过度的配置系统(AI/OCR/云端/界面/高级 5 大类配置)
|
||||
2. 支持多种云存储(S3/OSS/COS/MinIO)但无实际实现
|
||||
3. 多用户隔离设计(实际是单用户工具)
|
||||
|
||||
### 问题二:OCR 功能不完整
|
||||
|
||||
**设计文档承诺**:
|
||||
- 内置轻量 OCR(PaddleOCR 本地运行)
|
||||
- 云端 OCR API(百度/腾讯/阿里云)
|
||||
- 自动降级机制
|
||||
|
||||
**当前实现**:
|
||||
- 仅支持云端 API 调用
|
||||
- 无任何本地 OCR 实现
|
||||
- 无任何第三方 OCR 服务集成
|
||||
- **OCR 功能实际上无法使用**
|
||||
|
||||
### 问题三:云端存储未实现
|
||||
|
||||
**设计文档承诺**:
|
||||
- WebDAV 支持
|
||||
- 阿里云 OSS 支持
|
||||
- AWS S3 支持
|
||||
- 同步状态显示
|
||||
|
||||
**当前实现**:
|
||||
- 仅有简单的 JSON 文件存储
|
||||
- 无任何云端存储实现
|
||||
- 云存储配置类存在但无实际功能
|
||||
|
||||
### 问题四:AI 分类功能依赖外部服务
|
||||
|
||||
**现状**:
|
||||
- 完全依赖第三方 API(OpenAI/Claude/通义千问)
|
||||
- 虽然支持 Ollama 本地模型,但需要用户自行部署
|
||||
- 无离线工作能力
|
||||
|
||||
**问题**:
|
||||
- 需要配置 API Key
|
||||
- 产生额外费用
|
||||
- 网络依赖
|
||||
|
||||
### 问题五:项目定位模糊
|
||||
|
||||
| 设计文档 | 实际需求 | 现状 |
|
||||
|---------|---------|------|
|
||||
| 多用户系统 | 单人工具 | 架构过于复杂 |
|
||||
| 云端优先 | 本地为主 | 云功能未实现 |
|
||||
| 智能分类器 | 简单分类工具 | AI 调用复杂 |
|
||||
| 完整应用 | 轻量工具 | 依赖过多 |
|
||||
|
||||
---
|
||||
|
||||
## 重新定义的需求
|
||||
|
||||
### 核心定位
|
||||
|
||||
**CutThenThink** 是一个**轻量级个人截图管理工具**,专注于:
|
||||
1. 快速截图
|
||||
2. 文字识别
|
||||
3. 智能分类
|
||||
4. 本地存储为主,可选云端同步
|
||||
|
||||
### 最小可行产品(MVP)功能
|
||||
|
||||
#### Phase 1: 核心功能(必须)
|
||||
|
||||
1. **截图功能**
|
||||
- 全局快捷键截图
|
||||
- 区域选择截图
|
||||
- 剪贴板图片检测
|
||||
|
||||
2. **OCR 识别**
|
||||
- 本地 OCR 引擎(PaddleOCR 轻量版)
|
||||
- 云端 OCR API 作为可选增强
|
||||
|
||||
3. **AI 分类**
|
||||
- 简单规则分类(基于关键词)
|
||||
- AI API 分类作为可选功能
|
||||
|
||||
4. **本地存储**
|
||||
- SQLite 本地数据库
|
||||
- 图片文件存储
|
||||
- 基础 CRUD 操作
|
||||
|
||||
5. **简单 GUI**
|
||||
- 主窗口
|
||||
- 截图预览
|
||||
- 历史记录浏览
|
||||
|
||||
#### Phase 2: 增强功能(可选)
|
||||
|
||||
1. **云端同步**
|
||||
- 简单的 WebDAV 同步
|
||||
- 或单个云服务商集成
|
||||
|
||||
2. **高级 AI**
|
||||
- OpenAI/Claude API 集成
|
||||
- 本地 Ollama 支持
|
||||
|
||||
3. **批量操作**
|
||||
- 批量导入图片
|
||||
- 批量导出
|
||||
|
||||
#### Phase 3: 优化功能(未来)
|
||||
|
||||
1. 图片标注/编辑
|
||||
2. 高级搜索
|
||||
3. 统计报表
|
||||
4. 多设备同步
|
||||
|
||||
---
|
||||
|
||||
## 技术栈简化建议
|
||||
|
||||
### 当前技术栈问题
|
||||
|
||||
| 组件 | 当前 | 问题 |
|
||||
|------|------|------|
|
||||
| GUI | PyQt6 | 功能过多,配置复杂 |
|
||||
| 数据库 | SQLAlchemy | 过度工程 |
|
||||
| OCR | 云端 API | 无法使用 |
|
||||
| AI | 多个 API | 配置复杂 |
|
||||
|
||||
### 建议的技术栈
|
||||
|
||||
| 组件 | 建议 | 理由 |
|
||||
|------|------|------|
|
||||
| GUI | PyQt6 (简化) | 保持不变,但简化功能 |
|
||||
| 数据库 | SQLite 原生 | 去掉 ORM,简化代码 |
|
||||
| OCR | PaddleOCR 轻量版 | 本地运行,不依赖网络 |
|
||||
| AI | 规则 + 可选 API | 基础功能离线可用 |
|
||||
| 存储 | 文件系统 | 简单直接 |
|
||||
|
||||
---
|
||||
|
||||
## 代码重构建议
|
||||
|
||||
### 1. 简化配置系统
|
||||
|
||||
**当前**:5 大类配置(AI/OCR/云端/界面/高级)
|
||||
|
||||
**建议**:
|
||||
```yaml
|
||||
# 简化配置文件 config.yaml
|
||||
ocr:
|
||||
engine: local # local 或 cloud
|
||||
|
||||
ai:
|
||||
enabled: false # 默认关闭
|
||||
provider: "" # 可选配置
|
||||
|
||||
storage:
|
||||
type: local # local 或 webdav
|
||||
|
||||
hotkeys:
|
||||
screenshot: Ctrl+Shift+A
|
||||
```
|
||||
|
||||
### 2. 实现本地 OCR
|
||||
|
||||
```python
|
||||
# 简化的 OCR 模块
|
||||
from paddleocr import PaddleOCR
|
||||
|
||||
class LocalOCR:
|
||||
def __init__(self):
|
||||
self.ocr = PaddleOCR(use_angle_cls=True, lang='ch')
|
||||
|
||||
def recognize(self, image_path):
|
||||
result = self.ocr.ocr(image_path, cls=True)
|
||||
return self._parse_result(result)
|
||||
```
|
||||
|
||||
### 3. 简化数据模型
|
||||
|
||||
```python
|
||||
# 简化的数据库模型
|
||||
import sqlite3
|
||||
|
||||
class RecordDB:
|
||||
def __init__(self, path):
|
||||
self.conn = sqlite3.connect(path)
|
||||
self._init_table()
|
||||
|
||||
def add(self, image_path, ocr_text, category):
|
||||
# 简单的插入操作
|
||||
pass
|
||||
```
|
||||
|
||||
### 4. 规则优先的 AI 分类
|
||||
|
||||
```python
|
||||
# 简单规则分类
|
||||
class RuleClassifier:
|
||||
RULES = {
|
||||
'TODO': ['待办', '任务', '完成', 'TODO'],
|
||||
'NOTE': ['笔记', '记录', '会议'],
|
||||
# ...
|
||||
}
|
||||
|
||||
def classify(self, text):
|
||||
for category, keywords in self.RULES.items():
|
||||
if any(kw in text for kw in keywords):
|
||||
return category
|
||||
return 'TEXT'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 开发优先级
|
||||
|
||||
### P0 (立即修复)
|
||||
|
||||
1. **实现本地 OCR** - 这是核心功能,必须可用
|
||||
2. **简化配置系统** - 降低使用门槛
|
||||
3. **基础 GUI 完善** - 确保核心流程可用
|
||||
|
||||
### P1 (短期完成)
|
||||
|
||||
1. 实现规则分类系统
|
||||
2. 完善本地存储功能
|
||||
3. 添加批量操作支持
|
||||
|
||||
### P2 (长期优化)
|
||||
|
||||
1. 云端同步功能
|
||||
2. AI API 集成
|
||||
3. 高级编辑功能
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
### 核心问题
|
||||
|
||||
CutThenThink 项目的主要问题在于**过度设计**:
|
||||
- 功能过多但实现不足
|
||||
- 架构复杂但缺少核心
|
||||
- 配置繁重但难以使用
|
||||
|
||||
### 解决方向
|
||||
|
||||
1. **回归本质**:轻量级截图工具
|
||||
2. **核心优先**:OCR + 分类 + 存储
|
||||
3. **本地为主**:确保离线可用
|
||||
4. **渐进增强**:从简单到复杂
|
||||
|
||||
### 下一步行动
|
||||
|
||||
1. 确认 MVP 功能范围
|
||||
2. 实现 PaddleOCR 本地集成
|
||||
3. 简化配置系统
|
||||
4. 完善基础 GUI 流程
|
||||
5. 测试端到端功能
|
||||
|
||||
---
|
||||
|
||||
*报告生成时间:2025年*
|
||||
*项目路径:CutThenThink*
|
||||
257
docs/需求分析报告_v2.md
Normal file
257
docs/需求分析报告_v2.md
Normal file
@@ -0,0 +1,257 @@
|
||||
# CutThenThink 需求分析报告 v2.0
|
||||
|
||||
## 项目重新定位
|
||||
|
||||
**CutThenThink** 是一个**极简轻量级截图上传工具**
|
||||
|
||||
### 核心功能(最小化)
|
||||
|
||||
| 功能 | 说明 |
|
||||
|------|------|
|
||||
| 截图 | 全屏、区域、窗口截图 |
|
||||
| 上传 | 上传到配置的云端服务 |
|
||||
| 批量上传 | 选择多张图片批量上传 |
|
||||
| 分类查看 | 按分类浏览历史记录 |
|
||||
|
||||
### 明确移除的功能
|
||||
|
||||
- ❌ 移除 PaddleOCR 本地模型(太重)
|
||||
- ❌ 移除 torch/torchvision 依赖
|
||||
- ❌ 移除 transformers 依赖
|
||||
- ❌ 移除复杂的 AI 分类系统
|
||||
- ❌ 移除多用户系统设计
|
||||
|
||||
### 可选功能
|
||||
|
||||
- 🔄 **OCR**:可选插件,使用 RapidOCR(轻量级 ONNX)
|
||||
- 🔄 **AI 分类**:可选云端 API,不作为核心依赖
|
||||
|
||||
---
|
||||
|
||||
## 参考项目调研
|
||||
|
||||
### RapidOCR - 轻量级 OCR 方案
|
||||
|
||||
**为什么选择 RapidOCR?**
|
||||
|
||||
| 对比项 | PaddleOCR | RapidOCR |
|
||||
|--------|-----------|-----------|
|
||||
| 安装大小 | ~200MB+ | ~10MB |
|
||||
| 依赖复杂度 | 高(paddlepaddle) | 低(onnxruntime) |
|
||||
| 安装命令 | `pip install paddleocr paddlepaddle` | `pip install rapidocr onnxruntime` |
|
||||
| 启动速度 | 较慢 | 极快 |
|
||||
| 可选性 | 难以做成可选 | 易于做成可选插件 |
|
||||
|
||||
**使用示例**:
|
||||
```python
|
||||
from rapidocr import RapidOCR
|
||||
|
||||
engine = RapidOCR()
|
||||
result = engine("screenshot.png")
|
||||
print(result[1]) # 识别的文本
|
||||
```
|
||||
|
||||
### ShareX - 成功的上传工具参考
|
||||
|
||||
**核心特点**:
|
||||
- 截图 + 编辑 + 上传 一体化
|
||||
- 支持多种上传目标(自建服务器、云存储)
|
||||
- 可自定义工作流
|
||||
- 快捷键优先
|
||||
|
||||
**可借鉴的设计**:
|
||||
1. 简洁的配置界面
|
||||
2. 上传历史记录
|
||||
3. 自定义上传目标
|
||||
|
||||
---
|
||||
|
||||
## 简化后的技术栈
|
||||
|
||||
### 核心依赖(必须)
|
||||
|
||||
```
|
||||
PyQt6 # GUI
|
||||
requests # 上传请求
|
||||
Pillow # 图片处理
|
||||
pyperclip # 剪贴板
|
||||
```
|
||||
|
||||
### 可选依赖(插件化)
|
||||
|
||||
```
|
||||
rapidocr # OCR(可选安装)
|
||||
onnxruntime # OCR 运行时(可选)
|
||||
```
|
||||
|
||||
### 完全移除
|
||||
|
||||
```
|
||||
paddleocr # 移除
|
||||
paddlepaddle # 移除
|
||||
torch # 移除
|
||||
transformers # 移除
|
||||
openai # 移除(可用扩展支持)
|
||||
anthropic # 移除(可用扩展支持)
|
||||
SQLAlchemy # 移除(用原生 sqlite3)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 简化的项目结构
|
||||
|
||||
```
|
||||
CutThenThink/
|
||||
├── src/
|
||||
│ ├── main.py # 入口
|
||||
│ ├── core/
|
||||
│ │ ├── screenshot.py # 截图功能
|
||||
│ │ ├── uploader.py # 上传功能
|
||||
│ │ └── database.py # 简单 SQLite
|
||||
│ ├── gui/
|
||||
│ │ ├── main_window.py # 主窗口
|
||||
│ │ ├── screenshot_widget.py # 截图组件
|
||||
│ │ └── upload_widget.py # 上传组件
|
||||
│ ├── plugins/ # 可选插件
|
||||
│ │ └── ocr.py # OCR 插件(可选)
|
||||
│ └── config.py # 简化配置
|
||||
├── data/
|
||||
│ └── screenshots/ # 截图存储
|
||||
├── requirements.txt # 核心依赖
|
||||
├── requirements-ocr.txt # 可选 OCR
|
||||
└── config.yaml # 用户配置
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 简化配置
|
||||
|
||||
```yaml
|
||||
# config.yaml - 最小配置
|
||||
app:
|
||||
theme: dark
|
||||
|
||||
upload:
|
||||
# 支持:imgur、自建、telegraph、s3等
|
||||
provider: custom
|
||||
endpoint: https://your-server.com/upload
|
||||
api_key: your-key
|
||||
|
||||
screenshot:
|
||||
format: png
|
||||
save_path: ~/Pictures/Screenshots
|
||||
|
||||
hotkeys:
|
||||
capture: Ctrl+Shift+A
|
||||
upload: Ctrl+Shift+U
|
||||
|
||||
# 可选,如果未安装 rapidocr 则忽略
|
||||
ocr:
|
||||
enabled: false
|
||||
auto_copy: false
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## MVP 功能清单
|
||||
|
||||
### P0 - 核心功能
|
||||
|
||||
- [x] 全局快捷键截图
|
||||
- [ ] 区域选择截图
|
||||
- [ ] 图片上传到服务器
|
||||
- [ ] 简单的历史记录
|
||||
- [ ] 复制链接到剪贴板
|
||||
|
||||
### P1 - 增强功能
|
||||
|
||||
- [ ] 批量上传
|
||||
- [ ] 自定义上传目标
|
||||
- [ ] 截图编辑(简单标注)
|
||||
- [ ] 分类管理
|
||||
|
||||
### P2 - 可选插件
|
||||
|
||||
- [ ] RapidOCR 集成
|
||||
- [ ] 云端 AI 分类
|
||||
- [ ] 更多上传服务
|
||||
|
||||
---
|
||||
|
||||
## 实现计划
|
||||
|
||||
### 第一阶段:核心功能(1-2周)
|
||||
|
||||
1. 简化项目结构,移除不必要依赖
|
||||
2. 实现基础截图功能
|
||||
3. 实现简单上传功能
|
||||
4. 实现 SQLite 存储
|
||||
5. 简洁的主窗口
|
||||
|
||||
### 第二阶段:增强功能(1周)
|
||||
|
||||
1. 批量上传
|
||||
2. 上传历史管理
|
||||
3. 分类浏览
|
||||
|
||||
### 第三阶段:可选插件(按需)
|
||||
|
||||
1. RapidOCR 插件
|
||||
2. 云端服务集成
|
||||
|
||||
---
|
||||
|
||||
## 依赖对比
|
||||
|
||||
### 当前项目依赖
|
||||
|
||||
```
|
||||
PyQt6>=6.7.0
|
||||
SQLAlchemy>=2.0.36
|
||||
openai>=1.0.0
|
||||
anthropic>=0.18.0
|
||||
requests>=2.31.0
|
||||
pyyaml>=6.0.1
|
||||
pillow>=10.0.0
|
||||
pyperclip>=1.8.2
|
||||
```
|
||||
|
||||
### 简化后核心依赖
|
||||
|
||||
```
|
||||
PyQt6>=6.7.0
|
||||
requests>=2.31.0
|
||||
pillow>=10.0.0
|
||||
pyperclip>=1.8.2
|
||||
```
|
||||
|
||||
### 可选 OCR 依赖
|
||||
|
||||
```
|
||||
rapidocr>=1.3.0
|
||||
onnxruntime>=1.16.0
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
|
||||
### 核心变化
|
||||
|
||||
1. **定位变化**:从"智能截图工具"变为"截图上传工具"
|
||||
2. **功能简化**:OCR 和 AI 变为可选插件
|
||||
3. **依赖精简**:移除所有重型 ML 库
|
||||
4. **架构简化**:去除 ORM 和复杂配置
|
||||
|
||||
### 目标
|
||||
|
||||
一个**开箱即用**的轻量级截图上传工具:
|
||||
- 安装简单(`pip install`)
|
||||
- 启动快速
|
||||
- 配置简洁
|
||||
- 功能专注
|
||||
|
||||
---
|
||||
|
||||
*更新时间:2025年*
|
||||
*版本:v2.0 - 简化版*
|
||||
Reference in New Issue
Block a user