推荐使用Python+PaddleOCR1.path_to_your_invoice_image.jpg改成自己的图片路径2.提取票据的信息根据正则表达式匹配import cv2 import re import paddleocr from paddleocr import PaddleOCR def preprocess_image(image_path): # 加载图像 image = cv2.imread(image_path) # 转换为灰度图像 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 二值化处理 _, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) # 去噪 denoised = cv2.fastNlMeansDenoising(binary, None, 30, 7, 21) return denoised def extract_info(text): # 使用正则表达式提取票据中的关键信息 prices = re.findall(r'\d+\.\d{2}', text) items = re.findall(r'品名[::]?\s*(\S+)', text) invoice_code = re.search(r'发票代码[::]?\s*(\d+)', text) invoice_number = re.search(r'发票号码[::]?\s*(\d+)', text) date = re.search(r'开票日期[::]?\s*([\d年\-月日]+)', text) return { '价格': prices, '品名': items, '发票代码': invoice_code.group(1) if invoice_code else None, '发票号码': invoice_number.group(1) if invoice_number else None, '开票日期': date.group(1) if date else None } def ocr_image(image_path): # 初始化PaddleOCR ocr = PaddleOCR(use_angle_cls=True, lang='ch') # 预处理图像 preprocessed_image = preprocess_image(image_path) # 进行OCR识别 result = ocr.ocr(preprocessed_image, cls=True) # 提取识别结果 text = '\n'.join([line[1][0] for line in result[0]]) # 提取票据中的关键信息 info = extract_info(text) return text, info def process_invoice(image_path): recognized_text, info = ocr_image(image_path) return recognized_text, info if __name__ == "__main__": image_path = 'path_to_your_invoice_image.jpg' recognized_text, invoice_info = process_invoice(image_path) print("识别的文本:\n", recognized_text) print("提取的票据信息:\n", invoice_info)
1.票据样式单一1.1如果是比较特殊的票据或者私有化需求使用百度飞浆服务,自己部署或者调平台的都可以,调OCR接口识别出来后,自己去使用正则或其他工具去匹配识别结果,进行字段提取。当时做过类似需求就是使用这个,本地飞浆OCR配合代码解析。解析效果还行,不过要求识别的时候图片最好不要出现其他非相关文字,不然解析效果不是很理想。可以参考https://zhuanlan.zhihu.com/p/874713861.2通用格式的票据百度AI开放平台或者其他平台都有现成的卡证识别服务,直接就返回json格式更方便2.票据样式多2.1试试百度AI开放平台里面的这个智能结构化,通用场景文字识别——智能结构化。或者使用飞浆提供的模型去尝试一下,比如这个关键信息抽取。 这个方案没有尝试过,具体效果不评价。2.2 在1.1的基础上,对于OCR返回的结果,使用多个方法进行解析,哪个解析成功就返回。也可以将不同样式的票据抽象成不同的模板,再写一个通用的解析方法去解析OCR识别的结果,方法通过解析OCR识别结果和配置好的模板来提取字段返回。一次性解析多个模板,哪个匹配成功就返回结果。
推荐使用Python+PaddleOCR
1.
path_to_your_invoice_image.jpg
改成自己的图片路径2.提取票据的信息根据正则表达式匹配