Files
oneos-backend/yudao-module-ocr/README.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

207 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OCR 识别模块
## 概述
OCR 识别模块yudao-module-ocr提供图像识别服务支持行驶证、驾驶证等多种证件识别。采用策略模式设计支持多厂商切换百度、腾讯、阿里等
## 功能特性
- ✅ 行驶证识别(已实现)
- 🔲 驾驶证识别(预留)
- 🔲 身份证识别(预留)
- 🔲 营业执照识别(预留)
## 架构设计
```
Controller (统一入口)
OcrService (业务服务层)
OcrClientFactory (客户端工厂)
OcrClient (客户端接口)
├── BaiduOcrClient (百度实现)
├── TencentOcrClient (腾讯实现 - 预留)
└── AliyunOcrClient (阿里实现 - 预留)
```
## 快速开始
### 1. 配置
`application.yaml` 或 Nacos 配置中心添加:
```yaml
ocr:
# 默认使用的厂商
default-provider: baidu
# 百度 OCR 配置
baidu:
app-id: your-app-id
api-key: your-api-key
secret-key: your-secret-key
```
### 2. API 调用
**识别行驶证**
```bash
POST /admin-api/ocr/vehicle-license
Content-Type: multipart/form-data
参数:
- file: 行驶证图片文件(必填)
- provider: OCR 厂商(可选,默认使用配置的厂商)
响应示例:
{
"code": 0,
"data": {
"vin": "LSVAM4189E2123456",
"plateNo": "粤A12345",
"brand": "比亚迪秦PLUS DM-i",
"vehicleType": "小型轿车",
"owner": "张三",
"useCharacter": "非营运",
"engineNo": "BYD123456",
"registerDate": "2023-01-01",
"issueDate": "2023-01-01",
"inspectionRecord": "2026-06",
"scrapDate": "2035-12-31",
"curbWeight": "1500",
"totalMass": "1875",
"approvedPassengerCapacity": "5"
},
"msg": "success"
}
```
## 扩展指南
### 添加新厂商
1. **创建配置类**
```java
@Data
public class TencentOcrClientConfig implements OcrClientConfig {
private String secretId;
private String secretKey;
@Override
public String getProvider() {
return "tencent";
}
}
```
2. **实现客户端**
```java
public class TencentOcrClient extends AbstractOcrClient<TencentOcrClientConfig> {
public TencentOcrClient(TencentOcrClientConfig config) {
super(config);
}
@Override
protected void doInit() {
// 初始化腾讯 OCR SDK
}
@Override
public VehicleLicenseResult recognizeVehicleLicense(byte[] imageData) {
// 调用腾讯 OCR API
}
}
```
3. **注册到工厂**
`OcrClientFactoryImpl.createClient()` 中添加:
```java
case "tencent":
return new TencentOcrClient((TencentOcrClientConfig) config);
```
4. **添加配置**
`OcrProperties` 中添加:
```java
private TencentOcrClientConfig tencent;
```
`OcrAutoConfiguration` 中初始化:
```java
if (properties.getTencent() != null) {
factory.createOrUpdateClient("tencent", properties.getTencent());
}
```
### 添加新识别场景
1. **定义结果类**
```java
@Data
public class DriverLicenseResult {
private String name;
private String licenseNo;
// ...
}
```
2. **扩展客户端接口**
```java
public interface OcrClient {
VehicleLicenseResult recognizeVehicleLicense(byte[] imageData);
DriverLicenseResult recognizeDriverLicense(byte[] imageData); // 新增
}
```
3. **实现各厂商客户端**
`BaiduOcrClient` 等类中实现新方法。
4. **添加 Service 和 Controller**
`OcrService``OcrController` 中添加对应方法。
## 注意事项
1. **API 密钥安全**:不要将密钥硬编码,使用配置中心管理
2. **图片大小限制**:百度 OCR 限制图片大小 4MB
3. **并发控制**:百度 OCR 有 QPS 限制,需要考虑限流
4. **错误处理**:网络异常、识别失败等需要友好的错误提示
## 错误码
| 错误码 | 说明 |
|--------|------|
| 1_009_001_000 | 不支持的 OCR 厂商 |
| 1_009_001_001 | 不支持的识别场景 |
| 1_009_001_002 | 图片格式不正确或已损坏 |
| 1_009_001_003 | 图片大小超过限制 |
| 1_009_001_004 | 识别失败 |
| 1_009_001_005 | OCR 客户端配置无效 |
## 依赖
- Spring Boot 3.5.9
- 百度 OCR SDK 4.16.18
- MyBatis Plus
- MapStruct
- Lombok
## 许可证
Apache License 2.0