# GLM-OCR Java服务 基于DJL (Deep Java Library) 的纯Java实现GLM-OCR本地部署服务,提供REST API接口。 ## 特性 - ✅ 纯Java实现,无需外部服务依赖(vLLM/Ollama/Python) - ✅ 支持多种OCR任务:文本识别、公式识别、表格识别、信息提取 - ✅ 基于DJL框架,使用PyTorch引擎 - ✅ 支持CPU和GPU推理 - ✅ 提供完整的REST API和Swagger文档 - ✅ Apache 2.0开源协议 ## 技术栈 - Java 17 - Spring Boot 3.2.0 - DJL 0.27.0 (PyTorch引擎) - PyTorch 2.1.1 - HuggingFace Tokenizers ## 快速开始 ### 1. 环境要求 - Java 17+ - Maven 3.6+ ### 2. 下载模型 从ModelScope下载GLM-OCR模型: ```bash # 使用Git LFS git lfs install git clone https://modelscope.cn/ZhipuAI/GLM-OCR.git ./models/GLM-OCR ``` 或手动下载并解压到 `./models/GLM-OCR/` 目录。 ### 3. 配置 编辑 `src/main/resources/application.yml`: ```yaml glm-ocr: model-path: ./models/GLM-OCR device: cpu # 或 gpu(0) 如有GPU precision: fp32 ``` ### 4. 构建并运行 ```bash mvn clean package -DskipTests java -jar target/glm-ocr-service-1.0.0.jar ``` 服务将在 `http://localhost:9090` 启动。 ## API接口 ### 健康检查 ```http GET /api/v1/health ``` ### 文本识别 ```http POST /api/v1/ocr/text Content-Type: application/json { "image": "iVBORw0KGgoAAAANSUhEUg...", "imageType": "base64" } ``` ### 公式识别 ```http POST /api/v1/ocr/formula Content-Type: application/json { "image": "iVBORw0KGgoAAAANSUhEUg...", "imageType": "base64" } ``` ### 表格识别 ```http POST /api/v1/ocr/table Content-Type: application/json { "image": "iVBORw0KGgoAAAANSUhEUg...", "imageType": "base64" } ``` ### 信息提取 ```http POST /api/v1/ocr/extract Content-Type: application/json { "image": "iVBORw0KGgoAAAANSUhEUg...", "imageType": "base64", "extractionTemplate": "{\n \"name\": \"\",\n \"id_number\": \"\"\n}" } ``` ### 通用识别 ```http POST /api/v1/ocr Content-Type: application/json { "image": "iVBORw0KGgoAAAANSUhEUg...", "imageType": "base64", "taskType": "text" } ``` ### 重新加载模型 ```http POST /api/v1/model/reload ``` ## Swagger文档 访问 `http://localhost:9090/swagger-ui.html` 查看完整的API文档和在线测试。 ## 配置说明 | 配置项 | 说明 | 默认值 | |--------|------|--------| | `glm-ocr.model-path` | 模型本地路径 | `./models/GLM-OCR` | | `glm-ocr.device` | 推理设备 (cpu/gpu(0)) | `cpu` | | `glm-ocr.precision` | 精度 (fp32/fp16/bf16/int8) | `fp32` | | `glm-ocr.max-tokens` | 最大生成token数 | `8192` | | `glm-ocr.batch-size` | 批次大小 | `1` | | `glm-ocr.image-size` | 图像预处理大小 | `448` | | `glm-ocr.temperature` | 温度参数 | `0.1` | | `glm-ocr.top-p` | Top P采样参数 | `0.95` | ## 项目结构 ``` glmocrdemojava/ ├── pom.xml ├── api-test.http ├── src/main/ │ ├── java/com/example/glmocr/ │ │ ├── GlmOcrApplication.java │ │ ├── config/ │ │ ├── controller/ │ │ ├── dto/ │ │ ├── model/ │ │ ├── service/ │ │ └── tokenizer/ │ └── resources/ │ └── application.yml └── models/ └── GLM-OCR/ ``` ## 开源协议 - 本项目:MIT License - DJL:Apache License 2.0 - GLM-OCR模型:MIT License ## 参考资料 - [GLM-OCR模型](https://modelscope.cn/models/ZhipuAI/GLM-OCR) - [DJL文档](https://djl.ai/) - [Spring Boot文档](https://spring.io/projects/spring-boot)