本发明涉及一种图像识别技术,更具体地说,它涉及一种基于插件的发票识别方法、及识别与管理系统。
背景技术:
在国外,许多公司致力于ocr的研究有许多研究,如美国acuform、俄罗斯abbyy、法国a2ia等,其产品主要应用于会计业务、印刷业务等。俄罗斯abbyy公司开发了一款专业ocr软件abbyyfinereaderprofessional。finereader软件不仅支持多种语言的识别,同时能对彩色文件进行识别,还有存在许多其他强大的功能。a2ia公司设计了一款支票识别软件,该软件不仅处理支票速度快而且识别率高[4]。随着对ocr系统深入的研究,其产品也是应用在很多领域。
国外有众多开源的ocr引擎,如tesseract、cuneiform、ocropus等。tesseract早期是由惠普开发的ocr库,后来由谷歌负责对其进行优化等工作。ocropus是一款免费的文档分析和光学字符识别系统,它通过使用插件允许ocropus轻松地更换组件,在apache许可证版本2.0下进行了非常模块化的设计。这些开源的ocr引擎的发展,也使得票据识别有了快速的发展。
在国内,票据识别系统研究始于1988年。随着票据识别技术不断的成熟票据识别被广泛用于各个行业。国内有许多票据识别公司,如汉王科技、云脉、文通、汉特等,其ocr产品具有强大的功能,不仅速度而且识别率高,还有针对某些特定行业的定制应用产品。汉王公司有许多ocr产品如名片识别、身份证识别、pdf与jpg格式文件识别等都有很高的识别率。
针对发票识别与管理系统,目前还处于根据发票模板定制阶段,如云脉、汉王等公司提供增值税发票等发票识别业务。汉特、金蝶和用友等公司专为公司提供财务软件,但公司的财务软件中仅仅是发票管理,或者仅仅提供一种定制的发票识别系统,系统可扩展性不强。
综上所述,目前越来越多的公司投入到票据识别与管理系统当中,取得很多不错的成果,但也存在许多不足。票据种类繁多,有些票据的识别已经达到商用的要求,但有些票据版面的识别还存在许多问题。对于票据识别与管理系统各大公司缺少一个系统化的方案,这方面还需要继续研究。
技术实现要素:
针对现有技术存在的不足,本发明的第一个目的在于提供一种基于插件的发票识别方法,能够对多种不同类型的发票进行识别。
为实现上述目的,本发明提供了如下技术方案:
一种基于插件的发票识别方法,包括:
将预先创建的识别插件导入到动态链接库中;其中,所述识别插件基于适应于对应类型的发票的识别算法创建;
获取待识别的发票的图像信息,及其类型;
根据该待识别的发票的类型从所述动态链接库中调取对应的识别插件以对该待识别的发票的图像信息进行识别,进而获取所需的发票信息。
优选地,所述方法还包括:
将获取到的发票信息存入到数据库中。
优选地,所述识别算法包括:
s21、通过色彩分离将发票中的表格从图像中进行分离,对分离出的表格图像进行二值化,用形态学操作对表格进行修复以获取完整的表格;
s22、对步骤s21获取的表格进行hough变换,求其直线倾斜角度,根据倾斜角度对发票原始彩色图像和表格图像进行旋转;
s23、采用投影法对表格中各个角点坐标进行定位,并根据定位结果对表格进行切割,以获取表格中的多个不同的信息区域;
s24、对各个信息区域进行二值化、色彩分离、图像去除噪声处理;
s25、采用tesseract引擎对经过步骤s24处理后的信息区域进行字符识别,以获取所需的发票信息。
优选地,步骤s22具体包括:
获取增值税普通发票彩色分离后带表格的图像,然后二值化的表格图像;
对二值化的图像进行边缘检测;
获取检测后的图像然后进行hough变换;θ以一为增量,分别计算出每个点的ρ值大小,然后是m[θ][ρ]加1;其中,参数空间(θ,ρ)表示表格图像中的直线;θ的取值范围为0-360,ρ的取值范围为0-n,n的大小为增值税普通发票对角线长度;m[360][n]为定义的一个计数器;
取出二维数组m[θ][ρ]值最大的,此最大值对应的θ为增值税普通发票与水平方向上的倾斜角;
通过hough变换获得的倾斜角θ,根据角度θ对图像倾斜较正。
优选地,所述信息区域分为三类,第一类为发票代号、发票号码,开票日期,第二类是金额相关信息,第三类为销售方信息区域;
其中,针对第一类信息区域,先把彩色图像转换为灰度图像,然后对灰度图像进行二值化,在图像二值化后,采用连通域滤波对信息区域进行去噪;
针对第二类信息区域,用先验阈值的方法去除图片中红色信息,用otsu方法对图像进行二值化,之后进行水平投影以确定金额上下边界,然后进行垂直投影以确定金额左右边界,进而提取金额信息,最后对图像进行圆滑;
针对第三类信息区域,先去除图像中红色的信息,然后进行二值化,最后进行投影切分。
本发明的第二个目的在于提供一种基于插件的发票识别与管理系统,能够对多种不同类型的发票进行识别和管理。
为实现上述目的,本发明提供了如下技术方案:
一种基于插件的发票识别与管理系统,包括:
插件接口,用于将预先创建的识别插件导入到动态链接库中;其中,所述识别插件基于适应于对应类型的发票的识别算法创建;
发票录入模块,用于获取待识别的发票的图像信息,及其类型;
发票识别模块,用于根据该待识别的发票的类型从所述动态链接库中调取对应的识别插件以对该待识别的发票的图像信息进行识别,进而获取所需的发票信息。
优选地,所述系统还包括:
数据库,至少用于存储发票信息、用户信息;
用户管理模块,用于对用户的登陆操作及用户信息修改操作进行授权管理;
发票管理模块,用于根据登陆到系统中的用户的权限,从数据库中获取对应的发票信息,并根据相应用户的操作以对发票信息进行添加、删除、查询、修改以及报销。
优选地,所述用户包括员工用户、财务用户及管理员用户。
优选地,还包括备份模块,用于对数据库中的发票信息进行备份。
优选地,还包括日志管理模块,用于对用户的登陆、操作行为进行记录。
与现有技术相比,本发明的优点是:
1、员工能够自行录入发票信息,把发票信息提交到后台,供财务人员处理,从而解决财务人员当面录入信息任务量大问题,减少财务人员的负担;
2、每当有新类型的发票出现时,可以动态地向系统中添加针对该类型发票的识别算法,使系统能够识别新类型的发票,从工程角度解决多种发票识别问题。
附图说明
图1为实施例1中发票识别方法的流程图;
图2为实施例1中识别算法的流程图;
图3为实施例1中识别算法的步骤s22的流程图;
图4为实施例1中水平投影的坐标示意图;
图5为实施例1中垂直投影的坐标示意图;
图6为实施例2中发票识别与管理系统的模块图。
具体实施方式
下面结合实施例及附图,对本发明作进一步的详细说明,但本发明的实施方式不仅限于此。
实施例1:
本实施例提供一种基于插件的发票识别方法,主要是利用qt插件机制,灵活地增加可用于识别发票的图像信息的识别插件;参照图1,该方法包括:
s01、将预先创建的识别插件导入到动态链接库中;其中,识别插件基于适应于对应类型的发票的识别算法创建;
本实施例中所指的识别插件为qt中的应用插件。qt具备一套内置的插件机制,通过这种机制能够使软件支持用户设定的插件。其中,qt有两种与插件有关的api,第一种是用来对qt库本身进行扩充,称为高级api。而另外一种则是qt库开发出来的应用程序进行扩充。两种api不同,后者是以前者为基础。本实施例中,所采用的即是用来扩展应用程序的低级api。qt插件的流程分为两部分,包括应用程序支持插件和插件开发,其具体步骤为现有技术,本实施例不再赘述。
在程序中,创建用于存储发票信息的结构体,该结构体是接口invoicerecognization函数的返回值。无论什么类型的发票,都需要填写该结构体里面的信息。进而,在识别过程中,通过发票的识别算法把识别出的发票信息填入该结构体当中。通过此函数返回的结构体,即可知晓所识别的发票的具体信息。
每出现一种新类型的发票,都可以根据新类型的发票模板设计其识别算法,然后把算法写入typeinterface接口invoicerecognization函数中,把识别结果写入结构体中,将其制成识别插件即dll库(动态链接库),进而每一种发票都对应地具有一个识别插件。
s02、获取待识别的发票的图像信息,及其类型;
本实施例中,可利用手机、数码相机、扫描仪获取待识别的发票的图像信息,其中,采用扫描仪获取的图像最为清晰。
在获取到发票的图像信息后,即可进行识别。需要指出的是,不同类型的发票的版面设计不同,因而,需要针对每一种发票设计不同的算法;本实施例中,以增值税普通发票为例进行说明,通过对增值税普通发票观察,总结归纳出以下几个重要的特点:
彩色信息:增值税普通发票中主要存在三种颜色,分别为红、黑和蓝。红色和黑色是发票固有的信息,主要为表格和发票代号。蓝色信息主要是机器打印上去的信息如发票号码和税额等。
表格信息:表格是由横线和竖线交叉形成,结构特征明显。几乎发票的所有信息都在表格中指定的位置,对表格进行定位相对更加容易些。
信息位置关系:发票中需要识别的信息几乎都处于固定位置,如发票代号。但有些可变信息由于用不同机器打印,位置可能或多或少会存在偏差,经过大量发票观察,整体偏差不大。
信息之间逻辑关系:信息之间也存在一些逻辑关系,如总金额等于税前金额加上税额,年份中第一和第二个数字只能是2和0。月份第一个数字是0或者1。这些逻辑关系可以作为先验知识,对后续的识别内容进行校验。
因此,作为一种示例,参照图2,该识别算法包括:
s21、通过色彩分离将发票中的表格从图像中进行分离,对分离出的表格图像进行二值化,用形态学操作对表格进行修复以获取完整的表格;
s22、对步骤s21获取的表格进行hough变换,求其直线倾斜角度,根据倾斜角度对发票原始彩色图像和表格图像进行旋转;
结合图3,本步骤具体包括:
s221、获取增值税普通发票彩色分离后带表格的图像,然后二值化的表格图像;
s222、对二值化的图像进行边缘检测;
边缘检测算子可以是sobel算子、canny算子等。本实施例使用的是canny算子对图像进行边缘检测;
s223、获取检测后的图像然后进行hough变换;
图像空间x-y转换到参数空间θ-ρ根据图像空间与其参数空间的对偶性,表格图像中的直线可用参数空间(θ,ρ)表示。θ的取值范围为0-360,ρ的取值范围为0-n,n的大小为增值税普通发票对角线长度。m[360][n]为定义的一个计数器。θ以一为增量,分别计算出每个点的ρ值大小,然后是m[θ][ρ]加1;其中,参数空间(θ,ρ)表示表格图像中的直线;θ的取值范围为0-360,ρ的取值范围为0-n,n的大小为增值税普通发票对角线长度;m[360][n]为定义的一个计数器;
s224、取出二维数组m[θ][ρ]值最大的,此最大值对应的θ为增值税普通发票与水平方向上的倾斜角;
s225、通过hough变换获得的倾斜角θ,根据角度θ对图像倾斜较正。
s23、采用投影法对表格中各个角点坐标进行定位,并根据定位结果对表格进行切割,以获取表格中的多个不同的信息区域;
图像投影是指对图像延某个方向的积分。投影分为水平投影与垂直投影,其中,水平投影是为了得到水平直线的纵坐标。如图4,能够看到水平方向有五条直线,设从上到下其纵坐标为r1、r2、r3、r4和r5。五条直线的长度明显比其他信息的水平长度长,所以可以直接对其进行水平投影。假设白色像素为1,黑像素为0,通过水平积分能够得到五个峰值,如图4-图6。从图中能够看到很明显的五个峰值,每个峰值代表一条水平直线的积分。通过判断峰值,能够得到对应x坐标,即可得到五条直线在表格图像中的纵坐标r1、r2、r3、r4和r5。
垂直投影是为了获得垂直直线的横坐标。表格中垂直直线长短不一和表格中的字体干扰,如果对整个表格直接进行垂直投影,很难根据投影的峰值判断垂直直线的横坐标。通过观察表格,第二条与第三条水平直线之间有九条垂直的直线。如果把第二条与第三条直线部分截取出来,然后再进行垂直投影,就能够很容的得到九个明显的峰值。设从左到右垂直直线的横坐标分别为c1、c2、c3、c4、c5、c6、c7、c8和c9。如图5所示,能够得到明显的九条峰值。九个峰值的横坐标即为表格中垂直线的横坐标c1、c2、c3、c4、c5、c6、c7、c8和c9。
s24、对各个信息区域进行二值化、色彩分离、图像去除噪声处理;
具体是,信息区域分为三类,第一类为发票代号、发票号码,开票日期,第二类是金额相关信息,第三类为销售方信息区域;
其中,针对第一类信息区域,先把彩色图像转换为灰度图像,然后对灰度图像进行二值化,在图像二值化后,采用连通域滤波对信息区域进行去噪;
针对第二类信息区域,用先验阈值的方法去除图片中红色信息,用otsu方法对图像进行二值化,之后进行水平投影以确定金额上下边界,然后进行垂直投影以确定金额左右边界,进而提取金额信息,最后对图像进行圆滑;
针对第三类信息区域,先去除图像中红色的信息,然后进行二值化,最后进行投影切分。
s25、采用tesseract引擎对经过步骤s24处理后的信息区域进行字符识别,以获取所需的发票信息;
需要识别的信息包括发票号码、发票代号、开票日期、总金额、销售方税号和公司名称。5个识别信息中只有公司名称为中文,开票日期里面少许中文外,其他几个都为数字或英文,且所有信息的字体都是机器打印。tesseract3.0以上版本都支持中文字符识别。本算法采用tesseract3.0.2版本,所用训练集为tesseract自带的chi_sim.traineddata中文库。中文库支持简体汉字、字母以及阿拉伯数字的识别。tesseract识别图像时,可直接对一排字符识别,也可以对一张图片上若干排字符从左到右进行识别,但需要对图像进行预处理才能够有较高的识别率。对信息区域处理的时候,不必切割成一个个字符进行识别。直接把整个发票代号让tesseract识别。
s03、根据该待识别的发票的类型从动态链接库中调取对应的识别插件以对该待识别的发票的图像信息进行识别,进而获取所需的发票信息。
例如使用扫描仪获取到发票的图像信息后,同时输入该种发票的类型,软件即可根据发票的类型,从动态链接库中加载对应的识别插件并运行。运行完成后,再卸载该插件。
s04、将获取到的发票信息存入到数据库中;
该数据库可以是本地数据库,也可以是云数据库。
实施例2:
基于实施例1所提供的方法,本实施例还提供一种基于插件的发票识别与管理系统,本系统主要是使用qtcreator集成开发环境进行开发,在开发时,配置插件接口,该插件接口的配置过程为现有技术,本实施例不再赘述。
参照图6,该系统包括数据库、发票录入模块、发票识别模块、用户管理模块、发票管理模块、备份模块以及日志管理模块。
其中,插件接口用于将预先创建的识别插件导入到动态链接库中;其中,识别插件基于适应于对应类型的发票的识别算法创建;
发票录入模块用于获取待识别的发票的图像信息,及其类型;本实施例中,用户可利用手机、数码相机、扫描仪获取待识别的发票的图像信息,其中,采用扫描仪获取的图像最为清晰。然后将图像文件通过发票录入模块上传。
用户在上传图像文件后,在界面中选择发票的类型,完成后,发票识别模块则根据用户的选择,从动态链接库中调取对应的识别插件以对该待识别的发票的图像信息进行识别,进而获取所需的发票信息。并且在获取到发票信息后,按照预设的数据结构将其存入到数据库中,供用户进行查询和修改。
用户管理模块用于对用户的登陆操作及用户信息修改操作进行授权管理;其中,用户包括员工用户、财务用户及管理员用户。不同类别的用户的权限不同,其中,员工用户仅能够对自己所添加的发票信息进行删除和查询,财务用户和管理员用户均能够对数据库中所有的发票信息进行删除、查询、修改,财务用户还能够对发票进行报销,即更改由员工用户添加的发票的报销状态。管理员用户还能够对财务用户及员工用户进行的登陆账号进行管理,即添加、删除账号。
备份模块用于对数据库中的发票信息进行备份,管理员用户或财务用户在登陆到系统中后,可通过界面中的备用按钮进行操作,实现数据备份。所备份的数据存储于云端或本地存储空间(pc端)中。
日志管理模块用于对用户的登陆、操作行为进行记录,即对发票信息的添加、修改、查询、及用户信息的修改等,均进行记录,生成的日志数据存储于数据库中。