使用百度人工自能库获取发票号码
百度ID、key请在百度平台获取。也可以使用OCR识别
from aip import AipOcr
import easygui
import os
import time
def ocr(url): # 百度文字识别
# 存放发票号码的数组
data = []
# 以下XXX 替换为百度信息
APP_ID = 'XXX'
API_KEY = 'XXX'
SECRET_KEY = 'XXX'
# 连接百度aip平台
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
with open(url, 'rb') as f:
image = f.read()
# 使用高精度识别(每天500次)
text = client.basicAccurate(image)
mun = text['words_result'] # 读取字典
# 便利发票上的全部数据
for i in mun:
try:
# 清洗代码、去掉不需要的文字
fphm = (i['words']).replace('发票号码', '')
fphm = fphm.replace(':', '')
fphm = fphm.replace(':', '')
fphm = fphm.replace(' ', '')
# 清洗后发票号码是一个8位数的数值
if 99999999>int(fphm) and len(fphm)==8:
data.append(fphm)
except:
pass
# 因为发票号码是出现在开票日期上面的、所以当出现开票日期的时候结束循环
if (i['words'])[:4] == "开票日期":
break
# 返回发票号码
return data
def file_name(file_dir):
for root, dirs, files in os.walk(file_dir):
# 获取文件名称
for file in files:
if file[-4:]=='.jpg':
old_name = file_dir+'\\'+file
print("读取:" + old_name) # 当前路径下所有非目录子文件
mun = ocr(old_name)
new_name = file_dir+'\\'+mun[0]+'.jpg'
print("修改为:"+new_name)
try:
# 使用rename修改文件名,如果发票号码是重复的会报错
os.rename(old_name,new_name)
except:
# 当发票号码报错时多添加一个时间信息到文件中
strtime = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime())
new_name = file_dir+'\\'+mun[0]+'-'+strtime+'重复.jpg'
os.rename(old_name,new_name)
sPath = easygui.diropenbox()
file_name(sPath)
成功批量修改文件名称。