- 简化项目定位:从智能工具转为极简截图上传工具 - 移除重型依赖: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>
303 lines
6.7 KiB
Markdown
303 lines
6.7 KiB
Markdown
# 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*
|