使用一行Python代码从图像读取文本
处理图像不是一项简单的任务。对你来说,作为一个人,很容易看着某样东西然后马上知道你在看什么。但电脑不是这样工作的。

对你来说太难的任务,比如复杂的算术,或者一般意义上的数学,是计算机毫不费力就能完成的。但在这里,情况正好相反——对你来说很琐碎的任务,比如识别图像中的猫或狗,对电脑来说真的很难。在某种程度上,我们是天造地设的一对。至少现在是这样。
虽然图像分类和涉及到一定程度计算机视觉的任务可能需要大量的代码和扎实的理解,但是从格式良好的图像中读取文本在Python中却是简单的,并且可以应用于许多现实生活中的问题。
在今天的帖子中,我想证明这一点。虽然会安装一些库,但不会花很多时间。这些是你需要的库:
- OpenCV
- PyTesseract
OpenCV
现在,这个库将只用于加载图像,实际上你不需要事先对它有太多了解(尽管它可能有帮助,你将看到为什么)。
根据官方文件:
OpenCV(开源计算机视觉库)是一个开源的计算机视觉和机器学习软件库。OpenCV的目的是为计算机视觉应用提供一个通用的基础结构,并加速机器感知在商业产品中的使用。OpenCV是bsd许可的产品,OpenCV使企业可以轻松地使用和修改代码
简而言之,你可以使用OpenCV来做任何类型的图像转换,这是一个相当简单的库。
如果你还没有安装它,那么它将只是终端中的一行:
pip install opencv-python
差不多就是这样。在此之前,一切都很简单,但这种情况即将改变。
PyTesseract
这个库到底是什么东西?根据维基百科:
Tesseract是用于各种操作系统的光学字符识别引擎。它是免费软件,根据Apache许可2.0版发布,自2006年以来由Google赞助开发。
我敢肯定,现在有更多复杂的库可用,但是我发现这个库运行良好。根据我自己的经验,该库应该能够从任何图像中读取文本,但前提是该字体不会使你连连看都看不懂。
如果无法从你的图像中读取文字,花更多的时间使用OpenCV,应用各种过滤器使文本高亮。
现在安装在底部有些麻烦。如果你使用的是Linux,则全部归结为几个sudo-apt get命令:
sudo apt-get update
sudo apt-get install tesseract-ocr
sudo apt-get install libtesseract-dev
我用的是Windows系统,所以这个过程有点乏味。
首先,打开这个URL:
https://github.com/UB-Mannheim/tesseract/wiki
下载32位或64位的安装程序:

安装本身很简单,只需单击几次Next。是的,你还需要做一个pip安装:
pip install pytesseract
接下来要需要告诉Python Tesseract安装在何处。在Linux机器上,我不需要这样做,但在Windows上是必需的。默认情况下,它安装Program Files。
如果你做的一切正确,执行这些代码应该不会产生任何错误:

获取文本
让我们从一个简单的开始。我找到了一些免版税的图片,里面有一些文字,第一个是这样的:

它应该是简单的一个,有可能Tesseract会读那些蓝色的“对象”作为括号。让我们看看会发生什么:

我的猜测是正确的。不过,这不是一个问题,你可以使用一些Python技巧轻松地解决这些问题。
下一个可能更棘手:

我希望它不会检测到硬币上的“B”:

看起来效果很好。
现在轮到你把它应用到你自己的问题上了。如果文本与背景混合,OpenCV技能在这里可能是至关重要的。
在你离开之前
对计算机来说,从图像中读取文本是一项相当困难的任务。想想看,电脑不知道字母是什么,它只对数字有效。在引擎盖后面发生的事情一开始可能看起来像一个黑盒子,但我鼓励你进一步研究,如果这是你感兴趣的领域。
我并不是说PyTesseract每次都能很好地工作,但是我发现即使在一些比较复杂的图像上它也足够好。但不是所有情况都很好,有时候需要一些图像处理需要使文本高亮让其相对于背景更加突出。
参考文献
- https://opencv.org/about/
- https://en.wikipedia.org/wiki/Tesseract_(software)
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/
欢迎关注PyTorch官方中文教程站:
http://pytorch.panchuang.net/
OpenCV中文官方文档:
http://woshicver.com/
使用一行Python代码从图像读取文本的更多相关文章
- 一行python代码实现树结构
树结构是一种抽象数据类型,在计算机科学领域有着非常广泛的应用.一颗树可以简单的表示为根, 左子树, 右子树. 而左子树和右子树又可以有自己的子树.这似乎是一种比较复杂的数据结构,那么真的能像我们在标题 ...
- 教你用一行Python代码实现并行(转)
教你用一行Python代码实现并行 本文教你通过一行Python实现并行化. Python在程序并行化方面多少有些声名狼藉.撇开技术上的问题,例如线程的实现和GIL,我觉得错误的教学指导才是主要问题. ...
- 用一行Python代码制作动态二维码
在GitHub上发现了一个比较有意思的项目,只需要一行Python代码就可以快捷方便生成普通二维码.艺术二维码(黑白/彩色)和动态GIF二维码. GitHub网站参见:https://github.c ...
- 一行Python代码画心型
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/yanlaifan/article/deta ...
- 有趣的一行 Python 代码
https://mp.weixin.qq.com/s/o9rm4tKsJeEWyqQDgVEQiQ https://mp.weixin.qq.com/s/G5F_GaUGI0w-kugOZX145g ...
- 一行python代码搞定文件分享
给同事分享文件,如你所知通过聊天工具,网盘或linux命令各种方法,还有一个也可以尝试下:使用一行python代码快速搭建一个http服务器在局域网内进行下载. python3使用: python3 ...
- 忘带U盘了??别急!一行python代码即可搞定文件传输
近日发现了python一个很有趣的功能,今天在这里给大伙儿做一下分享 需求前提 1.想要拷贝电脑的文件到另一台电脑但是又没有U盘2.手机上想获取到存储在电脑的文件3.忘带U盘- 您也太丢三落四了吧,但 ...
- 一行 Python 代码能干嘛?
Python 有很多优雅有趣的代码写法,同时还很简短,以至于当我刚开始接触这个编程语言的时候,就爱不释手.而前几天的编程语言榜单中 Python 也超越了 Java 成为了第一,挺替 Python 开 ...
- 一行python代码能写出啥?
1.一行代码启动一个Web服务 python -m SimpleHTTPServer 8080 # python2 python3 -m http.server 8080 # python3 2. ...
随机推荐
- Codeforces Round #612 (Div. 2)C. Garland
第四次写题解,请多指教! http://codeforces.com/contest/1287/problem/C题目链接 题目大意是有一个数字串挂有1-n n个数字,现在上面缺失了一些数字,让你找出 ...
- php-fpm启动失败处理
报错信息: No pool defined. at least one pool section must be specified in config file [11-Mar-2019 23:57 ...
- 【Django】接收照片,储存文件 前端代码
后端: from rest_framework.views import APIView from car import settings from django.shortcuts import r ...
- 我的webpack学习笔记(二)
前言 上一篇文章我们讲了多页面js的打包,本篇文章我们继续scss的打包. 多页面css单独打包 首先,我们css编写采用的是sass,所以我们先来安装sass-loader以及可以用到的依赖 $ n ...
- 【转】css样式自动换行(强制换行)
原文链接:http://blog.csdn.net/ye987987... 自动换行问题,正常字符的换行是比较合理的,而连续的数字和英文字符常常将容器撑大,挺让人头疼,下面介绍的是CSS如何实现换行的 ...
- 「前端」rem 缩放方案 flexible-js 兼容 375px 方案的思路
本文来自尚妆前端团队南洋 发表于尚妆github博客,欢迎订阅. 移动端H5页面rem缩放方案flexible.js兼容375px方案的思路 参考: 移动端高清.多屏适配方案 viewport-and ...
- 编码的来源于格式简介ANSI、GBK、GB2312、UTF-8、GB18030和 UNICODE
编码一直是让新手头疼的问题,特别是 GBK.GB2312.UTF-8 这三个比较常见的网页编码的区别,更是让许多新手晕头转向,怎么解释也解释不清楚.但是编码又是那么重要,特别在网页这一块.如果你打出来 ...
- Z字头:逐浪字库入选微软全球主流字体厂商列表
北京时间2019年6月20日消息: 来自中国的字库厂商--逐浪,成功获得全球软件巨擎.电子出版与数字印刷权威平台-微软的认证,成为获此国际认证的首家字体厂商. 微软公司为了更好的规范国际字库与出版,制 ...
- python如何用format进行进制转换与如何删除进制前缀
10进行十进制,十六进制,八进制,二进制的转换:(#:保留进制前缀)对于带着进制前缀的,如"0x"“0o”“0b”,可以直接在后面加上’x’‘o’'b’进行删除:其他的一些小技巧: ...
- 基于RabbitMQ和Swoole实现的一个完整的异步任务系统
从最开始的使用redis实现的单进程消费的异步任务系统到加入swoole的多进程消费模式,现在,我们的异步任务系统终于又能迈进一步. 因为有了前面两个简单系统的经验,这回基于RabbitMQ的异步任务 ...