一种表格图片识别的思路(OCR)

    去年刚毕业工作不久接到一个工作任务是做表格图片的OCR,当时公司已经用上了业界很成熟的解决法案,用的是泰比,由于上个之前同事做时候没有把交互做好,用户体验不好,后来把交互修改后,体验好了不少,但对比一些专门做OCR的微信小程序比速度慢不少。
    我们的目标是既块又准,由于公司规模小,各方面资源有限,我当时还是从各大通用OCR(谷歌,百度,腾讯,阿里,汉王等等)开始尝试,开源的tesseract识别效果和速度都有点差强人意,国内几家尝试下来百度是效果最好(百度AI就是牛逼啊),但是百度的表格识别效果是不如泰比的,而且费用很贵,一次调用就要三毛钱,不可接受。无意尝试了一下百度的通用OCR,意外发现精确识别的效果惊人,而且带所有字符的位置信息,突然一个想法蹦了出来,把表格图片框线识别出来,再根据字符位置关系,把识别结果组成一个表格不就行了。马上行动起来,由于之前做的复杂网络和图像没有半毛钱关系,恶补了几天的图像处理,做出来之后速度提升了好几倍,感觉还是挺爽的,当然还是存在一些问题的,比如对一个表格单元内有多行文字图片不友好。目前正在最第二版,希望可以识别效果更上一层楼。

### 回答1: 答案:import cv2 import pytesseract# 加载图像并将其转换为灰度 image = cv2.imread("table.png") gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 应用滤镜,然后通过 OCR 识别文本 blurred = cv2.GaussianBlur(gray, (5,5), 0) thresh = cv2.threshold(blurred, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]# 展示识别的文本 data = pytesseract.image_to_data(thresh, output_type=pytesseract.Output.DICT) print(data) ### 回答2: OCR(Optical Character Recognition)图片识别表格的程序代码如下所示: 1. 导入相关库和模块: ```python import pytesseract import cv2 import numpy as np from PIL import Image ``` 2. 读取并预处理图像: ```python # 读取图像 image = cv2.imread("table_image.jpg") # 灰度化处理 gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 应用二值化处理 _, threshold_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY) # 删除噪声 kernel = np.ones((3, 3), np.uint8) processed_image = cv2.morphologyEx(threshold_image, cv2.MORPH_OPEN, kernel) ``` 3. 转为PIL图像对象,并进行OCR识别: ```python # 将图像转为PIL对象 pil_image = Image.fromarray(processed_image) # 运行OCR识别表格 table_data = pytesseract.image_to_string(pil_image, config='--psm 6') # 打印识别结果 print(table_data) ``` 注:上述代码假设已安装了相关的Python库和依赖项(如pytesseract、OpenCV、numpy、PIL等),并且图片文件"table_image.jpg"位于当前工作目录下。 该程序代码通过使用pytesseract库对图片进行OCR识别,将图像转为灰度图像,并应用二值化处理,然后使用形态学开运算来删除噪声,最后通过pytesseract的image_to_string函数将图像转为文字,并打印识别结果。 ### 回答3: OCR图片识别表格一种图片中的表格信息转换成可编辑文本的技术。下面是一个简单的OCR图片识别表格的程序代码示例: ```python import cv2 import pytesseract # 读取图片并进行预处理 image = cv2.imread("table.png") gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) gray = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1] # 使用pytesseract进行OCR识别 text = pytesseract.image_to_string(gray, lang='eng', config='--psm 6') # 将识别结果按行分割 lines = text.split('\n') # 提取表格内容 table = [] for line in lines: row = line.split('\t') table.append(row) # 打印表格内容 for row in table: print(row) ``` 上述代码使用了Python中的OpenCV库和pytesseract库。首先,我们通过`cv2.imread`函数读取了一张包含表格图片,并将其转换成灰度图像。然后,我们对图像进行了二值化处理,以便更好地提取表格的内容。 接下来,我们使用`pytesseract.image_to_string`函数调用Tesseract引擎,对预处理后的图像进行OCR识别识别结果被存储在变量`text`中。 识别结果是一个包含所有识别文本的字符串。我们通过`split`函数按行分割字符串,并使用制表符`'\t'`将每行文本分割成一个列表。 最后,我们遍历表格的每一行,并打印出表格的内容。 请注意,这只是一个简单的示例代码,实际应用中可能需要更多的图像处理和文本处理步骤,以及更多的参数调整来优化识别结果。
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值