如何利用Python识别图片中的文字


Posted in Python onMay 31, 2020

一、前言

不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制。或者像百度文档一样,只能复制一部分,这个时候我们就会选择截图保存。但是当我们想用到里面的文字时,还是要一个字一个字打出来。那么我们能不能直接识别图片中的文字呢?答案是肯定的。

二、Tesseract

文字识别是ORC的一部分内容,ORC的意思是光学字符识别,通俗讲就是文字识别。Tesseract是一个用于文字识别的工具,我们结合Python使用可以很快的实现文字识别。但是在此之前我们需要完成一个繁琐的工作。

(1)Tesseract的安装及配置

Tesseract的安装我们可以移步到该网址 https://digi.bib.uni-mannheim.de/tesseract/,我们可以看到如下界面:

如何利用Python识别图片中的文字

有很多版本供大家选择,大家可以根据自己的需求选择。其中w32表示32位系统,w64表示64位系统,大家选择合适的版本即可,可能下载速度比较慢,大家可以选择链接:https://pan.baidu.com/s/1YQCMnx-wCeNrJEE3wcEnQA 提取码:rbc6下载。安装时我们需要知道我们安装的位置,将安装目录配置到系统path变量当中,我们路径是D:\CodeField\Tesseract-OCR。

如何利用Python识别图片中的文字

我们右击我的电脑/此电脑->属性->高级系统设置->环境变量->Path->编辑->新建然后将我们的路径复制进去即可。添加好系统变量后后我们还需要依次点确定,这样才算配置好了。

(2)下载语言包

Tesseract默认是不支持中文的,如果想要识别中文或者其它语言需要下载相应的语言包,下载地址如下: https://tesseract-ocr.github.io/tessdoc/Data-Files ,进入网站后我们往下翻:

如何利用Python识别图片中的文字

其中有两个中文语言包,一个Chinese-Simplified和Chinese-Traditional,它们分别是简体中文和繁体中文,我们选择需要的下载即可。下载完成后我们需要放到Tesseract的路径下的tessdata目录下,我们路径是D:\CodeField\Tesseract-OCR\tessdata。

(3)其它模块下载

除了上面的步骤,我们还需要下载两个模块:

pip install pytesseract
pip install pillow

第一个是用于文字识别的,第二个是用于图片读取的。接下来我们就可以进行文字识别了。

三、文字识别

(1)单张图片识别

接下来的操作就要简单的多,下面是我们要识别的图片:

如何利用Python识别图片中的文字

接下来就是我们文字识别的代码:

import pytesseract
from PIL import Image
# 读取图片
im = Image.open('sentence.jpg')
# 识别文字
string = pytesseract.image_to_string(im)
print(string)

识别结果如下:

Do not go gentle into that good night!

因为默认是支持英文的,所以我们可以直接识别,但是当我们要识别中文或其它语言时就需要做些修改:

import pytesseract
from PIL import Image
# 读取图片
im = Image.open('sentence.png')
# 识别文字,并指定语言
string = pytesseract.image_to_string(im, lang='chi_sim')
print(string)

在识别时,我们设置lang='chi_sim',也就是把语言设置为简体中文,只有当你的tessdata目录下有简体中文包该设置才会生效。下面是我们用来识别的图片:

如何利用Python识别图片中的文字

识别结果如下:

不 要 温 顺 的 走 进 那 个 良 夜

图片内容被准确识别出来了。有一点我们需要知道,在我们将语言设置为简体中文或其它语言后,Tesseract还是可以识别出英文字符。

(2)批量图片识别

既然我们把单张图片识别列出来了,就肯定还有批量图片识别这个功能,这就需要我们准备一个txt文件了,比如我有text.txt文件,内容如下:

sentence1.jpg
sentence2.jpg

我们将代码修改为如下:

import pytesseract
# 识别文字
string = pytesseract.image_to_string('text.txt', lang='chi_sim')
print(string)

但是这样自己写一个txt文件难免有些麻烦,因此我们又可以进行如下修改:

import os
import pytesseract
# 文字图片的路径
path = 'text_img/'
# 获取图片路径列表
imgs = [path + i for i in os.listdir(path)]
# 打开文件
f = open('text.txt', 'w+', encoding='utf-8')
# 将各个图片的路径写入text.txt文件当中
for img in imgs:
  f.write(img + '\n')
# 关闭文件
f.close()
# 文字识别
string = pytesseract.image_to_string('text.txt', lang='chi_sim')
print(string)

这样我们只需要传入一个文字图片的根目录就可以批量进行识别了。在测试过程中发现,Tesseract对手写体、行楷等飘逸的字体识别不准确,对一些复杂的字识别也有待提升。但是宋体、印刷体等笔画严谨的字体识别准确率很高。另外如果图片的倾斜大于一定的角度,识别结果也会有很大差别。

总结

到此这篇关于如何利用Python识别图片中文字的文章就介绍到这了,更多相关Python识别图片中文字内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python pickle模块用法实例
Apr 14 Python
python中PIL安装简单教程
Apr 21 Python
KMP算法精解及其Python版的代码示例
Jun 01 Python
Python实现网络端口转发和重定向的方法
Sep 19 Python
python+VTK环境搭建及第一个简单程序代码
Dec 13 Python
Tensorflow卷积神经网络实例
May 24 Python
儿童学习python的一些小技巧
May 27 Python
Python定时任务sched模块用法示例
Jul 16 Python
python实现贪吃蛇游戏
Mar 21 Python
使用keras实现孪生网络中的权值共享教程
Jun 11 Python
python温度转换华氏温度实现代码
Dec 06 Python
python 中的@运算符使用
May 26 Python
Python模拟登入的N种方式(建议收藏)
May 31 #Python
Python多线程正确用法实例解析
May 30 #Python
PyQt5实现简单的计算器
May 30 #Python
PyQt5实现登录页面
May 30 #Python
Python网页解析器使用实例详解
May 30 #Python
PyQt5实现画布小程序
May 30 #Python
Java ExcutorService优雅关闭方式解析
May 30 #Python
You might like
php discuz 主题表和回帖表的设计
2009/03/13 PHP
PHP中foreach循环中使用引用要注意的地方
2011/01/02 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
php常用正则函数实例小结
2016/12/29 PHP
JavaScript 异步方法队列链实现代码分析
2010/06/05 Javascript
js分解url参数(面向对象-极简主义法应用)
2012/08/09 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
js判断手机和pc端选择不同执行事件的方法
2015/01/30 Javascript
JavaScript中常见获取元素的方法汇总
2015/03/04 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
AngularJs  E2E Testing 详解
2016/09/02 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
jquery.pager.js实现分页效果
2019/07/29 jQuery
[59:30]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
Python之csv文件从MySQL数据库导入导出的方法
2018/06/21 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
Python实现投影法分割图像示例(一)
2020/01/17 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
详解anaconda安装步骤
2020/11/23 Python
html5 canvas 实现光线沿不规则路径运动
2020/04/20 HTML / CSS
销售所有的狗狗产品:Dog.com
2016/10/13 全球购物
吃空饷专项治理工作实施方案
2014/03/04 职场文书
2014年重阳节活动策划方案书
2014/09/16 职场文书
公司介绍信范文
2015/01/31 职场文书
2016年校长新年寄语
2015/08/17 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS
关于vue中如何监听数组变化
2021/04/28 Vue.js
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript