图片OCR与智能文档管理系统 - 需求文档
1. 项目概述
1.1 项目背景
在数字化办公场景中,用户经常需要从截图中提取文字内容(如截图保存的待办事项、会议记录、资料等),然后手动整理成文档或待办任务。本项目旨在通过OCR和AI技术,自动化这一流程,提升工作效率。
1.2 项目目标
- 实现图片到文本的自动识别与转换
- 利用AI智能分析,自动为文档打标签和分类
- 支持将识别结果一键转化为待办事项或归档文档
- 提供友好的Web界面,支持多用户协作
1.3 成功标准
- OCR识别准确率达到90%以上(清晰印刷体)
- AI标签分类准确率达到85%以上
- 端到端流程(截图→待办)操作步骤不超过5步
- 系统响应时间 < 2秒(不含OCR处理时间)
- 支持Docker一键部署
2. 功能需求
2.1 核心功能 (Must Have - P0)
2.1.1 用户认证与授权
- 描述: 支持多用户注册登录,数据隔离
- 优先级: P0
- 验收标准:
2.1.2 图片采集
- 描述: 支持系统截图和本地图片上传两种方式
- 优先级: P0
- 验收标准:
2.1.3 OCR文字识别与智能处理
- 描述: 将图片中的文字转换为可编辑文本,建立图片-文档关联,支持OCR失败时的降级处理
- 优先级: P0
- 验收标准:
2.1.4 文档管理
- 描述: 对OCR结果进行CRUD操作
- 优先级: P0
- 验收标准:
2.1.5 待办事项管理
- 描述: 将文档转化为待办事项并管理,支持三种状态列表
- 优先级: P0
- 验收标准:
2.1.6 AI智能分析
- 描述: 对OCR结果进行AI分析,自动打标签和分类,支持动态类型和标签扩展
- 优先级: P0
- 验收标准:
2.2 重要功能 (Should Have - P1)
2.2.1 标签与分类系统
- 描述: 完善的标签分类管理体系
- 优先级: P1
- 验收标准:
2.2.2 配置管理
- 描述: 可配置的服务提供商设置
- 优先级: P1
- 验收标准:
2.2.3 批量操作
- 描述: 提高批量处理效率
- 优先级: P1
- 验收标准:
2.3 可选功能 (Could Have - P2)
2.3.1 数据导出
- 描述: 支持将数据导出为各种格式
- 优先级: P2
- 功能:
- 导出为Markdown
- 导出为PDF
- 导出为JSON
2.3.2 数据统计
2.3.3 模板系统
- 描述: 预设文档/待办模板
- 优先级: P2
- 功能:
3. 非功能需求
3.1 性能要求
- 页面首屏加载时间: < 2秒
- API响应时间: < 500ms(不含OCR处理)
- OCR处理时间: < 5秒(单张常规图片)
- 并发用户: 5-10人同时使用
- 数据容量: 单用户最多1000个文档
3.2 安全要求
- 密码使用bcrypt加密
- JWT Token有效期24小时
- API Key加密存储
- 文件上传类型验证
- SQL注入防护
- XSS防护
- CORS配置
- HTTPS部署支持
3.3 可用性要求
- 系统可用性: 99%
- 故障恢复时间: < 1小时
- 数据备份频率: 每日自动备份
3.4 可维护性要求
- 代码结构清晰,模块化
- 完善的日志系统
- Docker容器化部署
- 环境变量配置
- API文档完整
4. 技术栈
4.1 前端技术栈
- 框架: React 18
- 构建工具: Vite
- UI组件库: Ant Design 5
- 状态管理: Zustand / React Query
- 路由: React Router v6
- HTTP客户端: Axios
- 截图功能: html2canvas 或 MediaDevices API
- 拖拽上传: react-dropzone
4.2 后端技术栈
- 运行时: Node.js 18+
- 框架: Express.js / Fastify
- ORM: Prisma
- 数据库: SQLite(开发) / PostgreSQL(生产)
- 认证: JWT
- 文件存储: 本地存储 / 可选OSS
4.3 OCR方案
- 本地: PaddleOCR (Python微服务) / Tesseract.js
- 云端API:
4.4 AI提供商
- 智谱AI (GLM): GLM-4 / GLM-4-Flash
- MiniMax: MiniMax-Pro
- DeepSeek: DeepSeek-Chat / DeepSeek-Coder
4.5 部署方案
- 容器化: Docker + Docker Compose
- 反向代理: Nginx
- 进程管理: PM2 (开发环境)
5. 数据模型
5.1 实体关系图
5.2 核心实体
User (用户)
| 字段 |
类型 |
说明 |
约束 |
| id |
UUID |
主键 |
PK |
| username |
String |
用户名 |
UNIQUE, NOT NULL |
| email |
String |
邮箱 |
UNIQUE |
| password_hash |
String |
密码哈希 |
NOT NULL |
| created_at |
DateTime |
创建时间 |
|
| updated_at |
DateTime |
更新时间 |
|
Document (文档)
| 字段 |
类型 |
说明 |
约束 |
| id |
UUID |
主键 |
PK |
| user_id |
UUID |
所属用户 |
FK, NOT NULL |
| title |
String |
标题 |
|
| content |
Text |
OCR内容/编辑后内容 |
NOT NULL |
| category_id |
UUID |
所属分类 |
FK |
| created_at |
DateTime |
创建时间 |
|
| updated_at |
DateTime |
更新时间 |
|
Image (图片)
| 字段 |
类型 |
说明 |
约束 |
| id |
UUID |
主键 |
PK |
| user_id |
UUID |
所属用户 |
FK, NOT NULL |
| document_id |
UUID |
关联文档 |
FK (可为空) |
| file_path |
String |
存储路径 |
NOT NULL |
| file_size |
Integer |
文件大小 |
|
| mime_type |
String |
MIME类型 |
|
| ocr_result |
Text |
OCR原始结果 |
|
| ocr_confidence |
Float |
置信度 |
|
| processing_status |
Enum |
处理状态 |
pending/processing/success/failed |
| quality_score |
Float |
图片质量分数 |
|
| error_message |
Text |
失败原因 |
|
| created_at |
DateTime |
创建时间 |
|
| updated_at |
DateTime |
更新时间 |
|
Todo (待办事项)
| 字段 |
类型 |
说明 |
约束 |
| id |
UUID |
主键 |
PK |
| user_id |
UUID |
所属用户 |
FK, NOT NULL |
| document_id |
UUID |
来源文档 |
FK |
| title |
String |
标题 |
NOT NULL |
| description |
Text |
描述 |
|
| priority |
Enum |
优先级 |
high/medium/low |
| status |
Enum |
状态 |
pending(未完成)/completed(已完成)/confirmed(已确认) |
| due_date |
DateTime |
截止日期 |
|
| category_id |
UUID |
所属分类 |
FK |
| completed_at |
DateTime |
完成时间 |
|
| confirmed_at |
DateTime |
确认时间 |
|
| created_at |
DateTime |
创建时间 |
|
| updated_at |
DateTime |
更新时间 |
|
Category (分类)
| 字段 |
类型 |
说明 |
约束 |
| id |
UUID |
主键 |
PK |
| user_id |
UUID |
所属用户 |
FK, NOT NULL |
| name |
String |
分类名 |
NOT NULL |
| type |
Enum |
类型 |
document/todo |
| color |
String |
颜色 |
|
| icon |
String |
图标 |
|
| parent_id |
UUID |
父分类 |
FK |
| sort_order |
Integer |
排序 |
|
| usage_count |
Integer |
使用次数 |
默认0 |
| is_ai_created |
Boolean |
AI创建 |
默认false |
| created_at |
DateTime |
创建时间 |
|
Tag (标签)
| 字段 |
类型 |
说明 |
约束 |
| id |
UUID |
主键 |
PK |
| user_id |
UUID |
所属用户 |
FK, NOT NULL |
| name |
String |
标签名 |
NOT NULL |
| color |
String |
颜色 |
|
| usage_count |
Integer |
使用次数 |
默认0 |
| is_ai_created |
Boolean |
AI创建 |
默认false |
| created_at |
DateTime |
创建时间 |
|
AIAnalysis (AI分析结果)
| 字段 |
类型 |
说明 |
约束 |
| id |
UUID |
主键 |
PK |
| document_id |
UUID |
关联文档 |
FK, NOT NULL |
| provider |
String |
AI提供商 |
|
| model |
String |
模型名 |
|
| suggested_tags |
JSON |
推荐标签 |
|
| suggested_category |
String |
推荐分类 |
|
| summary |
Text |
摘要 |
|
| raw_response |
JSON |
原始响应 |
|
| created_at |
DateTime |
创建时间 |
|
Config (配置)
| 字段 |
类型 |
说明 |
约束 |
| id |
UUID |
主键 |
PK |
| user_id |
UUID |
所属用户 |
FK, NOT NULL |
| key |
String |
配置键 |
NOT NULL |
| value |
JSON |
配置值 |
|
| created_at |
DateTime |
创建时间 |
|
| updated_at |
DateTime |
更新时间 |
|
5.3 待处理图片列表
概念说明
当OCR失败或置信度过低时,图片不会被删除,而是保存到"待处理图片列表"中,用户可以:
- 查看所有待处理的图片
- 手动输入文字创建文档
- 调整图片后重新OCR
- 删除无用的图片
查询逻辑
状态流转
6. 用户界面
6.1 页面结构
| 页面 |
路由 |
权限 |
描述 |
| 登录/注册 |
/auth |
公开 |
用户登录和注册 |
| 工作台 |
/ |
需登录 |
主页面,包含快速操作和统计 |
| 文档列表 |
/documents |
需登录 |
文档管理页面 |
| 文档详情 |
/documents/:id |
需登录 |
文档编辑/查看 |
| 待办列表 |
/todos |
需登录 |
待办事项管理(三种状态) |
| 待处理图片 |
/pending-images |
需登录 |
OCR失败的待处理图片列表 |
| 设置 |
/settings |
需登录 |
系统配置 |
| 标签管理 |
/tags |
需登录 |
标签和分类管理 |
| 统计 |
/stats |
需登录 |
数据统计 |
6.2 核心交互流程
6.3 界面原型要点
工作台首页
- 顶部:快速截图按钮(突出显示)
- 中部:最近文档 + 待办事项
- 底部:快捷操作入口
文档编辑页
- 左侧:图片预览 + OCR原始结果
- 右侧:可编辑文本区域
- 底部:AI分析按钮 + 标签选择 + 操作按钮
待办管理页(三种状态列表)
- 顶部: Tab切换(未完成 / 已完成 / 已确认)
- 筛选器: 优先级、分类、标签、截止日期
- 未完成列表:
- 待办卡片显示:标题、描述、优先级标签、截止日期
- 操作:编辑、标记完成、删除
- 支持拖拽排序
- 已完成列表:
- 已完成的待办,显示完成时间
- 操作:撤销(回到未完成)、确认归档、删除
- 批量确认操作
- 已确认列表:
- 归档的待办,只读查看
- 支持导出、批量删除
- 显示确认时间
待处理图片页
- 顶部: 统计信息(待处理数量、本周新增)
- 图片网格: 显示所有待处理图片
- 图片卡片操作:
- 预览图片
- 手动创建文档(打开编辑对话框)
- 图片增强(旋转、裁剪、亮度)后重新OCR
- 删除图片
- 批量操作: 全选后批量删除
文档详情页
- 左侧: 图片预览 + OCR原始结果
- 右侧: 可编辑文本区域
- 底部/侧边:
- AI分析按钮
- 动态标签展示(常用标签优先)
- 动态分类展示(AI推荐分类置顶)
- 转为待办按钮
7. API设计
7.1 认证相关
7.2 文档相关
7.3 OCR相关
7.4 待办相关
7.5 AI分析相关
7.6 分类与标签
7.7 配置相关
8. 开发计划
8.1 里程碑
| 里程碑 |
预计完成 |
交付物 |
| M1: 基础框架搭建 |
第1周 |
项目脚手架、数据库设计、基础API |
| M2: 核心功能开发 |
第2-3周 |
OCR识别、文档CRUD、用户认证 |
| M3: AI集成 |
第4周 |
AI分析功能、标签分类 |
| M4: 待办管理 |
第5周 |
待办CRUD、优先级截止日期 |
| M5: 完善与优化 |
第6周 |
UI优化、测试、文档 |
8.2 任务分解
Sprint 1: 基础架构
- 搭建React + Vite项目
- 搭建Express后端项目
- 设计数据库Schema (Prisma)
- 实现JWT认证
- Docker配置文件编写
- 估算: 3-5天
Sprint 2: 图片与OCR
- 实现图片上传功能
- 集成本地OCR (PaddleOCR)
- 集成云端OCR API
- 建立图片-文档关联
- OCR结果编辑功能
- 估算: 5-7天
- 依赖: Sprint 1
Sprint 3: 文档管理
- 文档CRUD API
- 文档列表UI
- 文档详情/编辑页
- 搜索功能
- 估算: 3-4天
- 依赖: Sprint 2
Sprint 4: AI集成
- AI提供商抽象层设计
- 集成GLM API
- 集成MiniMax API
- 集成DeepSeek API
- 标签分类生成逻辑
- 估算: 5-7天
- 依赖: Sprint 3
Sprint 5: 待办管理
- 待办数据模型
- 待办CRUD API和UI
- 优先级和截止日期
- 状态管理
- 待办分类
- 估算: 4-5天
- 依赖: Sprint 3
Sprint 6: 配置与优化
- 配置管理页面
- OCR/AI提供商配置
- UI/UX优化
- 性能优化
- 错误处理完善
- 估算: 3-4天
9. 风险评估
| 风险 |
可能性 |
影响 |
缓解措施 |
| OCR准确率不达标 |
中 |
高 |
同时支持多个OCR提供商,允许用户选择 |
| AI API成本过高 |
中 |
中 |
提供本地模型选项,优化prompt减少token |
| 浏览器截图权限限制 |
高 |
中 |
提供本地文件上传作为替代方案 |
| 本地OCR性能问题 |
中 |
中 |
使用GPU加速,或默认使用云端API |
| 多用户数据隔离问题 |
低 |
高 |
严格的中间件验证,充分的测试 |
| AI提供商API变更 |
中 |
中 |
抽象层设计,便于切换提供商 |
10. Docker部署方案
10.1 服务架构
10.2 Docker Compose 配置
11. 后续扩展方向
- 移动端适配: 响应式设计或PWA
- 协作功能: 分享文档、多人协作编辑
- 语音输入: 支持语音转文字后处理
- 智能提醒: 基于待办的智能提醒
- 知识图谱: 构建文档间的关联关系
- 版本控制: 文档修改历史和版本回溯
- 插件系统: 支持自定义扩展
- API开放: 提供开放API供第三方集成
12. 附录
12.1 参考资料
12.2 术语表
- OCR: Optical Character Recognition,光学字符识别
- GLM: General Language Model,智谱AI的大语言模型
- JWT: JSON Web Token,用于身份验证的令牌
- CRUD: Create, Read, Update, Delete,增删改查
- Docker: 容器化部署技术
需求确认
我已经整理了完整的需求文档。请确认:
- 功能完整性 - 是否有遗漏的功能?
- 优先级 - P0/P1/P2 的划分是否合理?
- 可行性 - 技术方案和时间估算是否可行?
- 其他 - 还有其他需要补充的吗?
如果确认无误,请回复 "确认",我将进入开发规划阶段。
如果需要修改,请告诉我具体需要调整的地方。