【定额发票】JavaAPI示例代码
置顶
756665228 发布于2018-12-03 14:02 浏览:3527 回复:13
2
收藏
最后编辑于2019-09-24

本文简单示例定额发票的接口使用(使用Java语言)。此接口需要联系文字识别相关PM申请使用权限哦。

本文共计测试了3张类型不是特别相似的定额发票。准确率呢相当高。基本是100%的识别哦。

识别的图片最好是发票原始大小 识别准确率基本能达到100%哦。

百度AI OCR技术 使用方便、快速、精准(>98%)

------------------------------------------------------------------------------------------------------------------------------------

发票识别:

发票是整个财务系统中不可或缺的部分,也是让财务人员非常头疼的问题。而随着技术的更新发展,

人工智能的概念,发票识别的出现,已经为财务系统指明了道路,为财务人员节省了大量的时间和成本。

定额发票:

定额发票是税局专门印制的,不用填开的,有固定数额的发票。

定额发票共有小额10元、20元、50元、100元、200元、500元、1000元、2000元、5000元、10000元等11种面额的版本,

配套使用定额发票清单,纳税人可根据业务需要选择使用。

应用场景:

1.可以快速获取发票的重要字段信息内容。进行发票查验的功能,对发票的真假进行核验,核验之后可以反馈整个票面的信息,

对于需要全票面信息的公司,是个非常不错的选择。这样数据存储起来。方便财务人员检索查询。

2.识别广泛。即使是黑白的、拍照的发票、粘贴在A4纸上的发票都可以完成快速识别

3.财务移动端APP一个接口随时随地的进行发票识别。再也不怕财务人员外出影响发票验真录入延误你的报销了。

4.财务系统可以完全脱离传统的贴发票报销制度。完全电子化。(贴发票是真的很累很耗时。很多小伙伴会遇到贴错的问题,一不小心贴错就得重新找发票等等一系列的麻烦)

5.票据影像化记账方案。随时读取获取发票的文本信息


------------------------------------------------------------------------------------------------------------------------------------

接口文档简单描述

格式看的不是那么的舒服?那就看这里 https://www.showdoc.cc/easydl?page_id=1220447930972741(访问密码:5380)

接口描述

对各类定额发票的代码、号码、金额进行识别

请求说明

HTTP 方法: `POST`

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

URL参数:

| 参数         | 值                                                           |
| ------------ | ------------------------------------------------------------ |
| access_token | 通过API Key和Secret Key获取的access_token,参考“[Access Token获取](http://ai.baidu.com/docs#/Auth)” |

Header如下:

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

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

请求参数

| 参数  | 类型   | 是否必须 | 说明                                                         |
| ----- | ------ | -------- | ------------------------------------------------------------ |
| image | string | 是       | 图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 |

------------------------------------------------------------------------------------------------------------------------------------

Java示例代码

需要额外使用到的jar&工具类


	com.alibaba
	fastjson
	1.2.35
	
----------------------------------------------------------
FileUtil
https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
Base64Util
https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
HttpUtil
https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3

示例代码:

import java.net.URLEncoder;

import com.alibaba.fastjson.JSON;
import com.xs.pojo.ocr.invoice.QuoTaBean;
import com.xs.util.baidu.Base64Util;
import com.xs.util.baidu.FileUtil;
import com.xs.util.baidu.HttpUtil;
/**
 * 定额发票API示例代码
 * @author 小帅丶
 *
 */
public class QuotaInvoiceAPISample {
	//接口地址
	public static String QUOTAINVOICE_URL = "https://aip.baidubce.com/rest/2.0/ocr/v1/quota_invoice";
	//根据应用APIKEY SECRETKEY 获取的accesstoken 文档 https://ai.baidu.com/docs#/Auth/75d80ed1
	public static String ACCESSTOKEN = "";
	
	public static void main(String[] args) {
		//返回字符串
//		String result=getQuoTaText("G:/testimg/quota.jpg");
		//返回bean对象 方便取值
		QuoTaBean bean = getQuoTaBean("G:/testimg/quota.jpg");
		System.out.println("发票代码==>"+bean.getWords_result().getInvoice_code());
		System.out.println("发票号码==>"+bean.getWords_result().getInvoice_number());
		System.out.println("发票金额==>"+bean.getWords_result().getInvoice_rate());
	}
		
	/**
	 * 定额发票识别 通过图片获取手写文字内容
	 * 返回字符串
	 * @param filePath 图片文件目录
	 * @return text
	 */
	public  static String getQuoTaText(String filePath){
		String result = "";
		 try {
	            byte[] imgData = FileUtil.readFileByBytes(filePath);
	            String imgStr = Base64Util.encode(imgData);
	           //识别图片上的手写文字
	            String params = URLEncoder.encode("image", "UTF-8") + "=" + URLEncoder.encode(imgStr, "UTF-8");
	            result = HttpUtil.post(QUOTAINVOICE_URL,ACCESSTOKEN, params);
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
		 return result;
	}
	/**
	 * 定额发票识别 通过图片获取手写文字内容
	 * 返回对象
	 * @param filePath 图片文件目录
	 * @return QuoTaBean
	 */
	public static QuoTaBean getQuoTaBean(String filePath){
		String result = getQuoTaText(filePath);
		QuoTaBean bean = JSON.parseObject(result,QuoTaBean.class);
		return bean;
	}
}

Bean对象:

/**
 * 定额发票识别Bean
 * @author 小帅丶
 * set/get 方法省略
 */
public class QuoTaBean {
	//日志id
    private long log_id;
    //识别结果个数 
    private int words_result_num;
    //识别结果集
    private WordsResult words_result;

	/**
	 * WordsResult 识别具体的内容
	 * @author 小帅丶
	 *
	 */
	public static class WordsResult{
		//发票代码
        private String invoice_code;
        //发票号码
        private String invoice_number;
        //发票金额
        private String invoice_rate;
    }
}

示例图片一:

返回的内容一:

--------------------接口返回的数据-------------------
{
    "log_id": 2604490033, 
    "words_result_num": 3, 
    "words_result": {
        "invoice_code": "111001740101", 
        "invoice_number": "01142646", 
        "invoice_rate": "拾元"
    }
}
--------------------处理后的数据---------------------
发票代码==>111001740101
发票号码==>01142646
发票金额==>拾元

示例图片二:

返回的内容二:

--------------------接口返回的数据-------------------
{
    "log_id": 1662305512, 
    "words_result_num": 3, 
    "words_result": {
        "invoice_code": "111001777011", 
        "invoice_number": "62251226", 
        "invoice_rate": "肆元整"
    }
}
--------------------处理后的数据---------------------
发票代码==>111001777011
发票号码==>62251226
发票金额==>肆元整

示例图片三:

 

返回的内容三:

 

--------------------接口返回的数据-------------------
{
    "log_id": 1750893281, 
    "words_result_num": 3, 
    "words_result": {
        "invoice_code": "112001770106", 
        "invoice_number": "21359842", 
        "invoice_rate": "壹佰元整"
    }
}
--------------------处理后的数据---------------------
发票代码==>112001770106
发票号码==>21359842
发票金额==>壹佰元整

------------------------------------------------------------------------------------------------------------------------------------

以上的示例代码地址   https://gitee.com/xshuai/ai/blob/master/AIDemo/src/main/java/com/xs/ocr/QuotaInvoiceAPISample.java

 

收藏
点赞
2
个赞
共13条回复 最后由756665228回复于2019-09-24 18:10
#14756665228回复于2019-09-24 18:10:38
#13 rose20135188回复
如果能识别真假就更厉害了。

真假那应该需要联网查询一些税务系统了。税务这块我也不太懂。可以用OCR提取出一些参数。去调用税务接口也是一种方式

0
#13rose20135188回复于2019-09-24 16:30:53

如果能识别真假就更厉害了。

0
#12liguanghui2588回复于2019-04-26 11:57:24
#11 756665228回复
接口不区分语言的哦。都是HTTP协议的内容。只是每个语言调用处理有所区别。
展开

明白了

0
#11756665228回复于2019-04-24 12:41:59
#10 liguanghui2588回复
这个有c++的接口吗

接口不区分语言的哦。都是HTTP协议的内容。只是每个语言调用处理有所区别。

1
#10liguanghui2588回复于2019-04-23 18:21:47

这个有c++的接口吗

0
#8莪肩膀借妳回复于2019-04-21 12:52:26

小帅,我来签个到

0
#7wangwei8638回复于2019-04-19 18:20:28

能不能验真假

0
#6756665228回复于2018-12-17 15:06:56
#5 华农飞翼风回复
使用java SDK 的时候,client.form(image, options)这个方法返回 No permission to access data, 有人知道什么原因吗?
展开

这个是因为没有权限。你确定你的APPID APIKEY SECREKEY是文字识别应用下面的。不同模块之间接口权限默认不同步。除非你自己编辑打勾才行。有些接口是需要额外申请的。具体你那个 接口是否需要申请。看文档即可。http://ai.baidu.com/docs#/OCR-API/top

1
#5华农飞翼风回复于2018-12-17 13:30:50

使用java SDK 的时候,client.form(image, options)这个方法返回 No permission to access data, 有人知道什么原因吗?

0
#4zagelover回复于2018-12-11 15:06:24

很赞呀,小帅尝鲜很快。

0
#3荒墨丶迷失回复于2018-12-03 16:51:03

小帅一出手,就知有木有~

1
#2goJhou回复于2018-12-03 14:06:44

奋战在一线的小帅依旧拼搏着!

0
TOP
切换版块