Python实现识别图片和扫描PDF中的文字

 更新时间:2025年02月12日 08:14:46   作者:nuclear2011  
在处理扫描的PDF和图片时,文字信息往往无法直接编辑、搜索或复制,这给信息提取和分析带来了诸多不便,所以本文将介绍如何使用Python及相关OCR库实现对图片和扫描PDF中文字的识别,需要的可以了解下

在处理扫描的PDF和图片时,文字信息往往无法直接编辑、搜索或复制,这给信息提取和分析带来了诸多不便。手动录入信息不仅耗时费力,还容易出错。光学字符识别(OCR)技术能够将图片中的文字转换为可编辑文本,使信息提取和处理更加高效。如今,OCR已广泛应用于扫描文件的转换、数字化文档的整理、以及自动化数据输入等领域。本文将介绍如何使用Python及相关OCR库,实现对图片和扫描PDF中文字的识别。

工具与设置

要在Python中实现从图片和扫描PDF中提取文本,我们需要选择一个适当的OCR库。本文所选择的库是Spire.OCR for Python。该库支持多种语言,包括英语、法语、德语、简体中文、繁体中文、日语、韩语等。在使用该库之前,我们需要完成以下两个步骤:

步骤1:安装Spire.OCR for Python

在终端中运行以下命令安装Spire.OCR for Python:

pip install Spire.OCR

步骤2:下载OCR模型

Spire.OCR for Python提供了支持Windows(64位)、Linux(64位)和MacOS(10.15及以上)操作系统的三种模型。我们需要根据自己的系统下载适合的模型:

下载完成后,将它解压并保存到特定的目录下。

完成以上两个步骤后,我们就可以使用该库实现识别图片和扫描PDF中的文字。

Python 识别图片中的文字

从图片中提取文本的过程比较简单。首先,需要配置 OCR 扫描器的相关设置(例如:文本识别语言和OCR模型的路径);然后对图片进行扫描;最后将识别的文字保存为文本文件。

以下是从图片中提取文本的关键步骤:

  • 初始化 OCR 扫描器:创建 OcrScanner 对象。
  • 配置 OCR 设置:通过 OcrScanner 对象的 ConfigureDependencies 方法,设置 OCR 模型的路径和文本识别语言。
  • 扫描图片:使用 OcrScanner 对象的 Scan() 方法,从图片中识别文本。
  • 保存文本:获取识别出的文本并保存为文本文件。

实现代码:

from spire.ocr import *
 
# 初始化OcrScanner对象
scanner = OcrScanner()
 
# 配置OCR设置(文本识别语言和OCR模型路径)
# 支持的语言包括英语、法语、德语、日语、韩语、简体中文、繁体中文等
configureOptions = ConfigureOptions()
configureOptions.ModelPath = r'D:\OCR\win-x64'
configureOptions.Language = 'Chinese'
scanner.ConfigureDependencies(configureOptions)
 
# 扫描图片
scanner.Scan(r'测试.png')
 
# 获取识别的文本
text = scanner.Text.ToString() + '\n'
 
# 将文本保存到文本文件
with open('输出.txt', 'a', encoding='utf-8') as file:
file.write(text + '\n')

原始图片和识别结果:

Python 识别图片中的文字及其坐标位置

有时除了识别文本外,还需要获取文本在图片中的坐标位置。Spire.OCR也支持提取这些信息。

以下是从图片中识别文本并获取其坐标位置的关键步骤:

  • 初始化OCR扫描器:创建OcrScanner对象。
  • 配置OCR设置:通过OcrScanner对象的ConfigureDependencies方法设置OCR模型的路径和文本识别语言。
  • 扫描图片:使用OcrScanner 对象的Scan() 方法从图片中识别文本。
  • 获取边框坐标:遍历识别的文本中的文本块,获取每个文本块的边框信息(x, y坐标及其宽度和高度)。
  • 保存文本和坐标:将文本及其坐标保存到文本文件中。

实现代码:

from spire.ocr import *
 
# 初始化OcrScanner对象
scanner = OcrScanner()
 
# 配置OCR设置(文本识别语言和OCR模型路径)
# 支持的语言包括英语、法语、德语、日语、韩语、简体中文、繁体中文等
configureOptions = ConfigureOptions()
configureOptions.ModelPath = r'D:\OCR\win-x64'
configureOptions.Language = 'Chinese'
scanner.ConfigureDependencies(configureOptions)
 
# 扫描图片
scanner.Scan(r'测试.png')
 
# 遍历识别的文本中的文本块,提取每个文本块的文本和坐标位置等信息
text = ''
for block in scanner.Text.Blocks:
    rectangle = block.Box
    positions = f'{block.Text} -> x: {rectangle.X}, y: {rectangle.Y}, w: {rectangle.Width}, h: {rectangle.Height}'
    text += positions + '\n'
 
# 将文本和坐标保存到文本文件
with open('图片文字及坐标.txt', 'a', encoding='utf-8') as file:
    file.write(text + '\n')

Python 识别扫描PDF中的文字

对于扫描的PDF文档,需先将每一页转换为图片格式。可以借助Spire.PDF for Python库来实现这一点。将PDF页面转换为图片后,即可对每张图片执行 OCR 处理。

在使用以下代码之前,请先通过以下命令安装Spire.PDF:

pip install Spire.PDF

以下是从扫描PDF中提取文本的关键步骤:

  • 将PDF页面转换为图片:使用Spire.PDF加载扫描的PDF文档,然后使用PdfDocument.SaveAsImage()方法将文档的每一页保存为图片。
  • 执行OCR:使用Spire.OCR识别每张图片中的文本。
  • 保存识别的文本:将识别的文本保存到文本文件中。

实现代码:

from spire.pdf import *
from spire.ocr import *
import io
 
# 将PDF页面转换为图片
def convert_pdf_page_to_image(pdf, page_index):
    return pdf.SaveAsImage(page_index)
 
# 从图片中识别文本
def recognize_text_from_image(imgName, language, model_path):
    # 初始化OCR扫描器并配置OCR模型的路径和文本识别语言
    scanner = OcrScanner()
    configure_options = ConfigureOptions()
    configure_options.Language = language
    configure_options.ModelPath = model_path
    scanner.ConfigureDependencies(configure_options)
 
    # 执行OCR并返回识别的文本
    scanner.Scan(imgName)
    data = scanner.Text.ToString()
    return data
 
# 加载扫描PDF文档
pdf = PdfDocument()
pdf.LoadFromFile('扫描.pdf')
 
# 创建文本文件以保存提取的文本
with open('扫描PDF.txt', 'a', encoding='utf-8') as writer:
    for page_index in range(pdf.Pages.Count):
        # 将PDF页面转换为图片
        image = convert_pdf_page_to_image(pdf, page_index)
        imgName="toImage_"+str(page_index)+".png"
        image.Save(imgName)
 
        # 从图片中识别文本
        recognized_text = recognize_text_from_image(imgName, 'Chinese', r'D:\OCR\win-x64')
 
        # 将识别的文本写入文本文件
        writer.write(f'Page {page_index + 1}:\n')
        writer.write(recognized_text)
        writer.write('\n\n')  # 在页面之间添加两个换行符
 
print('文本已成功保存到"扫描PDF.txt"。')

注意事项

OCR的准确性很大程度上受到图片质量的影响。使用清晰、对比度良好,不模糊、倾斜的图片,可以提高识别结果的准确性。不同OCR库可能对不同语言和字体的支持程度不同,一些特定语言或字体可能识别效果较差。因此在识别完成后,最好再人工校对一遍。

到此这篇关于Python实现识别图片和扫描PDF中的文字的文章就介绍到这了,更多相关Python识别图片和PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python线程安全及多进程多线程实现方法详解

    python线程安全及多进程多线程实现方法详解

    这篇文章主要介绍了python线程安全及多进程多线程实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python实现生成bmp图像的方法

    Python实现生成bmp图像的方法

    本文主要介绍了Python实现生成bmp图像的方法,对大家的学习具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-06-06
  • Pytorch反向求导更新网络参数的方法

    Pytorch反向求导更新网络参数的方法

    今天小编就为大家分享一篇Pytorch反向求导更新网络参数的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python 下载Bing壁纸的示例

    Python 下载Bing壁纸的示例

    这篇文章主要介绍了Python 下载Bing壁纸的示例,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-09-09
  • python基础之并发编程(一)

    python基础之并发编程(一)

    这篇文章主要介绍了详解python的并发编程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-10-10
  • Python实现破解12306图片验证码的方法分析

    Python实现破解12306图片验证码的方法分析

    这篇文章主要介绍了Python实现破解12306图片验证码的方法,涉及Python图片截取、调用百度识图及正则截取等相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • Python的Django框架下管理站点的基本方法

    Python的Django框架下管理站点的基本方法

    这篇文章主要介绍了Python的Django框架下管理站点的基本方法,需是Django站点部署的基础,要的朋友可以参考下
    2015-07-07
  • Python的Tkinter点击按钮触发事件的例子

    Python的Tkinter点击按钮触发事件的例子

    今天小编就为大家分享一篇Python的Tkinter点击按钮触发事件的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 两个命令把 Vim 打造成 Python IDE的方法

    两个命令把 Vim 打造成 Python IDE的方法

    这篇文章主要介绍了两个命令把 Vim 打造成 Python IDE,需要的朋友可以参考下
    2016-03-03
  • python实战之用emoji表情生成文字

    python实战之用emoji表情生成文字

    这篇文章主要介绍了python实战之用emoji表情生成文字,文中有非常详细的代码示例,对正在学习python的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05

最新评论