python识别图片上的文字_Python程序图片和pdf上文字识别实例
实例一:先减少背景杂音,再做图片文字识别
为了提高识别率,先用opencv-python对扫描的图片做预处理(减少背景杂音),然后调用pytesseract识别图片上的文字。处理方式就是:
学习Python中有不明白推荐加入交流群
号:960410445
群里有志同道合的小伙伴,互帮互助,
群里有不错的视频学习教程和PDF!
1、将图片的颜色模式转成灰度模式,再用OTSU做二值化处理
2、将处理结果保存成临时图片文件
3、调用pytesseract识别临时图片上的文字,识别完毕后删掉临时图片
选择要识别文字的图片调用tkinter打开图形化对话窗口,tkinter是python内置模块,可直接引进不必安装。对tkinter不做太多解释,只是借助它的功能函数打开对话窗口。引入内置os的功能函数删除临时文件。
from PIL import Image # pytesseract识别图片上的文字时要用
import pytesseract # 识别图片上的文字
import cv2 # 图片预处理,减少背景杂音
import os # 删除临时文件
from tkinter import Tk # 帮忙用图形化界面找到要识别的图片文件
from tkinter.filedialog import askopenfilename
Tk().withdraw() # 这里不是要全部图形化界面,所以就不显示根窗口了
imgName = askopenfilename() # 显示“打开”窗口,返回选中的图片文件的路径+文件名字符串
预处理图片
greyImg = cv2.imread(imgName, 0)
预处理第一步,彩色模式转成灰度模式:以灰度模式打开图片,生成灰度图片
greyImg = cv2.threshold(greyImg, 0, 255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
预处理第二步,OTSU二值法,返回的是列表,第二个元素(索引为1)指向被处理的图片
将预处理结果保存成临时文件,文件名用它在系统的进程ID(os.getpid())
filename = "{}.png".format(os.getpid())
cv2.imwrite(filename, greyImg)
调用pytesseract将图片上的文字识别出来
txt = pytesseract.image_to_string(Image.open(filename))
os.remove(filename) # 删除临时图片文件
with open("toFile.txt", 'w', encoding='utf-8') as fObject:
fObject.write(txt) # 将识别出来的字符串保存到文本文件
提高图片文字的识别率和正确率是个大话题,跟图片上文字的背景有关系,跟图片分辨率有关系,跟识别用的字库的识别能力也有关系(字库可以训练),牵扯的技术手段很多。除了减少背景杂音外,还有一些预处理工作我们也可以做,比如把图片上有文字的部分截取下来识别(效果很明显);把图片上的文字分成一小段一小段识别,甚至分成一个一个字符来识别……有兴趣的朋友可以自己研究。
实例二:识别pdf上的文字
识别pdf上的文字分几步进行:
1、引入wand模块,把pdf文件转成图片序列,通过序列的索引可以获得pdf的每一页。
2、遍历这个图片序列,把序列的每一页变成wand图片对象,转成灰度模式(简单预处理下,以提高识别度),接下来本应添加进图像列表req_image中,但却遇到一个问题:
PyOCR模块做图片文字识别的功能函数的形参只接收pillow的Image模块打开的图片PIL.Image.open(),不接受wand图形对象,PIL.Image.open()也不接收wand图片对象。当然可以wand图像对象保存成图片文件,然后PIL.Image.open()打开这个图片文件。
有个更快的处理方法,不用硬盘(硬盘慢)做媒介用缓存(buffer):先用wand图片对象的make_blob把图片转成二进制数据流,把二进制数据流放入列表req_image中。
3、遍历列表req_image,ByteIO()读取二进制数据流,返回值可以被PIL.Image.open()接受。接下去就可以调用PyOCR模块的功能函数做图片文字转换了。
4、将识别结果放进列表final_text,用pprint模块的pprint()显示出来。pprint,pretty print顾名思义,输出结果规整好看一些。
from wand.image import Image as wandImage # pdf –> jpeg
from PIL import Image as pillowIMage # PyOCR需要
import pyocr.builders # OCR识别
import io # 将Wand处理结果传给给Pillow
import pprint # 美美的打印出来
PyOCR初始化
tool = pyocr.get_available_tools()[0]
获得OCR内核工具,这里用的是Tesseract
lang = tool.get_available_languages()[0]
获得识别用语言,这里用的是简体中文,参见20.2 PyOCR的初始化程序
req_image = [] # 存放pdf转换过来的图片二进制数据流
final_text = [] # 存放识别结果,每个元素是每一页识别出来的文字
ima_pdf = wandImage(filename='instance.pdf', resolution=300)
打开pdf文件,生成wand图片对象。分辨率设为300,设高分辨率有助于提高识别率
image_jpeg = ima_pdf.convert('jpeg')
pdf文件转成图片,实际上是个图片序列,序列的长度与pdf的页数相同
for img in image_jpeg.sequence: # 遍历图片序列的每页图片
img_page = wandImage(image=img) # 生成为wand图片对象
img_page.type = 'grayscale' # 转成灰度模式有助于OCR识别文字
req_image.append(img_page.make_blob('jpeg'))
转成二进制数据流放进列表
for img in req_image: # 一页一页OCR识别文字
text = tool.image_to_string(
pillowIMage.open(io.BytesIO(img)),
# io.BytesIO()从内存中读入二进制数据流
lang=lang, # 识别语言
builder=pyocr.builders.TextBuilder() # 识别器
)
final_text.append(text) # 识别出来的结果添进列表
pprint.pprint(final_text) # 显示识别结果
python识别图片上的文字_Python程序图片和pdf上文字识别实例相关推荐
- python处理pdf实例_Python程序图片和pdf上文字识别实例
实例一:先减少背景杂音,再做图片文字识别 为了提高识别率,先用opencv-python对扫描的图片做预处理(减少背景杂音),然后调用pytesseract识别图片上的文字.处理方式就是: 学习Pyt ...
- python识别pdf文字_Python 神工具包!翻译、文字识别、语音转文字统统搞定
今天给大家介绍一款 Python 制作的实用工具包,包含多种功能: 音频转文字 文字转语音 截图 OCR文字识别 复制翻译 举个例子,比如截图 OCR 文字识别就有很多实用场景. 常会遇到有些 PDF ...
- python图片重命名 工具_python - 请问django如何给上传的图片重命名
问 题 我的models.py: pic = models.ImageField(upload_to='img/%Y/%m') 怎样给上传的图片重命名?例如:以当前上传的时间给图片命名.谢谢~! 解决 ...
- python图片修复软件下载_python 实现图片修复(可用于去水印)
在现实的生活中,我们可能会遇到一些美好的或是珍贵的图片被噪声干扰,比如旧照片的折痕,比如镜头上的灰尘或污渍,更或者是某些我们想为我所用但有讨厌水印,那么有没有一种办法可以消除这些噪声呢? 答案是肯定的 ...
- python图片转为二进制流_python将图片转为二进制-女性时尚流行美容健康娱乐mv-ida网...
女性时尚流行美容健康娱乐mv-ida网 mvida时尚娱乐网 首页 美容 护肤 化妆技巧 发型 服饰 健康 情感 美体 美食 娱乐 明星八卦 首页 > 高级搜索 mysql 5.7.9 lin ...
- php 点击选择图片上传,微信小程序图片选择、上传到服务器、预览(PHP)实现实例...
微信小程序图片选择.上传到服务器.预览(PHP)实现实例 小程序实现选择图片.预览图片.上传到开发者服务器上 后台使用的tp3.2 图片上传 请求时候的header参考时可以去掉(个人后台验证权限使用 ...
- python将图片转为字符画_Python将图片转换为字符画的方法
最近在学习python,看到网上用python将图片转换成字符画便来学习一下 题目意思是,程序读入一个图片,以txt格式输出图片对应的字符画,如图所示: 以下是python代码: # coding:u ...
- python将图片原比例缩小_Python实现图片长宽比例缩放和填充
1 ''' 2 : 一个缩略图程序, 不需要的部分可以去掉3 : 主要实现了尺寸(长宽)和大小(KB)的缩小4 ''' 5 importcv26 importos.path7 from PIL imp ...
- python程序猿_python程序员指南 pdf下载
python程序员指南 pdf是一本专为对python编程感兴趣的朋友准备的指导图书,作从最基本的基础知识到繁琐的运用,都进行的详细的解答,是你自学的最好教程了,感兴趣欢迎下载学习! python程序 ...
- python将图像变成没有颜色_python将图片设置背景颜色修改为透明色
由于原始的logo是白色背景的,而我们需要将白色背景更改为透明色,这里启用万能工具python进行图片转换了,使用到的就是pillow包的image. png格式是具有除了rgb三色外第四个参数表明像 ...
最新文章
- php字符串处理函数相关操作
- 面向对象先导课程——PART3
- 软件工程结对作业02
- 算法--360面试:使用递归实现:a0=1,a1=1;a2=a0+a1;a3=a1+a2...以此类推,求a30
- 最小生成树 洛谷P3366【模板】最小生成树 洛谷P2820 局域网
- Application.DoEvents可能不是线程安全的
- [转载] python仿真入门_python基础-入门
- 如何防止 Safari 使用来自 iOS 15 和 macOS Monterey 的网站着色?
- 【数学建模】7 线性规划及例题详解
- MOOC_Python语言程序设计_习题_《沉默的羔羊》文本分析
- C# MVC 微信支付教程系列之公众号支付代码
- python课程论文_python结课论文_python论文_工程伦理结课论文文库
- Rosalind第八题:将RNA转化成蛋白质
- 创建BUG时增加字段
- 博客-空间-视频作品点赞的固定独立IP
- 浏览器插件,轻松-快速获取网站源代码
- teamviewer未就绪,请检查您的连接。
- 买一台云服务器到底能做什么?
- JAVA - Map
- 洛谷 P2300 合并神犇 解题报告