Files
oneos-backend/yudao-module-ocr/OCR_API_INTEGRATION_SUMMARY.md
kkfluous 78a6cde22d feat: 实现 OCR 模块和车辆上牌管理功能
- 新增 yudao-module-ocr 模块
  - OCR API 模块:定义 Feign 接口和 DTO
  - OCR Server 模块:实现行驶证识别功能
  - 集成百度 OCR SDK
  - 支持多厂商扩展(百度/腾讯/阿里云)

- 新增车辆上牌管理功能
  - 数据库表:asset_vehicle_registration
  - 完整的 CRUD 接口
  - 行驶证识别接口(集成 OCR)
  - 车辆匹配功能(根据 VIN)
  - 确认上牌功能(更新车辆信息)

- 技术实现
  - 遵循 BPM/System 模块的 RPC API 模式
  - 使用 Feign 实现服务间调用
  - Base64 编码传输图片数据
  - 统一返回格式 CommonResult<T>

- 文档
  - OCR 模块使用文档
  - OCR 部署指南
  - 车辆上牌管理总结
  - API 集成规划和总结
2026-03-12 20:33:21 +08:00

7.8 KiB
Raw Blame History

OCR API 集成完成总结

实施完成情况

Phase 1: 重构 OCR API 模块(已完成)

1.1 创建 ApiConstants

文件: yudao-module-ocr-api/src/main/java/cn/iocoder/yudao/module/ocr/enums/ApiConstants.java

  • 定义服务名:ocr-server
  • 定义 RPC 前缀:/rpc-api/ocr
  • 定义版本号:1.0.0

1.2 创建 DTO 对象

文件: yudao-module-ocr-api/src/main/java/cn/iocoder/yudao/module/ocr/api/dto/VehicleLicenseRespDTO.java

  • 定义行驶证识别结果 DTO
  • 包含所有识别字段VIN、车牌号、品牌型号等
  • 实现 Serializable 接口

1.3 创建 Feign API 接口

文件: yudao-module-ocr-api/src/main/java/cn/iocoder/yudao/module/ocr/api/OcrApi.java

  • 使用 @FeignClient(name = ApiConstants.NAME) 注解
  • 定义识别接口:recognizeVehicleLicense()
  • 参数Base64 编码的图片数据 + 可选的 OCR 厂商
  • 返回:CommonResult<VehicleLicenseRespDTO>

1.4 添加依赖

文件: yudao-module-ocr-api/pom.xml

  • 添加 yudao-spring-boot-starter-rpc 依赖(提供 Feign 支持)

Phase 2: 实现 OCR API已完成

2.1 创建 API 实现类

文件: yudao-module-ocr-server/src/main/java/cn/iocoder/yudao/module/ocr/api/OcrApiImpl.java

  • 使用 @RestController 注解(提供 RESTful API
  • 实现 OcrApi 接口
  • 注入 OcrClientFactory
  • Base64 解码图片数据
  • 调用现有的 OCR 识别逻辑
  • 返回 CommonResult<VehicleLicenseRespDTO>

Phase 3: Asset 模块集成 OCR API已完成

3.1 修改 VehicleRegistrationServiceImpl

文件: yudao-module-asset-server/.../VehicleRegistrationServiceImpl.java

  • 注入 OcrApiFeign 自动代理)
  • 实现 recognizeVehicleLicense() 方法
  • Base64 编码图片数据
  • 调用 ocrApi.recognizeVehicleLicense()
  • 处理识别结果
  • 根据 VIN 查找匹配车辆
  • 返回完整的识别结果(包含车辆匹配信息)

3.2 依赖已存在

文件: yudao-module-asset-server/pom.xml

  • 已包含 yudao-module-ocr-api 依赖

编译验证

  • OCR API 模块编译成功
  • OCR Server 模块编译成功
  • Asset Server 模块编译成功

架构说明

调用链路

Asset Module (调用方)
    ↓
OcrApi (Feign 接口)
    ↓ (通过 Feign 远程调用)
OcrApiImpl (实现类)
    ↓
OcrClientFactory
    ↓
OcrClient (百度/腾讯/阿里云)
    ↓
第三方 OCR 服务

API 接口

RPC 接口路径

POST /rpc-api/ocr/recognition/vehicle-license

请求参数

  • imageData: String (Base64 编码的图片数据)
  • provider: String (可选OCR 厂商,如 "baidu")

响应格式

{
  "code": 0,
  "data": {
    "vin": "LB9A32A22R0LS1439",
    "plateNo": "粤AGR5547",
    "brand": "帕力安牌XDQ5041XLCFCEV",
    "vehicleType": "轻型厢式货车",
    "owner": "广州开发区交投氯能运营管理有限公司",
    "useCharacter": "货运",
    "engineNo": "268E7AEL153",
    "registerDate": "2025-02-19",
    "issueDate": "2025-10-21",
    "inspectionRecord": "2026-06",
    "scrapDate": "2035-12-31",
    "curbWeight": "1500",
    "totalMass": "1875",
    "approvedPassengerCapacity": "5"
  },
  "msg": "操作成功"
}

核心功能

1. OCR 识别

  • 支持行驶证照片识别
  • 自动提取车辆信息
  • 支持多个 OCR 厂商(百度/腾讯/阿里云)

2. 车辆匹配

  • 根据 VIN 自动查找系统中的车辆
  • 精确匹配VIN 完全一致
  • 返回匹配置信度

3. 上牌记录管理

  • 创建上牌记录
  • 确认上牌(更新车辆信息)
  • 查询上牌历史

技术亮点

  1. 标准化 RPC 调用:遵循 BPM/System 模块的 API 模式
  2. Feign 自动代理:无需手动实现 HTTP 调用
  3. Base64 传输:解决 Feign 不支持 byte[] 的问题
  4. 统一返回格式:使用 CommonResult<T> 包装
  5. 服务解耦OCR 服务独立部署,可单独扩展
  6. 多厂商支持:可灵活切换 OCR 厂商

文件清单

OCR API 模块

yudao-module-ocr/yudao-module-ocr-api/
├── pom.xml (添加 RPC 依赖)
└── src/main/java/cn/iocoder/yudao/module/ocr/
    ├── enums/
    │   └── ApiConstants.java (新增)
    └── api/
        ├── OcrApi.java (新增)
        └── dto/
            └── VehicleLicenseRespDTO.java (新增)

OCR Server 模块

yudao-module-ocr/yudao-module-ocr-server/
└── src/main/java/cn/iocoder/yudao/module/ocr/
    └── api/
        └── OcrApiImpl.java (新增)

Asset Server 模块

yudao-module-asset/yudao-module-asset-server/
└── src/main/java/cn/iocoder/yudao/module/asset/
    └── service/vehicleregistration/
        └── VehicleRegistrationServiceImpl.java (修改)

使用示例

在其他模块中使用 OCR API

@Service
public class YourService {

    @Resource
    private OcrApi ocrApi;

    public void recognizeVehicleLicense(byte[] imageData) {
        // Base64 编码
        String imageDataBase64 = Base64.encode(imageData);

        // 调用 OCR API
        CommonResult<VehicleLicenseRespDTO> result =
            ocrApi.recognizeVehicleLicense(imageDataBase64, "baidu");

        // 处理结果
        if (result.isSuccess()) {
            VehicleLicenseRespDTO data = result.getData();
            System.out.println("VIN: " + data.getVin());
            System.out.println("车牌号: " + data.getPlateNo());
        }
    }
}

测试验证

单元测试

@SpringBootTest
public class OcrApiTest {

    @Resource
    private OcrApi ocrApi;

    @Test
    public void testRecognizeVehicleLicense() {
        // 读取测试图片
        byte[] imageData = Files.readAllBytes(Paths.get("test.jpg"));
        String imageDataBase64 = Base64.encode(imageData);

        // 调用识别
        CommonResult<VehicleLicenseRespDTO> result =
            ocrApi.recognizeVehicleLicense(imageDataBase64, null);

        // 验证结果
        assertNotNull(result);
        assertTrue(result.isSuccess());
        assertNotNull(result.getData());
        assertNotNull(result.getData().getVin());
    }
}

集成测试

  1. 启动 OCR Server
  2. 启动 Asset Server
  3. 调用车辆上牌接口
  4. 验证识别结果

配置说明

application.yml (OCR Server)

spring:
  application:
    name: ocr-server  # 必须与 ApiConstants.NAME 一致

yudao:
  ocr:
    default-provider: baidu
    providers:
      baidu:
        app-id: your-app-id
        api-key: your-api-key
        secret-key: your-secret-key

application.yml (Asset Server)

spring:
  cloud:
    openfeign:
      client:
        config:
          ocr-server:  # 对应 ApiConstants.NAME
            url: http://localhost:48083  # OCR 服务地址

性能优化建议

  1. 缓存识别结果:相同图片不重复识别
  2. 异步处理:批量识别使用异步队列
  3. 连接池优化:配置 Feign 连接池参数
  4. 超时设置:合理设置 OCR 调用超时时间

下一步工作

🔲 Phase 4: 测试验证(待完成)

  1. 编写单元测试
  2. 编写集成测试
  3. 端到端测试
  4. 性能测试

🔲 Phase 5: 部署上线(待完成)

  1. 执行数据库脚本
  2. 配置 OCR 服务
  3. 配置 Feign 客户端
  4. 启动服务验证

🔲 Phase 6: 功能完善(可选)

  1. 添加识别结果缓存
  2. 实现批量识别
  3. 添加识别历史记录
  4. 实现车型智能匹配

成功标准

  • 编译通过
  • 代码符合规范
  • 遵循 BPM/System 模块的 API 模式
  • 🔲 单元测试通过
  • 🔲 集成测试通过
  • 🔲 OCR 识别准确率 > 95%
  • 🔲 API 响应时间 < 500ms (p95)

实施日期2026-03-12 实施人员AI Assistant 版本v1.0.0 状态Phase 1-3 完成,待测试验证