OCR识别扫描版PDF文件(Python版)

概述

本文识别扫描版PDF文件(不是文字版)基本原理基于OCR识别。若要处理文字版OCR,百度pdfminer或pdfplumder等使用即可。

依赖:

  • 应用程序tesseract-ocr https://digi.bib.uni-mannheim.de/tesseract/
  • python库pytesseract、pdf2image

基本思路:

  • 使用pdf2image.convert_from_path将pdf文件转化为png格式图片;
  • 通过pytesseract链接tesseract-ocr,使用pytesseract.image_to_string识别图像中的文字。

扫描版PDF文字识别

Tesseract OCR实现pdf文本识别

tesseract-ocr安装与测试

  • tesseract-ocr安装完成后,配置环境变量,即将tesseract的安装路径添加到‘path’系统变量;
    • 配置完成后,在cmd窗口输入tesseract -v会显示配置成功信息。
  • 识别简体中文需要下载chi_sim.traindata字库https://github.com/tesseract-ocr/tessdata,注意,该字库仅支持Tesseract 4.0.0及更高版本;
  • 将下载好的字库放到Tesseract-OCR安装目录下的tessdata文件夹里;
  • cmd中进入需要识别图片目录,执行tesseract *.png result -l eng将图片’*.png’的OCR结果保存至’result.txt’文件夹。
    • -l参数为OCR识别语言,默认英语eng。
  • 中文的识别效果不太理想,需要自己训练下。

python实现基于tesseract的pdf文本识别

import pytesseract
from pdf2image import convert_from_path
import os

os.chdir(os.getcwd())

def tess_ocr(fname, lang):
	# 将pdf转换为png后,保存在dirname文件夹
	dirname = fname.rsplit('.', 1)[0]
	if not os.path.exists(dirname):
		os.mkdir(dirname)
	images = convert_from_path(fname, fmt='png', output_folder=dirname)
	text = ''
	for img in images:
		text += pytesseract.image_to_string(img, lang=lang)

	with open('result.txt', 'w', encoding='utf-8') as f:
		f.write(text)
	return text

fname = 'test.pdf'
text = tess_ocr(fname, lang='chi_sim')

百度 OCR实现pdf文本识别

由于直接使用tesseract识别效果并不理想,尝试百度OCR。

准备

  • 安装python库baidu-aip,pip install baidu-aip

  • 百度智能云创建文本识别应用,获得’APP_ID’ 、‘API_KEY’ 和’SECRET_KEY’ 字段;

    在这里插入图片描述

    在这里插入图片描述

  • 标准版文字识别‘5000次/天免费’,一般是足够的。

python实现基于百度OCR的pdf文本识别

from pdf2image import convert_from_path
from aip import AipOcr
import os

APP_ID = '***'
API_KEY = '***'
SECRET_KEY = '***'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

def baidu_ocr(fname):
	f = open('result.txt', 'w', encoding='utf-8')
	dirname = fname.rsplit('.', 1)[0]
	if not os.path.exists(dirname):
		os.mkdir(dirname)
	images = convert_from_path(fname, fmt='png', output_folder=dirname)

	for img in images:
		with open(img.filename, 'rb') as fimg: 
			img = fimg.read() # 根据'PIL.PngImagePlugin.PngImageFile'对象的filename属性读取图片为二进制
		msg = client.basicGeneral(img)
		for i in msg.get('words_result'):
			f.write('{}\n'.format(i.get('words')))
		f.write('\f\n') 
	f.close()

baidu_ocr('1.pdf')

参考

  1. Tesseract-OCR 安装、中文识别与训练字库
  2. pytesseract识别PDF文件中的文字(OCR)
  3. python3调用百度API–ocr实现图像/文字/验证码识别
  • 11
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 编码是将信息转换为特定格式或规则的过程,以便计算机能够理解和处理。对于扫描PDF文件,编码隐藏在计算机背后的语言中起着关键作用。 在计算机背后的语言中,常用的编码方式包括ASCII、UTF-8等。ASCII编码是最早的字符编码方式,它将字符映射为7位二进制数,包含了常见的字符、数字和符号。但是对于非英语语言或特殊符号,ASCII编码就无能为力了。 UTF-8编码则是Unicode字符编码的一种实现方式,它可以表示全球范围内的所有字符。UTF-8使用不同长度的编码,根据字符的不同包含1到4个字节。这样可以更好地适应各种语言字符的编码需求。 在扫描PDF文件中,编码起着至关重要的作用。扫描PDF文件是通过将实际纸质文档扫描成图像形式,并将其嵌入PDF文件中来生成的。这样做的一个挑战是如何将扫描的图像转换为可编辑的文本。 为了实现这一目标,编码技术的作用变得尤为重要。首先,扫描PDF文件需要使用光学字符识别OCR)技术将图像中的文字转换为可编辑的文本。这个过程中,编码技术帮助计算机识别不同字符的编码方式,从而正确地转换为文本形式。 其次,编码还允许对扫描PDF文件进行压缩,以减小文件大小。不同的编码方式可以根据字符的频率和规律选择不同的编码方式,从而有效地减小文件的体积。 总而言之,编码是计算机背后的语言中的核心概念,它在扫描PDF文件中起着关键作用。通过合适的编码方式,我们可以将扫描的图像转换为可编辑的文本,并对文件进行压缩,提高文件的处理效率。 ### 回答2: 编码是计算机科学中的重要概念,指的是将信息从一种形式转换成另一种形式的过程。编码不仅仅存在于计算机的表面,还隐藏在计算机的背后的语言中。 计算机背后的语言包括计算机编程语言和机器语言。计算机编程语言是一种人类和计算机之间进行交流的方式,如Python、Java等。编程语言使用特定的符号和语法规则来编写程序,通过编译器或解释器将程序转换为计算机能够理解和执行的机器语言。 机器语言是一种计算机能够直接执行的语言,它由二进制代码组成,用来表示计算机指令和数据。在计算机的内部,所有的信息都以二进制形式存储和处理。编码在这个过程中起到了关键的作用。 在与计算机交互的过程中,我们通常使用文本、图像、音频等不同的形式表达信息。这些信息需要经过编码的过程才能被计算机识别和处理。例如,文本信息可以通过ASCII码或Unicode编码进行转换,图像可以使用JPEG或PNG格式进行编码,音频可以使用MP3或WAV格式进行编码。 此外,在数字化的世界中,编码还广泛应用于数据压缩、加密和传输等方面。通过有效的编码算法,可以减少数据的存储空间和传输带宽,提高数据的安全性和可靠性。 总之,编码是计算机世界中不可或缺的一部分,它隐匿在计算机背后的语言中,为信息的存储、处理和传输提供了基础和支持。无论是程序员编写代码,还是用户使用计算机,编码都扮演着重要的角色。 ### 回答3: 编码是将信息转化为特定的符号或格式的过程。它在计算机技术中扮演了重要的角色,无论是编写应用程序、设计网站还是传输文件,编码都是必不可少的环节。 计算机背后的语言是指计算机使用的二进制语言。计算机内部是由大量的电子元件组成,它们只能识别两个状态,即对应二进制的0和1。因此,计算机通过编码将人类理解的信息转化为二进制形式,以便与人类进行交互。 扫描PDF是一种电子文档格式,它能够将纸质文档转化为数字图像,并对这些图像进行编码以实现存储和传输。 在扫描PDF中,编码起到了至关重要的作用。首先,扫描设备通过光学传感器将纸质文档转化为数字图像。这些图像需要经过特定的编码算法,将像素点的灰度值或颜色值转化为二进制形式进行表示。这样,文档的内容就能够以二进制的形式保存下来。 另外,编码还可以对扫描图像进行压缩。通过压缩算法,可以减少文件的体积,提高存储和传输的效率。常见的压缩算法包括JPEG、JPEG 2000等。 除了对图像进行编码外,PDF文件中的文本内容也需要进行编码。对于拉丁字母等常见字符,采用的是ASCII编码或Unicode编码。而对于汉字等复杂字符,通常采用GBK或UTF-8编码。 综上所述,编码是计算机背后的语言,它实现了信息从人类可理解的形式到计算机可处理的二进制形式的转换。在扫描PDF中,编码扮演了重要的角色,实现了图像和文本的数字化、存储和传输。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值