山东广饶县建设局网站,wordpress怎么让手机端好看,廊坊中小企业网站制作,怎么用小皮创建网站每天面对成堆的发票#xff0c;无论是税务发票还是承兑单据#xff0c;抑或是其他各类公司数据要从照片、PDF等不同格式的内容中提取#xff0c;我们都有必要进行快速办公的能力提升。因此#xff0c;我们的目标要求就十分明显了#xff0c;首先要从图片中获取数据#x…每天面对成堆的发票无论是税务发票还是承兑单据抑或是其他各类公司数据要从照片、PDF等不同格式的内容中提取我们都有必要进行快速办公的能力提升。因此我们的目标要求就十分明显了首先要从图片中获取数据其次将数据统一导入到EXCEL中。配置需求1.ImageMagick https://download.csdn.net/download/yyfloveqcw/875797902.tesseract-OCR https://download.csdn.net/download/yyfloveqcw/875798013.Python3.74.from PIL import Image as PI5.import io6.import os7.import pyocr.builders8.from cnocr import CnOcr9.import xlwt分析上图发现票据金额为“贰拾万元整”数据金额为大写中文因此在导入Excel之前我们需要将金额票据的数据转换成数字的格式基于此我们需要首先完成大写汉字和数字的转换。def chineseNumber2Int(strNum: str):result 0temp 1 # 存放一个单位的数字如十万count 0 # 判断是否有chArrcnArr [壹, 贰, 叁, 肆, 伍, 陆, 柒, 捌, 玖]chArr [拾, 佰, 仟, 万, 亿]for i in range(len(strNum)):b Truec strNum[i]for j in range(len(cnArr)):if c cnArr[j]:if count ! 0:result tempcount 0temp j 1b Falsebreakif b:for j in range(len(chArr)):if c chArr[j]:if j 0:temp * 10elif j 1:temp * 100elif j 2:temp * 1000elif j 3:temp * 10000elif j 4:temp * 100000000count 1if i len(strNum) - 1:result tempreturn result通过上述代码即可实现大写字母与数字的转换例如输入“贰拾万元整”即可导出“200000”再将其转换成数字后即可极大地简化表格的操作也可以在完成表格操作的同时有利于数据归档。接下来我们需要分析发票的内部内容分析下图可知我们需要获取以下几个数据内容“出票日期”、“汇票到账日期”、“票据号码”、“收款人”、“票据金额”、“出票人”可以通过画图软件获取精准定位。如图小黑点即鼠标所在地画图软件左下角即他的坐标。提取出票日期def text1(new_img):#提取出票日期left 80top 143right 162bottom 162image_text1 new_img.crop((left, top, right, bottom))#展示图片#image_text1.show()txt1 tool.image_to_string(image_text1)print(txt1)return str(txt1)2.提取金额def text2(new_img):#提取金额left 224top 355right 585bottom 380image_text2 new_img.crop((left, top, right, bottom))#展示图片#image_text2.show()image_text2.save(img/tmp.png)temp ocr.ocr(img/tmp.png)temp.join(temp[0])txt2chineseNumber2Int(temp)print(txt2)return txt23.提取出票人def text3(new_img):#提取出票人left 177top 207right 506bottom 231image_text3 new_img.crop((left, top, right, bottom))#展示图片#image_text3.show()image_text3.save(img/tmp.png)temp ocr.ocr(img/tmp.png)txt3.join(temp[0])print(txt3)return txt34.提取付款行def text4(new_img):#提取付款行left 177top 274right 492bottom 311image_text4 new_img.crop((left, top, right, bottom))#展示图片#image_text4.show()image_text4.save(img/tmp.png)temp ocr.ocr(img/tmp.png)txt4.join(temp[0])print(txt4)return txt45.提取汇票到账日期def text5(new_img):#提取汇票到日期left 92top 166right 176bottom 184image_text5 new_img.crop((left, top, right, bottom))#展示图片#image_text5.show()txt5 tool.image_to_string(image_text5)print(txt5)return txt56.提取票据单据def text6(new_img):#提取票据号码left 598top 166right 870bottom 182image_text6 new_img.crop((left, top, right, bottom))#展示图片#image_text6.show()txt6 tool.image_to_string(image_text6)print(txt6)return txt6在将数据全部提取完成之后即进入设置环节我们需要首先将所有账单文件进行提取获取他们的文件名和路径。ocrCnOcr()
tool pyocr.get_available_tools()[0]
filePathimg
img_name[]
for i,j,name in os.walk(filePath):img_namename在获取完整后即可进行数据导入Excel的操作。count1
book xlwt.Workbook(encodingutf-8,style_compression0)
sheet book.add_sheet(test,cell_overwrite_okTrue)
for i in img_name:img_url filePath/iwith open(img_url, rb) as f:a f.read()new_img PI.open(io.BytesIO(a))## 写入csvcol (年份,出票日期,金额,出票人,付款行全称,汇票到日期,备注)for j in range(0,7):sheet.write(0,j,col[j])book.save(1.csv)shijiantext1(new_img)sheet.write(count,0,shijian[0:4])sheet.write(count,1,shijian[5:])sheet.write(count,2,text2(new_img))sheet.write(count,3,text3(new_img))sheet.write(count,4,text4(new_img))sheet.write(count,5,text5(new_img))sheet.write(count,6,text6(new_img))count count 1至此完整流程结束。附上源码全部from wand.image import Image
from PIL import Image as PI
import pyocr
import io
import re
import os
import shutil
import pyocr.builders
from cnocr import CnOcr
import requests
import xlrd
import xlwt
from openpyxl import load_workbookdef chineseNumber2Int(strNum: str):result 0temp 1 # 存放一个单位的数字如十万count 0 # 判断是否有chArrcnArr [壹, 贰, 叁, 肆, 伍, 陆, 柒, 捌, 玖]chArr [拾, 佰, 仟, 万, 亿]for i in range(len(strNum)):b Truec strNum[i]for j in range(len(cnArr)):if c cnArr[j]:if count ! 0:result tempcount 0temp j 1b Falsebreakif b:for j in range(len(chArr)):if c chArr[j]:if j 0:temp * 10elif j 1:temp * 100elif j 2:temp * 1000elif j 3:temp * 10000elif j 4:temp * 100000000count 1if i len(strNum) - 1:result tempreturn resultdef text1(new_img):#提取出票日期left 80top 143right 162bottom 162image_text1 new_img.crop((left, top, right, bottom))#展示图片#image_text1.show()txt1 tool.image_to_string(image_text1)print(txt1)return str(txt1)
def text2(new_img):#提取金额left 224top 355right 585bottom 380image_text2 new_img.crop((left, top, right, bottom))#展示图片#image_text2.show()image_text2.save(img/tmp.png)temp ocr.ocr(img/tmp.png)temp.join(temp[0])txt2chineseNumber2Int(temp)print(txt2)return txt2def text3(new_img):#提取出票人left 177top 207right 506bottom 231image_text3 new_img.crop((left, top, right, bottom))#展示图片#image_text3.show()image_text3.save(img/tmp.png)temp ocr.ocr(img/tmp.png)txt3.join(temp[0])print(txt3)return txt3
def text4(new_img):#提取付款行left 177top 274right 492bottom 311image_text4 new_img.crop((left, top, right, bottom))#展示图片#image_text4.show()image_text4.save(img/tmp.png)temp ocr.ocr(img/tmp.png)txt4.join(temp[0])print(txt4)return txt4
def text5(new_img):#提取汇票到日期left 92top 166right 176bottom 184image_text5 new_img.crop((left, top, right, bottom))#展示图片#image_text5.show()txt5 tool.image_to_string(image_text5)print(txt5)return txt5
def text6(new_img):#提取票据号码left 598top 166right 870bottom 182image_text6 new_img.crop((left, top, right, bottom))#展示图片#image_text6.show()txt6 tool.image_to_string(image_text6)print(txt6)return txt6ocrCnOcr()tool pyocr.get_available_tools()[0]filePathimg
img_name[]
for i,j,name in os.walk(filePath):img_namename
count1book xlwt.Workbook(encodingutf-8,style_compression0)
sheet book.add_sheet(test,cell_overwrite_okTrue)for i in img_name:img_url filePath/iwith open(img_url, rb) as f:a f.read()new_img PI.open(io.BytesIO(a))## 写入csvcol (年份,出票日期,金额,出票人,付款行全称,汇票到日期,备注)for j in range(0,7):sheet.write(0,j,col[j])book.save(1.csv)shijiantext1(new_img)sheet.write(count,0,shijian[0:4])sheet.write(count,1,shijian[5:])sheet.write(count,2,text2(new_img))sheet.write(count,3,text3(new_img))sheet.write(count,4,text4(new_img))sheet.write(count,5,text5(new_img))sheet.write(count,6,text6(new_img))count count 1