Python 如何将从图像中提取的文本数据制成表格?

Python 如何将从图像中提取的文本数据制成表格?,python,image,opencv,text,python-tesseract,Python,Image,Opencv,Text,Python Tesseract,我使用OpenCV和PyteseRact从图像中提取文本,但我正在寻找一种将文本数据制成表格的方法,将其提取到TXT或CSV文件中。目前,Python的输出以段落形式混合在一起 输入图像: 到目前为止,我使用的代码是: 这是我现在得到的输出: 我期望的结果是: 我假设,您的屏幕截图与提供的截图类似,即内容——主要是——总是相同的,有“Lokasi”、“Nama”等字段 裁剪图像的中央白色部分,然后运行pytesseract。产出——主要是——也应该始终保持不变。您会得到一些带有中间双新行的

我使用OpenCV和PyteseRact从图像中提取文本,但我正在寻找一种将文本数据制成表格的方法,将其提取到TXT或CSV文件中。目前,Python的输出以段落形式混合在一起

输入图像:

到目前为止,我使用的代码是:

这是我现在得到的输出:

我期望的结果是:


我假设,您的屏幕截图与提供的截图类似,即内容——主要是——总是相同的,有“Lokasi”、“Nama”等字段

裁剪图像的中央白色部分,然后运行
pytesseract
。产出——主要是——也应该始终保持不变。您会得到一些带有中间双新行的字符串,您可以将其替换为单个新行,然后在新行处拆分该字符串。剩下的是对单个提取行的内容进行一些解析,并适当地存储值,例如在一些简单的字典中

下面是一些代码:

导入cv2
将numpy作为np导入
导入pytesseract
#读取图像
img=cv2.imread('6cO7N.jpg',cv2.imread_灰度)
#从图像中裁剪中心白色部分
掩码=(img==255).aType(np.uint8)*255
掩模=cv2.morphologyEx(掩模,cv2.Morpho_开放,np.full((11,11),255))
掩模=cv2.morphologyEx(掩模,cv2.MORPH_CLOSE,np.full((21,21,255))
x、 y,w,h=cv2.boundingRect(掩码)
img=img[y:y+h,x:x+w]
#提取文本、替换双新行和拆分行
lines=pytesseract.image_to_string(img)。替换('\n\n','\n')。拆分('\n'))
#用于返回具有给定内容的行的索引的Helper函数
def get_idx(文本、目标):
如果文本[idx]==target][0],则返回范围内idx的[idx(文本)]
#从行中提取数据
idx_nama_no_telefon=获取idx(行“nama no.telefon”)
nama_no_telefon=行[idx_nama_no_telefon+1]。拆分(+)
nama=nama_no_telefon[0][:-1]
idx_tarikh_masa=get_idx(行“tarikh masa”)
对于范围内的i(idx_nama_no_telefon+2,idx_tarikh_masa):
nama=nama+“”+行[i]
tarikh_masa=行[idx_tarikh_masa+1]。拆分(“”)
#在某些结构中存储数据-如果需要
数据={'Check-in':行[0],
“Lokasi”:行[get_idx(行,'Lokasi')+1],
“纳米”:纳米,
“No.Telefon”:“+”+nama_No_Telefon[1],
“Tarikh:”.加入(Tarikh_masa[:3]),
“Masa:”.加入(tarikh_Masa[3:]),
'Risiko':行[get_idx(lines,'Risiko')+1]}
#根据需要打印数据
对于列表中的k,v(zip(data.keys(),data.values())[1:]:
打印(“{}:{}.”格式(k,v))
因为我不知道名称可以出现多少行(我猜是!?),所以有一个循环来收集它的所有部分

目前的产出将是:

Lokasi:PERSATUAN PERJIRANAN PARKVIEW
纳马:阿巴马努A/L奇坦巴拉姆
电话号码:+60127658504
塔里克:2021年5月19日
玛莎:下午7:32:35
Risiko:低
注意:这是一个非常硬编码的解决方案,依赖于声明的假设。即使输入图像中的微小改变也可能导致错误输出

----------------------------------------
系统信息
----------------------------------------
平台:Windows-10-10.0.19041-SP0
Python:3.9.1
PyCharm:2021.1.1
努比:1.19.5
OpenCV:4.5.2
比重瓶:5.0.0-alpha.20201127
----------------------------------------

您没有向我们展示您正在收集的数据,也没有展示您希望这些数据的外观。您好@TimRoberts请立即检查。请提供输入图像,并将您的代码复制粘贴到您的问题中作为文本。@HansHirse我尝试上载代码,但不确定为什么失败。我将在这里上传代码。pytesseract.pytesseract.tesseract\u cmd='C:\\Program Files\\tesseract OCR\\tesseract.exe'img=cv2.imread('camera.jpg')img=cv2.cvtColor(img,cv2.COLOR\u BGRA2GRAY)print(pytesseract.image\u to\u字符串(img))extract=pytesseract.image\u to\u字符串(img)f=open('test.txt,'w'))f.write(extract)f.close f=open('test.txt,'r'))注意=f.read()这是一个简单的字符串处理问题。你就像做一个人一样。如果你看到“Lokasi”,那么你会记得“下一个喜欢的将是公司”。等等