1. 项目背景与核心需求
GLM-OCR作为一款基于深度学习的文字识别工具,在实际业务场景中展现出强大的文档处理能力。最近接手了一个企业级档案数字化项目,需要将GLM-OCR与RuoYi-Vue框架进行深度整合。这个过程中发现,虽然官方文档提供了基础部署说明,但针对Windows环境下前后端分离项目的完整部署链路,仍存在不少需要踩坑填坑的细节。
这次部署涉及三个核心组件:
- GLM-OCR服务端(Python+Flask)
- RuoYi-Vue前端(Vue.js+ElementUI)
- RuoYi后端(SpringBoot)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与依赖安装
2.1 Windows环境特殊配置
在Windows 10/11上部署时,需要特别注意以下环境配置:
bash复制# 安装Python 3.8+(建议使用Miniconda)
conda create -n glmocr python=3.8
conda activate glmocr
# 安装CUDA 11.3和cuDNN 8.2(针对NVIDIA显卡)
# 注意版本必须严格匹配GLM-OCR模型要求
重要提示:如果使用WSL2部署,需要额外配置:
- 启用WSLg支持GUI应用
- 配置Docker Desktop的WSL集成
2.2 后端依赖安装
GLM-OCR服务端需要安装特定版本的PyTorch:
bash复制pip install torch==1.10.0+cu113 torchvision==0.11.1+cu113 -f https://download.pytorch.org/whl/torch_stable.html
pip install -r requirements.txt # GLM-OCR官方提供的依赖文件
常见问题处理:
- 遇到"Unable to find vcvarsall.bat"错误时,需要安装VS Build Tools
- 显存不足时可修改config.yaml中的batch_size参数
3. 后端服务部署实战
3.1 GLM-OCR服务启动
配置文件调整建议(config.yaml):
yaml复制model:
det_model_dir: ./models/ch_ppocr_server_v2.0_det_infer
rec_model_dir: ./models/ch_ppocr_server_v2.0_rec_infer
cls_model_dir: ./models/ch_ppocr_mobile_v2.0_cls_infer
device: "cuda:0" # 使用GPU加速
启动命令优化:
bash复制# 生产环境建议使用gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 app:app --timeout 300
3.2 RuoYi后端对接
在RuoYi的application.yml中添加OCR服务配置:
yaml复制glmocr:
server: http://localhost:5000
timeout: 10000
retry: 3
创建OCR服务调用工具类:
java复制public class OcrServiceUtil {
private static final Logger log = LoggerFactory.getLogger(OcrServiceUtil.class);
@Value("${glmocr.server}")
private String ocrServer;
public String processImage(MultipartFile file) {
// 实现文件传输和OCR结果获取逻辑
}
}
4. 前端集成关键步骤
4.1 RuoYi-Vue前端改造
在src/api目录下新增ocr.js:
javascript复制import request from '@/utils/request'
export function ocrRecognize(data) {
return request({
url: '/business/ocr/recognize',
method: 'post',
data: data,
headers: {
'Content-Type': 'multipart/form-data'
}
})
}
文件上传组件优化建议:
vue复制<template>
<el-upload
action=""
:http-request="handleOcrUpload"
:before-upload="beforeUpload">
<el-button type="primary">点击上传</el-button>
</el-upload>
</template>
<script>
import { ocrRecognize } from '@/api/ocr'
export default {
methods: {
async handleOcrUpload(param) {
const formData = new FormData()
formData.append('file', param.file)
const res = await ocrRecognize(formData)
// 处理识别结果
}
}
}
</script>
5. 部署优化与性能调优
5.1 Nginx配置建议
针对前后端分离架构的nginx.conf关键配置:
nginx复制server {
listen 80;
server_name your.domain.com;
location / {
root /path/to/ruoyi-ui/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
location /prod-api/ {
proxy_pass http://localhost:8080/;
proxy_set_header Host $host;
}
location /ocr/ {
proxy_pass http://localhost:5000/;
proxy_read_timeout 300s;
}
}
5.2 性能监控方案
推荐使用Prometheus+Grafana监控OCR服务:
- 安装prometheus-client:
bash复制pip install prometheus-client
- 在Flask应用中添加监控端点:
python复制from prometheus_client import make_wsgi_app, Counter
from werkzeug.middleware.dispatcher import DispatcherMiddleware
app.wsgi_app = DispatcherMiddleware(app.wsgi_app, {
'/metrics': make_wsgi_app()
})
REQUEST_COUNT = Counter('ocr_requests_total', 'Total OCR requests')
6. 常见问题排查指南
6.1 跨域问题解决方案
当出现403跨域错误时,需在Flask后端添加CORS支持:
python复制from flask_cors import CORS
app = Flask(__name__)
CORS(app, resources={r"/*": {"origins": "*"}})
6.2 内存泄漏排查
使用memory_profiler监控Python服务内存:
python复制@profile
def process_image(image):
# OCR处理逻辑
pass
运行方式:
bash复制python -m memory_profiler your_script.py
7. 生产环境部署建议
经过三个月的生产环境运行,总结出以下最佳实践:
-
模型热更新方案:
- 使用符号链接管理模型版本
- 通过API端点触发模型重载
-
高可用部署架构:
mermaid复制graph TD A[客户端] --> B[Nginx负载均衡] B --> C[OCR节点1] B --> D[OCR节点2] B --> E[OCR节点3] C & D & E --> F[Redis缓存] F --> G[共享存储] -
日志收集建议:
- 使用ELK收集OCR服务日志
- 对识别错误建立单独的错误码体系
在实际部署中,我们发现Windows环境下路径处理是个大坑。特别是当Python服务和Java服务混布时,建议:
- 所有文件路径统一转为绝对路径
- 使用pathlib替代os.path进行路径操作
- 对于共享目录,使用UNC路径格式(\server\share)
