医疗票据 OCR 识别实战:自动识别医院发票 / 检测报告(完整接入指南)
本文从真实医疗场景出发,讲清医疗票据 OCR 的核心难点,并给出可直接落地的 API 接入方案。
在很多系统中,有一类非常“刚需但难做”的能力:
👉 医疗票据识别(医院发票 / 检查报告 / 检测单)
典型应用场景:
- 🏥 医疗报销系统
- 🧾 保险理赔系统
- 🏢 企业费用报销
- 🤖 RPA 自动录入
但实际落地时你会发现:
❗ 医疗 OCR 比普通 OCR 难度高很多
这篇文章带你完整拆解。
一、医疗 OCR 能识别哪些内容?
以常见医疗票据为例,可以自动提取:
📄 医疗发票
- 医院名称
- 发票号码
- 就诊日期
- 总金额
- 医保金额
🧪 检测报告 / 检验单
- 患者姓名
- 检测项目
- 检测结果
- 单位
- 参考值范围
👉 这些数据可以直接用于:
- 自动报销
- 自动审核
- 数据入库
二、医疗 OCR 为什么更难?
很多团队一开始用“通用 OCR”,结果效果很差,原因在这里👇
❗ 1:版式极其复杂
医疗单据通常:
- 表格多
- 字段不固定
- 排版混乱
❗ 2:字体 & 打印质量不稳定
- 手写 + 打印混合
- 低清晰度扫描
- 模糊 / 复印件
❗ 3:字段语义复杂
例如:
- “参考值” vs “检测值”
- 单位多样(mg/dL、mmol/L)
👉 需要结构化理解,而不仅是识别文字。
三、标准技术流程(工程落地)
上传图片 / PDF
↓
图像预处理(去噪 / 增强 / 矫正)
↓
OCR 文本检测 + 识别
↓
版面分析(表格 / 字段)
↓
结构化输出(JSON)
👉 核心不是 OCR,而是:
“OCR + 结构化解析”
四、医疗 OCR API 接入实战
Step 1:准备输入
支持:
- 手机拍照
- PDF 文件
- 扫描件
Step 2:调用医疗 OCR API
如果你在做系统集成,建议直接参考完整接口文档(多语言示例齐全),可以快速跑通。支持免费在线测试,可以先测试效果后,再接入API
👉 说明文档: market.shiliuai.com/medical-ocr
示例代码👇
# Python 示例
# API文档:https://market.shiliuai.com/doc/doc-extract
# -*- coding: utf-8 -*-
import requests
import base64
import json
# 请求接口
URL = "https://ocr-api.shiliuai.com/api/doc_extract/v1"
# 图片/pdf文件转base64
def get_base64(file_path):
with open(file_path, "rb") as f:
data = f.read()
return base64.b64encode(data).decode("utf8")
def demo(appcode, file_path):
# 请求头
headers = {
"Authorization": "APPCODE %s" % appcode,
"Content-Type": "application/json"
}
# 请求体
b64 = get_base64(file_path)
data = {
"file_base64": b64,
"prompt": ""
}
# 请求
response = requests.post(url=URL, headers=headers, json=data)
content = json.loads(response.content)
print(content)
if __name__ == "__main__":
appcode = "你的APPCODE"
file_path = "本地文件路径"
demo(appcode, file_path)
// JS 示例
// API文档:https://market.shiliuai.com/doc/doc-extract
// 需 Node.js 18+(内置 fetch)
const fs = require('fs');
const apiUrl = 'https://ocr-api.shiliuai.com/api/doc_extract/v1';
const appcode = '你的APPCODE';
const filePath = '本地文件路径';
async function main() {
const fileBase64 = fs.readFileSync(filePath).toString('base64');
const res = await fetch(apiUrl, {
method: 'POST',
headers: {
Authorization: 'APPCODE ' + appcode,
'Content-Type': 'application/json'
},
body: JSON.stringify({ file_base64: fileBase64, prompt: '' })
});
const text = await res.text();
if (!res.ok) {
console.error('Http code:', res.status, text);
return;
}
console.log(JSON.stringify(JSON.parse(text), null, 2));
}
main().catch(console.error);
Step 3:解析结构化结果
示例返回:
成功示例:
{
'code': 200,
'msg': 'OK',
'msg_cn': '成功',
'success': True,
'file_id': file id,
'request_id': request id,
'data': {
"page_count": 5, // int, 文件页面总数
"process_pages": 5, // int, 处理页面数
"content": content // 文档提取结果
}
}
失败示例:
{
'code': error code,
'msg': error message,
'msg_cn': 中文错误信息,
'success': False,
'file_id': file id,
'request_id': request id,
'data': {}
}
👉 可直接用于:
- 数据入库
- 报销审核
- 风控判断
五、实战中的常见坑
❗ 坑 1:图片质量太差
问题:
- 模糊
- 低分辨率
- 压缩严重
👉 建议结合图片增强能力(如超分辨率)一起使用。
❗ 坑 2:用通用 OCR + 正则解析
结果:
- 维护成本极高
- 容易出错
👉 建议直接使用结构化 OCR。
❗ 坑 3:不同医院格式差异大
- A 医院 vs B 医院格式不同
- 检测单模板不统一
👉 必须使用具备泛化能力的模型。
六、在线工具 vs API 接入
✅ 在线工具适合
- 单张识别
- 人工处理
- 快速测试效果
如果你只是想验证效果,可以先在线跑一张:market.shiliuai.com/tools/medic…
👉 在线体验
✅ API 更适合
- 报销系统
- 保险系统
- 企业 SaaS
- 批量处理
七、一个更完整的方案
在真实项目中,医疗 OCR 通常不会单独使用,而是:
👉 组合方案
- OCR(识别)
- 图片增强(提高清晰度)
- 抠图(去干扰背景)
👉 可以参考完整方案:《一站式 OCR + 图片处理技术方案》
八、最后
医疗 OCR 的价值在于:
- 提高自动化程度
- 降低人工成本
- 提升数据准确率
如果你的系统涉及:
- 医疗报销
- 保险理赔
- 企业费用管理
👉 这是一个非常值得投入的能力模块。