Python识别图片中的文字

Python识别图片中的文字

1、前言

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

2、Tesseract

文字识别是ORC的一部份内容,ORC的意思是光学字符识别,通俗讲就是文字识别。Tesseract是一个用于文字识别的工具,咱们结合Python使用能够很快的实现文字识别。可是在此以前咱们须要完成一个繁琐的工做。git

(1)Tesseract的安装及配置

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

在这里插入图片描述

有不少版本供你们选择,你们能够根据本身的需求选择。其中w32表示32位系统,w64表示64位系统,你们选择合适的版本便可,可能下载速度比较慢,你们能够选择连接:pan.baidu.com/s/1jKZe_ACL… 提取码:ayel下载。安装时咱们须要知道咱们安装的位置,将安装目录配置到系统path变量当中,咱们路径是D:\CodeField\Tesseract-OCRbash

在这里插入图片描述

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

(2)下载语言包

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

在这里插入图片描述

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

(3)其它模块下载

除了上面的步骤,咱们还须要下载两个模块:测试

pip install pytesseract
pip install pillow
复制代码

第一个是用于文字识别的,第二个是用于图片读取的。接下来咱们就能够进行文字识别了。字体

3、文字识别

(1)单张图片识别

接下来的操做就要简单的多,下面是咱们要识别的图片:网站

在这里插入图片描述

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

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目录下有简体中文包该设置才会生效。下面是咱们用来识别的图片:

在这里插入图片描述

识别结果以下:

不 要 温 顺 的 走 进 那 个 良 夜
复制代码

图片内容被准确识别出来了。有一点咱们须要知道,在咱们将语言设置为简体中文或其它语言后,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对手写体、行楷等飘逸的字体识别不许确,对一些复杂的字识别也有待提高。可是宋体、印刷体等笔画严谨的字体识别准确率很高。另外若是图片的倾斜大于必定的角度,识别结果也会有很大差异。

更多内容能够关注公众号:新建文件夹X。

相关文章
相关标签/搜索