不使用pytesseract库,将图片上的文字按照表格的形式提取python
时间: 2024-09-18 18:09:38 浏览: 71
如果你不想使用第三方库如`pytesseract`来从图片中提取文本,并希望按表格形式处理,可以考虑使用Python的PIL(Pillow)库以及一些图像处理技术,如二值化、边缘检测、膨胀腐蚀等来定位表格边界。然后,你可以利用`PIL`的切割功能来划分每个单元格,再分别提取每个单元格的文字。
以下是基本步骤:
1. **导入所需库**:
```python
from PIL import Image, ImageEnhance, ImageOps
import numpy as np
```
2. **加载和预处理图片**:
```python
img = Image.open('image.jpg')
enhancer = ImageEnhance.Contrast(img)
img_contrasted = enhancer.enhance(contrast_factor)
# 可能需要二值化和阈值处理
bw_img = img_contrasted.convert("L") # 转为灰度图
threshold = 150
bw_img = ImageOps.invert(bw_img.point(lambda p: 0 if p < threshold else 255))
```
3. **检测表格边界**:
这部分可能需要一些图像分析技巧,比如找出水平和垂直线的位置。一种简单的方式是使用Sobel算子或Canny边缘检测算法。
4. **切分单元格并提取文字**:
根据找到的边界信息,分割图片成多个小区域,对每个区域进行OCR(光学字符识别),例如使用`PIL`的`getbbox()`函数获取文字区域的坐标,然后再次读取这部分区域的文字。
```python
def extract_text_from_cell(cell_image):
cell_text = cell_image.crop(cell_box).convert("RGB")
return pytesseract.image_to_string(cell_text) # 这里假设你有其他方式替换pytesseract
# 实际上这一步可能需要更复杂的算法或库,如Ocropy或Tesseract提供API
table_text = []
for row in rows:
table_row = [extract_text_from_cell(row[i:i + column_width]) for i in range(0, len(row), column_width)]
table_text.append(table_row)
```
请注意,以上步骤并不完美,实际效果取决于图片质量和复杂性,可能需要不断调整参数和优化算法。此外,如果你对OCR有兴趣,可能要考虑研究下专门为此设计的库,如`tabula-py`,它针对PDF表格提取更有针对性。
阅读全文