Python图像处理之图片文字识别(OCR)

2023-10-27

OCR与Tesseract介绍

  将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR)。可以实现OCR 的底层库并不多,目前很多库都是使用共同的几个底层OCR 库,或者是在上面进行定制。
  Tesseract 是一个OCR 库,目前由Google 赞助(Google 也是一家以OCR 和机器学习技术闻名于世的公司)。Tesseract 是目前公认最优秀、最精确的开源OCR 系统。
  除了极高的精确度,Tesseract 也具有很高的灵活性。它可以通过训练识别出任何字体(只要这些字体的风格保持不变就可以),也可以识别出任何Unicode 字符。

Tesseract的安装与使用

  Tesseract的Windows安装包下载地址为: http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-4.00.00dev.exe ,下载后双击直接安装即可。安装完后,需要将Tesseract添加到系统变量中。在CMD中输入tesseract -v, 如显示以下界面,则表示Tesseract安装完成且添加到系统变量中。

  Linux 用户可以通过apt-get 安装:

$sudo apt-get tesseract-ocr

  用Tesseract可以识别格式规范的文字,主要具有以下特点:

• 使用一个标准字体(不包含手写体、草书,或者十分“花哨的”字体)
• 虽然被复印或拍照,字体还是很清晰,没有多余的痕迹或污点
• 排列整齐,没有歪歪斜斜的字
• 没有超出图片范围,也没有残缺不全,或紧紧贴在图片的边缘
  下面将给出几个tesseract识别图片中文字的例子。
  首先是E://figures/other/poems.jpg, 输入命令 tesseract E://figures/other/poems.jpg E://figures/other/poems.txt, 则会将poems.jpg中的识别文字写入到poems.txt中,如下图:
poems.jpg


  接着是稍微有点倾斜的文字图片th.jpg,识别情况如下:


可以看到识别的情况不如刚才规范字体的好,但是也能识别图片中的大部分字母。
  最后是识别简体中文,需要事先安装简体中文语言包,下载地址为:https://github.com/tesseract-ocr/tessdata/find/master/chi_sim.traineddata ,再讲chi_sim.traineddata放在C:\Program Files (x86)\Tesseract-OCR\tessdata目录下。我们以图片timg.jpg为例:

输入命令:

tesseract E://figures/other/timg.jpg E://figures/other/timg.txt -l chi_sim

识别结果如下:

只识别错了一个字,识别率还是不错的。
  最后加一句,Tesseract对于彩色图片的识别效果没有黑白图片的效果好。

pytesseract

  pytesseract是Tesseract关于Python的接口,可以使用pip install pytesseract安装。安装完后,就可以使用Python调用Tesseract了,不过,你还需要一个Python的图片处理模块,可以安装pillow.
  输入以下代码,可以实现同上述Tesseract命令一样的效果:

import pytesseract
from PIL import Image

pytesseract.pytesseract.tesseract_cmd = 'C://Program Files (x86)/Tesseract-OCR/tesseract.exe'
text = pytesseract.image_to_string(Image.open('E://figures/other/poems.jpg'))

print(text)

运行结果如下:

参考文献

  1. Python网络数据采集 【美】 Ryan Mitchell 人民邮电出版社
  2. https://blog.csdn.net/dcrmg/article/details/78233459?locationNum=7&fps=1
  3. http://www.inimei.cn/archives/297.html

***注意:***本人现已开通微信公众号: 轻松学会Python爬虫(微信号为:easy_web_scrape), 欢迎大家关注哦~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python图像处理之图片文字识别(OCR) 的相关文章

  • 判断线程是否已经启动

    如何判断Python线程是否已经启动 有一个方法is alive 但这是真的before and while一个线程正在运行 你可以看看ident领域的Thread实例 这Python 2 7 线程文档 http docs python o
  • 使用Python的工业视觉相机[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何有条件地组合两个相同形状的 numpy 数组

    这听起来很简单 但我想我把它想得太复杂了 我想创建一个数组 其元素是从两个形状相同的源数组生成的 具体取决于源数组中哪个元素更大 为了显示 import numpy as np array1 np array 2 3 0 array2 np
  • 如何在算术表达式的结果上添加 SQLAlchemy 标签?

    我如何将这样的东西翻译成 SQLAlchemy select x y as difference 我知道该怎么做 x label foo 但我不确定在哪里放置下面的 label 方法调用 select table c x table c y
  • 远程控制或脚本打开 Office 从 Python 编辑 Word 文档

    我想 最好在 Windows 上 在特定文档上启动 Open Office 搜索固定字符串并将其替换为我的程序选择的另一个字符串 我该如何从外部 Python 程序中做到这一点 OLE 什么 原生 Python 脚本解决方案 The doc
  • 使用 Python 中的 IAM 角色访问 AWS API Gateway

    我有一个 AWS API 网关 我想使用它来保护其安全IAM 角色 http docs aws amazon com apigateway latest developerguide permissions html 我正在寻找一个包来帮助
  • 使用 Python 抓取维基百科数据

    我正在尝试从以下内容中检索 3 列 NFL 球队 球员姓名 大学球队 维基百科页面 http en wikipedia org wiki 2008 NFL draft 我是 python 新手 一直在尝试使用 beautifulsoup 来
  • 如何解码 dtype=numpy.string_ 的 numpy 数组?

    我需要使用 Python 3 解码按以下方式编码的字符串 gt gt gt s numpy asarray numpy string hello nworld gt gt gt s array b hello nworld dtype S1
  • 从 python 中的缩进文本文件创建树/深度嵌套字典

    基本上 我想迭代一个文件并将每行的内容放入一个深层嵌套的字典中 其结构由每行开头的空格数量定义 本质上 目标是采取这样的事情 a b c d e 并将其变成这样的东西 a b c d e Or this apple colours red
  • 如何获取 Matplotlib 生成的散点图的像素坐标?

    我使用 Matplotlib 生成散点图的 PNG 文件 现在 对于每个散点图 除了 PNG 文件之外 我还会also就像生成散点图中各个点的像素坐标列表一样 我用来生成散点图 PNG 文件的代码基本上是这样的 from matplotli
  • Matplotlib 将颜色图 tab20 更改为三种颜色

    Matplotlib 有一些新的且非常方便的颜色图 选项卡颜色图 https matplotlib org examples color colormaps reference html 我错过的是生成像 tab20b 或 tab20c 这
  • 如何将reportlab与Google应用程序引擎一起使用

    我无法在谷歌应用程序引擎下正确导入reportlab 根据以下guide http blog notdot net 2010 04 Generating PDFs on App Engine Python and introducing M
  • 与函数复合 UniqueConstraint

    一个快速的 SQLAlchemy 问题 我有一个 文档 类 其属性为 数字 和 日期 我需要确保没有重复的号码同年 是 有没有办法对 数字 年份 日期 进行UniqueConstraint 我应该使用唯一索引吗 我如何声明功能部分 SQLA
  • python 中的基本矩阵转置

    我尝试了 python 中矩阵转置的最基本方法 但是 我没有得到所需的结果 接下来是代码 A 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 print A def TS A B A for i in range len A
  • django如何将字符串转换为模块?

    我试图了解 django 的另一个神奇之处 它可以将字符串转换为模块 In settings py INSTALLED APPS声明如下 INSTALLED APPS django contrib auth django contrib c
  • 向伪 shell (pty) 发出命令

    我尝试使用 subprocess popen os spawn 来运行进程 但似乎需要伪终端 import pty master slave pty openpty os write master ls l 应该发送 ls l 到从属终端
  • DRF:以编程方式从 TextChoices 字段获取默认选择

    我们的网站是 Vue 前端 DRF 后端 在一个serializer validate 方法 我需要以编程方式确定哪个选项TextChoices类已被指定为模型字段的默认值 TextChoices 类 缩写示例 class PaymentM
  • 字母尺度和随机文本上的马尔可夫链

    我想使用 txt 文件中的一本书中的字母频率生成随机文本 以便每个新字符 string lowercase 取决于前一个 如何使用马尔可夫链来做到这一点 或者使用每个字母都有条件频率的 27 个数组更简单 我想使用来自的字母频率生成随机文本
  • 获取运行云功能的运行时服务帐户

    有没有办法以编程方式从云功能获取运行时服务帐户的电子邮件 我知道我可以 猜测 默认的 App Engine 帐户 因为它始终是 appspot gserviceaccount com 但这不是我想要的 我本来期待有一些环境变量 https
  • 如何抑制 Pandas Future 警告?

    当我运行该程序时 Pandas 每次都会给出如下所示的 未来警告 D Python lib site packages pandas core frame py 3581 FutureWarning rename with inplace

随机推荐

  • Linux命令学习 - Locate

    Locate Linux locate命令简介 语法 参数 附加说明 updatedb的配置文件 etc updatedb conf 设置定时updatedb Crontab命令 Linux locate命令简介 locate locate
  • 常见的magent问题系列二--Fatal error: Call to a member function toHtml() on a non-object in ../../Layout.php

    有些模板不兼容 就会出现这种情况 Fatal error Call to a member function toHtml on a non object in home www yourMagento html gamemore app
  • mysql-按照指定字段排序

    select from order ORDER BY FIELD status UNPAID DELIVERED PAID WAIT DELIVER desc asc
  • uart和usart的区别

    uart 通用异步收发传输器 Universal Asynchronous Receiver Transmitter 通常称作UART 是一种异步收发传输器 是电脑硬件的一部分 它将要传输的资料在串行通信与并行通信之间加以转换 作为把并行输
  • 2023苹果CMS v10魔加主题1.1.6破解版 支持苹果CMS全部版本

    2023苹果cms v10魔加主题1 1 6破解版 支持苹果cms全部版本 后台快捷菜单配置添加魔加主题 mojia theme div class layui tab item blockquote class layui elem qu
  • jquery控制a标签点击后禁止再次点击

    function test 防止多次点击提交 if div a hasClass disabled return div a addClass disabled div a layui layer btn0 text 提交中 div a l
  • mysql5.7 主从安装

    1 安装mysql5 7 1 1 下载mysql源安装包 wget http dev mysql com get mysql57 community release el7 8 noarch rpm 1 2 安装mysql源 yum ins
  • 自学C++(四)//三目运算符

    三目运算符 阅读如下代码 if a gt b z a else z b 该代码可以化简为z a gt b a b z a gt b a b 该式是一个具有3个操作对象的条件表达式 其中的 加起来叫三目y运算符 三目运算符的优先级 执行方向是
  • 1.根据VADeaths数据集,分别绘制城镇居民与农村居民死亡情况的饼图,添加标题及图例说明,并分析图表。

    1 根据VADeaths数据集 分别绘制城镇居民与农村居民死亡情况的饼图 添加标题及图例说明 并分析图表 2 将第1题的结果保存为PNG文件格式 并储存到当前工作目录下 png 农村居民死亡情况 png width 1200 height
  • 关于codeblocks出现can't find compiler的解决方法

    关于codeblocks不能找到编译器的问题我来介绍一下解决的方法 1 首先要确定你的codeblocks是自带编译器的版本 你可访问codeblocks的官网 www codeblocks org 来到下载页面 如下图 点击第一个Down
  • 策略模式+Spring——让我们的代码更加高大上一点

    if else if else 代码是实际的项目代码中出现的比例还是蛮高的 特别是针对一些业务需求根据不同类型来进行不同的业务处理 针对这种业务模型 我们来试着使用策略模式结合Spring来优化我们的代码 让代码更加高大上一点 为了更好得结
  • n的阶乘求解方法

    n 的阶乘求解方法有以下三种 第一种通过递归计算 n int input def N a 定义一个函数进行阶乘计算 if a 1 return a else return N a 1 a print N n 第二种方法就是调用math库 通
  • 狂神说Mybatis最全课堂笔记

    Mybatis 自己整理的狂神说Mybatis学习笔记 环境 JDK1 8 Mysql 5 7 maven 3 6 1 IDEA 回顾 JDBC Mysql Java基础 Maven Junit SSM框架 配置文件 最好的方式 看官方文档
  • 小程序,压缩图片

    我们在小程序上 直接上传手机相册及拍照的图片时 因为图片过大 如10m 手机端不像我们再计算机上传输那么快 也没那么稳定 解决办法 在图片上传前压缩图片 压缩图片就是将图片尺寸 图片质量降低 把这两个指数降低到合适的规格 1 首先在 wxm
  • RK3399 Linux-SDK mipi屏幕驱动及调试

    一 流程及通路 我接触到的三款mipi屏幕 基本的点亮流程都是很一致的 就是背光使能 背光点亮 屏幕使能 reset引脚按指定时序 波形拉高或拉低 初始化序列命令发送 3399的linuxSDK中 包含一种类似通用的屏幕驱动 本文档以使用此
  • [Eagle API]使用python打印eagle指定文件夹下的所有子文件名

    api https www yuque com augus gsjgn eagle api pq0y2y 官方api源码 var requestOptions method GET redirect follow fetch http lo
  • mojo安装

    docker安装mojo 官网 https developer modular com login 很奇怪登录页面不显示 类似于网站劫持 docker 安装mojo带jupyterlab的方式 https hub docker com r
  • const_cast

    const cast是一种C 运算符 主要是用来去除复合类型中const和volatile属性 没有真正去除 变量本身的const属性是不能去除的 要想修改变量的值 一般是去除指针 或引用 的const属性 再进行间接修改 用法 const
  • 烂泥:查看服务器的BIOS是否开启CPU虚拟化

    本文由秀依林枫提供友情赞助 首发于烂泥行天下 有关CPU是否支持虚拟化 我们可以通过相关的命令和软件进行查看 在windows系统下 我们可以使用CPU Z这个软件 如下图 在linux系统下 我们可以通过查看 proc cpuinfo文件
  • Python图像处理之图片文字识别(OCR)

    OCR与Tesseract介绍 将图片翻译成文字一般被称为光学文字识别 Optical Character Recognition OCR 可以实现OCR 的底层库并不多 目前很多库都是使用共同的几个底层OCR 库 或者是在上面进行定制 T