微信扫码
添加专属顾问
我要投稿
发票识别技术的新突破,基于QwenVL2.5模型实现精准提取信息。核心内容: 1. 利用QwenVL2.5模型从发票图像中提取关键信息 2. 模型性能与参数大小的关系分析 3. 实时性要求高的应用场景下模型选择建议
准确的真实发票图片数据
提示词
"请提取发票图像中的以下信息:\n" +
"- 发票代码\n" +
"- 发票号码\n" +
"- 开票日期\n" +
"- 校验码\n" +
"- 机器编号\n" +
"- 购买方名称\n" +
"- 购买方纳税人识别号\n" +
"- 购买方地址、电话\n" +
"- 购买方开户行及账号\n" +
"- 销售方名称\n" +
"- 销售方纳税人识别号\n" +
"- 销售方地址、电话\n" +
"- 销售方开户行及账号\n" +
"- 项目名称\n" +
"- 规格型号\n" +
"- 单位\n" +
"- 数量\n" +
"- 单价\n" +
"- 金额\n" +
"- 税率\n" +
"- 税额\n" +
"- 价税合计(大写)\n" +
"- 价税合计(小写)\n" +
"- 收款人\n" +
"- 复核\n" +
"- 开票人\n" +
"要求准确无误地提取上述关键信息,不要遗漏和捏造虚假信息,模糊或者强光遮挡的单个文字可以用英文问号?代替。返回数据格式以json方式输出,格式为:{\n" +
"'发票代码':'xxx', '发票号码':'xxx', '开票日期':'xxx', '校验码':'xxx', '机器编号':'xxx', '购买方名称':'xxx', '购买方纳税人识别号':'xxx', '购买方地址、电话':'xxx', '购买方开户行及账号':'xxx', '销售方名称':'xxx', '销售方纳税人识别号':'xxx', '销售方地址、电话':'xxx', '销售方开户行及账号':'xxx', '项目名称':'xxx', '规格型号':'xxx', '单位':'xxx', '数量':'xxx', '单价':'xxx', '金额':'xxx', '税率':'xxx', '税额':'xxx', '价税合计(大写)':'xxx', '价税合计(小写)':'xxx', '收款人':'xxx', '复核':'xxx', '开票人':'xxx'}"
从性能数据来看,模型大小与响应时间呈正相关关系:3B参数模型最快(7372ms),而32B参数模型最慢(23942ms)
• 值得注意的是,7B模型(10181ms)比OCR专用模型(12434ms)更快,尽管OCR模型参数未明确说明
• 72B模型(15573ms)比32B模型(23942ms)更快,这可能是由于模型架构优化或测试环境差异导致
• 对于实时性要求高的应用,建议优先考虑3B或7B版本;需要更高精度的场景可权衡使用72B版本
• 32B版本在本次测试中表现异常,可能需要再检查模型配置或测试环境是否存在问题
接口调用时间:15573 毫秒
{
"发票代码": "053002100113",
"发票号码": "00195236",
"开票日期": "2022年12月05日",
"校验码": "02954951630544033053",
"机器编号": "497003211467",
"购买方名称": "云南艾拓信息技术有限公司",
"购买方纳税人识别号": "91530100792866047D",
"购买方地址、电话": "云南省昆明市高新区经典双城C1幢1单元15层1503室 0871-65386218",
"购买方开户行及账号": "富滇银行昆明市五华支行 242021010000495122",
"销售方名称": "云南亚彩科技有限公司",
"销售方纳税人识别号": "91530103MA6Q798R69",
"销售方地址、电话": "云南省昆明市盘龙区北京路花园10幢503-2号13629663610",
"销售方开户行及账号": "中国建设银行昆明白云路支行53050188863700000644",
"项目名称": "*计算机网络设备*光纤箱\n*计算机网络设备*光纤箱\n*计算机网络设备*光纤适配器",
"规格型号": "DS-ZGHK-24/E\nDS-ZGHK-12/E\nDS-ZMFGHLS-2/E",
"单位": "个\n个\n个",
"数量": "3\n8\n168",
"单价": "143.362831858407\n106.194690265487\n4.42477876106195",
"金额": "430.09\n849.56\n743.36\n¥2023.01",
"税率": "13%\n13%\n13%",
"税额": "55.91\n110.44\n96.64\n¥262.99",
"价税合计(大写)": "贰仟贰佰捌拾陆圆整",
"价税合计(小写)": "¥2286.00",
"收款人": "蒋云芳",
"复核": "赵建柏",
"开票人": "董飞霞"
}
接口调用时间:23942 毫秒
{
"发票代码": "053002100113",
"发票号码": "00195236",
"开票日期": "2022年12月05日",
"校验码": "02954951630544033053",
"机器编号": "497003211467",
"购买方名称": "云南艾拓信息技术有限公司",
"购买方纳税人识别号": "91530100792866047D",
"购买方地址、电话": "云南省昆明市高新区经典双城C1幢1单元15层1503室 0871-65386218",
"购买方开户行及账号": "富滇银行昆明市五华支行 242021010000495122",
"销售方名称": "云南亚彩科技有限公司",
"销售方纳税人识别号": "91530103MA6Q798R69",
"销售方地址、电话": "云南省昆明市盘龙区北京路花园10幢503-2号 13629663610",
"销售方开户行及账号": "中国建设银行昆明白云路支行 53050188863700000644",
"项目名称": "*计算机网络设备*光纤箱\n*计算机网络设备*光纤箱\n*计算机网络设备*光纤适配器\n合计",
"规格型号": "DS-ZGHK-24/E\nDS-ZGHK-12/E\nDS-ZMFG HLS-2/E",
"单位": "个\n个\n个",
"数量": "3\n8\n168",
"单价": "143.362831858407\n106.194690265487\n4.42477876106195",
"金额": "430.09\n849.56\n743.36\n¥2023.01",
"税率": "13%\n13%\n13%",
"税额": "55.91\n110.44\n96.64\n¥262.99",
"价税合计(大写)": "贰仟贰佰捌拾陆圆整",
"价税合计(小写)": "¥2286.00",
"收款人": "蒋云芳",
"复核": "赵建柏",
"开票人": "董飞霞"
}
接口调用时间:10181 毫秒
{
"发票代码": "?53002100113",
"发票号码": "00195236",
"开票日期": "2022年12月05日",
"校验码": "02954951630544033053",
"机器编号": "497003211467",
"购买方名称": "云南艾拓信息技术有限公司",
"购买方纳税人识别号": "91530100792866047D",
"购买方地址、电话": "云南省昆明市高新区经典双城C1幢1单元15层1503室 0871-65386218",
"购买方开户行及账号": "富滇银行昆明市五华支行 242021010000495122",
"销售方名称": "云南亚彩科技有限公司",
"销售方纳税人识别号": "91530103MA6Q798R69",
"销售方地址、电话": "云南省昆明市盘龙区北京路花园10幢503-2号13629663610",
"销售方开户行及账号": "中国建设银行昆明白云路支行53050188863700000644",
"项目名称": "*计算机网络设备*光纤箱 *计算机网络设备*光纤箱 *计算机网络设备*光纤适配器",
"规格型号": "DS-ZGHK-24/E DS-ZGHK-12/E DS-ZMFGHLS-2/E",
"单位": "个 元/套 套",
"数量": "3 ? 168",
"单价": "143,362831858407;106.194690265487 ;4 .42477876106195",
"金额": "¥:430.09;849.56;743.36",
"税率": "13%",
"税额": "55.91元;110.44元;96.64元",
"价税合计(大写)": "(贰仟贰佰捌拾陆圆整)",
"价税合计(小写)": "¥?:2286.00?",
"收款人": "蒋云芳",
"复核": "赵建柏",
"开票人": "董飞霞"
}
注意:由于部分价格和数字被省略或显示不完整,在解析时进行了简化处理,并用`?`表示无法确定的部分。实际操作中应根据具体情况进行调整和完善。
接口调用时间:7372 毫秒
{
"发票代码": "053002100113",
"发票号码": "00195236",
"开票日期": "2022年12月05日",
"校验码": "02954 95163 05440 33053",
"机器编号": "497003211467",
"购买方名称": "云南艾拓信息技术有限公司",
"购买方纳税人识别号": "91530100792866047D",
"购买方地址、电话": "云南省昆明市高新区双城C1幢1单元15层1503室0871-65386218",
"购买方开户行及账号": "富滇银行昆明市五华支行 242021010000495122",
"销售方名称": "云南亚彩科技有限公司",
"销售方纳税人识别号": "91530103MA6Q798R69",
"销售方地址、电话": "云南省昆明市盘龙区北京路花园10幢503-2号13629663610",
"销售方开户行及账号": "中国建设银行昆明白云路支行53050188863700000644",
"项目名称": "*计算机网络设备*光纤箱*计算机网络设备*光纤箱*计算机网络设备*光纤适配器合计",
"规格型号": "DS-ZGHK-24/E?DS-ZGHK-12/E?DS-ZMFG HLS-2/E",
"单位": "个",
"数量": "38168",
"单价": "143.362831858407106.1946902654874.42477876106195",
"金额": "430.09849.56743.36",
"税率": "13%",
"税额": "55.91110.4496.64",
"价税合计(大写)": "贰仟贰佰捌拾陆圆整",
"价税合计(小写)": "2286.00",
"收款人": "蒋云芳",
"复核": "赵建柏",
"开票人": "董飞霞"
}
接口调用时间:12434 毫秒
{
"发票代码": "053002100113",
"发票号码": "00195236",
"开票日期": "2022年12月05日",
"校验码": "02954 95163 05440 33053",
"机器编号": "497003211467",
"购买方名称": "云南艾拓信息技术有限公司",
"购买方纳税人识别号": "91530100792866047D",
"购买方地址、电话": "云南省昆明市高新区经典双城C1幢1单元15层1503室0871-65386218",
"购买方开户行及账号": "富滇银行昆明市五华支行242021010000495122",
"销售方名称": "云南亚彩科技有限公司",
"销售方纳税人识别号": "91530103MA6Q798R69",
"销售方地址、电话": "云南省昆明市盘龙区北京路花园10幢503-2号13629663610",
"销售方开户行及账号": "中国建设银行昆明白云路支行53050188863700000644",
"项目名称": "*计算机网络设备*光纤箱*计算机网络设备*光纤箱*计算机网络设备*光纤适配器合计",
"规格型号": "DS-ZGHK-24/EDS-ZGHK-12/EDS-ZMFGHLS-2/E",
"单位": "个个个",
"数量": "38168",
"单价": "143.362831858407 106.194690265487 4.42477876106195",
"金额": "430.09849.56743.36",
"税率": "13%13%13%",
"税额": "55.91110.4496.64",
"价税合计(大写)": "贰仟贰佰捌拾陆圆整",
"价税合计(小写)": "2286.00",
"收款人": "蒋云芳",
"复核": "赵建柏",
"开票人": "董飞霞"
}
调整提示词后
请提取这张照片的内容,其中内容格式‘机器编号’、‘发票代码’、‘发票号码’、‘开票日期’、‘校 验 码’、‘购买方名称’、‘购买方纳税人识别号’、‘购买方地 址、电 话’、‘开户行及账号’、‘货物或应税劳务、服务名称’、‘规格型号’、‘单 位’、‘数 量’、‘单 价’、‘金 额’、‘税率’、‘税 额’、‘价税合计(大写)’、‘价税合计(小写)’、‘销售方名称’、‘销售方纳税人识别号’、‘销售方地 址、电 话’、‘销售方地 址、电 话’、‘开户行及账号’、‘备注’、‘收款人’、‘复核’、‘开票人’ 字段返回信息,返回的结果信息以json格式返回
{
"机器编号":"497003211467",
"发票代码":"053002100113",
"发票号码":"00195236",
"开票日期":"2022年12月05日",
"校验码":"02954 95163 05440 33053",
"购买方名称":"云南艾拓信息技术有限公司",
"购买方纳税人识别号":"91530100792866047D",
"购买方地址、电话":"云南省昆明市高新区经典双城C幢1单元15层1503室 0871-65386218",
"开户行及账号":"富滇银行昆明市五华支行 242021010000495122",
"货物或应税劳务、服务名称":[
{
"项目名称":"*计算机网络设备*光纤箱",
"规格型号":"DS-ZGHK-24/E",
"单位":"个",
"数量":"3",
"单价":"143.302831858407",
"金额":"430.09",
"税率":"13%",
"税额":"55.91"
},
{
"项目名称":"*计算机网络设备*光纤箱",
"规格型号":"DS-ZGHK-12/E",
"单位":"个",
"数量":"8",
"单价":"106.194690265487",
"金额":"849.56",
"税率":"13%",
"税额":"110.44"
},
{
"项目名称":"*计算机网络设备*光纤适配器",
"规格型号":"DS-ZMFGHLS-2/E",
"单位":"个",
"数量":"168",
"单价":"4.42477876106195",
"金额":"743.36",
"税率":"13%",
"税额":"96.64"
}
],
"价税合计(大写)":"贰仟贰佰捌拾陆圆整",
"价税合计(小写)":"¥2286.00",
"销售方名称":"云南亚彩科技有限公司",
"销售方纳税人识别号":"91530103MA6Q798R69",
"销售方地址、电话":"云南省昆明市盘龙区北京路花园10幢503-2号13629663610",
"销售方开户行及账号":"中国建设银行昆明白云路支行53050188863700000644",
"备注":"",
"收款人":"蒋云芳",
"复核":"赵建柏",
"开票人":"董飞霞"
}
{
"机器编号":"497003211467",
"发票代码":"053002100113",
"发票号码":"00195236",
"开票日期":"2022年12月05日",
"校验码":"02954951630544033053",
"购买方名称":"云南艾拓信息技术有限公司",
"购买方纳税人识别号":"91530100792866047D",
"购买方地址、电话":"云南省昆明市高新区经典双城C1幢1单元15层1503室 0871-65386218",
"开户行及账号":"富滇银行昆明市五华支行 242021010000495122",
"货物或应税劳务、服务名称":[
"*计算机网络设备*光纤箱",
"*计算机网络设备*光纤箱",
"*计算机网络设备*光纤适配器"
],
"规格型号":[
"DS-ZGHK-24/E",
"DS-ZGHK-12/E",
"DS-ZMFG HLS-2/E"
],
"单位":[
"个",
"个",
"个"
],
"数量":[
"3",
"8",
"168"
],
"单价":[
"143.362831858407",
"106.194690265487",
"4.42477876106195"
],
"金额":[
"430.09",
"849.56",
"743.36"
],
"税率":[
"13%",
"13%",
"13%"
],
"税额":[
"55.91",
"110.44",
"96.64"
],
"价税合计(大写)":"贰仟贰佰捌拾陆圆整",
"价税合计(小写)":"¥2286.00",
"销售方名称":"云南亚彩科技有限公司",
"销售方纳税人识别号":"91530103MA6Q798R69",
"销售方地址、电话":"云南省昆明市盘龙区北京路花园10幢503-2号13629663610",
"销售方开户行及账号":"中国建设银行昆明白云路支行 53050188863700000644",
"备注":"",
"收款人":"蒋云芳",
"复核":"赵建柏",
"开票人":"董飞霞"
}
{
"机器编号":"497003211467",
"发票代码":"053002100113",
"发票号码":"00195236",
"开票日期":"2022年12月05日",
"校验码":"02954 95163 05440 33053",
"购买方名称":"云南艾拓信息技术有限公司",
"购买方纳税人识别号":"91530100792866047D",
"购买方地址、电话":"云南省昆明市高新区双城C1幢1单元15层1503室 0871-65386218",
"开户行及账号":"富滇银行昆明市五华支行 242021010000495122",
"货物或应税劳务、服务名称":[
"*计算机网络设备*光纤箱",
"*计算机网络设备*光纤箱",
"*计算机网络设备*光纤适配器"
],
"规格型号":[
"DS-ZGHK-24/E",
"DS-ZGHK-12/E",
"DS-ZMFG HLS-2/E"
],
"单位":"个",
"数量":[
"3",
"8",
"168"
],
"单价":[
"143.362831858407",
"106.194690265487",
"4.42477876106195"
],
"金额":[
"430.09",
"849.56",
"743.36"
],
"税率":"13%",
"税额":[
"55.91",
"110.44",
"96.64"
],
"价税合计(大写)":"贰仟贰佰捌拾陆圆整",
"价税合计(小写)":"¥2286.00",
"销售方名称":"云南亚彩科技有限公司",
"销售方纳税人识别号":"91530103MA6Q798R69",
"销售方地址、电话":"云南省昆明市盘龙区北京路花园10幢503-2号13629663610",
"销售方开户行及账号":"中国建设银行昆明白云路支行53050188863700000644",
"备注":"",
"收款人":"蒋云芳",
"复核":"赵建柏",
"开票人":"董飞霞"
}
import cv2
import numpy as np
from PIL import Image
import pytesseract
from transformers import AutoProcessor, AutoModelForVision2Seq
# 初始化QwenVL2.5模型
processor = AutoProcessor.from_pretrained("Qwen/Qwen-VL-2-5-Int4")
model = AutoModelForVision2Seq.from_pretrained("Qwen/Qwen-VL-2-5-Int4")
def preprocess_image(image_path):
"""图像预处理流程"""
img = Image.open(image_path).convert("RGB")
# 基础预处理
img = img.resize((1024, 1024)) # 统一尺寸
img_array = np.array(img)
# 增强对比度(可选)
# lab = cv2.cvtColor(img_array, cv2.COLOR_RGB2LAB)
# l, a, b = cv2.split(lab)
# clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8))
# cl = clahe.apply(l)
# limg = cv2.merge((cl,a,b))
# img_array = cv2.cvtColor(limg, cv2.COLOR_LAB2RGB)
return img_array
def ocr_processing(image_array):
"""OCR文字识别(使用Tesseract作为备用方案)"""
text = pytesseract.image_to_string(Image.fromarray(image_array), lang="chi_sim+eng")
return text
def invoice_parser(raw_text):
"""发票信息结构化解析"""
import re
patterns = {
"invoice_code": r"发票代码[::]\s*(\d+)",
"invoice_number": r"发票号码[::]\s*(\d+)",
"check_code": r"校验码[::]\s*(\d+)",
"date": r"开票日期[::]\s*(\d{4}年\d{1,2}月\d{1,2}日)",
"amount": r"合计[::]\s*(¥?\d+\.\d{2})",
"seller": r"销售方[::]\s*(.*?)(?=\n|购买方)",
"buyer": r"购买方[::]\s*(.*?)(?=\n|销售方)",
}
results = {}
for key, pattern in patterns.items():
match = re.search(pattern, raw_text, re.IGNORECASE)
if match:
results[key] = match.group(1).strip()
# 金额数值化处理
if "amount" in results:
try:
results["amount"] = float(re.sub(r"[^\d.]", "", results["amount"]))
except:
pass
return results
def qwenvl_processing(image_array, prompt):
"""QwenVL2.5多模态处理"""
inputs = processor(
images=image_array, text=[prompt], return_tensors="pt", padding=True
)
outputs = model.generate(**inputs)
return processor.decode(outputs[0], skip_special_tokens=True)
def main_process(image_path):
# 1. 图像预处理
processed_img = preprocess_image(image_path)
# 2. 混合识别流程
# 方案一:纯OCR方案
ocr_result = ocr_processing(processed_img)
# 方案二:QwenVL2.5多模态方案
vl_result = qwenvl_processing(
processed_img,
"请提取这张发票上的所有关键信息,包括发票代码、号码、日期、金额、销售方和购买方信息",
)
# 3. 结果融合
combined_text = ocr_result + "\n" + vl_result
# 4. 结构化解析
structured_data = invoice_parser(combined_text)
return structured_data
# 使用示例
if __name__ == "__main__":
sample_image = "sample_invoice.jpg"
result = main_process(sample_image)
print("识别结果:")
for k, v in result.items():
print(f"{k.ljust(12)}: {v}")
性能优化建议:
该方案通过融合传统OCR技术和先进的多模态大模型,在保证基础识别能力的同时,利用QwenVL2.5的语义理解优势,可以更好地处理复杂版式发票和非常规字段提取需求。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-06-07
从基础开始,先理解 AI 是什么(上篇)
2025-06-07
AI术语入门(下篇):Prompt、Agent、Langchain,下一站的AI地图
2025-06-07
人人能看懂的大模型MCP,附MCP服务实战指南
2025-06-07
冒泡鸭退场,我看到了AI陪伴的下半场
2025-06-07
Ollama 五月更新解读:多模态、工具调用、模型思考,AI 本地化再进一步!
2025-06-07
DeepSeek R2 1200B未发,大厂已在调整智算中心布局,兵马未动粮草先行!
2025-06-07
AIGC合规落地全景图 | 如何做好AIGC数据合规
2025-06-07
Agent 开发的上半场: 环境、Tools 和 Context 如何决定 Agent | 42章经
2024-08-13
2024-06-13
2024-08-21
2024-07-31
2024-09-23
2024-05-28
2024-08-04
2024-04-26
2024-07-09
2024-07-20
2025-06-07
2025-06-05
2025-06-04
2025-06-04
2025-06-03
2025-06-02
2025-05-31
2025-05-29