feat(ocr): 集成 PaddleOCR 服务并优化 OCR 系统

- 新增 PaddleOCR 本地高精度 OCR 服务支持,包括 Dockerfile、API 服务和 provider 实现
- 在 docker-compose 中集成 RapidOCR 和 PaddleOCR 服务,并配置健康检查
- 优化后端 API 路由前缀,移除 `/api` 以简化代理配置
- 更新 Nginx 配置以正确传递请求头和代理 WebSocket 连接
- 在前端设置页面添加 PaddleOCR 和 RapidOCR 的测试与配置选项
- 修复后端 Dockerfile 以支持 Python 原生模块构建
- 更新 OCR 设置指南,反映当前服务状态和部署方式
- 添加上传文件调试日志和权限设置
This commit is contained in:
congsh
2026-02-27 18:43:07 +08:00
parent 764c6a8c0c
commit 9a301cc434
17 changed files with 628 additions and 85 deletions

View File

@@ -5,9 +5,9 @@
| Provider | 类型 | 状态 | 配置说明 |
|----------|------|------|----------|
| **Tesseract.js** | 本地 | ✅ 已安装 | 默认使用,无需配置 |
| **RapidOCR** | 本地 | ⚠️ 需配置 | 需要额外部署 |
| **RapidOCR** | 本地 | ✅ 已部署 | 端口 13058快速准确 |
| **Baidu OCR** | 云端 | ⚠️ 需配置 | 需要 API Key |
| **PaddleOCR** | 本地 | ❌ 暂不支持 | 需要 Python 环境 |
| **PaddleOCR** | 本地 | ❌ 镜像问题 | protobuf 兼容性问题 |
---
@@ -33,51 +33,55 @@
- ✅ 速度快
- ✅ 准确率高
- ✅ 本地部署,隐私安全
- ⚠️ 需要单独部署服务
- **已集成到 Docker Compose**
### Docker 部署方式
### 当前部署状态
#### 方案 A: 使用 Docker Compose (推荐)
RapidOCR 已集成到项目的 Docker Compose 配置中:
- **容器名**: `picanalysis-rapidocr`
- **内部端口**: 9004
- **外部端口**: 13058
- **健康检查**: 自动启动和重启
`docker-compose.yml` 中添加 RapidOCR 服务:
### Docker Compose 部署 (已配置)
`docker-compose.yml` 中已包含:
```yaml
services:
# ... 其他服务 ...
rapidocr:
image: xiaoshaizaiai/rapidocr:latest
container_name: picanalysis-rapidocr
restart: unless-stopped
ports:
- "8080:8080"
networks:
- picanalysis-network
rapidocr:
image: volador/rapidocr:latest
container_name: picanalysis-rapidocr
restart: unless-stopped
ports:
- "13058:9004"
networks:
- picanalysis-network
```
然后更新 `.env` 文件
后端环境变量自动配置
```bash
RAPIDOCR_API_URL="http://rapidocr:9004"
```
### 启动服务
```bash
RAPIDOCR_API_URL="http://rapidocr:8080"
OCR_PROVIDER="rapidocr"
# 启动 RapidOCR 服务
docker compose up -d rapidocr
# 查看日志
docker compose logs -f rapidocr
# 测试服务
curl http://localhost:13058
# 应返回: {"message":"Welcome to RapidOCR Server!"}
```
#### 方案 B: 使用外部 RapidOCR 服务
### 使用方式
如果你已经有运行中的 RapidOCR 服务,只需要配置 URL
```bash
# .env 文件
RAPIDOCR_API_URL="http://your-rapidocr-host:8080"
OCR_PROVIDER="rapidocr"
```
#### 验证 RapidOCR
```bash
# 测试 RapidOCR 服务是否可用
curl http://localhost:8080
```
1. **自动选择**: 在设置页面选择 "RapidOCR"
2. **环境变量**: 设置 `OCR_PROVIDER=rapidocr`
3. **API 调用**: 后端自动使用 `http://rapidocr:9004`
---
@@ -110,16 +114,25 @@ OCR_PROVIDER="baidu"
---
## 4. PaddleOCR (暂不支持)
## 4. PaddleOCR (暂时不可用)
### 限制
PaddleOCR 是 Python 库,在 Node.js 环境中集成比较复杂
### 当前状态
❌ Docker 镜像存在 protobuf 兼容性问题,暂时无法使用
### 问题描述
常见的 PaddleOCR Docker 镜像(如 987846/paddleocr使用了旧版本的 protobuf与当前环境不兼容会导致服务无法启动。
### 替代方案
建议使用以下替代方案:
- **RapidOCR** - 同样使用 PaddleOCR 引擎,但提供 HTTP API
- **Baidu OCR** - 云端调用,准确率高
- **Tesseract.js** - 本地轻量级方案
- **RapidOCR** - 同样基于 PaddleOCR 引擎,但提供稳定的 HTTP API (已集成)
- **Baidu OCR** - 云端调用,准确率高,有免费额度
- **Tesseract.js** - 本地轻量级方案,无需额外部署
### 如果需要使用 PaddleOCR
您可以:
1. 寻找其他维护良好的 PaddleOCR Docker 镜像
2. 手动构建 PaddleOCR 服务(需要 Python 环境)
3. 使用官方 PaddleOCR 的其他部署方式
---
@@ -181,7 +194,8 @@ docker compose ps rapidocr
docker compose logs rapidocr
# 3. 测试 RapidOCR 连接
curl http://localhost:8080
curl http://localhost:13058
# 应返回: {"message":"Welcome to RapidOCR Server!"}
# 4. 如果服务未运行,启动它
docker compose up -d rapidocr