鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: ssqchina

[已解决]类似图片格式的PDF该如何转txt文件啊?

[复制链接]
 楼主| 发表于 2023-7-18 21:40:51 | 显示全部楼层
sfqxx 发表于 2023-7-18 16:58
你需要的是一个 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: [WinError 2] 系统找不到指定的文件。

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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 23:36:11 | 显示全部楼层
ssqchina 发表于 2023-7-18 21:40
from pdf2image import convert_from_path
import pytesseract
from PIL import Image

[b]这个错误信息是由于你的系统中没有安装 poppler ,或者 poppler 没有被添加到你的系统路径(PATH)中。

pdf2image 库需要 poppler 工具包来从 PDF 文件中提取图像。你需要确保你已经安装了 poppler 并且它已经被添加到了你的系统路径中。

对于 Windows 使用者,你可以按照以下步骤安装和配置 poppler :

1.下载 poppler for Windows 的二进制文件。

2.下载完成后,解压缩文件。

3.将解压缩的文件夹的路径添加到你的系统环境变量 PATH 中。步骤如下:

   ·在计算机的属性中选择“高级系统设置”。
   ·点击“环境变量”按钮。
   ·在“系统变量”区域,滚动找到并选择 Path ,然后点击“编辑”按钮。
   ·在编辑环境变量窗口中,点击“新建”,然后粘贴你的 poppler 文件夹的路径。
   ·保存更改并重启你的开发环境(如命令提示符、PowerShell或PyCharm等)。

现在,你应该能够成功运行你的代码了。如果还有问题,请再次检查你的 poppler 安装和配置。

求最佳答案
[/b]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 06:23:53 | 显示全部楼层
本帖最后由 isdkz 于 2023-7-19 06:27 编辑
ssqchina 发表于 2023-7-18 16:51
那就是python还不能完美解决这个问题


python可以通过调用本地的OCR来识别图片里的文字,不过准确度没有那么高,也可以自己训练一个OCR,可以用百度的Paddle OCR这个开源项目

也可以通过调用OCR接口来识别图片,比如百度智能云,但是调用接口是要费用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-19 16:25:48 | 显示全部楼层
陶远航 发表于 2023-7-18 16:57
你可以使用Python中的OCR(光学字符识别)库来将图片格式的PDF转换为可搜索的文本文件。OCR库可以帮助你 ...

pip install tesseract这个装的不带中文
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-19 16:36:33 | 显示全部楼层
sfqxx 发表于 2023-7-18 16:58
你需要的是一个 Optical Character Recognition (OCR) 工具来解析PDF中的图像并转换为文本。Python 中有一 ...

你的回复里有中文识别设置,给你最佳,但是我修改后的 只能识别小的PDF文件 大的文件出错,说超过容量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 16:38:04 | 显示全部楼层
ssqchina 发表于 2023-7-19 16:36
你的回复里有中文识别设置,给你最佳,但是我修改后的 只能识别小的PDF文件 大的文件出错,说超过容量

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-19 16:41:20 | 显示全部楼层
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文件的大小,调整每批处理的页面数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 18:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表