开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件
文字识别

    医疗发票识别

    接口描述

    支持识别全国各地门诊/住院发票的 业务流水号、发票号、住院号、门诊号、病例号、姓名、性别、社保卡号、金额大/小写、收款单位、省市、医保统筹支付、个人账户支付 等关键字段,其中北京/广东/河北/河南/江苏/山东/上海/天津/浙江等地区票据识别效果较佳。支持识别收费项目明细,并可根据不同省市地区返回对应的识别参数。

    在线调试

    您可以在 API Explorer 中调试该接口,可进行签名验证、查看在线调用的请求内容和返回结果、示例代码的自动生成。

    请求说明

    请求示例

    HTTP 方法:POST

    请求URL: https://aip.baidubce.com/rest/2.0/ocr/v1/medical_invoice

    URL参数:

    参数
    access_token 通过API Key和Secret Key获取的access_token,参考“Access Token获取

    Header如下:

    参数
    Content-Type application/x-www-form-urlencoded

    Body中放置请求参数,参数详情如下:

    请求参数

    参数 是否必选 类型 可选值范围 说明
    image 和url二选一 string - 图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式
    url 和image二选一 string - 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式,当image字段存在时url字段失效
    请注意关闭URL防盗链
    location string true/false 是否返回字段的位置信息,默认为 false,可缺省
    - false:不返回字段位置信息
    - true:返回字段的位置信息,包括上边距(top)、左边距(left)、宽度(width)、高度(height)
    probability string true/false 是否返回字段识别结果的置信度,默认为 false,可缺省
    - false:不返回字段识别结果的置信度
    - true:返回字段识别结果的置信度,包括字段识别结果中各字符置信度的平均值(average)和最小值(min)

    请求代码示例

    提示一:使用示例代码前,请记得替换其中的示例Token、图片地址或Base64信息。

    提示二:部分语言依赖的类或库,请在代码注释中查看下载地址。

    curl -i -k 'https://aip.baidubce.com/rest/2.0/ocr/v1/medical_invoice?access_token=【调用鉴权接口获取的token】' --data 'image=【图片Base64编码,需UrlEncode】' -H 'Content-Type:application/x-www-form-urlencoded'
    # encoding:utf-8
    
    import requests
    import base64
    
    '''
    医疗发票识别
    '''
    
    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/medical_invoice"
    # 二进制方式打开图片文件
    f = open('[本地文件]', 'rb')
    img = base64.b64encode(f.read())
    
    params = {"image":img}
    access_token = '[调用鉴权接口获取的token]'
    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    if response:
        print (response.json())
    package com.baidu.ai.aip;
    
    import com.baidu.ai.aip.utils.Base64Util;
    import com.baidu.ai.aip.utils.FileUtil;
    import com.baidu.ai.aip.utils.HttpUtil;
    
    import java.net.URLEncoder;
    
    /**
    * 医疗发票识别
    */
    public class Medicalinvoice {
    
        /**
        * 重要提示代码中所需工具类
        * FileUtil,Base64Util,HttpUtil,GsonUtils请从
        * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
        * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
        * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
        * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
        * 下载
        */
        public static String medicalinvoice() {
            // 请求url
            String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/medical_invoice";
            try {
                // 本地文件路径
                String filePath = "[本地文件路径]";
                byte[] imgData = FileUtil.readFileByBytes(filePath);
                String imgStr = Base64Util.encode(imgData);
                String imgParam = URLEncoder.encode(imgStr, "UTF-8");
    
                String param = "image=" + imgParam;
    
                // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
                String accessToken = "[调用鉴权接口获取的token]";
    
                String result = HttpUtil.post(url, accessToken, param);
                System.out.println(result);
                return result;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        public static void main(String[] args) {
            Medicalinvoice.medicalinvoice();
        }
    }
    #include <iostream>
    #include <curl/curl.h>
    
    // libcurl库下载链接:https://curl.haxx.se/download.html
    // jsoncpp库下载链接:https://github.com/open-source-parsers/jsoncpp/
    const static std::string request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/medical_invoice";
    static std::string medicalinvoice_result;
    /**
    * curl发送http请求调用的回调函数,回调函数中对返回的json格式的body进行了解析,解析结果储存在全局的静态变量当中
    * @param 参数定义见libcurl文档
    * @return 返回值定义见libcurl文档
    */
    static size_t callback(void *ptr, size_t size, size_t nmemb, void *stream) {
        // 获取到的body存放在ptr中,先将其转换为string格式
        medicalinvoice_result = std::string((char *) ptr, size * nmemb);
        return size * nmemb;
    }
    /**
    * 医疗发票识别
    * @return 调用成功返回0,发生错误返回其他错误码
    */
    int medicalinvoice(std::string &json_result, const std::string &access_token) {
        std::string url = request_url + "?access_token=" + access_token;
        CURL *curl = NULL;
        CURLcode result_code;
        int is_success;
        curl = curl_easy_init();
        if (curl) {
            curl_easy_setopt(curl, CURLOPT_URL, url.data());
            curl_easy_setopt(curl, CURLOPT_POST, 1);
            curl_httppost *post = NULL;
            curl_httppost *last = NULL;
            curl_formadd(&post, &last, CURLFORM_COPYNAME, "image", CURLFORM_COPYCONTENTS, "【base64_img】", CURLFORM_END);
    
            curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);
            result_code = curl_easy_perform(curl);
            if (result_code != CURLE_OK) {
                fprintf(stderr, "curl_easy_perform() failed: %s\n",
                        curl_easy_strerror(result_code));
                is_success = 1;
                return is_success;
            }
            json_result = medicalinvoice_result;
            curl_easy_cleanup(curl);
            is_success = 0;
        } else {
            fprintf(stderr, "curl_easy_init() failed.");
            is_success = 1;
        }
        return is_success;
    }
    <?php
    /**
    * 发起http post请求(REST API), 并获取REST请求的结果
    * @param string $url
    * @param string $param
    * @return - http response body if succeeds, else false.
    */
    function request_post($url = '', $param = '')
    {
        if (empty($url) || empty($param)) {
            return false;
        }
    
        $postUrl = $url;
        $curlPost = $param;
        // 初始化curl
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $postUrl);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        // 要求结果为字符串且输出到屏幕上
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        // post提交方式
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
        // 运行curl
        $data = curl_exec($curl);
        curl_close($curl);
    
        return $data;
    }
    
    $token = '[调用鉴权接口获取的token]';
    $url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/medical_invoice?access_token=' . $token;
    $img = file_get_contents('[本地文件路径]');
    $img = base64_encode($img);
    $bodys = array(
        'image' => $img
    );
    $res = request_post($url, $bodys);
    
    var_dump($res);
    using System;
    using System.IO;
    using System.Net;
    using System.Text;
    using System.Web;
    
    namespace com.baidu.ai
    {
        public class Medicalinvoice
        {
            // 医疗发票识别
            public static string medicalinvoice()
            {
                string token = "[调用鉴权接口获取的token]";
                string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/medical_invoice?access_token=" + token;
                Encoding encoding = Encoding.Default;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
                request.Method = "post";
                request.KeepAlive = true;
                // 图片的base64编码
                string base64 = getFileBase64("[本地图片文件]");
                String str = "image=" + HttpUtility.UrlEncode(base64);
                byte[] buffer = encoding.GetBytes(str);
                request.ContentLength = buffer.Length;
                request.GetRequestStream().Write(buffer, 0, buffer.Length);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
                string result = reader.ReadToEnd();
                Console.WriteLine("医疗发票识别:");
                Console.WriteLine(result);
                return result;
            }
    
            public static String getFileBase64(String fileName) {
                FileStream filestream = new FileStream(fileName, FileMode.Open);
                byte[] arr = new byte[filestream.Length];
                filestream.Read(arr, 0, (int)filestream.Length);
                string baser64 = Convert.ToBase64String(arr);
                filestream.Close();
                return baser64;
            }
        }
    }

    返回说明

    返回参数

    字段 是否必输出 类型 说明
    log_id uint64 调用日志id,用于问题定位
    words_result_num uint32 识别结果数,表示words_result的元素个数
    InvoiceType string 票据种类
    Province string 省市:支持返回以下省市
    北京/广东/河北/河南/江苏/山东/上海/天津/浙江等
    words_result object 识别结果
    + BusinessNum object 业务流水号
    + InvoiceNum object 发票号码
    + HospitalNum object 住院号
    + HospitalName object 医院名称
    + RecordNum object 病例号
    + HospitalDay object 住院天数
    + AdmissionDate object 入院时间
    + DischargeDate object 出院时间
    + Name object 姓名
    + Sex object 性别
    + HospitalType object 医疗机构类型
    + SocialSecurityNum object 社保卡号
    + InsuranceType object 医保类型
    + ChargingUnit object 收款单位
    + Payee object 收款人
    + Date object 开票日期
    + AmountInWords object 大写合计金额
    + AmountInFiguers object 小写合计金额
    + InsurancePayment object 医保统筹支付
    + PersonalPayment object 个人账户支付
    + PrepayAmount object 预缴金额
    + PaymentAmount object 补缴金额
    + RefundAmount object 退费金额
    + ClinicNum object 门诊号
    ++ word string 字段识别结果,以上各字段均包含此参数
    ++ location object 字段位置信息,当请求参数 location=true 时,以上各字段均包含此参数
    +++ top uint32 字段的上边距
    +++ left uint32 字段的左边距
    +++ height uint32 字段的高度
    +++ width uint32 字段的宽度
    ++ probability object 字段识别结果置信度,当请求参数 probability=true 时,以上各字段均包含此参数
    +++ average float 字段识别结果中各字符的置信度平均值
    +++ min float 字段识别结果中各字符的置信度最小值
    + CostCategories array[] 项目大类:治疗费、检查费等项目大类
    + CostDetail array[] 明细类别:药物/检查的明细类别
    + RegionSupplement array[] 地区字段:根据省市返回改地区特有的字段

    CostCategories字段包含多个array,每个数组包含多个object,见以下参数

    字段 说明
    ++ name 字段名,包括:收费项目、金额
    ++ word name字段对应的识别结果

    CostDetail字段包含多个array,每个数组包含多个object,见以下参数

    字段 说明
    ++ name 字段名,包括:编码、项目、规格、数量、单价、金额
    ++ word name字段对应的识别结果

    RegionSupplement字段包含多个object,不同省市返回字段不同,见以下参数

    省市 返回参数(name)
    北京 个人支付金额、其他医保支付、交易流水号、基金支付、单位补充险[原公疗]支付、年度门诊大额累计支付、本次医保范围内金额、本次支付后个人账户余额、残军补助支付、累计医保内范围金额、自付一、自付二、自费、起付金额、超封顶金额、退休补充支付、门诊大额支付
    广东 个人支付金额、其他医保支付
    河北 个人账户余额、统筹累计支付、自负、自费、起付标准
    河南 个人支付金额、其他医保支付
    江苏 个人支付金额、其他医保支付
    山东 个人支付金额、其他医保支付
    上海 分类自负、历年余额、本年余额、现金支付、自负、自费、附加支付
    天津 个人支付金额、其他医保支付
    浙江 历年余额、历年支付、基金支付、本年余额、本年支付、现金支付

    返回示例

    {
        "log_id": 1397076899313745920,
        "words_result_num": 28,
        "Province": "北京",
        "InvoiceType": "门诊发票"
        "words_result": {
            "AmountInWords": {
                "word": "玖佰叁拾玖元肆角捌分"
            },
            "Sex": {
                "word": "男"
            },
            "InsuranceType": {
                "word": "城镇职工"
            },
            "Name": {
                "word": "王成"
            },
            "SocialSecurityNum": {
                "word": "T03419700077"
            },
            "DischargeDate": {
                "word": "2016-01-01"
            },
            "HospitalNum": {
                "word": "0937829032"
            },
            "HospitalName": {
                "word": "北京市房山区良乡医院"
            },
            "CostCategories": [
                [
                    {
                        "name": "收费项目",
                        "word": "西药费"
                    },
                    {
                        "name": "金额",
                        "word": "426.70"
                    }
                ],
                [
                    {
                        "name": "收费项目",
                        "word": "中成药费"
                    },
                    {
                        "name": "金额",
                        "word": "512.78"
                    }
                ]
            ],
            "RegionSupplement": [
                {
                    "name": "其他医保支付",
                    "word": "0.00"
                },
                {
                    "name": "年度门诊大额累计支付",
                    "word": "83.79"
                },
                {
                    "name": "起付金额",
                    "word": "777.11"
                },
                {
                    "name": "基金支付",
                    "word": "101.75"
                },
                {
                    "name": "本次支付后个人账户余额",
                    "word": "0.00"
                },
                {
                    "name": "个人支付金额",
                    "word": "837.73"
                },
                {
                    "name": "交易流水号",
                    "word": "111100030Z160517006328"
                },
                {
                    "name": "自付一",
                    "word": "795.06"
                },
                {
                    "name": "自付二",
                    "word": "42.67"
                },
                {
                    "name": "累计医保内范围金额",
                    "word": "1419.70"
                },
                {
                    "name": "门诊大额支付",
                    "word": "83.79"
                },
                {
                    "name": "本次医保范围内金额",
                    "word": "896.81"
                },
                {
                    "name": "退休补充支付",
                    "word": "17.96"
                },
                {
                    "name": "超封顶金额",
                    "word": "0.00"
                },
                {
                    "name": "残军补助支付",
                    "word": "0.00"
                },
                {
                    "name": "单位补充险[原公疗]支付",
                    "word": "0.00"
                },
                {
                    "name": "自费",
                    "word": "42.67"
                }
            ],
            "ClinicNum": {
                "word": "12169298"
            },
            "AmountInFiguers": {
                "word": "939.48"
            },
            "AdmissionDate": {
                "word": "2016-01-01"
            },
            "HospitalType": {
                "word": "综合医院"
            },
            "RefundAmount": {
                "word": "0.00"
            },
            "Date": {
                "word": "2016年05月17日"
            },
            "ChargingUnit": {
                "word": "房山区良乡医院"
            },
            "CostDetail": [
                [
                    {
                        "name": "编码",
                        "word": "01"
                    },
                    {
                        "name": "项目",
                        "word": "阿托伐他汀钙胶囊"
                    },
                    {
                        "name": "规格",
                        "word": "10mg*7支"
                    },
                    {
                        "name": "数量",
                        "word": "10"
                    },
                    {
                        "name": "单价",
                        "word": "29.3200"
                    },
                    {
                        "name": "金额",
                        "word": "293.20"
                    }
                ],
                [
                    {
                        "name": "编码",
                        "word": "02"
                    },
                    {
                        "name": "项目",
                        "word": "替米沙坦胶囊"
                    },
                    {
                        "name": "规格",
                        "word": "40mg*12粒"
                    },
                    {
                        "name": "数量",
                        "word": "5"
                    },
                    {
                        "name": "单价",
                        "word": "26.7000"
                    },
                    {
                        "name": "金额",
                        "word": "133.50"
                    }
                ],
            ],
            "PaymentAmount": {
                "word": "0.00"
            },
            "PrepayAmount": {
                "word": "0.00"
            },
            "PersonalPayment": {
                "word": "0.00"
            },
            "HospitalDay": {
                "word": "15"
            },
            "BusinessNum": {
                "word": "40091198916051710196"
            },
            "InsurancePayment": {
                "word": "0.00"
            },
            "Payee": {
                "word": "刘冰"
            },
            "RecordNum": {
                "word": "0001268129"
            },
            "InvoiceNum": {
                "word": "0103152099"
            }
        },
    }
    上一篇
    财务票据文字识别
    下一篇
    医疗费用结算单识别