你需要的是一个 Optical Character Recognition (OCR) 工具来解析PDF中的图像并转换为文本。Python 中有一 ...
from pdf2image import convert_from_path
import pytesseract
from PIL import Image
import io
# 你的 PDF 文件路径
pdf_path = 'f:\\'+input('请输入要转换的文件名')+'.pdf'
# 将 PDF 文件转换为 PIL Image 对象列表
images = convert_from_path(pdf_path)
# 初始化一个空字符串用于存储文本
result_text = ''
# 遍历所有的图片
for i, img in enumerate(images):
# 将图片转化为文本
text = pytesseract.image_to_string(img, lang='chi_sim')# 使用'chi_sim'参数进行中文识别
# 将识别后的文本添加到结果中
result_text += text
# 将结果存储到 txt 文件中
with open('f:\\'+input('请输入要保存的文件名')+'.txt', 'w', encoding='utf-8') as file:
file.write(result_text)
错误信息
请输入要转换的文件名456
Traceback (most recent call last):
File "C:\Users\ssq\AppData\Roaming\Python\Python39\site-packages\pdf2image\pdf2image.py", line 568, in pdfinfo_from_path
proc = Popen(command, env=env, stdout=PIPE, stderr=PIPE)
File "C:\Program Files (x86)\Python39-32\lib\subprocess.py", line 951, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Program Files (x86)\Python39-32\lib\subprocess.py", line 1420, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: 系统找不到指定的文件。
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\Python\pdf2ocr.py", line 10, in <module>
images = convert_from_path(pdf_path)
File "C:\Users\ssq\AppData\Roaming\Python\Python39\site-packages\pdf2image\pdf2image.py", line 127, in convert_from_path
page_count = pdfinfo_from_path(
File "C:\Users\ssq\AppData\Roaming\Python\Python39\site-packages\pdf2image\pdf2image.py", line 594, in pdfinfo_from_path
raise PDFInfoNotInstalledError(
pdf2image.exceptions.PDFInfoNotInstalledError: Unable to get page count. Is poppler installed and in PATH?
进程已结束,退出代码1
ssqchina 发表于 2023-7-18 21:40
from pdf2image import convert_from_path
import pytesseract
from PIL import Image
这个错误信息是由于你的系统中没有安装 poppler ,或者 poppler 没有被添加到你的系统路径(PATH)中。
pdf2image 库需要 poppler 工具包来从 PDF 文件中提取图像。你需要确保你已经安装了 poppler 并且它已经被添加到了你的系统路径中。
对于 Windows 使用者,你可以按照以下步骤安装和配置 poppler :
1.下载 poppler for Windows 的二进制文件。
2.下载完成后,解压缩文件。
3.将解压缩的文件夹的路径添加到你的系统环境变量 PATH 中。步骤如下:
·在计算机的属性中选择“高级系统设置”。
·点击“环境变量”按钮。
·在“系统变量”区域,滚动找到并选择 Path ,然后点击“编辑”按钮。
·在编辑环境变量窗口中,点击“新建”,然后粘贴你的 poppler 文件夹的路径。
·保存更改并重启你的开发环境(如命令提示符、PowerShell或PyCharm等)。
现在,你应该能够成功运行你的代码了。如果还有问题,请再次检查你的 poppler 安装和配置。
求最佳答案{:10_254:} 本帖最后由 isdkz 于 2023-7-19 06:27 编辑
ssqchina 发表于 2023-7-18 16:51
那就是python还不能完美解决这个问题
python可以通过调用本地的OCR来识别图片里的文字,不过准确度没有那么高,也可以自己训练一个OCR,可以用百度的Paddle OCR这个开源项目
也可以通过调用OCR接口来识别图片,比如百度智能云,但是调用接口是要费用的 陶远航 发表于 2023-7-18 16:57
你可以使用Python中的OCR(光学字符识别)库来将图片格式的PDF转换为可搜索的文本文件。OCR库可以帮助你 ...
pip install tesseract这个装的不带中文 sfqxx 发表于 2023-7-18 16:58
你需要的是一个 Optical Character Recognition (OCR) 工具来解析PDF中的图像并转换为文本。Python 中有一 ...
你的回复里有中文识别设置,给你最佳,但是我修改后的 只能识别小的PDF文件 大的文件出错,说超过容量 ssqchina 发表于 2023-7-19 16:36
你的回复里有中文识别设置,给你最佳,但是我修改后的 只能识别小的PDF文件 大的文件出错,说超过容量
{:5_109:} ssqchina 发表于 2023-7-19 16:36
你的回复里有中文识别设置,给你最佳,但是我修改后的 只能识别小的PDF文件 大的文件出错,说超过容量
这种错误通常是由于系统尝试处理的图像或PDF文件过大,超过了Tesseract OCR或Python库分配的内存限制所导致的。
有几种可能的解决方案:
1. **增加系统内存**:如果可能,增加你的系统内存可能是最直接的解决方案。
2. **分解大文件**:将大PDF文件分解为多个小文件,并单独进行处理。这样可以避免一次性加载过大的文件。例如,你可以修改`pdf_to_image`函数,让它每次只处理一部分页面,而不是整个PDF文件。
3. **调整图像质量**:减小从PDF中提取的图像的质量或分辨率。这将减少每个图像的大小,从而降低内存使用量。但是,请注意这可能会影响OCR的准确性。
4. **Tesseract配置**:你可能需要调整Tesseract的配置,以便于处理大文件。这可能需要修改Tesseract的源代码或配置文件。
5. **使用其他OCR工具**:如果以上方法都无法解决问题,你可能需要考虑使用其他OCR工具,如Amazon Textract,Google Cloud Vision OCR等,这些工具可能对大文件的处理能力更强。
例如,你可以尝试将PDF分页转换为图片的代码调整如下,每次只处理一部分页面:
# 将PDF转换为图片
def pdf_to_image(pdf_path, start_page=0, end_page=None):
images = convert_from_path(pdf_path, first_page=start_page, last_page=end_page, poppler_path=poppler_path)
return images
然后在你的主函数中,分批处理每个页面:
if __name__ == '__main__':
# 将'example.pdf'转换为图片
start_page = 1
end_page = start_page + 10# 每次处理10页
while True:
images = pdf_to_image(r'f:\123.pdf', start_page, end_page)
if not images:# 如果没有更多的页面,退出循环
break
# 对图片进行OCR识别
text_list = recognize_text(images)
# 将识别结果保存到'example.txt'中
save_text(text_list, r'f:\123.txt')
start_page += 10
end_page += 10
这样,你的程序每次只处理10页,这应该能降低内存使用量。你可以根据你的系统资源和PDF文件的大小,调整每批处理的页面数。
页:
1
[2]