|
在数字化办公日益普及的今天,文档信息提取成为了企业和个人处理大量非结构化数据的重要环节。然而,传统的OCR技术在处理复杂文档时常常面临准确率低、格式混乱等问题,尤其是在处理敏感信息时,数据隐私和安全性也难以保障。为了解决这些痛点,NanoNets团队开发了一款开源的本地化工具——Docext,它利用视觉语言模型(VLM)实现无需OCR的结构化信息提取,为企业和开发者提供了一种高效、安全且灵活的解决方案。
一、项目概述
Docext是一个无需OCR的文档信息提取工具,由NanoNets团队开发并开源。它利用视觉语言模型(VLMs)从文档图像中准确识别和提取字段数据和表格信息,支持发票、护照等多种常见文档类型。Docext旨在通过本地部署的方式,保障数据隐私,同时提供自定义字段、表格提取、多页文档支持和REST API集成等功能,全面提升文档处理的效率和安全性。
二、技术原理
(一)视觉语言模型(VLMs)
Docext的核心在于其利用的视觉语言模型(VLMs)。与传统的OCR技术不同,VLMs能够直接从文档图像中提取信息,而无需先进行字符识别。这种模型通过结合视觉信息和语言理解能力,能够更准确地识别文档中的结构化信息,例如关键字段和表格数据。VLMs的优势在于其能够理解文档的整体布局和语义,从而在提取信息时保持更高的准确性和稳定性。
(二)智能文档处理排行榜
为了评估不同模型在文档处理任务中的性能,Docext提供了一个智能文档处理排行榜。该排行榜涵盖了七个关键的文档智能挑战,包括关键信息提取(KIE)、视觉问答(VQA)、光学字符识别(OCR)、文档分类、长文档处理、表格提取和置信度评分校准。通过这些任务的评估,研究人员和实践者可以更全面地了解模型在不同场景下的表现,从而选择最适合其需求的模型。
三、主要功能
(一)字段和表格提取
Docext能够从各种文档中提取关键字段信息和表格数据,同时保持原始结构。无论是发票中的金额、日期,还是护照中的姓名、国籍,Docext都能够准确识别并提取出来。此外,它还支持从复杂表格中提取结构化数据,即使表格跨越多页,Docext也能够自动识别并提取跨页内容。
(二)自定义和预建模板
Docext提供了高度的灵活性,用户可以根据自己的需求定义自定义字段,或者使用内置的常见文档类型模板,如发票、护照等。这些模板已经经过优化,能够快速启动并满足大多数用户的需求。同时,用户还可以根据实际情况动态添加或删除字段/列,以满足个性化的需求。
(三)置信度评分
为了帮助用户评估提取信息的可靠性,Docext提供了置信度评分功能。每个提取的字段和表格数据都会附带一个置信度评分,用户可以根据这个评分来判断数据的准确性,从而在必要时进行人工审核或进一步处理。
(四)多页文档支持
在处理长文档时,Docext能够自动处理多页内容,无需用户手动分页。这使得它特别适合处理合同、研究报告等复杂的长文档,能够有效地提高工作效率。
(五)本地化部署
Docext支持在Linux和macOS系统上本地部署,确保数据完全在本地处理,不会上传到云端。这种部署方式极大地保障了数据的隐私和安全性,特别适合处理敏感信息。
(六)REST API集成
Docext提供了RESTful API接口,可以轻松集成到现有的系统或应用程序中。通过API,用户可以程序化地访问文档提取功能,实现自动化处理。
四、应用场景
(一)企业自动化
Docext可以广泛应用于企业的自动化流程中,例如自动处理发票、收据、合同等文档,减少人工干预,提高工作效率。通过REST API集成,Docext可以轻松集成到现有的企业系统中,实现文档处理的自动化。
(二)数据录入与分析
在数据录入和分析方面,Docext能够从复杂表格中提取结构化数据,为数据分析和决策提供支持。它支持多种文档类型,能够快速提取关键信息,提高数据处理的速度和准确性。
(三)出入境管理
在出入境管理场景中,Docext可以快速提取护照、签证等证件的关键信息,简化出入境流程。其本地化部署的特性确保了数据的安全性和隐私性,特别适合处理敏感信息。
(四)长文档处理
对于长文档,如研究报告、法律文件等,Docext能够有效地解析文档内容,提取重要信息以供进一步分析。它支持多页文档处理,能够自动识别并提取跨页内容,提高了长文档处理的效率。
五、快速使用
(一)安装环境
在使用Docext之前,需要确保安装了以下依赖项:
- Python >= 3.11
- uv工具(用于创建虚拟环境和安装依赖)
以下是安装步骤:
1.安装uv工具(如果尚未安装): curl-LsSfhttps://astral.sh/uv/install.sh|sh 2.创建虚拟环境并激活: uvvenv--python=3.11source.venv/bin/activate 3.安装Docext: 或者通过克隆项目进行安装: gitclonehttps://github.com/nanonets/docext.gitcddocextuvpipinstall-e. (二)启动Web界面
Docext提供了一个基于Gradio的网页界面,可用于轻松处理文档。启动命令如下: #以默认配置启动Web界面python-mdocext.app.app#以自定义配置启动Web界面python-mdocext.app.app--model_name"hosted_vllm/Qwen/Qwen2.5-VL-7B-Instruct-AWQ"--max_img_size1024 界面可以通过访问`http://localhost:7860`使用,默认用户名和密码为`admin`。
(三)使用REST API
Docext还提供了一个REST API,用于程序化访问文档提取功能。启动API服务器的命令如下: #增加并发限制以并行处理更多请求,默认值为1python-mdocext.app.app--concurrency_limit10 使用API从文档中提取信息的示例代码如下: importpandasaspdimportconcurrent.futuresfromgradio_clientimportClient, handle_file
defdataframe_to_custom_dict(df: pd.DataFrame) ->dict: return{ "headers": df.columns.tolist(), "data": df.values.tolist(), "metadata":None# Modify if metadata is needed }
defdict_to_dataframe(d:dict) -> pd.DataFrame: returnpd.DataFrame(d["data"], columns=d["headers"])
defget_extracted_fields_and_tables( client_url:str, username:str, password:str, model_name:str, fields_and_tables:dict, file_inputs:list[dict]): client = Client(client_url, auth=(username, password)) result = client.predict( file_inputs=file_inputs, model_name=model_name, fields_and_tables=fields_and_tables, api_name="/extract_information" ) fields_results, tables_results = result fields_df = dict_to_dataframe(fields_results) tables_df = dict_to_dataframe(tables_results) returnfields_df, tables_df
fields_and_tables = dataframe_to_custom_dict(pd.DataFrame([ {"name":"invoice_number","type":"field","description":"Invoice number"}, {"name":"item_description","type":"table","description":"Item/Product description"} # add more fields and table columns as needed]))
file_inputs = [ { # "image": handle_file("https://your_image_url/invoice.jpg") # incase the image is hosted on the internet "image": handle_file("assets/invoice_test.jpeg") # incase the image is hosted on the local machine }]
# send single requestfields_df, tables_df = get_extracted_fields_and_tables( "http://localhost:7860","admin","admin","hosted_vllm/Qwen/Qwen2.5-VL-7B-Instruct-AWQ", fields_and_tables, file_inputs)print("========Fields:=========")print(fields_df)print("========Tables:=========")print(tables_df)
# send multiple requests in paralleldefrun_request(): returnget_extracted_fields_and_tables( "http://localhost:7860","admin","admin","hosted_vllm/Qwen/Qwen2.5-VL-7B-Instruct-AWQ", fields_and_tables, file_inputs )
withconcurrent.futures.ThreadPoolExecutor(max_workers=10)asexecutor: future_results = [executor.submit(run_request)for_inrange(10)] forfutureinconcurrent.futures.as_completed(future_results): fields_df, tables_df = future.result() print("========Fields:=========") print(fields_df) print("========Tables:=========") print(tables_df)
六、结语
Docext是一款基于视觉语言模型(VLM)的智能文档处理工具,它通过无需OCR的方式直接从文档图像中提取结构化信息,提供了高效、安全且灵活的解决方案。无论是关键字段提取、表格数据解析,还是多页文档处理,Docext都能够满足企业和个人的需求。其本地化部署的特性特别适合处理敏感信息,确保数据隐私和安全性。如果你正在寻找一款无需OCR即可从各类文档中提取结构化信息的工具,Docext是一个值得关注的项目。 |