鱼C论坛

 找回密码
 立即注册
查看: 1667|回复: 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): 用于图像处理
     
   安装这些库的命令:
pip install PyPDF2 pytesseract pillow

好了,现在我们正式开始编写代码了:
import os
import sys
import PyPDF2
import pytesseract
from PIL import Image
from pdf2image import convert_from_path

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

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

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

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

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

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

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 小助理,如未能正确解答您的问题,请继续追问。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我想要免费的,小一点的工具,不要在线工具。
想知道小甲鱼最近在做啥?请访问 -> 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安装,命令如下:
   
brew install tesseract

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

3. **进行OCR处理**:
   可以直接在命令行使用Tesseract,也可以写Python脚本来调用。
   - 命令行使用:
   
tesseract your_pdf_file.pdf output.txt
   - 使用Python脚本:
   
from PIL import Image
     import pytesseract

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

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

     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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-7-16 10:09:16 | 显示全部楼层
Tesseract OCR
想知道小甲鱼最近在做啥?请访问 -> 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。
想知道小甲鱼最近在做啥?请访问 -> 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): 用于图像处理
     
   安装这些库的命令:
pip install PyPDF2 pytesseract pillow

好了,现在我们正式开始编写代码了:
import os
import sys
import PyPDF2
import pytesseract
from PIL import Image
from pdf2image import convert_from_path

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

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

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

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

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

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

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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢,虽然我让FishC给我搞了个代码,但还是万分感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

刚知道,PyPDF2库已经不更新了,能否用PyMuPDF库替代,重新编一个代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

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

首先,你需要安装以下库:
pip install pymupdf pytesseract pillow pdf2image

接下来是代码部分:
import os
import sys
import fitz  # PyMuPDF
import pytesseract
from PIL import Image
from pdf2image import convert_from_path

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

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

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

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

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

text = ''

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

try:
    # 将识别结果保存到TXT文件
    with open(txt_path, 'w', encoding='utf-8') as txt_file:
        txt_file.write(text)
    print(f"OCR 完成!结果已保存到 {txt_path}")
except Exception as e:
    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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

免费的面包 只能是  凑合着吃
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

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

首先,确保你已经安装了必要的Python库:
pip install pymupdf pytesseract pillow pdf2image

然后我们编写代码,将PDF文档中的文字提取出来:
import os
import sys
import fitz  # PyMuPDF
import pytesseract
from PIL import Image

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

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

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

    text = ''

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

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

if __name__ == "__main__":
    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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

在输出“错误:无法对第x页进行OCR”后,我需要把这一页记录下来,然后跳过无法OCR的页面,继续OCR下一页,直至所有页面OCR完毕。把无法OCR的页码输出给我。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

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

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

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

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

if __name__ == "__main__":
    pdf_path = input("请输入需要OCR的文件路径:")
    txt_output_path = input("请输入OCR后的文字TXT存储路径:")
    ocr_pdf_to_text(pdf_path, txt_output_path)

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-16 14:58:43 | 显示全部楼层
可惜,设置最佳答案太早了,7楼已经设了。实际15楼才应该是最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

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

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

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

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

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

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

if __name__ == "__main__":
    main()

### 说明:

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

### 如何使用:

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

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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

github这网站,老是上不去,有没有什么加速镜像?
想知道小甲鱼最近在做啥?请访问 -> 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程序代码:
import fitz  # PyMuPDF
import pytesseract
from PIL import Image

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

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

if __name__ == "__main__":
    pdf_path = input("请输入需要OCR的文件路径: ")
    txt_path = input("请输入OCR后的文字TXT存储路径: ")
    process_ocr(pdf_path, txt_path)
    print("OCR 处理完成!")

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 17:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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