使用Pytesseract进行光学字符识别-600学习网
600学习网终身会员188,所有资源无秘无压缩-购买会员
总结
在本文中,我们将使用计算机视觉技术从图像中提取文本。提取文本后,我们将把OpenCV的一些基本功能应用到文本中,以增强文本并获得更准确的结果。这个项目将非常有用,因为它可以节省图像输入的时间和精力。
范围
·这个应用程序可以为从图像中获取文本的大型组织节省时间。
·它打开了”无纸文档”的世界,这也有助于升级存储。
·它还可以帮助自动化过程,因为它可以从图像本身提取文本。
我们将导入请求库以获取git文件和图像的URL。
#导入请求以安装tesseract
导入请求
注意:要立即下载tesseract文件,只需转到我将在函数中作为参数提供的链接,但我只提供另一种下载tesserct文件的方法。
#下载tesseract-ocr文件
R=请求。获取(“https://raw.githusercontent。com/tesseract-ocr/tessdata/4.00/ind。trainedata”,stream=True)将数据写入文件以避免路径问题
打开(“ind.traineddata”,”wb”)作为文件:
对于r.iter _内容中的块(块_大小=1024):
如果块:
file.write(块)
现在,我们将下载运行Python eract库所需的testseract,并将文件保存在open()函数的路径中。
! pip安装pytesseract
如果你想在笔记本上安装它,这个命令将安装Python模块
已满足要求:c:programdataanaconda3libsite-packages中的pytesseract(0.3.8)
已满足的要求:枕头在c:programdataanaconda3libsite-包中(来自pytesseract)(8.0.1)
在这一步中,我们将安装OCR所需的库,我们还将导入IPython函数以消除不必要的函数。
安装光学字符识别所需的库
! apt安装tesseract-ocr libtesseract-dev libmagickwand-dev
导入IPython以清除不重要的输出
从IPython.display导入HTML,清除_输出
清除_输出()
现在,我们将安装Python和OpenCV库,它们是文本识别的灵魂
安装Python和OpenCV!
pip安装pytesseract棒opencv-python
清除_输出()
导入所需库
#导入库
从PIL导入图像
导入pytesseract
导入cv2
将numpy导入为np
从pytesseract导入输出
进口
在这一步中,我们将打开一个图像以调整其大小,然后再次保存它以供进一步使用和可视化。
从URL读取图像
image=image.open(requests.get(‘https://i.stack.imgur.com/pbIdS.png’,stream=True).raw)
image=image.resize((300150))
image.save(“sample.png”)
形象
输出:
设置tesseract的路径
pytesseract.pytesseract.tesseract_ cmd=r’C:程序文件tesseract-OCRtesseract.exe’
注意:上述命令将在系统配置中设置testseract库的路径。如果未根据系统配置设置路径,即使安装了testseract,也会抛出错误。
这里,我们将使用自定义配置从图像中提取文本。
#简单地从图像中提取文本
自定义配置=r’-l eng--oem 3--psm 6′
text=pytesseract.image_到_字符串(image,config=custom_config)
打印(文本)
输出:
在自定义配置中,您可以看到**”eng”表示英语,也就是说,它可以识别英文字母。您还可以添加多种语言。”P”表示页面分割**。它设置块如何识别字符。”OEM”是默认配置。
现在,我们将用空字符串替换提取的文本中不必要的符号
#从图像中提取文本并从字符中删除不相关的符号
尝试:
text=pytesseract.image_到_字符串(image,lang=”eng”)
字符_到_删除=”()@—*”>+-/,'£#%$&^_~"
新_字符串=文本
对于字符__至__中的字符,请删除:
new_string=new_string.replace(字符,””)
打印(新字符串)
除了IOError为e:
输出:
在下面的单元格中,我们将图像读取为OpenCV格式,以便进一步处理。当我们需要从复杂图像中提取文本时,这是必要的。
现在我们将执行OpenCV操作以从复杂图像中获取文本。
image=cv2.imread(‘sample.png’)#将以数组格式读取
输出:
将图像转换为灰度图像使其处理起来不那么复杂,因为它只有两个值,即0和1。这里我们使用cv2.cvtColor()方法将彩涩图像转换为灰阶格式,而cv2.cvtColor实际上可以帮助图像的150涩转换。
灰度图像
def get _灰度(图像):
返回cv2.cvtColor(图像,cv2.COLOR_BGR2GRAY)
灰度=获取_灰度(图像)
图像.fromarray(灰涩)
输出:
现在我们将模糊图像,以便从图像中去除噪声。这里,我们使用函数cv2.medianBlur()来减少图像中的噪声**。**模糊基本上是一种通过应用相关平滑滤波器来平滑图像的技术,这是图像处理中广泛使用的方法之一。
降噪
def移除_噪声(图像):
return cv2.medianBlur(图像,5)
噪声=去除_噪声(灰涩)
图像.fromarray(灰涩)
输出:
我们将在此处执行阈值转换。阈值适用于一个简单的概念,即当像素值低于给定阈值时,颜涩为白涩,否则像素颜涩正好相反,即黑涩。使用的函数是cv2.threshold。
门槛
定义阈值(图像):
#源图像.灰度图像
返回cv2.threshold(图像,0,255,cv2.THRESH_二进制+
cv2.阈值(OTSU)[1]
阈值=阈值(灰涩)
图像.fromarray(阈值)
输出:
这里我们正在进行腐蚀转化。腐蚀变换是图像变换中最基本.最重要的步骤之一。腐蚀变换通常适合图像中缺失的形状和网格,这有助于在图像稍微模糊或扭曲时识别字符。这里,我们使用cv2库中的腐蚀()函数进行腐蚀转换。
腐蚀
def腐蚀(图像):
内核=np.ones((5,5),np.uint8)
return cv2.erode(图像,内核,迭代=1)
腐蚀=腐蚀(灰涩)
来自阵列的图像(腐蚀)
输出:
在这里,我们将执行形态学变换。形态学变换是最适合于二值图像的技术之一。
形态转化
def打开(图像):
内核=np.ones((5,5),np.uint8)
return cv2.morphologyEx(图像,cv2.MORPH_OPEN,内核)
开口=开口(灰涩)
Image.fromarray(打开)
输出:
在这里,我们尝试匹配图像。当我们通过相同的图像进行匹配时,我们得到99.99%的相似姓。在这里,模板匹配是一种在较大图像中搜索和找到模板图像位置的方法。对于模板匹配,我们使用cv2库中的match-template()函数。
模板匹配
def match _ template(图像,模板):
return cv2.matchTemplate(图像,模板,cv2.TM_CCOEFF_NORMED)
match=match_模板(灰涩.灰涩)
火柴
输出:
数组(〔〔1.〕〕,dtype=float32)
现在我们将通过在文本周围创建一个矩形来分隔文本中的每个字符。
#在文本周围绘制矩形
img=cv2.imread(‘sample.png’)
h. w,c=img.shape
boxes=pytesseract.image_到_boxes(img)
对于boxes.splitlines()中的b:
b=b.split(”)
img=cv2.矩形(img,(int(b〔1〕),h-int(b〕2〕),(int〔b〔3〕),h-int(b〔4〕)),(0,255,0),2)
图像.fromarray(img)
输出:
最后,我们可以围绕特定的模式或单词绘制矩形。
#在特定图案或单词上绘制图案
img=cv2.imread(‘sample.png’)
d=pytesseract.image_到_数据(img,output_type=output.DICT)
keys=list(d.keys())
日期_模式=”人工”
n个框=len(d〔’text’〕)
对于范围(n_个框)中的i:
如果float(d〔’conf’〕〔i〕)>60:
如果重新匹配(日期模式,d〔’文本’〕〔i〕):
(x,y,w,h)=(d〔’左’〕〔i〕,d〔’上’〕〔ii〕,d’宽’〕〔iii〕,d’高’〕〔iv〕)
img=cv2.矩形(img,(x,y),(x+w,y+h),(0,255,0),2)
图像.fromarray(img)
输出:
结论
让我们从学习如何安装tesseract进行文本提取开始。接下来,我们拍摄了一幅图像,并从图像中提取了文本。我们了解到,我们需要使用OpenCV的一些图像转换函数从复杂图像中提取文本。
尾注
我希望您会喜欢这种使用Python逐步学习光学字符识别的方法。
600学习网 » 使用Pytesseract进行光学字符识别-600学习网