基于 DeepSeek-OCR 模型的企业级 OCR 应用(MVP 版本)。
这是一个完整的 OCR (光学字符识别) 应用,包括:
- 后端:FastAPI + SQLAlchemy + Mock OCR 引擎
- 前端:React + TypeScript + Vite
- 测试:Pytest 单元测试
/home/ubuntu/ocr/code/
├── backend/ # 后端服务
│ ├── app/ # 应用代码
│ │ ├── api/v1/ # API 路由
│ │ ├── core/ # OCR 引擎
│ │ ├── models/ # 数据库模型
│ │ ├── schemas/ # Pydantic 模型
│ │ ├── services/ # 业务逻辑
│ │ └── db/ # 数据库配置
│ ├── tests/ # 单元测试
│ ├── requirements.txt # Python 依赖
│ ├── run.sh # 启动脚本
│ └── README.md # 后端文档
│
├── frontend/ # 前端应用
│ ├── src/
│ │ ├── components/ # React 组件
│ │ ├── services/ # API 服务
│ │ └── App.tsx # 主应用
│ ├── package.json # 前端依赖
│ └── README.md # 前端文档
│
└── README.md # 总文档(本文件)
- Python 3.10+
- Node.js 18+
- npm 或 pnpm
cd /home/ubuntu/ocr/code/backend
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
# 启动服务
./run.sh
# 或
python app/main.py后端服务将在 http://localhost:8000 启动
API 文档: http://localhost:8000/api/docs
打开新终端:
cd /home/ubuntu/ocr/code/frontend
# 安装依赖
npm install
# 启动开发服务器
npm run dev前端应用将在 http://localhost:3000 启动
cd /home/ubuntu/ocr/code/backend
# 运行所有测试
./run_tests.sh
# 或
pytest -v- 访问前端: 打开 http://localhost:3000
- 上传图片: 选择 JPG、PNG、PDF 或 TIFF 格式的图片
- 等待识别: 系统自动上传并进行 OCR 识别(约 2-3 秒)
- 查看结果: 识别完成后显示文本内容、置信度等信息
- ✅ 文件上传和管理
- ✅ OCR 文字识别(Mock 模式)
- ✅ 任务队列和进度跟踪
- ✅ RESTful API
- ✅ 自动生成 API 文档 (Swagger/ReDoc)
- ✅ SQLite 数据库
- ✅ 完整的单元测试
- ✅ 错误处理和日志记录
- ✅ 文件拖拽上传(计划中)
- ✅ 实时进度显示
- ✅ 识别结果展示
- ✅ Markdown 格式支持
- ✅ 响应式设计
| 端点 | 方法 | 说明 |
|---|---|---|
/api/v1/health |
GET | 健康检查 |
/api/v1/upload |
POST | 上传文件 |
/api/v1/recognize |
POST | 提交 OCR 任务 |
/api/v1/recognize/{task_id}/status |
GET | 查询任务状态 |
/api/v1/recognize/{task_id}/result |
GET | 获取识别结果 |
/api/v1/tasks |
GET | 任务列表 |
/api/v1/tasks/statistics |
GET | 任务统计 |
详细文档请访问: http://localhost:8000/api/docs
cd backend
# 运行所有测试
pytest
# 运行特定测试
pytest tests/test_api/test_health.py
# 查看覆盖率
pytest --cov=app tests/
# 详细输出
pytest -v测试覆盖:
- ✅ 健康检查 API
- ✅ 文件上传 API
- ✅ OCR 识别流程
- ✅ 任务管理 API
cd frontend
# 运行测试(如果配置了)
npm run test用户上传图片
↓
前端调用 /upload API
↓
后端保存文件到本地存储
↓
前端调用 /recognize API
↓
后端创建任务并后台处理
↓
OCR 引擎识别文本
↓
保存结果到数据库
↓
前端轮询 /status API
↓
识别完成,显示结果
- FastAPI - 现代 Web 框架
- SQLAlchemy - ORM
- Pydantic - 数据验证
- Pillow - 图像处理
- Pytest - 测试框架
- React 18 - UI 框架
- TypeScript - 类型安全
- Vite - 构建工具
- Axios - HTTP 客户端
编辑 backend/.env:
# 应用配置
DEBUG=True
PORT=8000
# OCR 模式
USE_MOCK_OCR=True # True=模拟模式,False=真实OCR
# 数据库
DATABASE_URL=sqlite:///./ocr.db
# 文件存储
UPLOAD_DIR=./storage/uploads编辑 frontend/src/services/api.ts:
const API_BASE_URL = 'http://localhost:8000/api/v1'⚠️ 当前版本为 MVP,未包含用户认证⚠️ 生产环境请配置 CORS 白名单⚠️ 生产环境请使用 HTTPS⚠️ 建议限制文件上传大小和类型
# 待实现
# docker-compose up -d-
后端:
# 使用 gunicorn gunicorn app.main:app -w 4 -k uvicorn.workers.UvicornWorker -
前端:
npm run build # 使用 nginx 部署 dist/ 目录
# 检查端口占用
lsof -i :8000
# 检查依赖
pip list
# 查看日志
tail -f logs/app.log- 检查后端是否运行: http://localhost:8000/api/v1/health
- 检查 CORS 配置:
backend/app/config.py - 检查防火墙设置
# 清理环境
rm -rf __pycache__ .pytest_cache
# 重新运行
pytest -v- 真实 OCR 引擎集成
- Celery 异步任务队列
- MinIO/S3 对象存储
- 用户认证和授权
- 批量文件处理
- 导出功能(PDF、Word)
- 移动端应用
- 多语言识别
- 表格识别
- 公式识别
- API 限流和配额
- Fork 项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
MIT License
项目地址: /home/ubuntu/ocr/code
Happy Coding! 🎉