探索 Zerox OCR:创新引领光学字符识别新境界
一、Zerox OCR 的基本原理
Zerox OCR 的核心原理是利用先进的技术手段对图像中的文字进行识别和提取。它不完全依赖传统的光学字符识别技术,而是巧妙地结合了大型语言模型。在处理过程中,当面对输入的文档,如 PDF、图片或 DOCX 等格式的文件时,首先会对文档进行预处理。对于 PDF 文件,会将其转换为图像,以便后续分析每一页的内容。然后,利用大型语言模型的强大理解能力,对图像中的文字进行解读和识别。这种方式使得 Zerox OCR 能够更好地处理各种复杂的文本情况,包括风格化程度很高的文本、布局不寻常的文档以及包含特殊符号或图形的文本内容等。与传统 OCR 技术相比,它更注重对文本语义的理解,从而提高了识别的准确性和可靠性。
二、Zerox OCR 的特点与优势
1. 高效准确的识别能力
借助大型语言模型的优势,Zerox OCR 能够对复杂的文本进行精准识别。无论是手写体、艺术字还是带有各种干扰因素的文字,它都能准确地提取其中的信息,大大减少了错误识别的概率,为用户提供高质量的识别结果。
2. 广泛的文件格式支持
支持多种常见的文件格式,如 PDF、DOCX、图片(包括常见的图片格式如 JPEG、PNG 等)。这使得用户在不同的场景下都能方便地使用 Zerox OCR,无需进行繁琐的格式转换,节省了时间和精力。
3. 零-shot 学习能力
具备强大的零-shot OCR 处理能力,意味着它无需针对特定任务进行大量的预先训练数据准备,就可以直接对各种文档进行处理。这种灵活性和适应性使得 Zerox OCR 能够快速应对不同类型的文档和任务,为用户提供了便捷的使用体验。
4. 友好的输出格式
处理后的文本以 Markdown 格式返回。Markdown 格式简洁明了,既保留了文本的基本格式,又便于后续的编辑和使用。用户可以轻松地对输出的文本进行进一步的整理、分析和排版,满足不同的需求。
5. 易于集成
提供了方便的开发接口,特别是对于开发者来说,它提供了 Node.js 和 Python 的 SDK。这使得开发者能够轻松地将 Zerox OCR 集成到现有的应用程序中,扩展应用的功能,实现自动化的 OCR 处理,提高工作效率和流程的自动化程度。
6. 并发处理与自定义选项
支持并发处理多个页面,用户可以根据自己的需求设置同时处理的页面数量,从而加快整体的处理速度。同时,还提供了多种自定义选项,例如选择处理特定页面、是否保持格式以及选择使用的模型等,用户可以根据具体的任务和需求进行个性化的配置,满足不同场景下的特殊要求。
7. 清理功能
在处理完成后,支持自动清理临时生成的图像文件,避免了不必要的文件占用和存储问题,简化了用户的文件管理工作,保持系统的整洁和高效。
三、Zerox OCR 的应用场景
1. 文档数字化与档案管理
在图书馆、档案馆、企业文档管理等领域,有大量的纸质文档需要进行数字化处理。Zerox OCR 可以快速将这些纸质文件转换为电子文本,方便存储、检索和编辑。例如,图书馆可以将珍贵的古籍文献进行 OCR 处理后,建立数字化图书馆,方便读者查阅和研究;企业可以将历史档案文件数字化,提高档案管理的效率和安全性。
2. 数据提取与分析
从各种报表、合同、发票等文档中提取关键信息是企业日常运营中的重要任务。Zerox OCR 能够准确地识别和提取这些文档中的数据,为数据分析和决策提供支持。例如,财务部门可以利用它从财务报表中提取数据进行分析,销售部门可以从销售合同中提取关键条款进行业务分析和跟进。
3. 内容创作与编辑
对于作者、编辑等从事文字工作的人员,Zerox OCR 可以将手写笔记、图片中的文字等转换为电子文本,方便进行进一步的创作和编辑。例如,作家可以将手写的草稿通过 Zerox OCR 转换为电子文档,然后进行修改和完善;编辑可以将扫描的稿件快速转换为可编辑的文本,提高工作效率。
4. 教育领域
在教育领域,教师可以利用 Zerox OCR 将教材、试卷等资料中的文字转换为电子文本,方便制作教学课件、进行在线教学和作业批改。学生也可以使用它将笔记、书籍中的重点内容转换为电子文档,便于复习和整理知识。
5. 电子商务与物流
在电子商务中,商家可以使用 Zerox OCR 处理订单、发票等文件,提高订单处理的效率和准确性。在物流领域,快递单号、地址等信息的识别和录入也可以借助 Zerox OCR 实现自动化,减少人工输入的错误和工作量。
四、快速开始
1、在线体验
在线地址:https://getomni.ai/ocr-demo
2、本地使用
1)安装 py-zerox
pip install py-zerox
2)代码示例
from pyzerox import zerox
import os
import json
import asyncio
### Model Setup (Use only Vision Models) Refer: https://docs.litellm.ai/docs/providers ###
## placeholder for additional model kwargs which might be required for some models
kwargs = {}
## system prompt to use for the vision model
custom_system_prompt = None
# to override
# custom_system_prompt = "For the below pdf page, do something..something..." ## example
###################### Example for OpenAI ######################
model = "gpt-4o-mini" ## openai model
os.environ["OPENAI_API_KEY"] = "" ## your-api-key
###################### Example for Azure OpenAI ######################
model = "azure/gpt-4o-mini" ## "azure/<your_deployment_name>" -> format <provider>/<model>
os.environ["AZURE_API_KEY"] = "" # "your-azure-api-key"
os.environ["AZURE_API_BASE"] = "" # "https://example-endpoint.openai.azure.com"
os.environ["AZURE_API_VERSION"] = "" # "2023-05-15"
###################### Example for Gemini ######################
model = "gemini/gpt-4o-mini" ## "gemini/<gemini_model>" -> format <provider>/<model>
os.environ['GEMINI_API_KEY'] = "" # your-gemini-api-key
###################### Example for Anthropic ######################
model="claude-3-opus-20240229"
os.environ["ANTHROPIC_API_KEY"] = "" # your-anthropic-api-key
###################### Vertex ai ######################
model = "vertex_ai/gemini-1.5-flash-001" ## "vertex_ai/<model_name>" -> format <provider>/<model>
## GET CREDENTIALS
## RUN ##
# !gcloud auth application-default login - run this to add vertex credentials to your env
## OR ##
file_path = 'path/to/vertex_ai_service_account.json'
# Load the JSON file
with open(file_path, 'r') as file:
vertex_credentials = json.load(file)
# Convert to JSON string
vertex_credentials_json = json.dumps(vertex_credentials)
vertex_credentials=vertex_credentials_json
## extra args
kwargs = {"vertex_credentials": vertex_credentials}
###################### For other providers refer: https://docs.litellm.ai/docs/providers ######################
# Define main async entrypoint
async def main():
file_path = "https://omni-demo-data.s3.amazonaws.com/test/cs101.pdf" ## local filepath and file URL supported
## process only some pages or all
select_pages = None ## None for all, but could be int or list(int) page numbers (1 indexed)
output_dir = "./output_test" ## directory to save the consolidated markdown file
result = await zerox(file_path=file_path, model=model, output_dir=output_dir,
custom_system_prompt=custom_system_prompt,select_pages=select_pages, kwargs)
return result
# run the main function:
result = asyncio.run(main())
# print markdown result
print(result)
参数说明:
async def zerox(
cleanup: bool = True,
concurrency: int = 10,
file_path: Optional[str] = "",
maintain_format: bool = False,
model: str = "gpt-4o-mini",
output_dir: Optional[str] = None,
temp_dir: Optional[str] = None,
custom_system_prompt: Optional[str] = None,
select_pages: Optional[Union[int, Iterable[int]]] = None,
kwargs
) -> ZeroxOutput:
...
- cleanup(bool,可选):处理后是否清理临时文件。默认为 True。
- concurrency(int,可选):要运行的并发进程数。默认为 10。
- file_path(Optional[str],可选):要处理的 PDF 文件的路径。默认为空字符串。
- keep_format(bool, 可选):是否保留上一页的格式。默认为 False。
- model(str,可选):用于生成补全的模型。默认为“gpt-4o-mini”。请参阅 LiteLLM 提供程序以获取正确的模型名称,因为它可能因提供程序而异。
- output_dir(Optional[str], 可选): 保存 markdown 输出的目录。默认为 None。
- temp_dir(str,可选):存储临时文件的目录,默认为系统临时目录中的某个命名文件夹。如果已经存在,则在 zerox 使用它之前将删除其内容。
- custom_system_prompt(str,可选):模型使用的系统提示,它将覆盖 zerox 的默认系统提示。一般情况下,除非您想要某些特定行为,否则不需要它。设置后,它将发出友好警告。默认为 None。
- select_pages(Optional[Union[int, Iterable[int]]],可选):要处理的页面,可以是单个页码或可迭代的页码,默认为 None
- kwargs(字典,可选):传递给 litellm.completion 方法的附加关键字参数。有关详细信息,请参阅 LiteLLM 文档和完成输入。
返回
- ZeroxOutput:包含模型生成的 markdown 内容以及一些元数据(参见下文)。
五、结语
Zerox OCR 作为一款创新的光学字符识别工具,以其独特的原理、丰富的特点和广泛的应用场景,为用户在数字化时代处理文字信息提供了强大的支持。它的出现不仅提高了 OCR 技术的效率和准确性,还为各个行业的数字化转型和发展带来了新的机遇。如果你对 Zerox OCR 感兴趣,想要了解更多详细信息,可以访问其官方 GitHub 地址:https://github.com/getomni-ai/zerox。相信在未来,随着技术的不断进步和完善,Zerox OCR 将在更多的领域发挥重要作用,为我们的生活和工作带来更多的便利和创新。