fucai-server/IDCARD_QUICK_TEST.md

321 lines
6.7 KiB
Markdown
Raw Normal View History

2025-11-26 21:26:16 +08:00
# 身份证识别接口 - 快速测试指南
## 📌 实现总结
**已完成** - 身份证识别接口 `/marriage/ocr/parseIdCard` 已成功添加到 OcrController
## 🚀 快速测试步骤
### 前提条件
- 已配置百度OCR API Key和Secret Key
- 应用已启动,监听在 8080 端口
- 已获取验证码和手机号
### 测试流程
#### 1⃣ 上传身份证图片
```bash
curl -X POST \
-F "file=@/path/to/idcard_front.jpg" \
http://localhost:8080/marriage/ocr/upload
```
**保存返回的 uploadId**
#### 2⃣ 调用身份证识别接口
```bash
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"mobile": "18888888888",
"smsCode": "123456",
"uploadId": "xxx"
}' \
http://localhost:8080/marriage/ocr/parseIdCard
```
## 📋 完整的请求/响应示例
### 请求
```json
{
"mobile": "18888888888",
"smsCode": "123456",
"uploadId": "a1b2c3d4e5f6g7h8"
}
```
### 成功响应(识别成功)
```json
{
"code": 200,
"msg": "success",
"data": {
"raw": "{...百度API原始响应JSON...}",
"words": ["王连杰", "男", "汉族", "1995年04月01日", "江苏省南京市建邺区...", "320321199504011218"],
"parsed": {
"name": "王连杰",
"gender": "男",
"nationality": "汉族",
"birthday": "1995-04-01",
"address": "江苏省南京市建邺区...",
"id_number": "320321199504011218"
},
"parsed_detailed": {
"name": {
"word": "王连杰",
"probability": {
"average": 20.68798065,
"min": 0.9106679559
},
"location": {
"width": 109,
"height": 47,
"top": 933,
"left": 253
}
},
"gender": {
"word": "男",
"probability": {
"average": 24.97878838,
"min": 0.9302400351
},
"location": {
"width": 39,
"height": 40,
"top": 973,
"left": 792
}
},
"nationality": {
"word": "汉族",
"probability": {
"average": 17.19703484,
"min": 0.7144192457
},
"location": {
"width": 79,
"height": 43,
"top": 1011,
"left": 249
}
},
"birthday": {
"word": "1995-04-01",
"probability": {
"average": 20.66628647,
"min": 0.7240950465
},
"location": {
"width": 250,
"height": 55,
"top": 1044,
"left": 857
}
},
"address": {
"word": "江苏省南京市建邺区...",
"probability": {
"average": 18.5,
"min": 0.75
},
"location": {
"width": 300,
"height": 60,
"top": 1100,
"left": 300
}
},
"id_number": {
"word": "320321199504011218",
"probability": {
"average": 13.2870388,
"min": 0.5172381401
},
"location": {
"width": 341,
"height": 68,
"top": 1081,
"left": 343
}
}
}
}
}
```
### 失败响应示例
**缺少关键字段**:
```json
{
"code": 400,
"msg": "请上传完整清晰的身份证正面",
"data": null
}
```
**验证码错误**:
```json
{
"code": 400,
"msg": "验证码错误,请重新输入!",
"data": null
}
```
**文件过期**:
```json
{
"code": 400,
"msg": "上传文件不存在或已过期,请重新上传!",
"data": null
}
```
## 🔍 响应字段说明
### parsed 字段(简化格式)
用于快速获取识别结果,仅包含文本内容:
- `name` - 姓名
- `gender` - 性别
- `nationality` - 民族
- `birthday` - 出生日期(已格式化为 YYYY-MM-DD
- `address` - 住址
- `id_number` - 身份证号
### parsed_detailed 字段(详细格式)
用于获取完整的识别信息,每个字段包含:
- `word` - 识别的文本内容
- `probability` - 识别概率
- `average` - 平均概率 (0-100)
- `min` - 最小概率
- `location` - 在图片中的位置
- `width` - 宽度(像素)
- `height` - 高度(像素)
- `top` - 距顶部(像素)
- `left` - 距左侧(像素)
## 💡 使用建议
### 1. 检查识别质量
```javascript
// 检查识别概率
if (data.parsed_detailed.name.probability.average < 60) {
console.warn('姓名识别质量较低,建议人工审核');
}
```
### 2. 提取特定字段
```javascript
// 简单方式
const name = data.parsed.name;
// 详细方式
const nameData = data.parsed_detailed.name;
const nameWord = nameData.word;
const nameConfidence = nameData.probability.average;
```
### 3. 验证关键信息
```javascript
// 验证身份证号长度
if (data.parsed.id_number.length !== 18) {
console.error('身份证号长度不正确');
}
// 验证日期格式
const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
if (!dateRegex.test(data.parsed.birthday)) {
console.error('出生日期格式不正确');
}
```
## 🔧 常见问题
### Q: 如何区分结婚证识别和身份证识别?
A:
- 结婚证识别POST `/marriage/ocr/parse`
- 身份证识别POST `/marriage/ocr/parseIdCard`
### Q: 上传接口可以共用吗?
A: 是的使用相同的上传接口POST `/marriage/ocr/upload`
### Q: 识别概率很低怎么办?
A:
1. 上传更清晰的身份证照片
2. 确保光线充足
3. 避免倾斜和反光
4. 考虑人工审核
### Q: location 信<><E4BFA1><EFBFBD>有什么用
A:
- 在前端标注识别位置
- 裁剪识别结果进行二次处理
- 验证识别的准确性
### Q: 支持身份证反面吗?
A: 当前实现仅支持身份证正面id_card_side: "front")。如需支持反面,可参考代码逻辑进行扩展。
## 📊 API对比
| 功能 | 结婚证识别 | 身份证识别 |
|------|---------|---------|
| 接口URL | `/marriage/ocr/parse` | `/marriage/ocr/parseIdCard` |
| 上传接口 | `/marriage/ocr/upload` | `/marriage/ocr/upload` |
| 百度API | marriage_certificate | idcard |
| 支持反面 | 是(可扩展) | 否(仅正面) |
| probability | ✅ | ✅ |
| location | ✅ | ✅ |
| 向后兼容 | ✅ | ✅ |
## 🧪 使用 Postman 测试
### 1. 新建 POST 请求
URL: `http://localhost:8080/marriage/ocr/parseIdCard`
### 2. 设置 Headers
| Key | Value |
|-----|-------|
| Content-Type | application/json |
### 3. 设置 Body (raw JSON)
```json
{
"mobile": "18888888888",
"smsCode": "123456",
"uploadId": "a1b2c3d4e5f6g7h8"
}
```
### 4. 点击 Send
## 📖 相关文档
- [OCR功能完整文档](OCR_API_DOCUMENT.md)
- [身份证识别实现详情](IDCARD_IMPLEMENTATION.md)
- [快速参考指南](OCR_QUICK_REFERENCE.md)
---
**实现完成日期**: 2025-11-26
**版本**: v1.0.0
**状态**: ✅ 生产就绪