opencv实战---使用TesseractOCR进行文字识别

这篇具有很好参考价值的文章主要介绍了opencv实战---使用TesseractOCR进行文字识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是tesseractOCR?

  • TesseractOCR 是一款由HP实验室开发由 Google 维护的开源 OCR(Optical Character Recognition , 光学字符识别)引擎。
  • 简单点说,就是用来做字符识别的,可以识别超过100种语言。也可以用来训练其他的语言。
  • 听起来不错,但识别的准确率让人恼火。于是,有人训练出了自己的识别库。

这篇就讲解一下软件安装、使用自带的识别库识别常规的英文字符、英文单词、数字。

目录

tesseract下载与安装:

1、软件下载(后面会放我自己下载好的网盘链接,可以自行下载):

2、软件安装:

3、环境变量的设置:

识别时所需要的库:

英文字符的识别:

1、先导入咱们安装好的tesseract软件以及所需要识别的图片。

2、识别。

3、在图片上面框选出字符,并且将字符的识别结果显示在图片上。

完整代码:

英文单词的识别:

 完整代码:

数字的识别:

完整代码:


软件:pycharm

opencv实战---使用TesseractOCR进行文字识别

tesseract下载与安装:

1、软件下载(后面会放我自己下载好的网盘链接,可以自行下载):

这里是tesseract的下载官网,任意版本的都可以,但不要下载带有dev标识的版本。

没有速度快的梯子的话,速度会很慢。但我没有梯子,好像就下了十来分钟左右。

2、软件安装:

这里就必须强调有无梯子的事了。

双击下载好的exe文件,一路next,直到这个界面注意一下:

opencv实战---使用TesseractOCR进行文字识别

  • 如果你对自己的梯子速度很有自信的话,请勾选上红色框出来的两项。然后不停的点击next,直到安装成功。
  • 如果没有,那咱就不要勾选 。后面也是一路无障碍的安装成功。接下来,咱进入这个github链接,下载所有的文件。下载好压缩包之后,解压,将里面所有的文件都放进刚刚安装tesseract的文件夹里的tessdata里面。

opencv实战---使用TesseractOCR进行文字识别

3、环境变量的设置:

按顺序点击:此电脑---属性---高级系统设置---环境变量。

选中path那一行,点击“编辑”。

opencv实战---使用TesseractOCR进行文字识别

在弹窗内点击“新建”,将安装tesseract软件的文件夹的绝对路径放进去。我这里是D:\OpencvPython\01使用tessdoc进行文本检测\tesseract。

确定之后,在此界面点击“新建”:

opencv实战---使用TesseractOCR进行文字识别

输入变量名和变量值:(变量值是tesseract软件下面的tessdata文件的绝对路径)

变量名:TESSDATA_PREFIX

变量值:D:\OpencvPython\01使用tessdoc进行文本检测\tesseract\tessdata

剩下的就是不停的点击确定。环境变量设置结束。

在cmd里输入:tesseract --version       

出现版本号了就是下载成功了。

opencv实战---使用TesseractOCR进行文字识别

这是我自己下载好的软件和压缩包的网盘链接,自行下载:

链接:https://pan.baidu.com/s/1-dP6-QauGDjBsvo8v8_Gyw 
提取码:cimx

识别时所需要的库:

import cv2
import pytesseract

英文字符的识别:

1、先导入咱们安装好的tesseract软件以及所需要识别的图片。

这里注意一下:tesseract只能识别RGB格式的图片,而opencv导进来的图片是BGR格式的。

pytesseract.pytesseract.tesseract_cmd = 'D:\\OpencvPython\\01使用tessdoc进行文本检测\\tesseract\\tesseract.exe'
img = cv2.imread('eng.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

图片:

opencv实战---使用TesseractOCR进行文字识别

2、识别。

text = pytesseract.image_to_string(img)
print(text)

结果:(挺成功的)

opencv实战---使用TesseractOCR进行文字识别

3、在图片上面框选出字符,并且将字符的识别结果显示在图片上。

hImg, wImg, _ = img.shape
boxes = pytesseract.image_to_boxes(img)
for b in boxes.splitlines():
    b = b.split(' ')
    x1, y1, x2, y2 = int(b[1]), int(b[2]), int(b[3]), int(b[4])
    cv2.rectangle(img, (x1,hImg-y1), (x2, hImg-y2), (0, 0, 255), 2)
    cv2.putText(img, b[0], (x1, hImg-y1+25), cv2.FONT_HERSHEY_SIMPLEX, 1, (50, 50, 255), 2)

 结果:

opencv实战---使用TesseractOCR进行文字识别

来拆解一下这组代码的含义: 

hImg, wImg, _ = img.shape
boxes = pytesseract.image_to_boxes(img)

img,shape输出的是原始图片img的高度、宽度、纬度

boxes如下图所示,里面包含着每个字符的识别结果和该字符所在的位置信息。

比如:H 32 58 75 99 。含义依次是左下角横坐标,左下角纵坐标,右上角横坐标,右上角纵坐标。这个位置信息需要额外注意一下:pytesseract.image_to_boxes的坐标系原点在左下角,而opencv的坐标系原点在左上角。

opencv实战---使用TesseractOCR进行文字识别

要想从这些字符串里面取出来数据,引入一个for循环。

for b in boxes.splitlines():  #  这里将boxes的元素一行一行地取出

for b in boxes.splitlines():

        b = b.split(' ')           #   这里将b里面的元素,出现空格就分开

b里面的数据:

opencv实战---使用TesseractOCR进行文字识别

再次强调:pytesseract.image_to_boxes的坐标系原点在左下角,而opencv的坐标系原点在左上角。

将坐标转换成opencv里面需要的坐标。

先小结一下相关变量的含义:

hImg : 图片的总高度;              wImg : 图片的总宽度

x1: 字符的左下角横坐标;       y1:字符的左下角纵坐标

x2: 字符的左上角横坐标;       y2:字符的左上角纵坐标

大概画一张图:

opencv实战---使用TesseractOCR进行文字识别

根据线段长度之类的转换,很成功地得到了坐标。

使用cv2.rectangle函数,画出外框。

  • 对于cv2.rectangle函数有个新发现:之前一直以为参数必须是左上角和右下角的坐标确定方框的位置,但现在通过实验验证,是通过确定对角线的方式画出矩形的。无论是主对角线还是副对角线,都可以画出来。

使用cv2.putText放置文本内容。

最后的结果为:

opencv实战---使用TesseractOCR进行文字识别

完整代码:

import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = 'D:\\OpencvPython\\01使用tessdoc进行文本检测\\tesseract\\tesseract.exe'
img = cv2.imread('eng.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

text = pytesseract.image_to_string(img)
print(text)

hImg, wImg, _ = img.shape
boxes = pytesseract.image_to_boxes(img)
for b in boxes.splitlines():
    b = b.split(' ')
    x1, y1, x2, y2 = int(b[1]), int(b[2]), int(b[3]), int(b[4])
    cv2.rectangle(img, (x1,hImg-y1), (x2, hImg-y2), (0, 0, 255), 2)
    cv2.putText(img, b[0], (x1, hImg-y1+25), cv2.FONT_HERSHEY_SIMPLEX, 1, (50, 50, 255), 2)
cv2.imshow('Result', img)
cv2.waitKey(0)

英文单词的识别:

如何做到把字符连起来形成单词的样子?

和英文字符的识别差别只在第三步。这里就放上第三步的代码。

hImg, wImg, _ = img.shape
boxes = pytesseract.image_to_data(img)
print(boxes)
for x,b in enumerate(boxes.splitlines()):
    if x!=0:
        b = b.split()
        print(b)
        if len(b)==12:
            x1, y1, x2, y2 = int(b[6]), int(b[7]), int(b[8]), int(b[9])
            cv2.rectangle(img, (x1,y1), (x1+x2, y1+y2), (0, 0, 255), 3)
            cv2.putText(img, b[11], (x1,y1), cv2.FONT_HERSHEY_SIMPLEX, 1, (50, 50, 255), 2)

这里调用的函数是 image_to_data,前面调用的函数是image_to_boxes。

boxes = pytesseract.image_to_data(img)

这个函数输出的boxes就多样化了,但咱只需要第7、8、9、10、12列的数据。

opencv实战---使用TesseractOCR进行文字识别

 for循环的语句里

boxes.splitlines()还是将boxes按行分开

而enumerate(a)函数会将a里的每一个元素单独拆分出来,并且加上索引,以元组的形式返回。

所以,for x,b in enumerate(boxes.splitlines()),x放的是索引号。后面再加上一个x!=0的条件句,就是为了去掉boxes里第一行的“level、page_num、block_num...”。

再看看boxes里面的十二列数据,会发现有的行只有11个数据,-1代表没有识别出东西来。而能够识别出来的都会有12个数据,咱需要的也就是有12个数据的那些行,因此又有了len(b)==12的条件句。

剩下的三行代码和识别字符一样的含义。

最后识别英文单词的结果:

opencv实战---使用TesseractOCR进行文字识别

 完整代码:

import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = 'D:\\OpencvPython\\01使用tessdoc进行文本检测\\tesseract\\tesseract.exe'
img = cv2.imread('eng.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

text = pytesseract.image_to_string(img)
print(text)

hImg, wImg, _ = img.shape
boxes = pytesseract.image_to_data(img)
print(boxes)
for x,b in enumerate(boxes.splitlines()):
    if x!=0:
        b = b.split()
        print(b)
        if len(b)==12:
            x1, y1, x2, y2 = int(b[6]), int(b[7]), int(b[8]), int(b[9])
            cv2.rectangle(img, (x1,y1), (x1+x2, y1+y2), (0, 0, 255), 3)
            cv2.putText(img, b[11], (x1,y1), cv2.FONT_HERSHEY_SIMPLEX, 1, (50, 50, 255), 2)
cv2.imshow('Result', img)
cv2.waitKey(0)

数字的识别:

其实在英文字符的识别里面,就可以完成对数字的识别了。

识别的结果:

opencv实战---使用TesseractOCR进行文字识别

 使用英文字符识别的代码,既有英文又有数字的识别结果:

opencv实战---使用TesseractOCR进行文字识别

但你要是只想识别出数字:

那就在boxes那里加个限制条件:让oem为3,psm为6。

cong = r'--oem 3 --psm 6 outputbase digits'

boxes = pytesseract.image_to_boxes(img, config=cong) 

-oem 参数控制OCR的引擎模式,控制由超正方体使用的算法类型。

oem的数值代表的模式:

opencv实战---使用TesseractOCR进行文字识别

-psm 参数控制tesseract使用的自动页面分割模式。

psm的数值代表的模式:

opencv实战---使用TesseractOCR进行文字识别

 识别结果:

opencv实战---使用TesseractOCR进行文字识别

很明显,加上了限制条件,它确实只能够识别准确数字,其他类型的东西效果很不理想,甚至不能识别(理论上是不能识别的)。文章来源地址https://www.toymoban.com/news/detail-439356.html

完整代码:

import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = 'D:\\OpencvPython\\01使用tessdoc进行文本检测\\tesseract\\tesseract.exe'
img = cv2.imread('eng.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

text = pytesseract.image_to_string(img)
print(text)

hImg, wImg, _ = img.shape
cong = r'--oem 3 --psm 6 outputbase digits'
boxes = pytesseract.image_to_boxes(img, config=cong)
for b in boxes.splitlines():
    b = b.split(' ')
    x1, y1, x2, y2 = int(b[1]), int(b[2]), int(b[3]), int(b[4])
    cv2.rectangle(img, (x1,hImg-y1), (x2, hImg-y2), (0, 0, 255), 2)
    cv2.putText(img, b[0], (x1, hImg-y1+25), cv2.FONT_HERSHEY_SIMPLEX, 1, (50, 50, 255), 2)
cv2.imshow('Result', img)
cv2.waitKey(0)

到了这里,关于opencv实战---使用TesseractOCR进行文字识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Python进行语音识别:将音频转为文字

    语音识别是一项将语音信号转换为可理解的文本的技术。在Python中,我们可以使用一些库和工具来实现语音识别,并将音频转换为文本。本文将介绍如何使用Python进行语音识别的过程,并提供相应的源代码。 步骤1:安装所需的库 首先,我们需要安装一些Python库来支持语音识

    2024年02月03日
    浏览(59)
  • 计算机视觉实战--OpenCV进行红绿灯识别

    前言: Hello大家好,我是Dream。 OpenCV是一个开源的计算机视觉库 ,可以用于实现各种图像和视频处理任务,包括红绿灯识别。可以帮助自动驾驶汽车、智能交通系统等设备准确地识别红绿灯的状态,以便做出正确的决策。今天,就有Dream带领大家复盘一下计算机视觉中最经典

    2024年02月07日
    浏览(47)
  • 【Python 实战】---- 批量识别图片中的文字,存入excel中【使用百度的通用文字识别】

    1. 获取信息图片示例 2. 运行实例 3. 运行结果 4. 各个文件的位置 1. 需求分析 识别图片中的文字【采用百度的通用文字识别】; 文字筛选,按照分类获取对应的文本; 采用 openpyxl 实现将数据存入 excel 中。 2. 获取 access_token 获取本地缓存的

    2024年02月15日
    浏览(48)
  • java使用tesseract-ocr进行文字识别

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 公司使用AI进行OCR文字识别效果不好,并且提供的服务不稳定,本次查找到使用java也能连接的OCR开源项目进行识别的学习 tesseract-ocr是一个开源的OCR文字识别项目,目前版本已经更新到5.X.X了,并且提供

    2024年02月04日
    浏览(43)
  • Go语言使用gosseract 库来进行图像文字识别,识别出来的中文是乱码的?如何解决?

    如果您在使用 gosseract 库进行图像文字识别时,得到的中文文字是乱码,可能是因为默认情况下 gosseract 以及 Tesseract 引擎并不支持中文字符的识别。要解决这个问题,您需要进行一些配置和设置。 以下是解决方案的步骤: 1 安装 Tesseract 和 Language Data :确保您已经安装了 Te

    2024年02月02日
    浏览(55)
  • OpenCV项目开发实战--实现面部情绪识别对情绪进行识别和分类及详细讲解及完整代码实现

    文末提供免费的完整代码下载链接 面部情绪识别(FER) 是指根据 面部表情对人类情绪 进行识别 和 分类 的过程。通过分析面部特征和模式,机器可以对一个人的情绪状态做出有根据的猜测。面部识别的这个子领域是高度跨学科的,借鉴了计算机视觉、机器学习和心理学的见

    2024年02月09日
    浏览(96)
  • 使用Python+OpenCV2进行图片中的文字分割(支持竖版)

    把图片中的文字,识别出来,并将每个字的图片抠出来; 原图片: 分割后文件夹: 可见此时文件都还是数字为文件名称,那么接下来要利用OCR自动给每个文字图片文件命名 我们使用UMIOCR , UMI-OCR的安装建议去GITHUB上查,windows上部署还是很方便的; 这里使用本机安装好的

    2024年02月20日
    浏览(38)
  • 谈谈如何使用 opencv 进行图像识别

    原文由hakaboom发表于TesterHome社区,点击原文链接可与作者直接交流。 从18年开始,我接触了叉叉助手(平台已经被请喝茶了),通过图色识别,用来给常玩的游戏写挂机脚本,写了也有两三年.也算是我转行当游戏测试的理由. 去年11月,也是用了这身技术,混进了外包,薪资还不错,属于是

    2024年02月10日
    浏览(65)
  • Python使用Opencv进行图像人脸、眼睛识别实例演示

    效果展示 下面使用 haarcasecade_eye.xml 进行人眼识别的效果图: 人脸识别是一种可以自动检测图像或视频中存在的人脸的技术。它可以用于各种应用,例如安全控制,自动标记照片和视频,以及人脸识别解锁设备等。在这篇博客中,我们将详细讨论人脸识别技术,以及如何使用

    2023年04月17日
    浏览(57)
  • opencv文字识别

      OpenCV(开源计算机视觉库)是一个用于实现计算机视觉和机器学习的开源库。它包含了许多预先训练的模型和算法,可以帮助开发者快速实现图像处理、对象检测和识别等功能。在文字识别方面,OpenCV也有一些实用的工具和方法。 要在OpenCV中实现文字识别,您可以使用Te

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包