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:
congsh
2026-02-12 15:50:51 +08:00
parent a5e50876a0
commit e853161975
37 changed files with 2109 additions and 9266 deletions

302
docs/需求分析报告.md Normal file
View 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 功能不完整
**设计文档承诺**
- 内置轻量 OCRPaddleOCR 本地运行)
- 云端 OCR API百度/腾讯/阿里云)
- 自动降级机制
**当前实现**
- 仅支持云端 API 调用
- 无任何本地 OCR 实现
- 无任何第三方 OCR 服务集成
- **OCR 功能实际上无法使用**
### 问题三:云端存储未实现
**设计文档承诺**
- WebDAV 支持
- 阿里云 OSS 支持
- AWS S3 支持
- 同步状态显示
**当前实现**
- 仅有简单的 JSON 文件存储
- 无任何云端存储实现
- 云存储配置类存在但无实际功能
### 问题四AI 分类功能依赖外部服务
**现状**
- 完全依赖第三方 APIOpenAI/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*

View 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 - 简化版*