在日常工作中,我们经常需要从各种文档中提取结构化信息,如发票、护照、合同等。然而,传统的OCR技术在处理复杂文档时常常面临准确率低、格式混乱等问题。
为了解决这些痛点,NanoNets 团队开发了一个开源的本地化工具:Docext ,旨在解决传统OCR技术的局限性。
它利用视觉语言模型(VLM)实现无需 OCR 的结构化信息提取,支持发票、护照等敏感文档。它通过本地部署(Linux/MacOS)保障数据隐私,提供自定义字段、表格提取、支持多页文档和REST API集成。
最重要的是开源、免费、灵活性高,你可以在本地无需 OCR、精准提取文档中的字段和表格信息,全面提升处理效率和数据安全性!
主要功能
- • 字段和表格提取 :支持从文档中提取关键字段信息和表格数据,保持原始结构。
- • 自定义和预建模板 :可根据需要定义自定义字段,或使用内置的常见文档类型模板,如发票、护照等。
- • 多页文档支持 :能够处理多页文档,无需分页处理。
- • 置信度评分支持 :为所有提取的信息提供置信度评分,方便评估数据可靠性。
- • REST API 支持 :提供 RESTful API 接口,可轻松集成到你已有的系统或应用。
- • 完全本地部署 :支持在 Linux 和 macOS 系统上本地部署,确保数据安全和隐私。
快速使用
Docext 可直接作为 Python 的第三方库进行安装使用,使用 pip 命令即可快速安装。
如果你的本地Python环境都有的情况下,一条命令即可完成:
pip install docext
下面是官方建议安装步骤与方式:
# 没有安装uv工具,需要先安装uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# 创建虚拟环境并激活
uv venv --python=3.11
source .venv/bin/activate
# 安装docext
uv pip install docext
# 或者通过克隆项目进行安装
git clone https://github.com/nanonets/docext.git
cd docext
uv pip install -e .
安装完成后,其实 docext 也包含了一个基于 Gradio 的网页界面,可用于轻松处理文档。
具体启动命令如下:
# 以默认配置启动Web界面
python -m docext.app.app
# 以自定义配置启动Web界面
python -m docext.app.app --model\_name "hosted\_vllm/Qwen/Qwen2.5-VL-7B-Instruct-AWQ" --max\_img\_size 1024
界面可以通过访问 http://localhost:7860 使用。(用户名及密钥默认admin)
同时,docext 还提供了一个 REST API,用于程序化访问文档提取功能。
启动 API 服务器:
# 增加并发限制以并行处理更多请求,默认值为1
python -m docext.app.app --concurrency\_limit 10
使用API从文档中提取信息:
import pandas as pd
import concurrent.futures
from gradio\_client import Client, handle\_file
def dataframe\_to\_custom\_dict(df: pd.DataFrame) -> dict:
return {
"headers": df.columns.tolist(),
"data": df.values.tolist(),
"metadata": None # Modify if metadata is needed
}
def dict\_to\_dataframe(d: dict) -> pd.DataFrame:
return pd.DataFrame(d["data"], columns=d["headers"])
def get\_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)
return fields\_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 request
### client url can be the local host or the public url like `https://6986bdd23daef6f7eb.gradio.live/`
fields\_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 parallel
# Define a wrapper function for parallel execution
def run\_request():
return get\_extracted\_fields\_and\_tables(
"http://localhost:7860", "admin", "admin", "hosted\_vllm/Qwen/Qwen2.5-VL-7B-Instruct-AWQ", fields\_and\_tables, file\_inputs
)
# Use ThreadPoolExecutor to send 10 requests in parallel
with concurrent.futures.ThreadPoolExecutor(max\_workers=10) as executor:
future\_results = [executor.submit(run\_request) for \_ in range(10)]
for future in concurrent.futures.as\_completed(future\_results):
fields\_df, tables\_df = future.result()
print("========Fields:=========")
print(fields\_df)
print("========Tables:=========")
print(tables\_df)
详细使用文档请参考:https://pypi.org/project/docext/
适用场景
- • 发票管理系统 :批量提取发票编号、抬头、金额、开票时间等字段,替代 OCR
- • 护照/证件信息录入 :提取姓名、证件号、国籍、有效期等敏感字段,全程本地处理更安全
- • 工资条或报销单 :表格字段结构化提取,输出 CSV / JSON
- • 企业表单解析 :支持定制模板批量提取常见企业文件内容
- • 隐私合规处理 :完全本地部署,确保客户信息不出设备
写在最后
Docext 是一款基于视觉语言模型(VLM)的文档结构化信息提取工具。
与传统 OCR 工具不同,它不做字符识别,而是通过 “看懂文档”+“理解结构” 的方式,直接提取你关心的字段、表格、段落等内容,准确率更高、结构更稳定、部署更灵活。
而且目前许多OCR工具需要将文档上传到云端进行处理,这在处理敏感信息时可能带来数据隐私和安全性的问题。而其本地化部署的特性也为处理敏感信息提供了更高的安全性。
特别适合企业自动化和隐私敏感场景。
如果您正在寻找一款无需 OCR 即可从各类文档中提取结构化信息的本地化开源工具,Docext 是一个值得关注的项目。
GitHub 开源地址:https://github.com/NanoNets/docext
● 字节把 Coze 核心开源了!可视化工作流引擎 FlowGram 上线,AI 赋能可视化流程!
●英伟达开源语音识别模型!0.6B 参数登顶 ASR 榜单,1 秒转录 60 分钟音频!
● 开发者的文档收割机来了!这个开源工具让你一小时干完一周的活!
● PDF文档解剖术!OCR神器+1,这个开源工具把复杂排版秒变结构化数据!
如果本文对您有帮助,也请帮忙点个 赞👍 + 在看 哈!❤️
在看你就赞赞我!
