# SpringOCR **Repository Path**: laydi887/springocr ## Basic Information - **Project Name**: SpringOCR - **Description**: 基于SpringAI实现 ocr扫描 图片 通过AI 自定义实现 方式 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-04-16 - **Last Updated**: 2025-11-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SpringOCR #### 介绍 SpringOCR 是一个基于 SpringAI 和 RapidOCR 的智能文字识别系统,提供高精度的 OCR 服务。本项目集成了先进的 AI 技术,支持多种图片格式的文字识别,并提供灵活的自定义实现方式。 #### 软件架构 - 后端框架:Spring Boot + Spring AI - OCR 引擎:RapidOCR - 开发语言:Java - 构建工具:Maven #### 主要功能 1. 图片文字识别 - 支持多种图片格式(PNG、JPG、JPEG 等) - 高精度文字提取 - 多语言支持 2. 文档处理 - PDF 文档文字提取 - 表格识别 - 版面分析 3. AI 增强 - 智能文字校正 - 关键信息提取 - 自定义识别模型 #### 安装教程 1. 环境要求 - JDK 17 或以上 - Maven 3.6+ - Spring Boot 3.x 2. 克隆项目 ```bash git clone https://gitee.com/your-username/SpringOCR.git ``` 3. 安装依赖 ```bash cd SpringOCR mvn install ``` #### 使用说明 1. 配置 application.yml ```yaml kanq: ocr: keywords: contract-fields: ["出卖人", "通讯地址", "邮政编码", "统一社会信用代码", "法定代表人", "联系电话", "委托代理人", "委托代理人联系电话", "买受人", "户籍所在地", "证件类型", "性别", "通讯地址", "邮政编码", "联系电话", "出让方式", "房屋坐落", "土地面积", "土地用途", "土地使用权终止日期", "项目名称", "建设工程规划许可证", "建设工程用地规划许可证", "规划用途", "房屋结构", "最高层数", "地上层数", "地下层数", "行政区", "预测建筑面积", "套内建筑面积", "分摊建筑面积", "抵押人", "抵押权人", "抵押登记机构", "抵押登记日期", "债务履行期限", "抵押类型"] prompt: idCardTemplate: > 请从 %s 精确提取以下字段,按示例格式输出纯JSON(无注释): 必须输出完整JSON结构,缺失字段保留空字符串: { "personal_infos": [ { "name": "", // 姓名 "gender": "", // 性别 "ethnic": "", // 民族 "birth_date": "", // 出生日期 "id_number": "", // 身份证号码 "residence": "", // 住址 "mailing_address": "", // 通讯地址 "issuing_authority": "", // 签发机关 "validity_period": { // 有效期限 "start": "", "end": "" }, "postal_code": "" // 邮政编码 } ] } 请确保所有字段都使用英文作为key值。如果信息缺失,对应的值设为null。 householdRegisterTemplate: > 请从 %s 精确提取以下字段,按示例格式输出纯JSON(无注释): 必须输出完整JSON结构,缺失字段保留空字符串: { "personal_info": { "name": "", // 姓名 "relationship_with_householder": "", // 与户主关系 "id_number": "", // 证件编号 "registered_residence": "", // 户籍所在省市 "gender": "", // 性别 "address": "" // 地址 } } 请确保所有字段都使用英文作为key值。如果信息缺失,对应的值设为null。 realEstateTemplate: > 请从 %s 精确提取以下字段,按示例格式输出纯JSON(无注释): 必须输出完整JSON结构,缺失字段保留空字符串: { "basic_info": { "rights_holder": "", // 权利人 "obligor": "", // 义务人 "ownership_status": "", // 共有情况 "location": "", // 坐落 "property_unit_number": "" // 不动产单元号 }, "rights_info": { "rights_type": "", // 权利类型 "rights_nature": { "land": "", // 土地 "building": "" // 房屋 }, "purpose": { "land_use": "", // 土地用途 "building_use": "" // 房屋用途 }, "area": { "land_area": "", // 土地面积 "building_area": "" // 房屋面积 }, "usage_term": "", // 使用期限 "other_rights_status": "", // 权利其他状况 "remarks": "" // 附记 } } 请确保所有字段都使用英文作为key值。如果信息缺失,对应的值设为空字符串。 contractTemplate: | 请从 %s 精确提取以下字段,按示例格式输出纯JSON(无注释): 提取规则: 1. 项目名称(project_name):匹配"项目名称"后的文本,若含括号则去括号 ▸ 示例输入:"项目名称:恒基名居(备案名:恒基名居)" ▸ 正确输出:"恒基名居" 2. 土地面积(land_area):提取数值及单位,格式化为数字 ▸ 示例输入:"宗地面积1250平方米" ▸ 正确输出:"1250.0" 3. 证件类字段(social_credit_code等):严格匹配18位/20位编码规则 其他字段请按以下优先级提取: - 表格数据 > 正文条款 - 加粗文本 > 普通文本 - 甲方/乙方条款 > 其他条款 必须输出完整JSON结构,缺失字段保留空字符串: { "parties_info": { "seller": { "name": "", // 姓名 "address": "", // 通讯地址 "postal_code": "", // 邮政编码 "social_credit_code": "", // 统一社会信用代码 "legal_representative": "", // 法定代表人 "phone": "", // 联系电话 "agent": "", // 委托代理人 "agent_phone": "" // 委托代理人联系电话 }, "buyer": { "household_registration": "", // 户籍所在地 "id_type": "", // 证件类型 "gender": "", // 性别 "address": "", // 通讯地址 "postal_code": "", // 邮政编码 "phone": "" // 联系电话 } }, "property_info": { "transfer_method": "", // 出让方式 "property_location": "", // 房屋坐落 "land_area": "", // 土地面积 "land_usage": "", // 土地用途 "land_use_expiry": "", // 土地使用权终止日期 "project_name": "", // 项目名称 "construction_planning_permit": "", // 建设工程规划许可证 "land_planning_permit": "" // 建设工程用地规划许可证 }, "building_info": { "planned_usage": "", // 规划用途 "building_structure": "", // 房屋结构 "max_floors": "", // 最高层数 "above_ground_floors": "", // 地上层数 "underground_floors": "", // 地下层数 "administrative_district": "", // 行政区 "estimated_construction_area": "", // 预测建筑面积 "indoor_construction_area": "", // 套内建筑面积 "shared_construction_area": "" // 分摊建筑面积 }, "mortgage_info": { "mortgagor": "", // 抵押人 "mortgagee": "", // 抵押权人 "mortgage_registration_authority": "", // 抵押登记机构 "mortgage_registration_date": "", // 抵押登记日期 "debt_performance_period": "", // 债务履行期限 "mortgage_type": "" // 抵押类型 } } 请确保所有字段都使用英文作为key值。如果信息缺失,对应的值设为空字符串。 ai: base-url: "https://dashscope.aliyuncs.com/compatible-mode" api-key: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" model: "qwen-max" ``` 2. 启动服务 ```bash mvn spring-boot:run ``` 3. API 调用示例 使用方式 type类型 ID_CARD 身份证 CONTRACT 合同 REAL_ESTATE 户口本 HOUSEHOLD_REGISTER 不动产证 注意 recognizeDocument这个方法支持 MultipartFile、URL、File、InputStream ```java @PostMapping("/ask") public String answerQuestion(@RequestParam("files") List files, @RequestParam("type") String type) throws IOException { return documentRecognitionService.recognizeDocument(type, files); } ``` #### 参与贡献 1. Fork 本仓库 2. 新建 feature/xxx 分支 3. 提交代码 4. 新建 Pull Request #### 开源协议 本项目采用 MIT 许可证,详情请参见 LICENSE 文件。