合合信息DocFlow产品解析与体验:人人可搭建的AI自动化单据处理工作流
在信息化与全球化迅速发展的今天,企业面临着海量文档的管理与处理挑战。无论是传统的纸质文档,还是图片、PDF等多种新型文件格式,在进行数据汇总时都需要投入大量人力。传统的手工录入与管理方式不仅效率低下,且容易出错,难以满足现代企业对高效、精准和智能化办公的需求。于是,OCR技术应运而生。基于深度学习算法的文本识别,大大提升了录入人员的工作效率。
作为国内OCR领域深耕多年的企业,合合信息推出的TextIn平台堪称神奇,识别准确率接近百分之百。我本人也经常使用TextIn平台处理各类文件。然而,尽管市面上已有许多成熟的OCR技术帮助提取文档信息,处理大量文件时仍然令人头疼。因为许多票据、合同、试卷等常见文本并没有统一的格式,使用OCR识别后往往会得到大量冗余文本,而这些内容并非全部需要。
在这种情况下,大家可能会希望有一款能够一键识别并分析、选择性提取所需信息的文本工具。幸运的是,TextIn平台近日推出了一款革命性的文档自动化工具——合合信息DocFlow,完美满足了这些需求。
产品官网:https://cc.co/16YSNS
Docflow内测体验官招募中,通过链接注册,享有免费权益噢!
内测体验入口:https://cc.co/16YSNT
一、DocFlow产品简介
DocFlow,顾名思义,是一款文本处理的工作流系统,传统的OCR识别只有文本录入和返回结果这两个环节,而DocFlow则是将一切能够提升我们实践效果的功能全部集合了起来,让我们能够更省心的获得我们想要的结果。
比如,下面是一张机动车销售发票的照片:
在DocFlow出现之前,通常我们会选择先对这个车票照片进行OCR识别,进而得出上面所有的文本信息。但是得到的信息除了识别精度很低以外,本身的排序也是非常混乱,几乎无法使用,比如下面这种效果:
这种效果是我们完全不能接受的,我们很需要一款能够精准识别,并且按照具体对应的条目返回给我们的OCR神器,也许在不久前这种想法会被嘲笑痴人说梦,但如今DocFlow帮助我们轻松实现了。
我们访问DocFlow的产品体验界面,将发票照片上传,可以看到右面显示出了精准识别出的且一一对应的明细内容,不仅没有遗漏,而且也没有识别错误,这种识别精度真的是强的可怕!
放大点,给大伙看看~
(已对敏感信息进行隐藏处理)
然后这还只是DocFlow的其中一小段功能,DocFlow可不仅仅是OCR,而是一个成熟的一站式工作流产品。
DocFlow 是 TextIn 旗下的一款先进的文档自动化处理工具,专为企业提供文档分类与关键要素提取的一站式解决方案。依托于 TextIn 行业领先的文档解析与理解能力,DocFlow 能够轻松处理全球范围内各类文档类型与复杂版式,无论是票据、卡证,还是合同、文件,均可实现高精度的分类与关键要素提取,并快速整合至业务流程中。
DocFlow 通过五个核心环节构建一个统一的 ”采、管、算、审、用” 影像结构化能力服务体系:
环节 | 步骤 | 描述 |
采(采集) | 影像采集 | 通过多渠道集成,统一归集企业影像数据。 |
管(管理) | 影像分类 | 基于用户、影像类型、安全级别等维度进行影像分级分类。 |
算(计算) | 影像识别 | 利用AI技术实现影像结构化信息的识别与抽取。 |
审(审查) | 影像审核 | 通过元数据、文本内容等建立深层次影像关联,提升数据的可用性。 |
用(应用) | 影像应用 | 为报账、CMS、资产管理等业务系统提供影像采集、搜索、调阅服务。 |
二、DocFlow操作流程
下面,我们详细讲述一下DocFlow操作流程的六个阶段:
1. 输入文档
DocFlow支持多种方式导入文档,满足不同企业的需求:
功能名称 | 功能描述 |
---|---|
扫描上传 | 通过扫描设备批量导入纸质单据,支持多种文件格式(如OFD、PNG、JPG、JPEG、DOC、DOCX、XLSX、XLS等)。 |
邮箱收取 | 通过邮箱助手自动导入邮件中的附件,简化邮件文档的管理流程。 |
API调用 | 通过开放的API接口,实现与企业业务系统的无缝对接,自动化数据采集。 |
SFTP定时、SMB共享、OneDrive、SharePoint等 | 支持多种数据采集方式,确保数据获取的灵活性和全面性。 |
RPA接入 | 对于无法开通接口的业务系统,支持通过RPA工具获取影像数据,与DocFlow实现接口对接。 |
2. 文件质量优化
在文档采集过程中,DocFlow通过先进的图像处理技术,优化文档图像质量,提升后续识别的准确性和效率:
-
边缘检测与切边压缩:自动裁剪文档边缘,减少无关信息,提高图像质量。
-
增强锐化与曲面矫正:提升图像清晰度,纠正文档倾斜,确保文字的可读性。
-
阴影消除与去摩尔纹:去除文档中的阴影和干扰线条,优化图像背景。
-
多图切分与水印去除:支持将多页文档拆分为单页图像,自动去除水印,保证数据的完整性。
3. 文档分类
DocFlow内置强大的文档分类功能,支持自动将文档归类到相应的类别中,减少手工分类的工作量:
-
自动分类:系统根据预设的分类模型自动识别文档类型,支持国内票、海外票等多种票据类型的自动分类。
-
灵活配置:用户可通过上传样本文件或设置分类关键字,自定义分类模型,满足不同业务需求。
-
无定义分类处理:对于无法自动分类的文档,系统将其归类到“undefined”或“other”类别,用户可手工调整分类规则,提高分类准确性。
4. 数据导出应用
DocFlow支持将结构化的数据导出到指定的业务系统中,支持多种数据格式和接口:比如XML、JSON、EXCEL等格式。
5. 人工确认验证
在必要时,DocFlow提供人工审核功能,确保数据的准确性和完整性:
-
详情页面展示:提供文件列表、内容预览窗口、KV字段抽取内容和表格信息抽取内容四部分,便于用户查看和核对。
-
分类信息核对:用户可核对文档分类是否正确,必要时可手动更正分类。
-
抽取信息核对:支持内容定位与核对、展示隐藏信息、内容快速选择、自定义添加字段等功能,确保数据的准确性。
-
业务审核操作:用户可对文件进行确认、拒绝或推迟处理,支持多级审核流程,确保数据的合法性和合规性。
6. 抽取定位显示
DocFlow通过直观的方式展示抽取的关键字段,支持用户自定义字段和调整抽取结果:
-
字段定位:系统自动框选出字段所在位置,用户可直观查看和编辑。
-
自定义字段:用户可根据业务需求添加或修改字段,系统基于语义理解自动抽取数据。
-
多页文档支持:支持跨页字段的抽取,确保数据的完整性和准确性。
三、DocFlow在线体验
为了帮助用户更好地体验DocFlow的强大功能,TextIn现在招募内测用户,添加TextIn福利官,免费领取1000次试用名额!(名额有限,先加先得)
报名入口:https://cc.co/16YSNT
下面,我们开始实际体验一下,以某广告合同为例。
1. 上传文件
上传合同图片,使用通用合同的模板,可以看到右侧出现了DocFlow解析出来的信息。
仔细观察信息我们不难发现,由于通用合同模板的局限性,我们没有分别读取甲方和乙方各自的信息。这时候,就需要我们去创建一个新的针对性的模板。
2. 新增类别
创建新类别:甲乙双方合同
点击右侧自动填充,一键识别关键字段,基本上可以做到全覆盖,如果还有需要添加的可以手动点击文本处添加,字段添加后效果如图。
完成后点击保存。首页在我们创建的新类别里重写上传合同。
3. 使用新类别识别
可以看到识别结果的针对性增强了很多。
如果有些我们需要但是没有出现在模板里的字段,我们可以点击新增字段来进行框选。
当我们认为识别无误了,我们点击确认。这篇文档的核对状态会更新为已确认。
除了确认之外,也可以推迟处理或者驳回。
四、API调用DocFlow
DocFlow提供了丰富的API接口,支持开发者通过编程方式与DocFlow进行集成,实现自动化的数据采集和处理。
目前提供的三个接口如下:
-
上传文件POST
-
获取文件处理结果列表GET
-
更新文件处理结果POST
调用接口需要配置使用TextIn账号。请在TextIn上注册后,在TextIn首页-账户与充值-账号与开发者信息
页面获取 x-ti-app-id
和 x-ti-secret-code
,用于请求认证。
1. DocFlow API综合案例
我们结合现有的接口,实现一个从上传文件到获取识别结果的综合案例。
from requests_toolbelt.multipart.encoder import MultipartEncoder
import hashlib
import hmac
import time
import requests
import os
import json
# 配置您的认证信息
ti_app_id = "97135787*****************ef0f5c"
ti_secret_code = "2d5b5b************************dde26a0"
# 配置参数
FILE_PATH = "sample.pdf" # 要上传的文件路径
WORKSPACE_ID = "1851520358480039936" # 替换为实际的workspace_id
CATEGORY = "采购订单" # 替换为实际的category
def generate_signature(http_method, url, params, payload_raw, ti_secret_code, epoch_time):
"""
生成签名的函数
"""
# 生成签名密钥
signing_key = hmac.new(ti_secret_code.encode('utf-8'), str(epoch_time).encode('utf-8'), hashlib.sha256).digest()
# 计算payload的哈希值
if payload_raw:
payload_hash = hashlib.sha256(payload_raw).hexdigest()
else:
payload_hash = hashlib.sha256(b'').hexdigest()
# 构建字符串以进行签名
sorted_params = '&'.join(f'{k}={v}' for k, v in sorted(params.items()))
string_to_sign = f"{http_method}\n{url}\n{sorted_params}\n{payload_hash}"
# 生成签名
signature = hmac.new(signing_key, string_to_sign.encode('utf-8'), hashlib.sha256).hexdigest()
return signature
def upload_file(ti_app_id, ti_secret_code, file_path, workspace_id, category):
"""
上传文件到DocFlow接口,并返回file_id
"""
# API 端点
url = "/api/app-api/sip/platform/v2/file/upload"
# 查询参数
params = {
"workspace_id": workspace_id,
"category": category
}
# 当前时间戳
epoch_time = int(time.time())
# 构建multipart/form-data的payload
payload = MultipartEncoder(
fields={
"file": (os.path.basename(file_path), open(file_path, "rb"), "application/pdf"),
}
)
payload_raw = payload.to_string()
# 生成签名
signature = generate_signature(
http_method="POST",
url=url,
params=params,
payload_raw=payload_raw,
ti_secret_code=ti_secret_code,
epoch_time=epoch_time
)
# 打印调试信息
print("=== 文件上传签名信息 ===")
print(f"epoch_time: {epoch_time}")
print(f"http_method: POST")
print(f"string_to_sign: POST\n{url}\n{'&'.join(f'{k}={v}' for k, v in sorted(params.items()))}\n{hashlib.sha256(payload_raw).hexdigest()}")
print(f"signature: {signature}\n")
# 设置请求头
headers = {
"Content-Type": payload.content_type,
"x-ti-app-id": ti_app_id,
"x-ti-timestamp": str(epoch_time),
"x-ti-signature": signature
}
# 发送POST请求上传文件
try:
response = requests.post(
url=f"https://docflow.textin.com{url}",
params=params,
data=payload_raw,
headers=headers
)
response.raise_for_status() # 检查是否有HTTP错误
print("上传成功!响应内容:")
response_json = response.json() # 假设返回的是JSON格式
print(response_json)
# 提取file_id
if response_json.get('code') == 200:
files = response_json.get('result', {}).get('files', [])
batch_number = response_json.get('result', {}).get('batch_number')
if batch_number:
print(f"提取到的batch_number: {batch_number}")
return batch_number
else:
print("响应中未找到文件信息。")
return None
else:
print(f"上传失败,消息: {response_json.get('msg')}")
return None
except requests.exceptions.HTTPError as http_err:
print(f"HTTP错误发生: {http_err}")
print(f"响应内容: {response.text}")
return None
except Exception as err:
print(f"其他错误发生: {err}")
return None
def fetch_results(ti_app_id, ti_secret_code, workspace_id, batch_number):
"""
获取上传文件的查询结果
"""
# API 端点
url = "/api/app-api/sip/platform/v2/file/fetch"
# 查询参数
params = {
"workspace_id": workspace_id,
"batch_number": batch_number
}
# 当前时间戳
epoch_time = int(time.time())
# GET请求通常没有payload
payload_raw = b''
# 生成签名
signature = generate_signature(
http_method="GET",
url=url,
params=params,
payload_raw=payload_raw,
ti_secret_code=ti_secret_code,
epoch_time=epoch_time
)
# 设置请求头
headers = {
"x-ti-app-id": ti_app_id,
"x-ti-timestamp": str(epoch_time),
"x-ti-signature": signature
}
# 发送GET请求获取结果
try:
response = requests.get(
url=f"https://docflow.textin.com{url}",
params=params,
headers=headers
)
response.raise_for_status() # 检查是否有HTTP错误
response_json = response.json() # 假设返回的是JSON格式
return response_json
except requests.exceptions.HTTPError as http_err:
print(f"HTTP错误发生: {http_err}")
print(f"响应内容: {response.text}")
return None
except Exception as err:
print(f"其他错误发生: {err}")
return None
if __name__ == "__main__":
# 检查文件是否存在
if not os.path.isfile(FILE_PATH):
print(f"文件 {FILE_PATH} 不存在。请确保文件路径正确。")
else:
# 上传文件并获取batch_number
batch_number = upload_file(
ti_app_id=ti_app_id,
ti_secret_code=ti_secret_code,
file_path=FILE_PATH,
workspace_id=WORKSPACE_ID,
category=CATEGORY
)
# 如果成功获取到batch_number,则进行查询
if batch_number:
print("=== 查询识别结果 ===")
waited_seconds = 0
while True:
result = fetch_results(
ti_app_id=ti_app_id,
ti_secret_code=ti_secret_code,
workspace_id=WORKSPACE_ID,
batch_number=batch_number
)
if result and result.get('code') == 200:
files = result.get('result', {}).get('files', [])
if files:
file_info = files[0]
recognition_status = file_info.get('recognition_status', 0)
data = file_info.get('data', 0)
if data != {}:
print("识别完成!结果如下:")
print(file_info.get('data', {}))
break
else:
waited_seconds += 5
print(f"正在识别中,已等待{waited_seconds}秒,请耐心等待...")
else:
print("未找到文件信息,继续等待...")
else:
print("获取结果失败或响应异常,继续等待...")
time.sleep(5) # 等待5秒后再次查询
返回值如下:
{'fields': [{'key': 'Order Number', 'value': '3201276954'}, {'key': 'Due Date', 'value': '2023.08.30'}, {'key': 'Vendor Order ID', 'value': '3201276954'}, {'key': 'Supplier Name', 'value': 'CHIPONE (HONG KONG) CO., LIMITED'}, {'key': 'Place of Supply', 'value': 'Hefei, Anhui, China'}, {'key': 'Supplier Address', 'value': 'FLAT/RM 826, OCEAN CENTER HARBOUR C'}, {'key': 'Supplier Email', 'value': 'yzhang@chiponeic.com'}, {'key': 'Customer ID', 'value': '1009749'}, {'key': 'Customer Name', 'value': 'CHIPONE (HONG KONG) CO., LIMITED'}, {'key': 'Account Number', 'value': ''}, {'key': 'IBAN', 'value': ''}, {'key': 'Terms', 'value': 'TT After Arrival of the goods monthly settlement 90 days'}, {'key': 'Total Amount', 'value': '0.00'}, {'key': 'Total Tax', 'value': '0.00'}, {'key': 'Amount Rounding', 'value': ''}, {'key': 'Amount Paid', 'value': '0.00'}, {'key': 'VAT Rate', 'value': ''}, {'key': 'VAT Base', 'value': '0.00'}, {'key': 'VAT Amount', 'value': '0.00'}, {'key': 'VAT Total', 'value': '0.00'}], 'items': [[{'key': 'Item Code', 'value': '00010'}, {'key': 'Description', 'value': 'SD_COF_ICNL9309_1026_6_48'}, {'key': 'Quantity', 'value': '400'}, {'key': 'UOM', 'value': 'EA'}, {'key': 'Unit Price Base', 'value': '0.00'}, {'key': 'Unit Price', 'value': '0.00'}, {'key': 'Tax Rate', 'value': ''}, {'key': 'Tax', 'value': ''}, {'key': 'Total Amount', 'value': '0.00'}]]}
可以看到,通过调用DocFlow的API接口,我们可以快速提取出图像的数据。
2. DocFlow API优势
-
安全性高:通过签名认证方式,确保数据传输的安全性和请求的合法性。
-
灵活性强:丰富的API接口,支持多种数据采集和处理需求,满足不同业务场景。
-
易于集成:提供详细的API文档和示例代码,帮助开发者快速集成DocFlow功能。
五、丰富的DocFlow插件生态
DocFlow不仅具备强大的核心功能,还通过丰富的插件生态,进一步拓展了其应用范围和功能深度,满足不同企业的多样化需求。
1. 插件扩展
DocFlow提供多种插件,增强其影像采集与处理能力:
功能名称 | 功能描述 |
---|---|
邮箱助手 | 自动导入邮件中的附件,简化邮件文档的管理流程,提升工作效率。 |
扫描插件 | 支持批量快速采集单据,提升扫描效率,减少手工操作。 |
文件导入 | 自动导入邮件中的文件附件,确保数据的一致性和完整性。 |
数据库导入 | 支持从数据库批量采集数据,确保数据的统一性和准确性。 |
接口导入 | 通过配置接口自动导入数据,提升数据采集的自动化水平,减少手工干预。 |
2. 功能插件
除了基础的影像采集插件,DocFlow还提供多种功能插件,满足不同业务场景的需求:
-
边缘检测与切边压缩:自动裁剪文档边缘,减少无关信息,提高图像质量。
-
增强锐化与曲面矫正:提升图像清晰度,纠正文档倾斜,确保文字的可读性。
-
阴影消除与去摩尔纹:去除文档中的阴影和干扰线条,优化图像背景。
-
多图切分与水印去除:支持将多页文档拆分为单页图像,自动去除水印,保证数据的完整性。
3. 定制化插件
针对特定行业和业务需求,DocFlow还支持定制化插件开发:
-
行业特定插件:如金融、物流、制造等行业的专用插件,满足行业特定的文档处理需求。
-
自定义功能插件:企业可根据自身需求,开发自定义功能插件,扩展DocFlow的应用范围和功能深度。
通过丰富的插件生态,DocFlow能够灵活适应不同企业和行业的多样化需求,提供全面的文档自动化解决方案。
六、DocFlow行业案例
DocFlow凭借其强大的功能和灵活的配置,已在多个行业成功应用,显著提升了企业的办公效率和管理水平。以下是两个典型的行业案例:
1. 票据自动化
某国产新能源汽车企业在应用DocFlow后,成功打破了票据处理过程中语言和版式的障碍,实现了从传统手工录入到全流程自动化管理的转变。通过DocFlow的高效识别与抽取,企业在全球化“深海”市场中获得了深度赋能,持续提升了业务处理效率。
应用成果:
-
效率提升:票据处理时间从传统的小时级别缩短至分钟级别,显著提高了处理速度。
-
准确率提升:自动化识别错误率趋近于零,确保数据的准确性和可靠性。
-
成本降低:减少了大量的人工录入和管理成本,提升了企业的运营效率。
-
全球化支持:支持多语言和多版式票据,满足企业全球化业务的需求。
2. 物流集散
某大型物流公司在传统录单业务流程中,手工录入提货单信息耗时耗力,且易出错。引入DocFlow后,系统能够智能识别并抽取提货单中的关键字段信息及印章信息,自动录入WMS系统。录单员仅需进行复核确认,整个流程大幅简化,工作效率提升了80%。
应用成果:
-
工作效率提升:整体工作效率相较于流程改造前提升了80%,显著缩短了录单时间。
-
错误率降低:自动化识别减少了人工录入中的错误,提高了数据的准确性。
-
流程简化:从提货单扫描、信息抽取到系统录入,实现了流程的全面自动化。
-
员工满意度提升:减少了重复性劳动,提升了员工的工作满意度和工作效率。
七、总结
DocFlow作为TextIn推出的高精度文档自动化处理工具,以其强大的识别与抽取能力、灵活的集成方式和丰富的插件生态,已成为众多企业提升办公效率、实现智能化管理的得力助手。无论是票据自动化、物流集散,还是金融信贷业务,DocFlow都能通过其卓越的技术能力,帮助企业实现业务流程的全面优化和升级,真正实现办公效率的百倍提升。随着产品的不断优化和市场的持续扩展,DocFlow必将在智能文档管理领域占据更加重要的地位,助力企业在信息化浪潮中稳步前行。
内测试用官招募中!或可添加官方福利官报名,免费使用Docflow👇
https://cc.co/16YSNT
八、链接入口
TextIn Docflow Demo试用报名入口