使用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”)

形象

输出:

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

设置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)

打印(文本)

输出:

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

在自定义配置中,您可以看到**”eng”表示英语,也就是说,它可以识别英文字母。您还可以添加多种语言。”P”表示页面分割**。它设置块如何识别字符。”OEM”是默认配置。

现在,我们将用空字符串替换提取的文本中不必要的符号

#从图像中提取文本并从字符中删除不相关的符号

尝试:

text=pytesseract.image_到_字符串(image,lang=”eng”)

字符_到_删除=”()@—*”>+-/,'£#%$&^_~"

新_字符串=文本

对于字符__至__中的字符,请删除:

new_string=new_string.replace(字符,””)

打印(新字符串)

除了IOError为e:

输出:

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

在下面的单元格中,我们将图像读取为OpenCV格式,以便进一步处理。当我们需要从复杂图像中提取文本时,这是必要的。

现在我们将执行OpenCV操作以从复杂图像中获取文本。

image=cv2.imread(‘sample.png’)#将以数组格式读取

输出:

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

将图像转换为灰度图像使其处理起来不那么复杂,因为它只有两个值,即0和1。这里我们使用cv2.cvtColor()方法将彩涩图像转换为灰阶格式,而cv2.cvtColor实际上可以帮助图像的150涩转换。

灰度图像

def get _灰度(图像):

返回cv2.cvtColor(图像,cv2.COLOR_BGR2GRAY)

灰度=获取_灰度(图像)

图像.fromarray(灰涩)

输出:

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

现在我们将模糊图像,以便从图像中去除噪声。这里,我们使用函数cv2.medianBlur()来减少图像中的噪声**。**模糊基本上是一种通过应用相关平滑滤波器来平滑图像的技术,这是图像处理中广泛使用的方法之一。

降噪

def移除_噪声(图像):

return cv2.medianBlur(图像,5)

噪声=去除_噪声(灰涩)

图像.fromarray(灰涩)

输出:

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

我们将在此处执行阈值转换。阈值适用于一个简单的概念,即当像素值低于给定阈值时,颜涩为白涩,否则像素颜涩正好相反,即黑涩。使用的函数是cv2.threshold。

门槛

定义阈值(图像):

#源图像.灰度图像

返回cv2.threshold(图像,0,255,cv2.THRESH_二进制+

cv2.阈值(OTSU)[1]

阈值=阈值(灰涩)

图像.fromarray(阈值)

输出:

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

这里我们正在进行腐蚀转化。腐蚀变换是图像变换中最基本.最重要的步骤之一。腐蚀变换通常适合图像中缺失的形状和网格,这有助于在图像稍微模糊或扭曲时识别字符。这里,我们使用cv2库中的腐蚀()函数进行腐蚀转换。

腐蚀

def腐蚀(图像):

内核=np.ones((5,5),np.uint8)

return cv2.erode(图像,内核,迭代=1)

腐蚀=腐蚀(灰涩)

来自阵列的图像(腐蚀)

输出:

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

在这里,我们将执行形态学变换。形态学变换是最适合于二值图像的技术之一。

形态转化

def打开(图像):

内核=np.ones((5,5),np.uint8)

return cv2.morphologyEx(图像,cv2.MORPH_OPEN,内核)

开口=开口(灰涩)

Image.fromarray(打开)

输出:

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

在这里,我们尝试匹配图像。当我们通过相同的图像进行匹配时,我们得到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)

输出:

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

最后,我们可以围绕特定的模式或单词绘制矩形。

#在特定图案或单词上绘制图案

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)

输出:

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

结论

让我们从学习如何安装tesseract进行文本提取开始。接下来,我们拍摄了一幅图像,并从图像中提取了文本。我们了解到,我们需要使用OpenCV的一些图像转换函数从复杂图像中提取文本。

尾注

我希望您会喜欢这种使用Python逐步学习光学字符识别的方法。

免责声明: 1、本站信息来自网络,版权争议与本站无关 2、本站所有主题由该帖子作者发表,该帖子作者与本站享有帖子相关版权 3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和本站的同意 4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责 5、用户所发布的一切软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 6、您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 7、请支持正版软件、得到更好的正版服务。 8、如有侵权请立即告知本站,本站将及时予与删除 9、本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章和视频仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
600学习网 » 使用Pytesseract进行光学字符识别-600学习网