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 的工作流程如下图所示:
1. 文件到图像的转换: Zerox 首先将输入的文档转换为一系列图像。对于 PDF、DOCX 等文件,Zerox 使用 Ghostscript 和 GraphicsMagick 等专业工具将其转换为高质量的图像。对于图像文件,Zerox 直接使用原始图像。Zerox 支持多种文件格式,包括:
文件格式 说明 pdf 便携式文档格式 doc Microsoft Word 97-2003 文档 docx Microsoft Word 2007-2019 文档 odt OpenDocument 文本文档 ott OpenDocument 文本模板 rtf 富文本格式 txt 纯文本 html 超文本标记语言文档 htm 超文本标记语言文档 (另一种扩展名) xml 可扩展标记语言文档 wps Microsoft Works 文字处理器文档 wpd WordPerfect 文档 xls Microsoft Excel 97-2003 电子表格 xlsx Microsoft Excel 2007-2019 电子表格 ods OpenDocument 电子表格 ots OpenDocument 电子表格模板 csv 逗号分隔值文件 tsv 制表符分隔值文件 ppt Microsoft PowerPoint 97-2003 演示文稿 pptx Microsoft PowerPoint 2007-2019 演示文稿 odp OpenDocument 演示文稿 otp OpenDocument 演示文稿模板 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. 汇总结果,输出完美的 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[0] for result in results if isinstance(result[0], str)]
input_token_count += sum([result[1] for result in results])
output_token_count += sum([result[2] for 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 提供了丰富的参数选项,例如 cleanup
, concurrency
, maintainFormat
, model
, outputDir
等,方便用户自定义 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/