GPT-4O 驱动,Zerox 让 OCR 更智能:开源利器解放你的文档

文摘   2024-10-31 08:55   美国  

Zerox 是一款革命性的基于 GPT-4O 的开源 OCR 工具,它将视觉模型与 GPT-4O 大型语言模型结合,将 PDF、DOCX、图像等各种文档转换为准确且格式良好的 Markdown 文本。与传统 OCR 工具相比,Zerox 更懂文档布局,能精准识别表格、图表等元素,生成更自然的 Markdown。它提供 Node.js 和 Python SDK,方便集成到应用中。此外,OmniAI 平台基于 Zerox 构建,提供批量处理、数据提取等功能,助力文档自动化。

OCR 新突破:Zerox 的 AI 力量

传统 OCR 的困境:识别易,理解难

传统的 OCR 工具就像只会照本宣科的学生,能识别字符,却缺乏对文档结构和语义的理解。它们往往忽视表格、图表等关键信息,输出的文本格式混乱,难以利用。面对复杂布局的文档,传统 OCR 更是力不从心,准确率捉襟见肘。

Zerox 的解法:视觉模型 + GPT-4O,强强联合

Zerox 采用了一种全新的方法来解决传统 OCR 的局限性。它结合了视觉模型和 GPT-4O 等大型语言模型的强大功能,实现了对文档内容和布局的深度理解。

  • • 视觉模型 就像一位经验丰富的排版师,能够精准分析文档布局,识别文本块、表格、图像等不同元素。

  • • GPT-4O 则如同一位才华横溢的作家,根据视觉模型的分析结果,将文档内容转换成优美流畅的 Markdown 格式,并保留文档的原始布局。

这种强强联合,赋予了 Zerox 处理复杂文档布局和生成更准确、自然 Markdown 文本的能力。

Zerox 工作原理:三步实现文档智能化

Zerox 的工作流程如下图所示:

Zerox 工作流程
  1. 1. 文件到图像的转换: Zerox 首先将输入的文档转换为一系列图像。对于 PDF、DOCX 等文件,Zerox 使用 Ghostscript 和 GraphicsMagick 等专业工具将其转换为高质量的图像。对于图像文件,Zerox 直接使用原始图像。Zerox 支持多种文件格式,包括:

    文件格式说明
    pdf便携式文档格式
    docMicrosoft Word 97-2003 文档
    docxMicrosoft Word 2007-2019 文档
    odtOpenDocument 文本文档
    ottOpenDocument 文本模板
    rtf富文本格式
    txt纯文本
    html超文本标记语言文档
    htm超文本标记语言文档 (另一种扩展名)
    xml可扩展标记语言文档
    wpsMicrosoft Works 文字处理器文档
    wpdWordPerfect 文档
    xlsMicrosoft Excel 97-2003 电子表格
    xlsxMicrosoft Excel 2007-2019 电子表格
    odsOpenDocument 电子表格
    otsOpenDocument 电子表格模板
    csv逗号分隔值文件
    tsv制表符分隔值文件
    pptMicrosoft PowerPoint 97-2003 演示文稿
    pptxMicrosoft PowerPoint 2007-2019 演示文稿
    odpOpenDocument 演示文稿
    otpOpenDocument 演示文稿模板
  2. 2. GPT-4O 的魔力:图像到 Markdown 的蜕变: 接下来,Zerox 将每个图像传递给 GPT-4O,并使用特定的 prompt 请求 GPT-4O 将图像转换为 Markdown。GPT-4O 会根据图像中的内容和布局,生成相应的 Markdown 文本。例如,如果图像中包含一个表格,GPT-4O 会将其转换为 Markdown 表格。GPT-4O 如何根据视觉模型的分析结果生成 Markdown?GPT-4O 在接收到图像和 prompt 后,会利用其强大的自然语言处理能力,分析图像中的内容和布局。例如,GPT-4O 可以识别图像中的文本块、表格、标题等元素,并根据它们的相对位置和格式,生成相应的 Markdown 代码。例如,如果视觉模型识别出一个表格,GPT-4O 会将表格中的每一行和每一列转换为 Markdown 表格的对应元素,并使用 Markdown 的语法来表示表格的边框和对齐方式。

  3. 3. 汇总结果,输出完美的 Markdown: 最后,Zerox 将所有图像的 Markdown 结果汇总起来,并输出一个完整的 Markdown 文档。

Zerox 核心代码:简单易用,高效集成

Zerox 使用异步编程模型来实现高效的文档处理。 核心代码逻辑如下:

async def zerox(
    cleanup: bool = True,
    concurrency: int = 10,
    # ... 其他参数
):
    """
    核心函数,负责协调文档处理流程。
    """

    # 初始化
    input_token_count = 0
    output_token_count = 0
    prior_page = ""
    aggregated_markdown: List[str] = []
    start_time = datetime.now()

    # ... 文件下载和转换为图像

    # 使用 GPT-4O 处理每个图像
    if maintain_format:
        # 顺序处理,保持格式
        for image in images:
            result, input_token_count, output_token_count, prior_page = await process_page(
                image, vision_model, temp_directory, input_token_count, output_token_count, prior_page
            )
            if result:
                aggregated_markdown.append(result)
    else:
        # 并发处理,提高效率
        results = await process_pages_in_batches(
            images, concurrency, vision_model, temp_directory, input_token_count, output_token_count, prior_page
        )
        aggregated_markdown = [result[0for result in results if isinstance(result[0], str)]
        input_token_count += sum([result[1for result in results])
        output_token_count += sum([result[2for result in results])
    
    # ... 汇总结果和清理临时文件

    return ZeroxOutput(
        # ... 返回结果
    )

async def process_page(image, vision_model, temp_directory, input_token_count, output_token_count, prior_page):
    """
    使用 GPT-4O 处理单个图像页面。
    """

    # ... 读取图像内容,构建 prompt
    
    # 调用 GPT-4O 模型
    response = await vision_model.acompletion(
        prompt=prompt,
        # ... 其他参数
    )

    # ... 解析结果,更新 token 计数

    return response.choices[0].message.content, input_token_count, output_token_count, response.choices[0].message.content

async def process_pages_in_batches(images, concurrency, vision_model, temp_directory, input_token_count, output_token_count, prior_page):
    """
    并发处理多个图像页面。
    """

    # ... 使用 asyncio.gather 并发处理每个页面

代码中使用了 asyncio 库来实现异步编程,litellm 库来调用 GPT-4O 模型。 process_page() 函数展示了如何构建 prompt 并调用 GPT-4O 模型,process_pages_in_batches() 函数则展示了如何并发处理多个页面。Zerox 的 Python SDK 支持包括 OpenAI、Azure OpenAI、Anthropic 和 AWS Bedrock 在内的多种模型提供商。

Zerox 优势:精准、高效、灵活、可扩展

高精度:视觉模型助力精准识别

由于 Zerox 使用视觉模型来理解文档布局,因此它能够比传统 OCR 工具更准确地识别文本和表格等元素,尤其是在处理复杂布局的文档时,Zerox 的优势更加明显。 例如,在处理包含复杂表格的文档时,Zerox 的准确率 significantly 高于传统 OCR 工具。

多功能:支持多种文件类型

Zerox 支持包括 PDF、DOCX、图像等多种文件类型,这使得它能够处理各种类型的文档。 Zerox 使用 Ghostscript 和 GraphicsMagick 等工具将各种文档转换为图像,从而实现了对多种文件类型的支持。

易用性:快速上手,轻松集成

Zerox 提供了 Node.js 和 Python SDK,方便开发者集成到自己的应用程序中。SDK 提供了简单易用的 API,开发者只需几行代码即可使用 Zerox 的功能。

例如,使用 Node.js SDK,开发者只需调用 zerox() 函数,并传入文件路径和 OpenAI API 密钥,即可将文档转换为 Markdown。

import { zerox } from "zerox";

const result = await zerox({
  filePath"path/to/your/document.pdf",
  openaiAPIKey: process.env.OPENAI_API_KEY,
});

console.log(result);

SDK 提供了丰富的参数选项,例如 cleanupconcurrencymaintainFormatmodeloutputDir 等,方便用户自定义 Zerox 的行为。

可扩展性:OmniAI 平台助力文档自动化

OmniAI 是一个构建在 Zerox 之上的平台,它提供了批量处理、数据提取等功能,助力文档自动化。OmniAI 可以让你轻松构建文档处理管道,实现例如批量转换文档格式、提取关键信息等功能。

OmniAI 平台提供了直观的界面,方便用户创建和管理文档处理管道。OmniAI 支持多种数据源,例如 Snowflake、Postgres、MySQL 等,方便用户将提取的数据存储到不同的数据库中。OmniAI 提供了强大的 API,方便用户将 OmniAI 集成到自己的应用程序中。

OmniAI 平台

Zerox 应用场景:释放文档处理潜能

文档数字化和归档:告别纸质,高效管理

Zerox 可以将纸质文档或扫描文档转换为可编辑的 Markdown 文档,方便用户进行数字化归档和管理。

数据提取和分析:精准提取,洞察价值

Zerox 可以从文档中提取关键信息,例如表格数据、文本内容等,并将其转换为结构化数据,方便用户进行数据分析和处理。 例如,可以使用 Zerox 提取发票中的关键信息,例如发票号码、日期、金额等,并将其存储到数据库中。 Zerox 提供了强大的数据提取功能,可以帮助用户从各种文档中提取有价值的信息。

内容创作和发布:Markdown 格式,轻松创作

Zerox 可以将文档转换为 Markdown 格式,方便用户进行内容创作和发布。 例如,可以使用 Zerox 将 Word 文档转换为 Markdown 格式,然后在博客或网站上发布。

Zerox:引领未来文档处理的智能化浪潮

随着 AI 技术的不断发展,Zerox 的功能将会越来越强大。未来,Zerox 将支持更多语言、更复杂的文档布局,并提供更丰富的功能,例如自动摘要、文档翻译等。Zerox 将成为文档处理领域的重要工具,帮助用户更高效地处理文档。

你认为 Zerox 将如何改变未来的文档处理方式?你期待 Zerox 未来增加哪些功能?欢迎在评论区分享你的想法!

相关链接

  • • Zerox 开源项目地址: https://github.com/getomni-ai/zerox

  • • OmniAI 官方网站: https://getomni.ai/

子非AI
子非AI,焉知AI之乐:分享AI的有趣应用和创新案例,让你了解AI的乐趣。
 最新文章