当前位置: 首页 > article >正文

合合信息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-idx-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试用报名入口


http://www.kler.cn/a/511754.html

相关文章:

  • Java基础——概念和常识(语言特点、JVM、JDK、JRE、AOT/JIT等介绍)
  • 【前端】CSS学习笔记
  • 通过图形界面展现基于本地知识库构建RAG应用
  • 【LLM-RL】DeepSeekMath强化对齐之GRPO算法
  • 企业分类相似度筛选实战:基于规则与向量方法的对比分析
  • 如何在不暴露MinIO地址的情况下,用Spring Boot与KKFileView实现文件预览
  • UE虚幻引擎No Google Play Store Key:No OBB found报错如何处理?
  • 【spring boot统一功能处理】拦截器
  • 梯度提升决策树树(GBDT)公式推导
  • 【面试题】JVM部分[2025/1/13 ~ 2025/1/19]
  • pytest+playwright落地实战大纲
  • leetcode242-有效字母异位词
  • RoCE网络及其协议栈详解(没有中间商赚差价的网络)
  • 快速排序练习
  • Linux:生产者消费者模型
  • 第 3 章 核心处理层(上)
  • Bash 中 nohup 与 的区别及用法解析
  • leetcode416.分割等和子集
  • nginx作为下载服务器配置
  • Python人脸识别库DeepFace使用教程及源码解析
  • imbinarize函数用法详解与示例
  • python 基础类json和csv
  • 深入剖析iOS网络优化策略,提升App性能
  • 【LC】2239. 找到最接近 0 的数字
  • Node.js 写一个登录中间件
  • 排序算法学习小结