Python+OpenCV+Tesseract实现OCR字符识别_python + opencv + tesseract-程序员宅基地

技术标签: python  人工智能  opencv  

目录

一、OCR是什么

二、使用步骤

1.下载tesseract

2.安装pytesseract

3.验证测试

结语

参考


一、OCR是什么

         光学字符识别(英语:Optical Character Recognition,OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。

二、使用步骤

1.下载tesseract

        首先要下载tesseract:Index of /tesseracthttps://digi.bib.uni-mannheim.de/tesseract/

        进入下载页面,可以看到各种exe文件,其中文件名中带有dev的为开发版,不带dev的为稳定版,读者可以按需下载,我这里选择下载5.2.0的版本。

        下载完成后,双击安装,值得注意的是,在安装过程到此页面时,需要勾选“Additional language data(download) ”选项来安装OCR支持识别的语言包,这样OCR便可以识别多国语言。

2.安装pytesseract

   为了能在python中使用tesseract的功能,需要pip安装pytesseract:

pip install pytesseract

        若安装缓慢,可以使用镜像进行安装:

pip install pytesseract -i https://pypi.douban.com/simple

3.验证测试

  接下来,需要验证是否能正常使用OCR功能。使用如下图片为例进行测试:

         测试代码:

from PIL import Image
import pytesseract


text = pytesseract.image_to_string(Image.open('OCR_test.png'), lang='chi_sim')
print(text)

       我们首先利用Image读取了图片文件,然后调用了pytesseract的image_to_string()方法,再将其识别结果输出。

    值得注意的是,image_to_string()方法默认只识别英文,若还要识别中文,添加lang=’chi_sim’参数即可。此外,有可能中文识别出来了,但是乱码,需要相应地将text转换为你所用的中文编码方式,如:text.decode("utf8")就可以了。

       代码运行结果如下:

        如果遇到报错找不到pytesseract,不要慌,问题不大:

             解决方案1:

        1.找到python的安装路径下的pytesseract:

        2.用文本编辑器打开,查找tesseract_cmd

                将原来的 tesseract_cmd = 'tesseract' 改为: tesseract_cmd = 'OCR的安装路径下的tessract.exe'

                例如我的是 tesseract_cmd = r'D:\software\Tesseract-OCR\tesseract.exe'

                注意需要对路径中的斜杠进行转义。

             解决方案2:

                 增加一句代码即可:

from PIL import Image
import pytesseract



# 使用此行代码进行设置,可以不改动pytesseract.py中的源码
pytesseract.pytesseract.tesseract_cmd = r'D:\software\Tesseract-OCR\tesseract.exe'

text = pytesseract.image_to_string(Image.open('OCR_test.png'), lang='chi_sim')
print(text)

结语

        至此,便完成了tesseract的安装与使用,就可以进行OCR识别了。

        若识别效果不好,可二值化图像并消除噪声后再识别,此外,image_to_string()方法还有几个其它的参数,还可尝试更改参数以获得更好的识别效果,参数说明可看下面这篇文章:

Tesseract OCR in Python with Pytesseract & OpenCV (nanonets.com)https://nanonets.com/blog/ocr-with-tesseract/


参考

  1. 光学字符识别 - 维基百科,自由的百科全书 (wikipedia.org)
  2. wxPython利用pytesser模块实现图片文字识别
  3. Python关于tesseract 安装及使用 - 知乎 (zhihu.com)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_54827663/article/details/128051162

智能推荐

邻接矩阵-建立图-程序员宅基地

文章浏览阅读358次。1.介绍图的相关概念  图是由顶点的有穷非空集和一个描述顶点之间关系-边(或者弧)的集合组成。通常,图中的数据元素被称为顶点,顶点间的关系用边表示,图通常用字母G表示,图的顶点通常用字母V表示,所以图可以定义为:  G=(V,E)其中,V(G)是图中顶点的有穷非空集合,E(G)是V(G)中顶点的边的有穷集合1.1 无向图:图中任意两个顶点构成的边是没有方向的1.2 有向图:图中..._给定一个邻接矩阵未必能够造出一个图

IAR调试程序闪退问题_iar在debug时停止工作-程序员宅基地

文章浏览阅读1.7k次。问题:IAR调试STM32程序,点击调试按钮后软件自动关闭,并弹出报错提示框解决:将调试的接口模式改为SWD模式即可。我的原先设置为JTAG模式。_iar在debug时停止工作

100M宽带是多少网速_100m的宽带网速是多少兆-程序员宅基地

文章浏览阅读742次。100兆宽带的网速通常指的是每秒可以传输的数据量为100兆比特(Mb)。在此情况下,1兆比特(Mb)等于100万比特(Mbps),而1字节(B)等于8比特(bps)。因此,100兆宽带的网速可以计算如下:100兆比特/秒=100/8 兆字节/秒= 12.5兆字节/秒所以,100兆宽带的网速约为12.5MBps(兆字节/秒),也可以说为100Mbps(兆比特/秒)。但是需要注意的是,实际的下载和上传速度可能受到各种因素的影响,如网络拥堵、设备性能等。因此,实际使用中您可能会感受到较低的速度。_100m的宽带网速是多少兆

Windows 7 通用 CDC 串口驱动程序_cdcserial驱动 win7-程序员宅基地

文章浏览阅读2.4w次,点赞13次,收藏44次。Windows 7 通用 CDC 串口驱动程序Windows 7 自带 CDC 串口类设备的驱动程序文件 usbser.sys,所缺的是驱动配置文件 usbser.inf 文件,将 Windows 10 的 usbser.inf 文件拷贝到 Windows 7,注释掉 SourceDisksNames 和 SourceDisksFiles 部分就可以作为 Windows 7 的 CDC 串口类..._cdcserial驱动 win7

AI遮天传 NLP-词表示_nlp中词语的表示-程序员宅基地

文章浏览阅读2.5k次,点赞53次,收藏51次。NLP-词表示_nlp中词语的表示

sed 替换多个空格为一个-程序员宅基地

文章浏览阅读2.4k次。sed -i 's/[ ][ ]*/ /g' file.txt _sed 多个空格替换为1个

随便推点

什么是算法?-程序员宅基地

文章浏览阅读1.7w次,点赞15次,收藏129次。算法(algorithm)是解决一系列问题的清晰指令,也就是,能对一定规范的输入,在有限的时间内获得所要求的输出。 简单来说,算法就是解决一个问题的具体方法和步骤。算法是程序的灵 魂。二、算法的特征1.可行性 算法中执行的任何计算步骤都可以分解为基本可执行的操作步,即每个计算步都可以在有限时间里完成(也称之为有效性) 算法的每一步都要有确切的意义,不能有二义性。例如“增加x的值”,并没有说增加多少,计算机就无法执行明确的运算。 _算法

【网络安全】网络安全的标准和规范_网络安全标准规范-程序员宅基地

文章浏览阅读1.5k次,点赞18次,收藏26次。网络安全的标准和规范是网络安全领域的重要组成部分。它们为网络安全提供了技术依据,规定了网络安全的技术要求和操作方式,帮助我们构建安全的网络环境。下面,我们将详细介绍一些主要的网络安全标准和规范,以及它们在实际操作中的应用。_网络安全标准规范

Windows上的巧克力味Chocolatey详解_chocolate怎么卸载-程序员宅基地

文章浏览阅读1.5k次。Chocolatey是什么?很简单,Chocolatey就是Windows系统的yum或apt-get。一、Chocolatey介绍Chocolatey是一款专为Windows系统开发的、基于NuGet的包管理器工具,类似于Node.js的npm,MacOS的brew,Ubuntu的apt-get,它简称为choco。Chocolatey的设计目标是成为一个去中心化的框架,便于开发_chocolate怎么卸载

关于Python的三个谎言,别再盲目学Python了_关于python 盲目-程序员宅基地

文章浏览阅读2.3w次,点赞177次,收藏741次。Python作为21世纪最火的编程语言,市面上各种学习视频层出不穷,关于Python的学习氛围也逐渐浓厚,Python固然简单好上手,但事实上Python也不是那么容易学习的。如果不采取正确的学习方式,很容易走入误区。关于Python的三个谎言,你一定要清楚。1: 学完Python,并不能立马拿一两万的工资,甚至可能找不到工作!2:Python也没有那么简单,不是有手就行!3:别想着1个星期、2个星期就能学会,你至少得腾出一两个月来连续学习!如果你还是执意要学Python,那么好,接下来我们看看怎._关于python 盲目

js 实现将json数据导出到excel表格-程序员宅基地

文章浏览阅读2.1k次。方法一将table标签,包括tr、td等对json数据进行拼接,将table输出到表格上实现,这种方法的弊端在于输出的是伪excel,虽说生成xls为后缀的文件,但文件形式上还是html,代码如下<html><head> <p style="font-size: 20px;color: red;">使用table标签方式将json导出xls文件</p..._如何把js数据转换成表格

IEEE协会会员权益,注册IEEE会员有必要了解下_ieee会员好处-程序员宅基地

IEEE协会是一个专注于航空与电子系统领域的组织,注册IEEE会员可以享受许多权益,包括免费访问协会资源中心和参加各种会议及活动。