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) # 显示识别结果

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
指纹识别课程设计python的实现有多种资源可供参考。其中,引用中提供了基于相似三角形的指纹识别系统的Python源码和代码注释,附有程序设计实现的PDF报告。该方法使用传统图像处理方法实现,可以作为学习和参考使用。 此外,引用中提供了基于OpenCV和tinker的指纹识别系统的Python源码和代码注释,以及项目说明和设计报告。这个资源是一个数字图像处理课程设计的实例,可以作为学习和参考。 引用提供了一个资源包,包含了课程论文的Word文档、指纹识别Python源码以及一个指纹识别小工具。这个工具整合了多个web指纹库和多种指纹检测方法,可以实现更快捷准确的指纹检测。你可以参考链接https://biyezuopin.blog.csdn.net/article/details/122442283了解更多详细信息。 综上所述,你可以根据自己的需求选择适合的资源进行指纹识别课程设计的Python实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于相似三角形的指纹识别系统python源码+代码注释+程序设计实现报告.zip](https://download.csdn.net/download/DeepLearning_/87360786)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [基于OpenCV和tinker的指纹识别系统python源码+代码注释+项目说明及设计报告(数字图像处理课程设计).zip](https://download.csdn.net/download/DeepLearning_/87360793)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Web简单快捷的指纹识别小工具-在线指纹识别平台设计.zip](https://download.csdn.net/download/sheziqiong/86813763)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值