establish_medical_demo/
├── pom.xml # Maven 配置
├── README.md # 主文档
├── QUICK_START.md # 快速开始
├── TECHNICAL_NOTES.md # 技术说明
├── CHANGELOG.md # 更新日志
├── start.sh # Linux/Mac 启动脚本
├── start.bat # Windows 启动脚本
├── .gitignore # Git 配置
└── src/
└── main/
├── java/com/medical/demo/
│ ├── HospitalRegistrationApplication.java
│ ├── config/
│ │ └── AppConfig.java
│ ├── controller/
│ │ ├── AppController.java
│ │ └── PatientController.java
│ ├── entity/
│ │ ├── ApiResponse.java
│ │ ├── IdCardRecognitionResult.java
│ │ └── PatientInfo.java
│ └── service/
│ ├── IdCardRecognitionService.java ← 百炼 SDK 实现
│ └── PatientDataService.java
└── resources/
├── application.yml
└── static/
└── index.html ← Vue.js 前端
编辑 src/main/resources/application.yml:
bailian:
api-key: sk-xxxxxxxxxxxxx # 替换为你的百炼平台 API Key
# Windows
start.bat
# Mac/Linux
./start.sh
打开浏览器访问:http://localhost:8080
使用 MultiModalConversation 类直接调用:
MultiModalConversation conversation = new MultiModalConversation();
MultiModalConversationParam param = MultiModalConversationParam.builder()
.apiKey(apiKey)
.model("qwen-vl-max")
.messages(Arrays.asList(userMessage))
.build();
MultiModalConversationResult result = conversation.call(param);
优势:
多层解析确保高成功率:
// 1. 保存到临时目录
Path tempFile = Path.of(TEMP_DIR, "idcard_" + UUID.randomUUID() + ".jpg");
Files.copy(file.getInputStream(), tempFile);
// 2. 调用 API(使用本地文件路径)
callDashScopeAPI(tempFile.toString());
// 3. 自动清理
Files.delete(tempFile);
| 特性 | 之前的方案 | 当前方案 |
|---|---|---|
| SDK | LangChain4J | 阿里云百炼官方 SDK |
| 图片传递 | Base64 编码 | 本地文件路径 |
| 配置复杂度 | 高(5+ 个参数) | 低(2 个参数) |
| 性能 | 较好 | 更好 |
| 准确率 | 较好 | 更好 |
| 代码量 | 较多 | 更精简 |
# 服务器配置
server:
port: 8080
# 百炼平台配置
bailian:
api-key: YOUR_API_KEY_HERE # 必填:从百炼平台获取
model: qwen-vl-max # 可选:qwen-vl-max/plus/v1
# 应用配置
app:
hospital-name: 甘肃省中医院
data-file-path: ./data/patients.csv
POST /api/patient/recognize
Content-Type: multipart/form-data
参数: file (图片文件)
响应: {
"code": 200,
"message": "身份证识别成功",
"data": {
"isIdCard": true,
"idCardNumber": "110101199001011234"
}
}
GET /api/patient/info?idCardNumber=110101199001011234
响应: {
"code": 200,
"data": {
"idCardNumber": "110101199001011234",
"name": "张三",
"gender": "男",
...
}
}
POST /api/patient/save
Content-Type: application/json
请求体: {
"idCardNumber": "110101199001011234",
"name": "张三",
"gender": "男",
...
}
A: 修改 application.yml 中的 server.port 为其他端口
A:
A:
A: 项目根目录的 ./data/patients.csv 文件
A: 控制台会输出所有 DEBUG 级别日志,包括:
你可以:
祝使用愉快!如有问题,请查看相关文档或提 Issue。 🏥✨