如何利用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中使用gzip模块压缩文件的简单教程
Apr 08 Python
python实现的简单文本类游戏实例
Apr 28 Python
Python的装饰器模式与面向切面编程详解
Jun 21 Python
Windows下安装python2和python3多版本教程
Mar 30 Python
python urllib爬取百度云连接的实例代码
Jun 19 Python
pandas 选择某几列的方法
Jul 03 Python
Python切图九宫格的实现方法
Oct 10 Python
python实现查找所有程序的安装信息
Feb 18 Python
Python os模块常用方法和属性总结
Feb 20 Python
tensorflow安装成功import tensorflow 出现问题
Apr 16 Python
TensorFlow固化模型的实现操作
May 26 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
Sep 29 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中显示数组与对象的实现代码
2011/04/18 PHP
PHP获取MAC地址的具体实例
2013/12/13 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
asp 的 分词实现代码
2007/05/24 Javascript
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
Array.prototype.concat不是通用方法反驳[译]
2012/09/20 Javascript
jQuery中操控hidden、disable等无值属性的方法
2014/01/06 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
js获取url传值的方法
2015/12/18 Javascript
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
2019/08/03 Javascript
解决$store.getters调用不执行的问题
2019/11/08 Javascript
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
Django中更新多个对象数据与删除对象的方法
2015/07/17 Python
编写自定义的Django模板加载器的简单示例
2015/07/21 Python
python中实现精确的浮点数运算详解
2017/11/02 Python
Django框架模板用法入门教程
2019/11/04 Python
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
彪马法国官网:PUMA法国
2019/12/15 全球购物
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
人事专员的岗位职责
2014/03/01 职场文书
态度决定一切演讲稿
2014/05/20 职场文书
领导班子四风表现材料
2014/08/23 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
高中生个性发展自我评价
2015/03/09 职场文书
2015年乡镇纪检工作总结
2015/04/22 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle
Golang解析JSON对象
2022/04/30 Golang