Python-OpenCV PyteSeract未从裁剪图像中提取字符串

Python-OpenCV PyteSeract未从裁剪图像中提取字符串,python,python-3.x,opencv,tesseract,pdf-extraction,Python,Python 3.x,Opencv,Tesseract,Pdf Extraction,我有一张图片(附件),想从表单中提取某些字段。例如,名字“Sarah”、她的电子邮件地址等。我有感兴趣的区域,它被突出显示,然后被裁剪。出于某种原因,我从图像到字符串的输出显示为空 所需的输出应提取数据。请有人给我指一下正确的方向好吗? 以下是关于上下文的精彩教程: 代码如下: import cv2 import numpy as np import pytesseract import os pytesseract.pytesseract.tesseract_cmd = r'Tesserac

我有一张图片(附件),想从表单中提取某些字段。例如,名字“Sarah”、她的电子邮件地址等。我有感兴趣的区域,它被突出显示,然后被裁剪。出于某种原因,我从图像到字符串的输出显示为空

所需的输出应提取数据。请有人给我指一下正确的方向好吗? 以下是关于上下文的精彩教程:

代码如下:


import cv2
import numpy as np
import pytesseract
import os
pytesseract.pytesseract.tesseract_cmd = r'Tesseract-OCR\tesseract.exe'

imgQ = cv2.imread('sarah.png')

#cv2.imshow('output',imgQ)
#cv2.waitKey(0)

roi = [[(98, 984), (680, 1074), 'text', 'Name'],
       [(740, 980), (1320, 1078), 'text', 'Phone'],
       [(100, 1418), (686, 1518), 'text', 'Email'],
       [(740, 1416), (1318, 1512), 'text', 'ID'],
       [(110, 1598), (676, 1680), 'text', 'City'],
       [(748, 1592), (1328, 1686), 'text', 'Country']]

myData=[]
for x,r in enumerate(roi):
        #highlighted the regions
        cv2.rectangle(imgQ, (r[0][0],r[0][1]),(r[1][0],r[1][1]),(0,255,0),cv2.FILLED)
        imgShow = cv2.addWeighted(imgQ,0.99,imgQ,0.1,0)
        #crop regions
        imgCrop = imgShow[r[0][1]:r[1][1], r[0][0]:r[1][0]]
        cv2.imshow(str(x),imgCrop)
        if r[2] == 'text':

            print('{} :{}'.format(r[3],pytesseract.image_to_string(imgCrop)))
            myData.append(pytesseract.image_to_string(imgCrop))
print(myData)    
            


代码中的问题如下所示:

cv2.矩形(img,(r[0][0],r[0][1]),(r[1][0],r[1][1]),(0,255,0),cv2.填充)
  • 这行执行什么

查找给定图像中的roi并用绿色填充。比如:

然后,您尝试从这个绿色矩形中读取
枚举(roi)
次的数据


  • 其次,为什么
    imgShow=cv2.addWeighted(img,0.99,img,0.1,0)

  • 第三个
    imgCrop=imgShow[r[0][1]:r[1][1],r[0][0]:r[1][0]

我们从
img
裁剪怎么样

输出是

Name :Sarah

Phone :+ (00) 765-43-21

Email :sarah@abc.com

ID :1356856

City :London

Country :United Kingdom
代码:


导入cv2
从PyteSeract导入图像到字符串
img=cv2.imread(“hzt5U.png”)
#gry=cv2.CVT颜色(img,cv2.COLOR\u BGR2GRAY)
#thr=cv2.自适应阈值(gry,255,cv2.自适应阈值平均值,cv2.阈值二进制值,21,21)
#txt=图像到字符串(thr,config=“--psm 6”)
#打印(txt)
投资回报率=[(98984),(6801074),“文本”,“名称”],
[(740980),(13201078),“文本”,“电话”],
[(1001418),(6861518),“文本”,“电子邮件”],
[(7401416),(13181512),“文本”,“ID”],
[(1101598),(6761680),“文本”,“城市”],
[(7481592),(13281686),“文本”,“国家]]
我的_数据=[]
对于枚举中的x,r(roi):
#突出显示了这些区域
#cv2.矩形(img,(r[0][0],r[0][1]),(r[1][0],r[1][1]),(0255,0),cv2.填充)
#imgShow=cv2.addWeighted(img,0.99,img,0.1,0)
#作物区
#imgCrop=imgShow[r[0][1]:r[1][1],r[0][0]:r[1][0]
imgCrop=img[r[0][1]:r[1][1],r[0][0]:r[1][0]]
imwrite(“/Users/ahx/Desktop/res{}.png.”格式(x),imgCrop)
cv2.imshow(str(x),imgCrop)
cv2.等待键(0)
如果r[2]=“文本”:
打印(“{}:{}.”格式(r[3],图像到字符串(imgCrop)))
my_data.append(图像_到_字符串(imgCrop))
#打印(my_数据)

代码中的问题如下所示:

cv2.矩形(img,(r[0][0],r[0][1]),(r[1][0],r[1][1]),(0,255,0),cv2.填充)
  • 这行执行什么

查找给定图像中的roi并用绿色填充。比如:

然后,您尝试从这个绿色矩形中读取
枚举(roi)
次的数据


  • 其次,为什么
    imgShow=cv2.addWeighted(img,0.99,img,0.1,0)

  • 第三个
    imgCrop=imgShow[r[0][1]:r[1][1],r[0][0]:r[1][0]

我们从
img
裁剪怎么样

输出是

Name :Sarah

Phone :+ (00) 765-43-21

Email :sarah@abc.com

ID :1356856

City :London

Country :United Kingdom
代码:


导入cv2
从PyteSeract导入图像到字符串
img=cv2.imread(“hzt5U.png”)
#gry=cv2.CVT颜色(img,cv2.COLOR\u BGR2GRAY)
#thr=cv2.自适应阈值(gry,255,cv2.自适应阈值平均值,cv2.阈值二进制值,21,21)
#txt=图像到字符串(thr,config=“--psm 6”)
#打印(txt)
投资回报率=[(98984),(6801074),“文本”,“名称”],
[(740980),(13201078),“文本”,“电话”],
[(1001418),(6861518),“文本”,“电子邮件”],
[(7401416),(13181512),“文本”,“ID”],
[(1101598),(6761680),“文本”,“城市”],
[(7481592),(13281686),“文本”,“国家]]
我的_数据=[]
对于枚举中的x,r(roi):
#突出显示了这些区域
#cv2.矩形(img,(r[0][0],r[0][1]),(r[1][0],r[1][1]),(0255,0),cv2.填充)
#imgShow=cv2.addWeighted(img,0.99,img,0.1,0)
#作物区
#imgCrop=imgShow[r[0][1]:r[1][1],r[0][0]:r[1][0]
imgCrop=img[r[0][1]:r[1][1],r[0][0]:r[1][0]]
imwrite(“/Users/ahx/Desktop/res{}.png.”格式(x),imgCrop)
cv2.imshow(str(x),imgCrop)
cv2.等待键(0)
如果r[2]=“文本”:
打印(“{}:{}.”格式(r[3],图像到字符串(imgCrop)))
my_data.append(图像_到_字符串(imgCrop))
#打印(my_数据)

不确定我是否解释清楚,但我只想从框中提取文本,因此名称Sarah、电话号码、电子邮件地址等是我定义roi的原因,但由于某些原因我无法提取。现在我明白了。更新了我的答案。不确定我是否解释清楚,但我只想从框中提取文本,因此名称Sarah,或电话号码,电子邮件地址等,这就是我定义roi的原因,但是由于某些原因我无法提取。现在我明白了。更新了我的答案。