(3)拍摄模糊:当将图像进行二值化、中值滤波后,发现无法清晰读取所提取的“二维码”,则该图像拍摄模糊,反馈给硬件系统,提醒硬件重拍。
2.1.3 图像识别反馈 以带有“二维码”的增值税票据图像为例,将左上角的“二维码”识别结果作为判定票据放置是否正确的依据,利用阈值分割提取出“二维码”所在区域,通过扫描得到“二维码”的边角坐标。
调用MATLAB中“width”函数对100张票据“二维码”所在区域的测算得到“二维码”区域平均宽度值为385像素,定义识别到图像中黑色边角宽度像素区间位于375~400时,票据图像放置正确,图像质量合格,储存进“upload”文件夹,当识别到像素区间不符合要求时,将该票据图像储存进“待反馈文件夹”。
将不合格的票据图像序号通过filezilla无线传输发送到上一级的票据图像输入模块。将“upload”文件夹图像的序号储存成txt文档,通过filezilla平台反馈回上一级。
2.2 票据图像信息提取处理与识别
2.2.1 票据图像信息提取处理 无线接收票据图像后,软件利用MATLAB批量处理票据,首先截取有效票据区域,然后截取票据中有效数据区域;接着逐渐增加角度调整函数,自动调整图片,不同票据用同一算法实现;再对截取部分进行灰度化,腐蚀膨胀处理,以便于识别。
2.2.2 识别 本设计通过第三方jTessBoxEditor工具训练字库,字符识别过程中OCR也在进行自适应学习,不断拓展字库,识别更多的字符,从而提高识别率。通过tesseract平台上的jTessBoxEditor工具来处理修正字库,通过不断识别更新字库,积累字库的信息。
2.3 自动生成财务报表
这一步分为四个模块,分别是数据导入模块、数据识别模块、数据判断模块和表格生成模块。
总工作流程:如图2所示,首先导入存放OCR识别结果的txt文本,将这些信息汇总成表格,然后在汇总表的基础上,加入会计科目等类别,对收集到的信息进行分类处理,完善汇总表格成为会计信息总表,最后在会计信息总表上提取数据,经过统计归类,按实际需求,编制财务表格。
数据导入模块设计:在本模块中,txt文件分为七类,对应发票上的七类有效信息。因为OCR识别对字符和数字的编码方式不同,七类txt文件中会出现两种编码格式,一种是ANSI,另一种是utf-8。针对不同的编码格式,MATLAB在将txt文件里的内容导入到汇总表格时,需要运行不同的处理语句,确保txt文件里的内容能被正确导入。
数据识别模块设计:本模块的功能是在汇总表上处理错误的数据,完成对汇总表的自动修正。完成数据的导入后,因为OCR识别可能存在错误,所以数据识别模块的工作就是识别并且定位汇总表格上错误的数据。基于本设计对于报账系统自动化的目標,在构想处理方案时,希望做到的是发现错误并且能够自动改正错误。因此也引入了相似度算法,对可能出现的一些错误实现自动纠正,或者是为使用者手动纠正提供参考。
数据判断模块:在汇总表的基础上,通过对表上数据的分析判断得到借贷关系和会计科目。判断会计科目时额外需要关系数据库的辅助。得到这两项信息后,即完成了由汇总表到会计信息总表的过程。
表格生成模块设计:在本设计中,输出的财务表格有三种,分别是资产负债表、科目余额表和利润表。在会计信息总表的基础上,对表格上的金额依照会计科目和借贷关系进行统计和归类,将统计归类后的信息分别输出到三种财务表格的相应模板上,完成财务表格的编制。如果在以上模块中识别出错误并无法修正时,则需要人工参与修正。
3 系统测试部分
3.1 识别部分测试结果