医疗票据 OCR 识别 API 实战:从医保结算单到结构化数据提取(附 Python / Java 示例)
医保结算单、门诊发票、住院明细......每天上万份票据手工录入成本高、易出错。本文带你用 API 一键提取 20+ 字段,直接对接业务系统。
引言:医疗票据数字化为何迫在眉睫?
医院财务结算、医保报销审核、商业健康险理赔等核心业务场景中,每天都会产生海量的医疗票据------门诊收费票据、住院费用明细单、医保结算单、费用清单......这些票据承载着参保人信息、诊疗项目、费用金额等关键数据,传统处理方式下,每一张都需要依赖人工逐条核对录入,效率低、成本高,还容易引发审核延误和账务纠纷。
医疗票据识别面临四大挑战:
-
格式杂乱:不同地区、不同等级医院的票据模板差异极大,部分地区还存在打印票据与手写票据混用的情况;
-
印章干扰:红色公章频繁覆盖关键文字,导致传统 OCR 漏检误检问题严重;
-
关键字段难抓取:诊疗项目编码、统筹支付额、自费金额等核心信息位置不固定,提取困难;
-
结构化程度低:多数识别工具仅输出纯文本,无法直接对接现有报销/理赔系统,仍需人工二次录入。
在这样的背景下,医疗票据识别OCR成为行业数字化转型中的核心卡点。本文将带你从健康险理赔、医保结算、财务审核等真实业务场景切入,掌握如何用API完成门诊发票、住院结算单和医保结算单的识别与结构化提取,并提供可直接上手的Python与Java示例。

一、健康险理赔与医保审核场景下的 OCR 实战价值
在保险理赔环节,一个完整的理赔件往往包含医疗发票、费用清单、出院小结、病历等多类文件,传统人工处理方式下,理赔周期可能长达数天甚至数周。而经OCR技术加持后,系统可并行处理多类医疗单据,自动提取伤情、诊疗项目、赔付金额等核心信息,并与保单条款进行智能比对,将理赔响应周期从"天级"压缩至"秒级"。
在医保审核领域,OCR与审核系统的深度融合也正在重塑业务流程。传统医保审核模式下,门诊、住院、异地结算等票据的人工录入成本高昂,且政策规则更新频繁,硬编码方式难以快速响应。而通过OCR与智能审核系统的打通,可以实现"票据采集---信息抽取---自动校验---审核归档"的全流程自动化,经实战验证识别准确率可达98%以上,完全满足医保审核的数据精度要求。
💡 本小节已为您生成3个可直接放入文章中的"SEO外插句"选项:
-
选项A:"医保报销/健康险理赔中,超过80%的审核延迟源自医疗票据人工录入环节------这就是[公司名称]医疗票据识别OCR为什么能成为降本增效关键引擎的原因。"
-
选项B:"从纸质票据到结构化数据,医疗数字化转型的下一个突破点在OCR------[公司名称]让数据像活水一样流动。"
-
选项C:"不止是识别文字,更要读懂业务。医疗票据OCR正在从'读字'向'懂业务'进化,这正是[公司名称]专注的方向。"
建议选择选项A 或选项B插入文章腰部或段落衔接处,既自然又不打破技术主线。
二、医疗票据识别 API 能识别什么?
在正式接入API之前,先明确识别范围。一套成熟的医疗票据OCR识别能力通常覆盖以下三大类票据:
| 票据类型 | 典型场景 | 核心输出字段 |
|---|---|---|
| 门诊发票 | 门诊诊疗费用结算 | 患者姓名、就诊日期、发票总金额、医保支付金额、个人现金支付、药品/诊疗项目明细 |
| 住院结算单 | 住院费用报销及商保理赔 | 住院号、入院/出院日期、住院天数、总费用、医保统筹支付、个人自付金额 |
| 医保结算单 | 医保报销审核与费用核算 | 参保人信息、医保编号、诊疗项目费用明细、自费部分、自付比例、报销比例 |
通过自动识别,API可一次性提取20+个关键字段,包括票据标题、票据号码、患者姓名、性别、开票日期、医院名称、入院/出院日期、住院天数、发票总金额、医保类型、医疗机构类型、业务流水号、社会保障号码、医保编号、病历号、校验码、收款单位、收款人、复核人等。识别结果以标准JSON格式返回,可直接对接企业现有的报销系统、财务系统或理赔审核系统,彻底消除人工数据搬运的成本。
三、技术实现:医疗票据 OCR 的核心技术挑战与应对方案
医疗票据识别之所以复杂,原因在于票据本身存在大量技术挑战。以下是最常见的三类问题及应对方案:
3.1 票据版式差异
全国有200余种不同版式的医疗票据,各省份在字段位置、语义表述上差异明显。例如北京市的医保门诊票据与广东省的医保结算单在字段布局上有很大出入。
应对方案:海量模板库+自适应模板匹配。通过构建覆盖全国各省市的医疗票据模板库,结合深度学习模型自动识别票据类型,并动态匹配对应的字段提取模板,实现精准适配。
3.2 印章遮挡
红色公章覆盖关键文字是医疗票据上最常见且影响最严重的问题之一。传统OCR在处理印章遮挡时往往直接产生错误识别。
应对方案:基于颜色空间分析的印章自动过滤。通过HSV色彩空间分离红色区域,结合闭运算/开运算优化印章掩膜,再使用图像修复算法恢复被遮挡的文字信息。高级方案还会引入"OCR基础识别 + NLP语义修正"的混合架构,进一步提升印章遮挡场景下的识别准确率。
3.3 文字模糊与褶皱
纸质票据拍照扫描时容易出现模糊、倾斜、褶皱阴影等质量问题。
应对方案:图像预处理全流程优化。包括自动纠偏、去阴影、去噪、对比度增强、超分辨率重建等手段。在OCR识别前对图像进行系统性预处理,可显著提升模糊票据的识别准确率。
四、API 接入实战(Python + Java示例)
提前 :本节的API接入方法调用自[石榴智能]医疗票据OCR平台。[在线工具体验链接]免费在线体验,访问[API接入教程链接]查阅Web API完整文档,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)


准备工作 :使用医疗票据识别API前,需先获取API Key。登录工作台 → 开发者信息,获取 APP_ID 和 SECRET_CODE。
4.1 Python 示例
python
# ==============================================================================
# API文档:https://market.shiliuai.com/doc/doc-extract
# 支持免费在线体验
# API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
# ==============================================================================
# -*- 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)
4.2 Java 示例
java
# ==============================================================================
# API文档:https://market.shiliuai.com/doc/doc-extract
# 支持免费在线体验
# API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
# ==============================================================================
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Base64;
public class Main {
public static String get_base64(String path) {
String b64 = "";
try {
byte[] content = FileUtils.readFileToByteArray(new File(path));
b64 = Base64.getEncoder().encodeToString(content);
} catch (IOException e) {
e.printStackTrace();
}
return b64;
}
public static void main(String[] args) {
String url = "https://ocr-api.shiliuai.com/api/doc_extract/v1";// 请求接口
String appcode = "你的APPCODE";
String file_path = "本地文件路径";
Map headers = new HashMap<>();
headers.put("Authorization", "APPCODE " + appcode);
headers.put("Content-Type", "application/json");
JSONObject requestObj = new JSONObject();
requestObj.put("file_base64", get_base64(file_path));
requestObj.put("prompt", "");
String bodys = requestObj.toString();
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpPost httpPost = new HttpPost(url);
for (Map.Entry entry : headers.entrySet()) {
httpPost.addHeader(entry.getKey(), entry.getValue());
}
StringEntity entity = new StringEntity(bodys, "UTF-8");
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);
int stat = response.getStatusLine().getStatusCode();
if (stat != 200) {
System.out.println("Http code: " + stat);
return;
}
String res = EntityUtils.toString(response.getEntity());
JSONObject res_obj = JSON.parseObject(res);
System.out.println(res_obj.toJSONString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.3 JSON 返回示例
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | int | 错误码 |
| msg | string | 错误信息(英文) |
| msg_cn | string | 错误信息(中文) |
| success | bool | 识别是否成功 |
| file_id | string | 请求文件ID |
| request_id | string | 唯一请求ID |
| data | object | 具体见返回示例 |
java
成功示例:
{
'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 // 文档提取结果
}
}
java
失败示例:
{
'code': error code,
'msg': error message,
'msg_cn': 中文错误信息,
'success': False,
'file_id': file id,
'request_id': request id,
'data': {}
}
从返回结果中可以看到,checksum对象提供了关键的票据内逻辑校验结果(1=校验通过,0=校验不通过,-1=无法校验),可直接用于后期的自动对账与风控抽样,在保险理赔和医保审核中非常实用。
五、从技术落地到商业化
5.1 自动化业务系统对接
医疗票据OCR识别API的最终价值在于与业务系统的无缝打通。建议按照"采集层→OCR层→规则引擎层→审核层"的技术架构进行设计:
-
采集层:支持手机拍照、高扫仪扫描、接口推送等多渠道票据接入,内置自动纠偏、去阴影、去噪等处理模块,模糊票据的识别准确率大幅提升;
-
OCR层:负责票据分类与关键信息结构化抽取,输出标准化JSON数据;
-
规则引擎层:进行自动校验(金额大小写互验、日期格式标准化、异常字符过滤),减少人工核对;
-
审核层:采用"自动初审+人工复核"模式,兼顾效率与准确性。
5.2 常见集成场景速览
财务对账、费用核算、健康险预理赔、DRG/DIP分组数据校验等六大场景,建议在代码落地后针对自身上下游做二次开发适配:
| 集成场景 | 核心诉求 | 快速收益 |
|---|---|---|
| 医院HIS系统 | 门诊/住院费用结构化存储 | 自动生成费用清单,减少财务人工核对 |
| 医保报销审核 | 医保结算单校验、DRG/DIP分组 | 缩短报销周期至数秒级 |
| 健康险理赔 | 多人/多单据交叉校验 | 系统性降低误赔漏赔风险 |
| 企业财务对账 | 员工医疗费报销自动化 | 财务SaaS/内部报销系统成本下降约60% |
| 体检/健康管理机构 | 纸质报告结构化留存 | 支撑用户健康档案秒级检索 |
| 县级医共体/卫生室 | 基层票据上传与资金核销 | 异地结算与财政监督一体化 |
5.3 隐私合规
医疗票据涉及患者姓名、身份证号、诊疗记录等敏感隐私信息,API调用过程中应确保数据传输加密,企业对识别结果做好权限管理,严格遵守医疗行业数据安全规范。医疗行业也可参照即将于2026年1月1日起正式实施的国家医保信息化标准,结合医保码、医保电子凭证等新机制,完成数据安全与业务流程的合规双重升级。
六、常见问题与疑难解答
| 问题 | 解答与建议 |
|---|---|
| 印章遮挡导致识别不准怎么办? | 平台已内置印章自动过滤算法,支持在API调用时开启印章处理增强参数need_seal_removal=true |
| 批量票据如何快速处理? | 推荐使用异步批量识别接口,支持单次提交数百张票据,识别完成后通过回调URL接收结果 |
| 识别准确率能达到多少? | 经真实医疗数据集测试,关键字段结构化输出准确率可达95%~98%以上(医保发票类场景最高可达99%) |
| 支持哪些票据格式? | 支持jpg、png、bmp、tiff等常用图片格式,以及PDF和OFD格式文件 |
七、说在最后
在今天的内容中,我们聚焦了"医疗票据OCR识别API------从医保结算单到结构化数据"的全流程实战:从医疗数字化中面临的跨区格式差异、印章遮挡等真实难点出发,详解了结构化字段映射(参保人信息、诊疗分类、总计金额与医保支付明细),并用Python与Java带你现场完成一次API接入。
邀请你参与交流:在实际业务中,你遇到最棘手的OCR场景是哪一种?是病历手写体、缴费清单复杂表格,还是门诊发票上反复加盖的红章?欢迎在评论区分享你的选型经验或技术难点,我们一起推动医疗票据从"纸"到"数"的更高效转化!
相关文章
-
入门引导 : 《Python OCR 文字识别 API 接入完整教程]》和 《身份证 OCR 识别 API 接入详解》 作为基础索引,新手可先阅读前两篇了解API基础概念;
-
电商 vs 医疗 :如果你更关注订单/电商物流场景,可延伸阅读 《电商订单 OCR 识别实战》;
-
图像预处理联动 :文中提到的"模糊图片""倾斜矫正"等技术细节,可从《 OCR 识别不准确怎么办?》中获取更系统的优化思路;
-
AI 图像处理系列 :如果对图片变清晰、智能抠图、去水印等AI图片处理方向感兴趣,欢迎阅读《AI 抠图 API 接入实战》、《图片变清晰 API 实战》、《证件照 API 对比》 均已具备可直接运行的代码示例;
-
API选型参考 :在接入多厂商OCR方案之前,建议参考《OCR 识别接口哪个好?2026 年主流 OCR API 对比评测》,提供客观的选型支撑。
标签
#OCR识别 #医疗票据识别 #API集成 #Python #Java