鱼C论坛

 找回密码
 立即注册
查看: 2357|回复: 20

[已解决]@FishC,想要一个调用AI进行OCR的工具

[复制链接]
发表于 2024-7-16 09:55:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题,想要一个调用AI进行PDF文档OCR的工具,目前现成的有哪些推荐??
最佳答案
2024-7-16 10:16:02
shadowmage 发表于 2024-07-16 10:15
可以给我编写一个Python程序,对指定路径的指定PDF文 ...


哈哈,鱼油的要求果然很具体呀!没问题,马上给你整一个简单易懂的Python程序,使用Tesseract OCR来实现对PDF文件的文字识别,并将结果输出到指定的TXT文件中。

在开始之前,你需要确保已经安装了以下软件和库:
1. **Tesseract OCR**:可以通过[tesseract releases](https://github.com/tesseract-ocr/tesseract/releases)下载并安装,也可通过包管理工具安装:
   - Windows: 下载并安装 `tesseract-ocr-w64-setup-vx.x.x.exe`
   - MacOS: 通过Homebrew安装 `brew install tesseract`
2. **Python库**:
   - PyPDF2: 用于读取PDF文件
   - pytesseract: 用于调用Tesseract OCR
   - PIL (Pillow): 用于图像处理
     
   安装这些库的命令:
  
  1. pip install PyPDF2 pytesseract pillow
复制代码


好了,现在我们正式开始编写代码了:

  1. import os
  2. import sys
  3. import PyPDF2
  4. import pytesseract
  5. from PIL import Image
  6. from pdf2image import convert_from_path

  7. # 询问用户输入需要OCR的文件路径
  8. pdf_path = input("请输入需要OCR的文件路径:")

  9. # 检查文件是否存在
  10. if not os.path.isfile(pdf_path):
  11.     print(f"错误:文件 {pdf_path} 不存在。")
  12.     sys.exit(1)

  13. # 询问用户输入OCR结果TXT存储路径
  14. txt_path = input("请输入OCR后的文字TXT存储路径:")

  15. # 将PDF转换为图像
  16. pages = convert_from_path(pdf_path)
  17. text = ''

  18. # 对每一页进行OCR
  19. for page_num, page in enumerate(pages):
  20.     # 调用Tesseract OCR进行识别
  21.     page_text = pytesseract.image_to_string(page)
  22.     text += f"\n--- Page {page_num + 1} ---\n{page_text}\n"

  23. # 将识别结果保存到TXT文件
  24. with open(txt_path, 'w', encoding='utf-8') as txt_file:
  25.     txt_file.write(text)

  26. print(f"OCR 完成!结果已保存到 {txt_path}")
复制代码


### 代码说明:
1. **导入所需库**:`PyPDF2` 用于读取PDF文件,`pytesseract` 用于调用Tesseract OCR,`Pillow` 用于图像处理,`convert_from_path` 用于将PDF页面转换为图像。
2. **获取用户输入**:让用户输入PDF文件路径和输出的TXT文件路径。
3. **PDF转图像**:通过`convert_from_path`将PDF文件的每一页转换为图像。
4. **OCR处理**:遍历每一页图像,调用`pytesseract.image_to_string`进行文字识别,并将结果累积到`text`变量中。
5. **保存结果**:将累积的文字结果写入用户指定的TXT文件中。

这段代码会按照你描述的步骤接受用户输入,并完成OCR操作,将结果保存到指定的TXT文件。希望这个工具能帮到你,让你的PDF文档“开口说话”!加油,冲鸭!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-7-16 09:56:37 | 显示全部楼层
哈哈,鱼油想要个能让PDF瞬间“识字”的神器呀!别担心,这就给你推荐几个靠谱的OCR工具,让你的PDF像鲨鱼遇到水一样畅快!

1. **Adobe Acrobat Pro DC**:这个可是OCR界的“大白鲨”!功能强大,能识别多种语言,还能进行批量处理。不过它的价格有点“深海”,适合预算充足的鱼油。

2. **ABBYY FineReader**:这款就像是OCR工具里的“章鱼”,多功能且灵活。它的识别率和准确性非常高,支持多种文件格式转换。价格比Adobe略低,性价比很高。

3. **Tesseract OCR**:这个是开源的工具,像是“虾米”一样小巧但功能强大。需要一点编程基础,但完全免费,适合DIY爱好者。

4. **Google Drive**:没错,谷歌云盘也能做OCR!上传PDF到谷歌云盘,然后右键选择“用Google Docs打开”,它会自动进行OCR处理。简直是“鲶鱼效应”——简单方便还免费。

5. **Microsoft OneNote**:这是微软家的“海豚”级别工具。将PDF导入OneNote,它能自动识别文字,支持多设备同步,适合用微软生态的鱼油们。

6. **Smallpdf**:在线工具中的“电鳗”,速度快而且操作简单。打开网站,上传PDF,选择OCR功能,一键搞定,非常适合懒癌晚期的鱼油。

7. **PDF Candy**:这款工具如同“糖果鱼”,操作简单,界面友好,免费在线使用。OCR效果也不错,适合日常小规模处理。

选择合适的OCR工具,鱼油可以根据自己的需求和预算来决定。如果你喜欢折腾,Tesseract OCR是个不错的选择;如果你追求简单快捷,Google Drive和Smallpdf都能满足你的需求;而如果你是土豪鱼油,那就直接上Adobe Acrobat Pro DC吧!

希望这些推荐能帮到你,让你的PDF文档秒变可编辑!加油,冲鸭!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-16 10:04:09 | 显示全部楼层
FishC 发表于 2024-7-16 09:56
哈哈,鱼油想要个能让PDF瞬间“识字”的神器呀!别担心,这就给你推荐几个靠谱的OCR工具,让你的PDF像鲨鱼 ...

我想要免费的,小一点的工具,不要在线工具。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-16 10:05:39 | 显示全部楼层
shadowmage 发表于 2024-07-16 10:04
我想要免费的,小一点的工具,不要在线工具。


哈哈,好嘞,鱼油想要免费的又小巧的工具对吧~ 那么像开源神器Tesseract OCR和简单易用的Microsoft OneNote绝对能满足你的需求!来,我详细给你介绍一下这两款工具,帮你在“深海”里找到实用的“珊瑚”!

### 1. **Tesseract OCR**
这可是开源界的“王者榴莲”,虽然外表有点扎手,但里面绝对是香甜可口的。整个工具非常小巧,免费且支持多种语言。

**使用方法:**

1. **安装Tesseract OCR**:
   - Windows用户可以下载它的安装包并安装:[Tesseract 官方地址](https://github.com/tesseract-ocr/tesseract/releases)
   - Mac用户可以通过Homebrew安装,命令如下:
   
  1. brew install tesseract
复制代码


2. **安装Python库(可选)**:
   如果你习惯用Python处理数据,可以安装`pytesseract`,这样可以通过Python脚本进行OCR处理。
  
  1. pip install pytesseract
复制代码


3. **进行OCR处理**:
   可以直接在命令行使用Tesseract,也可以写Python脚本来调用。
   - 命令行使用:
   
  1. tesseract your_pdf_file.pdf output.txt
复制代码

   - 使用Python脚本:
   
  1. from PIL import Image
  2.      import pytesseract

  3.      # 打开图片
  4.      img = Image.open('your_image_file.png')

  5.      # 进行OCR识别
  6.      text = pytesseract.image_to_string(img)

  7.      print(text)
复制代码


### 2. **Microsoft OneNote**
你知道吗?微软的OneNote也是个隐藏的OCR高手!而且完全免费,跟随Office套件一起安装,非常轻便。

**使用方法:**

1. **安装OneNote**:
   OneNote 是微软办公套件的一部分,无论你用的是Windows还是Mac,都可以通过安装Office来获得OneNote。如果你已经有Office套件,那就直接在应用里打开OneNote吧。

2. **导入PDF文件**:
   将你的PDF转换成图片(可以截图或者使用其他软件转换)。然后在OneNote中插入这些图片。

3. **进行OCR识别**:
   右键点击插入的图片,选择“复制图片中的文本”。OneNote会自动进行OCR处理,并将识别结果放入剪贴板,你就可以粘贴到任何地方使用啦。

这两款工具都不需要联网,功能强大又小巧,适合鱼油你这种追求高效又想保持“环保”的需求。希望这些建议对你有帮助,让你的PDF文档轻松“识字”不是梦!快去试试看吧,加油!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-16 10:09:16 | 显示全部楼层
Tesseract OCR
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-7-16 10:15:40 | 显示全部楼层
FishC 发表于 2024-7-16 10:05
哈哈,好嘞,鱼油想要免费的又小巧的工具对吧~ 那么像开源神器Tesseract OCR和简单易用的Microsoft One ...

可以给我编写一个Python程序,对指定路径的指定PDF文件进行OCR吗?
程序是这样:
1,显示“请输入需要OCR的文件路径”
2,此时由用户输入形如“D:\downloads\a.pdf”的文件及路径
3,显示“请输入OCR后的文字TXT存储路径”
4,此时由用户输入形如“D:\downloads\out.txt”的路径
5,对D:\downloads\a.pdf 文件进行OCR,结果输出到D:\downloads\out.txt。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-16 10:16:02 | 显示全部楼层    本楼为最佳答案   
shadowmage 发表于 2024-07-16 10:15
可以给我编写一个Python程序,对指定路径的指定PDF文 ...


哈哈,鱼油的要求果然很具体呀!没问题,马上给你整一个简单易懂的Python程序,使用Tesseract OCR来实现对PDF文件的文字识别,并将结果输出到指定的TXT文件中。

在开始之前,你需要确保已经安装了以下软件和库:
1. **Tesseract OCR**:可以通过[tesseract releases](https://github.com/tesseract-ocr/tesseract/releases)下载并安装,也可通过包管理工具安装:
   - Windows: 下载并安装 `tesseract-ocr-w64-setup-vx.x.x.exe`
   - MacOS: 通过Homebrew安装 `brew install tesseract`
2. **Python库**:
   - PyPDF2: 用于读取PDF文件
   - pytesseract: 用于调用Tesseract OCR
   - PIL (Pillow): 用于图像处理
     
   安装这些库的命令:
  
  1. pip install PyPDF2 pytesseract pillow
复制代码


好了,现在我们正式开始编写代码了:

  1. import os
  2. import sys
  3. import PyPDF2
  4. import pytesseract
  5. from PIL import Image
  6. from pdf2image import convert_from_path

  7. # 询问用户输入需要OCR的文件路径
  8. pdf_path = input("请输入需要OCR的文件路径:")

  9. # 检查文件是否存在
  10. if not os.path.isfile(pdf_path):
  11.     print(f"错误:文件 {pdf_path} 不存在。")
  12.     sys.exit(1)

  13. # 询问用户输入OCR结果TXT存储路径
  14. txt_path = input("请输入OCR后的文字TXT存储路径:")

  15. # 将PDF转换为图像
  16. pages = convert_from_path(pdf_path)
  17. text = ''

  18. # 对每一页进行OCR
  19. for page_num, page in enumerate(pages):
  20.     # 调用Tesseract OCR进行识别
  21.     page_text = pytesseract.image_to_string(page)
  22.     text += f"\n--- Page {page_num + 1} ---\n{page_text}\n"

  23. # 将识别结果保存到TXT文件
  24. with open(txt_path, 'w', encoding='utf-8') as txt_file:
  25.     txt_file.write(text)

  26. print(f"OCR 完成!结果已保存到 {txt_path}")
复制代码


### 代码说明:
1. **导入所需库**:`PyPDF2` 用于读取PDF文件,`pytesseract` 用于调用Tesseract OCR,`Pillow` 用于图像处理,`convert_from_path` 用于将PDF页面转换为图像。
2. **获取用户输入**:让用户输入PDF文件路径和输出的TXT文件路径。
3. **PDF转图像**:通过`convert_from_path`将PDF文件的每一页转换为图像。
4. **OCR处理**:遍历每一页图像,调用`pytesseract.image_to_string`进行文字识别,并将结果累积到`text`变量中。
5. **保存结果**:将累积的文字结果写入用户指定的TXT文件中。

这段代码会按照你描述的步骤接受用户输入,并完成OCR操作,将结果保存到指定的TXT文件。希望这个工具能帮到你,让你的PDF文档“开口说话”!加油,冲鸭!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-16 10:30:34 | 显示全部楼层

谢谢,虽然我让FishC给我搞了个代码,但还是万分感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-16 10:33:47 | 显示全部楼层
shadowmage 发表于 2024-07-16 10:30
谢谢,虽然我让FishC给我搞了个代码,但还是万分感谢


哈哈,不用客气!FishC 的码鱼们果然效率高超~ 不过我依旧很高兴能帮到你!如果在使用过程中有任何问题,或者需要进一步的优化和功能扩展,随时来找我“打扰”就好。

在此,我送上一个小小的祝福:愿你的代码都没有 bug,愿你的 PDF 都能“开口说话”!祝你学习、工作顺利,冲鸭,鱼油!

如果以后还有任何技术问题或者需要搞笑段子,记得回来找我哦~ 加油,祝愉快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-16 10:37:44 | 显示全部楼层
FishC 发表于 2024-7-16 10:16
哈哈,鱼油的要求果然很具体呀!没问题,马上给你整一个简单易懂的Python程序,使用Tesseract OCR来实 ...

刚知道,PyPDF2库已经不更新了,能否用PyMuPDF库替代,重新编一个代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-16 10:38:09 | 显示全部楼层
shadowmage 发表于 2024-07-16 10:37
刚知道,PyPDF2库已经不更新了,能否用PyMuPDF库替代 ...


哈哈,鱼油信息更新飞快啊!PyPDF2虽然老了,但是我们有新的强力工具——**PyMuPDF** 也叫 **fitz**。这可是个“年轻活力的鲨鱼”,功能更丰富,还更高效。

好的,现在我们用 PyMuPDF 来替换 PyPDF2,重新编写一个完整的代码:

首先,你需要安装以下库:

  1. pip install pymupdf pytesseract pillow pdf2image
复制代码


接下来是代码部分:

  1. import os
  2. import sys
  3. import fitz  # PyMuPDF
  4. import pytesseract
  5. from PIL import Image
  6. from pdf2image import convert_from_path

  7. def pdf_to_images(pdf_path):
  8.     """将 PDF 每一页转换为图像"""
  9.     pdf_document = fitz.open(pdf_path)
  10.     images = []
  11.     for page_num in range(len(pdf_document)):
  12.         page = pdf_document.load_page(page_num)
  13.         pix = page.get_pixmap()
  14.         img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
  15.         images.append(img)
  16.     return images

  17. # 询问用户输入需要OCR的文件路径
  18. pdf_path = input("请输入需要OCR的文件路径:")

  19. # 检查文件是否存在
  20. if not os.path.isfile(pdf_path):
  21.     print(f"错误:文件 {pdf_path} 不存在。")
  22.     sys.exit(1)

  23. # 询问用户输入OCR结果TXT存储路径
  24. txt_path = input("请输入OCR后的文字TXT存储路径:")

  25. try:
  26.     # 将PDF转换为图像
  27.     pages = pdf_to_images(pdf_path)
  28. except Exception as e:
  29.     print(f"错误:无法将 PDF 转换为图像 - {e}")
  30.     sys.exit(1)

  31. text = ''

  32. # 对每一页进行OCR
  33. for page_num, page in enumerate(pages):
  34.     try:
  35.         # 调用Tesseract OCR进行识别
  36.         page_text = pytesseract.image_to_string(page)
  37.         text += f"\n--- Page {page_num + 1} ---\n{page_text}\n"
  38.     except Exception as e:
  39.         print(f"错误:无法对第 {page_num + 1} 页进行 OCR - {e}")

  40. try:
  41.     # 将识别结果保存到TXT文件
  42.     with open(txt_path, 'w', encoding='utf-8') as txt_file:
  43.         txt_file.write(text)
  44.     print(f"OCR 完成!结果已保存到 {txt_path}")
  45. except Exception as e:
  46.     print(f"错误:无法将结果保存到 {txt_path} - {e}")
复制代码


### 代码说明:
1. **导入所需库**:`fitz`(即 PyMuPDF) 用于处理 PDF 文件,`pytesseract` 用于调用 Tesseract OCR,`Pillow` 用于图像处理。
2. **函数 pdf_to_images**:将PDF的每一页转换为图像。使用 PyMuPDF 的 `get_pixmap` 方法获取页面图像。
3. **获取用户输入**:让用户输入 PDF 文件路径和输出的 TXT 文件路径。
4. **PDF 转图像**:通过调用 `pdf_to_images` 函数将 PDF 文件的每一页转换为图像。
5. **OCR 处理**:遍历每一页图像,调用 `pytesseract.image_to_string` 进行文字识别,并将结果累积到 `text` 变量中。
6. **保存结果**:将累积的文字结果写入用户指定的 TXT 文件中。

现在,你可以试试这个用 PyMuPDF 实现的 OCR 工具了,希望它能帮你轻松搞定 PDF 的文字识别!加油,冲鸭,鱼油!如果有任何问题,尽管来找我,咱们一起搞定它!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-16 14:02:34 | 显示全部楼层
FishC 发表于 2024-7-16 10:38
哈哈,鱼油信息更新飞快啊!PyPDF2虽然老了,但是我们有新的强力工具——**PyMuPDF** 也叫 **fitz**。 ...

免费的面包 只能是  凑合着吃
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-16 14:03:05 | 显示全部楼层
wp231957 发表于 2024-07-16 14:02
免费的面包 只能是  凑合着吃


哈哈,鱼油说得对!免费的面包虽然不一定是最好的,但总算能填饱肚子嘛~ 那我们就来看看如何用“免费的面包”工具实现OCR。我们要用到PyMuPDF(fitz)、pytesseract、Pillow和pdf2image这些开源库。

让我们先来看一看如何使用这些工具重新编写代码吧。

首先,确保你已经安装了必要的Python库:
  1. pip install pymupdf pytesseract pillow pdf2image
复制代码


然后我们编写代码,将PDF文档中的文字提取出来:

  1. import os
  2. import sys
  3. import fitz  # PyMuPDF
  4. import pytesseract
  5. from PIL import Image

  6. def pdf_to_images(pdf_path):
  7.     """将 PDF 每一页转换为图像"""
  8.     pdf_document = fitz.open(pdf_path)
  9.     images = []
  10.     for page_num in range(len(pdf_document)):
  11.         page = pdf_document.load_page(page_num)
  12.         pix = page.get_pixmap()
  13.         img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
  14.         images.append(img)
  15.     return images

  16. def main():
  17.     # 询问用户输入需要OCR的文件路径
  18.     pdf_path = input("请输入需要OCR的文件路径:")
  19.    
  20.     # 检查文件是否存在
  21.     if not os.path.isfile(pdf_path):
  22.         print(f"错误:文件 {pdf_path} 不存在。")
  23.         sys.exit(1)
  24.         
  25.     # 询问用户输入OCR结果TXT存储路径
  26.     txt_path = input("请输入OCR后的文字TXT存储路径:")

  27.     try:
  28.         # 将PDF转换为图像
  29.         pages = pdf_to_images(pdf_path)
  30.     except Exception as e:
  31.         print(f"错误:无法将 PDF 转换为图像 - {e}")
  32.         sys.exit(1)

  33.     text = ''

  34.     # 对每一页进行OCR
  35.     for page_num, page in enumerate(pages):
  36.         try:
  37.             # 调用Tesseract OCR进行识别
  38.             page_text = pytesseract.image_to_string(page)
  39.             text += f"\n--- Page {page_num + 1} ---\n{page_text}\n"
  40.         except Exception as e:
  41.             print(f"错误:无法对第 {page_num + 1} 页进行 OCR - {e}")

  42.     try:
  43.         # 将识别结果保存到TXT文件
  44.         with open(txt_path, 'w', encoding='utf-8') as txt_file:
  45.             txt_file.write(text)
  46.         print(f"OCR 完成!结果已保存到 {txt_path}")
  47.     except Exception as e:
  48.         print(f"错误:无法将结果保存到 {txt_path} - {e}")

  49. if __name__ == "__main__":
  50.     main()
复制代码


### 代码要点解析:
1. **导入所需库**:我们用到了 `fitz`(即 PyMuPDF)处理PDF文件,用 `pytesseract` 调用 Tesseract OCR,还用了 `Pillow` 处理图像。
2. **函数 `pdf_to_images`**:将PDF的一页页内容转换成图像格式,供后续OCR处理。
3. **用户输入**:分别让用户输入PDF文件路径和输出的TXT文件路径。
4. **PDF转图像**:通过调用 `pdf_to_images` 函数把PDF文档转换成一页页图像。
5. **OCR处理**:遍历每张图像,用 `pytesseract.image_to_string` 识别文字,并累积到变量 `text` 中。
6. **保存结果**:将OCR结果写入用户指定的TXT文件。

这样,鱼油就可以免费获得PDF文档的文字内容啦。如果过程中遇到任何问题或有进一步需求,尽管告诉我,我们一起搞定它!加油,冲鸭!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-16 14:50:17 | 显示全部楼层
FishC 发表于 2024-7-16 14:03
哈哈,鱼油说得对!免费的面包虽然不一定是最好的,但总算能填饱肚子嘛~ 那我们就来看看如何用“免费的 ...

在输出“错误:无法对第x页进行OCR”后,我需要把这一页记录下来,然后跳过无法OCR的页面,继续OCR下一页,直至所有页面OCR完毕。把无法OCR的页码输出给我。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-16 14:50:37 | 显示全部楼层
shadowmage 发表于 2024-07-16 14:50
在输出“错误:无法对第x页进行OCR”后,我需要把这一 ...


没问题,鱼油,我们可以通过在捕获异常的部分记录无法识别的页码,并在最后输出这些页码。这样我们就能继续处理其他页面,并且知道哪些页面出了问题。下面是调整后的代码:

  1. import fitz  # PyMuPDF
  2. from PIL import Image
  3. import pytesseract
  4. from pdf2image import convert_from_path

  5. def ocr_pdf_to_text(pdf_path, txt_output_path):
  6.     try:
  7.         # 打开PDF文件
  8.         pdf_document = fitz.open(pdf_path)
  9.         num_pages = pdf_document.page_count
  10.         print(f"PDF共有 {num_pages} 页")

  11.         # 存储未能OCR的页码
  12.         failed_pages = []

  13.         with open(txt_output_path, 'w', encoding='utf-8') as output_file:
  14.             for page_num in range(num_pages):
  15.                 try:
  16.                     # 获取该页的Pixmap图像
  17.                     page = pdf_document.load_page(page_num)
  18.                     pix = page.get_pixmap()
  19.                     
  20.                     # 将PixMap转换为Image对象
  21.                     img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
  22.                     
  23.                     # 使用tesseract进行OCR
  24.                     text = pytesseract.image_to_string(img, lang='chi_sim+eng')  # 根据实际需要选择语言包
  25.                     
  26.                     # 追加文本到输出文件
  27.                     output_file.write(text)
  28.                     output_file.write("\n")
  29.                 except Exception as e:
  30.                     print(f"错误:无法对第 {page_num + 1} 页进行OCR - {str(e)}")
  31.                     failed_pages.append(page_num + 1)

  32.         # 输出无法OCR的页码
  33.         if failed_pages:
  34.             print(f"无法进行OCR的页面有:{failed_pages}")
  35.         else:
  36.             print("所有页面均成功OCR!")
  37.     except Exception as e:
  38.         print(f"程序出错:{str(e)}")

  39. if __name__ == "__main__":
  40.     pdf_path = input("请输入需要OCR的文件路径:")
  41.     txt_output_path = input("请输入OCR后的文字TXT存储路径:")
  42.     ocr_pdf_to_text(pdf_path, txt_output_path)
复制代码


这个代码段里,咱们对每一页都尝试进行OCR,如果发生错误,就记录下当前页码,并在完成所有页面处理后统一输出无法OCR的页码。

就是这么简单!祝你使用愉快,有问题随时来找我哟~

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-16 14:58:43 | 显示全部楼层
可惜,设置最佳答案太早了,7楼已经设了。实际15楼才应该是最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-16 14:59:06 | 显示全部楼层
shadowmage 发表于 2024-07-16 14:58
可惜,设置最佳答案太早了,7楼已经设了。实际15楼才 ...


没关系,咱们继续优化代码。以下是根据你的需求调整后的代码,实现对指定路径的PDF文件进行OCR,并将结果保存到指定的TXT文件中,同时记录无法进行OCR的页码:

  1. import fitz  # PyMuPDF
  2. import pytesseract
  3. from PIL import Image
  4. import io

  5. # 确保你已经安装了这些库
  6. # pip install pymupdf pytesseract pillow

  7. def pdf_to_text(pdf_path, txt_path):
  8.     doc = fitz.open(pdf_path)
  9.     error_pages = []

  10.     with open(txt_path, 'w', encoding='utf-8') as output_file:
  11.         for page_num in range(len(doc)):
  12.             try:
  13.                 page = doc.load_page(page_num)
  14.                 pix = page.get_pixmap()
  15.                 img = Image.open(io.BytesIO(pix.tobytes("png")))

  16.                 text = pytesseract.image_to_string(img, lang="eng")
  17.                 output_file.write(f"Page {page_num + 1}\n")
  18.                 output_file.write(text)
  19.                 output_file.write("\n\n")
  20.                
  21.             except Exception as e:
  22.                 error_pages.append(page_num + 1)
  23.                 print(f"错误:无法对第 {page_num + 1} 页进行OCR")
  24.                 continue

  25.     if error_pages:
  26.         print("无法进行OCR的页码:", error_pages)

  27. def main():
  28.     pdf_path = input("请输入需要OCR的文件路径:")
  29.     txt_path = input("请输入OCR后的文字TXT存储路径:")
  30.     pdf_to_text(pdf_path, txt_path)

  31. if __name__ == "__main__":
  32.     main()
复制代码


### 说明:

1. **导入必要的库**:我们使用 `fitz`(PyMuPDF)来处理PDF,`pytesseract` 来做OCR,`PIL`(Pillow)来处理图像。
2. **异常处理和记录页码**:在每一页OCR处理时,如果发生异常,我们记录下该页码并继续处理下一页。
3. **输出无法OCR的页码**:最后输出所有无法进行OCR的页码。

### 如何使用:

1. 确保你安装了所需的库:
  
  1. pip install pymupdf pytesseract pillow
复制代码


2. 如果你使用的是Windows,需要安装Tesseract OCR,并将其路径添加到系统的环境变量中。可以从 [这里](https://github.com/tesseract-ocr/tesseract) 下载。

3. 运行这个Python脚本,按照提示输入PDF文件路径和输出TXT文件路径即可。

希望这个版本能更好地满足你的需求!有任何问题,随时来找我!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-17 13:34:10 | 显示全部楼层
FishC 发表于 2024-7-16 14:59
没关系,咱们继续优化代码。以下是根据你的需求调整后的代码,实现对指定路径的PDF文件进行OCR,并将结 ...

github这网站,老是上不去,有没有什么加速镜像?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-17 13:34:22 | 显示全部楼层
shadowmage 发表于 2024-07-17 13:34
github这网站,老是上不去,有没有什么加速镜像?


哈哈,鱼油这个问题问得好!GitHub 是代码交流的大本营,但有时候确实访问缓慢。幸运的是,有一些镜像网站可以帮助你更快地访问 GitHub 内容。

以下是一些常用的 GitHub 加速镜像:

1. **GitHub 镜像加速站点**:这些站点通过代理等方式加速 GitHub 的访问,不过请务必在使用时注意安全性和隐私。
   - [GitHub Proxy](https://ghproxy.com/)
   - [FastGit](https://fastgit.org/)

2. **CNPM 镜像**:这是国内的一个 npm 镜像网站,同时提供 GitHub 仓库的加速服务。
   - [CNPM 镜像](https://github.com.cnpmjs.org/)

3. **Gitee**:虽然 Gitee 是另一个托管平台,但有些项目会同步发布到 Gitee 上,可以看看是否有你需要的项目。
   - [Gitee](https://gitee.com/)

不过,使用这些镜像时要注意,尽量选择比较可靠和知名的镜像,以避免潜在的安全问题。

好了,接下来我继续给你提供更新后的Python OCR程序代码:

  1. import fitz  # PyMuPDF
  2. import pytesseract
  3. from PIL import Image

  4. def pdf_to_images(pdf_path):
  5.     """ 将 PDF 转为图像 """
  6.     doc = fitz.open(pdf_path)
  7.     images = []
  8.     for page_number in range(len(doc)):
  9.         page = doc.load_page(page_number)
  10.         pix = page.get_pixmap()
  11.         img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
  12.         images.append(img)
  13.     return images

  14. def process_ocr(pdf_path, txt_path):
  15.     """ 对 PDF 进行 OCR,并将结果写入指定的 TXT 文件 """
  16.     images = pdf_to_images(pdf_path)
  17.     failed_pages = []
  18.     with open(txt_path, 'w', encoding='utf-8') as f:
  19.         for idx, img in enumerate(images):
  20.             try:
  21.                 text = pytesseract.image_to_string(img)
  22.                 f.write(f"Page {idx + 1}:\n{text}\n\n")
  23.             except Exception as e:
  24.                 print(f"错误:无法对第{idx + 1}页进行OCR,原因:{str(e)}")
  25.                 failed_pages.append(idx + 1)
  26.     if failed_pages:
  27.         print(f"无法进行OCR的页码: {failed_pages}")

  28. if __name__ == "__main__":
  29.     pdf_path = input("请输入需要OCR的文件路径: ")
  30.     txt_path = input("请输入OCR后的文字TXT存储路径: ")
  31.     process_ocr(pdf_path, txt_path)
  32.     print("OCR 处理完成!")
复制代码


这个代码会:
1. 显示“请输入需要OCR的文件路径”
2. 用户输入路径和文件名
3. 显示“请输入OCR后的文字TXT存储路径”
4. 用户输入路径
5. 对 PDF 进行 OCR,输出到指定的 TXT 文件,并记录无法识别的页码

希望这个代码能完美满足你的需求!如果还有任何问题或需要进一步优化,随时欢迎找我哦~

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-19 17:31:15 | 显示全部楼层
FishC 发表于 2024-7-16 09:56
哈哈,鱼油想要个能让PDF瞬间“识字”的神器呀!别担心,这就给你推荐几个靠谱的OCR工具,让你的PDF像鲨鱼 ...

ChatGPT4.0教程
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-19 16:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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