本项目使用阿里云百炼平台的 qwen-vl 视觉模型实现身份证识别功能。相比之前的 LangChain4J 方案,直接使用百炼官方 SDK 可以获得更好的性能和更准确的识别结果。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dashscope-sdk-java</artifactId>
<version>2.16.3</version>
</dependency>
在 application.yml 中配置百炼平台 API Key:
bailian:
api-key: YOUR_API_KEY_HERE # 替换为你的百炼平台 API Key
model: qwen-vl-max # 可选:qwen-vl-max、qwen-vl-plus、qwen-vl-v1 等
@Service
public class IdCardRecognitionService {
@Value("${bailian.api-key}")
private String apiKey;
@Value("${bailian.model}")
private String modelName;
public IdCardRecognitionResult recognizeIdCard(MultipartFile file) {
// 1. 文件验证
// 2. 保存为临时文件
// 3. 调用百炼 API
// 4. 解析响应
// 5. 清理临时文件
}
private IdCardRecognitionResult callDashScopeAPI(String imagePath) {
// 创建多模态对话实例
MultiModalConversation conversation = new MultiModalConversation();
// 构建用户消息
MultiModalMessage userMessage = MultiModalMessage.builder()
.role(Role.USER.getValue())
.content(Arrays.asList(
Collections.singletonMap("image", imagePath),
Collections.singletonMap("text", buildPrompt())
))
.build();
// 构建请求参数
MultiModalConversationParam param = MultiModalConversationParam.builder()
.apiKey(apiKey)
.model(modelName)
.messages(Arrays.asList(userMessage))
.build();
// 调用 API
MultiModalConversationResult result = conversation.call(param);
// 解析响应...
}
}
MultipartFile 接收System.getProperty("java.io.tmpdir"))使用官方 SDK 的 MultiModalConversation 类:
MultiModalConversation conversation = new MultiModalConversation();
MultiModalConversationResult result = conversation.call(param);
优化的提示词可以显著提升识别准确率:
private String buildPrompt() {
return """
请仔细分析这张图片,并完成以下任务:
1. 判断图片中是否为中华人民共和国居民身份证(正面)
2. 如果是身份证,请提取其中的18位身份证号码
3. 如果不是身份证或无法识别,请说明原因
回答要求:
- 如果是身份证且识别成功,请直接输出18位身份证号码
- 如果不是身份证或识别失败,请说明原因
注意事项:
- 身份证号为18位,最后一位可能是X
- 只输出身份证号码或失败原因,不要包含其他内容
""";
}
多层解析策略确保高成功率:
| 特性 | LangChain4J 方案 | 百炼 SDK 方案 |
|---|---|---|
| 依赖 | LangChain4J + OpenAI 兼容层 | 官方 SDK |
| 配置 | 需要 base-url、temperature 等 | 只需 API Key 和模型名 |
| 性能 | 通过兼容层调用 | 直接调用,性能更好 |
| 图片传递 | Base64 编码 | 本地文件路径 |
| 准确率 | 较好 | 更好 |
| 错误处理 | 通用异常 | 专门的异常类型 |
百炼平台支持以下视觉模型:
可以在 application.yml 中切换模型:
bailian:
model: qwen-vl-plus # 切换到 plus 模型
临时文件存储在系统临时目录:
C:\Users\用户名\AppData\Local\Temp/tmp识别完成后会自动清理。
百炼 SDK 的 MultiModalConversation 类原生支持本地文件路径,这样:
代码中已经实现了完善的异常处理:
try {
// 调用 API
} catch (NoApiKeyException e) {
// API Key 未配置
} catch (ApiException e) {
// API 调用失败
} catch (UploadFileException e) {
// 图片上传失败
}
前端会显示友好的错误提示,并允许用户手动输入身份证号。
在 application.yml 中已配置:
logging:
level:
com.medical.demo: DEBUG
com.alibaba.dashscope: DEBUG
可以在控制台看到详细的调用日志,包括:
技术支持:如有问题,请查看项目 README.md 或提 Issue