pytesseract提取识别图片中的文字

news/2024/7/21 4:56:10 标签: python, tesseract, ocr, 图像处理

目录

tesseract%E7%89%88%E6%9C%AC%E5%8F%B7-toc" style="margin-left:40px;">1、获取tesseract版本号

2、获取语言包列表

3、识别图片中的文字

4、获取图片中文字的详细信息

5、识别图片中的文字和位置

6、识别osd信息

7、识别并生成xml文件

避坑指南:


 pytesseract是对Tesseract-OCR命令行的封装,实际上底层调用的还是tesseract可执行文件,所以在使用pytesseract前需要完成Tesseract-OCR软件安装和语言包安装,详细方法可以参考 Tesseract-OCR5.0软件安装和语言包安装(Windows系统)。

pytesseract可以通过pip安装,当前(2021.11)最新版本为0.3.8:

pip install pytesseract

tesseract%E7%89%88%E6%9C%AC%E5%8F%B7">1、获取tesseract版本号

get_tesseract_version()获取tesseract的版本号,注意并不是pytesseract的版本号:

#juzicode.com / VX公众号:桔子code  
import pytesseract as ts
version = ts.get_tesseract_version()
print('version:',version)

运行结果:

version: 5.0.0-rc1.20211030

结果和在命令行执行”tesseract –version”看到的版本号是一样的:

E:\juzicode\tess>tesseract --version
tesseract v5.0.0-rc1.20211030

2、获取语言包列表

通过get_languages()获取安装的语言包列表:

#juzicode.com / VX公众号:桔子code  
import pytesseract as ts
langs = ts.get_languages()
print('langs:',langs)

运行结果:

langs: ['chi_sim', 'eng', 'osd']

和在命令行用“tesseract –list-langs”检查语言包得到的结果是一样的:

E:\juzicode\tess>tesseract --list-langs
List of available languages (3):
chi_sim
eng
osd

3、识别图片中的文字

image_to_string()用来识别图片中的文字,最简单的用法传入2个入参,一个是图片的文件名称,一个是识别所用的语言包类型,比如要识别下图中的文字,这是一段从pdf文件中截屏的片段,文件名为bookseg.png,语言包选择chi_sim:

img_fn = 'bookseg.png'
lang = 'chi_sim'
text = ts.image_to_string(img_fn,lang)
print(text)

运行结果:

引 言

数 字 图 像 处 理 方 法 的 重 要 性 源 于 两 个 主 要 应 用 领 域 : 改 善 图 示 信 息 以 便 人 们 解 释 ; 为 存 储 、 传
输 和 表 示 而 对 图 像 数 据 进 行 处 理 , 以 便 于 机 器 自 动 理 解 。 本 章 有 几 个 主 要 目 的 : (1) 定 义 我 们 称 之 为
图 像 处 理 领 域 的 范 围 ; (2) 从 历 史 观 点 回 顾 图 像 处 理 的 起 源 ; (3) 通 过 考 察 一 些 主 要 的 应 用 领 域 , 给 出

图 像 处 理 技 术 状 况 的 概 念 ; (4) 筒 要 讨 论 数 字 图 像 处 理 中 所 用 的 主 要 方 法 ; (5) 概 述 通 用 目 的 的 典 型 图
像 处 理 系 统 的 组 成 ; (6) 列 出 公 开 发 表 的 数 字 图 像 处 理 领 域 的 一 些 图 书 和 文 献 。

从这个例子可以看到识别清晰度较高的图片效果还是非常好的。

除了前面介绍的传入图片文件名称的方法,还可以传入图像的numpy数组,这样就可以和pillow、opencv等模块配合使用,在某些场合下就可以先用pillow或opencv等做一些预处理再传入到image_to_string()中识别。

img_fn = 'bookseg.png'
lang = 'chi_sim'
img = cv2.imread(img_fn,0)
cv2.imwrite('gray-bin.jpg',img)
text = ts.image_to_string(img,lang) #第1个参数传入numpy类型
print(text)

image_to_string()还可以用config参数配置tesseract的命令选项,所有的可选参数组成一个字符串传给config入参,使用方法为:

text = ts.image_to_string(img,lang,config='--psm 6 --oem 1 --loglevel ALL')

详细的参数选项有如下几种,可以通过tesseract的help命令查询到:

OCR options:
  --tessdata-dir PATH   Specify the location of tessdata path.
  --user-words PATH     Specify the location of user words file.
  --user-patterns PATH  Specify the location of user patterns file.
  --dpi VALUE           Specify DPI for input image.
  --loglevel LEVEL      Specify logging level. LEVEL can be
                        ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL or OFF.
  -l LANG[+LANG]        Specify language(s) used for OCR.
  -c VAR=VALUE          Set value for config variables.
                        Multiple -c arguments are allowed.
  --psm NUM             Specify page segmentation mode.
  --oem NUM             Specify OCR Engine mode.
NOTE: These options must occur before any configfile.

4、获取图片中文字的详细信息

image_to_data()用来获取识别出来的文字的详细信息,包含识别到的文本内容,可信度,位置等:

img_fn = 'bookseg.png'
lang = 'chi_sim'
data = ts.image_to_data(img_fn,lang)
print(data)

运行结果:

最后一列是识别出来的文本内容,往前一列是识别出来的可信度,再往前4列是在图片中的位置,包含left,top,width,height等4个要素。

注意image_to_data()返回的是str类型的数据,如果要使用其中的conf可信度,left,top等位置信息,还需要经过提取、转换才能得到。

5、识别图片中的文字和位置

image_to_boxes()用来获取识别出来的文字和位置信息:

img_fn = 'bookseg.png'
lang = 'chi_sim'
boxes = ts.image_to_boxes(img_fn,lang)
print(boxes)

运行结果:

这种方法得到的位置信息和image_to_data()中得到的left,top,width,height位置信息是一样的。同样image_to_data()返回的结果也是一个字符串,如果要使用其中的单个字符和位置信息,也需要进行提取和转换。

6、识别osd信息

image_to_osd()返回识别到的osd信息:

img_fn = 'bookseg.png'
lang = 'chi_sim'
osd = ts.image_to_osd(img_fn,lang)
print(osd)
print(type(osd))

运行结果:

Page number: 0
Orientation in degrees: 0
Rotate: 0
Orientation confidence: 37.74
Script: Han
Script confidence: 1.43

<class 'str'>

7、识别并生成xml文件

image_to_pdf_or_hocr()可以将识别的文字信息转为xml格式字节流,从而可以写入到xml文件中,其中入参extension设置为’hocr’:

img_fn = 'bookseg.png'
lang = 'chi_sim'    
hocr = ts.image_to_pdf_or_hocr(img_fn, lang, extension='hocr')
with open('test.xml', 'w+b') as f:
    f.write(hocr)  
print(type(hocr))

调用image_to_pdf_or_hocr()返回的数据类型为bytes类型,这点和前面几种方法的返回结果是有差异的,bytes类型可以用wb方式写入到文件,写入完成后打开文件可以看该文件包含了识别文字、可信度、位置信息等内容:

原文链接:http://www.juzicode.com/image-ocr-pytesseract

避坑指南:

1、提示tesseract未安装错误:

import pytesseract as ts
version = ts.get_tesseract_version()
print('version:',version)

======运行结果
FileNotFoundError: [WinError 2] 系统找不到指定的文件。
......
pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your PATH. See README file for more information.

原因:一个是没有安装tesseract命令行工具,一个是安装完后没有把安装路径添加到PATH系统变量中。

2、获取不到支持的语言包:

img_fn = 'bookseg.png'
lang = 'chi_sim'
text = ts.image_to_string(img_fn,lang,config='--tessdata-dir d:\\dev\\Tesseract-OCR5.0.0\\tessdata')
print(text)

======运行结果
pytesseract.pytesseract.TesseractError: (1, 'Error opening data file d:devTesseract-OCR5.0.0tessdata/chi_sim.traineddata Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory. Failed loading language \'chi_sim\' Tesseract couldn\'t load any languages! Could not initialize tesseract.')

使用config参数指定语言包路径时,不能使用右斜杠,只能使用左斜杠。

#text = ts.image_to_string(img_fn,lang,config='--tessdata-dir d:\\dev\\Tesseract-OCR5.0.0\\tessdata')
text = ts.image_to_string(img_fn,lang,config='--tessdata-dir d:/dev/Tesseract-OCR5.0.0/tessdata')

3、使用–oem 0选项时提示不支持老版本的ocr引擎,需要切换为–oem 1或者不指明oem默认使用新的ocr引擎:


img_fn = 'bookseg.png'
lang = 'eng'
text = ts.image_to_string(img_fn,lang,config='--oem 0')

======运行结果
pytesseract.pytesseract.TesseractError: (1, "Error: Tesseract (legacy) engine requested, 
but components are not present in d:\\dev\\Tesseract-OCR5.0.0/tessdata/eng.traineddata!! 
Failed loading language 'eng' Tesseract couldn't load any languages! Could not initialize tesseract.")

推荐阅读:

有了这个方法群聊斗图你就不会输了

只需几行代码生成22种风格各异的彩色图

你别耍我,0.1+0.2居然不等于0.3?

如何实现一个“万能”的调试打印函数

有了这款神器,什么吃灰文件都统统现形

一行代码深度定制你的专属二维码(amzqr)

桔子菌和超市老板田大爷的一次角色互换经历

改造getpass,强迫症患者再也不用担心少输字符了

来看看怎么用OpenCV解构Twitter大牛的视觉错觉图


http://www.niftyadmin.cn/n/787870.html

相关文章

Flutter移动应用开发实战——展示图片

QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群649347320 共享学习 QQ群674240731 纪年科技aming 网络安全 ,深度学习,嵌入式,机器强化,生物智能,生命科学。

Tesseract-OCR5.0字体训练以及提高准确率、提升训练效率的方法

目录 1、准备工作 2、训练步骤 2.1、生成训练用tif和box文件 2.2、生成lstm文件 2.3、生成lstmf文件 2.4、生成lstmf清单文件 2.5、开始训练 2.6、生成traineddata文件 2.7、安装字体 3、验证与测试 4、提高准确率 5、提升训练效率 6、避坑指南 原文链接&#xff…

CSP 2015 03 04 网络延时 DFS BFS

一 、 DFS #include<iostream> #include<vector> #include<cstring> #define MAX 20005 using namespace std;int m, n; vector<int> g[MAX]; int max_i 0; int max_s 0; int visit[MAX] {0}; void dfs(int cur, int s){if(s > max_s){max_s …

理解Spark的运行机制

Spark生态系统目前已经非常成熟了&#xff0c;有很多类型的任务都可以使用spark完成&#xff0c;我们先看下spark生态系统的组成&#xff1a; spark的核心主要由3个模块组成&#xff1a; &#xff08;1&#xff09;spark core 是spark的最底层的编程实现&#xff0c;定义了许多…

Flutter移动应用开发实战——播放视频

QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群649347320 共享学习 QQ群674240731 纪年科技aming 网络安全 ,深度学习,嵌入式,机器强化,生物智能,生命科学。

每日站立会议07

昨天&#xff1a;将程序中对数据库引用的sql语句进行优化 今天&#xff1a;进行软件界面的精确优化 遇到的问题&#xff1a;调整显示框的大小与位置转载于:https://www.cnblogs.com/Daddy/p/5546145.html

用这个方法解决Python多版本共存问题,简单粗暴

原文链接&#xff1a;http://www.juzicode.com/python-note-multi-version-python 老规矩先抛问题&#xff1a; 一台电脑上安装有多个Python版本、多套虚拟环境&#xff0c;如何在命令行快速启动对应的版本&#xff1f; 这里结论也先给出来&#xff0c;方便不想看水文的同学&…

Flutter移动应用开发实战——发布动态

QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群649347320 共享学习 QQ群674240731 纪年科技aming 网络安全 ,深度学习,嵌入式,机器强化,生物智能,生命科学。