news 2026/4/18 12:41:09

dify工作流编排:触发OCR识别后的自动分类与存储流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
dify工作流编排:触发OCR识别后的自动分类与存储流程

dify工作流编排:触发OCR识别后的自动分类与存储流程

📄 业务背景与痛点分析

在企业日常运营中,大量非结构化文档(如发票、合同、身份证件、产品说明书)需要被数字化处理。传统人工录入方式效率低、成本高、易出错。尽管OCR技术已广泛应用于文字提取场景,但单纯的识别能力并不能解决端到端的信息自动化问题

例如: - 提取的文字如何归类? - 不同类型的文件是否能自动打标签? - 结构化数据能否写入数据库或同步至其他系统?

这些问题正是现代AI工作流平台(如Dify)要解决的核心挑战。本文将结合一个轻量级、高精度的CRNN OCR服务镜像,演示如何通过 Dify 编排一套完整的自动化流程:

上传图片 → 触发OCR识别 → 自动文本分类 → 按类别存储到指定位置

该方案无需GPU、支持CPU部署,适合中小企业和边缘设备场景落地。


👁️ 高精度通用 OCR 文字识别服务 (CRNN版)

📖 项目简介

本镜像基于 ModelScope 经典的CRNN (Convolutional Recurrent Neural Network)模型构建,专为中文环境优化。相比传统CNN+Softmax架构,CRNN 引入了双向LSTM层对字符序列建模,显著提升了对模糊、倾斜、手写体及复杂背景图像的识别鲁棒性。

已集成 Flask 构建的 WebUI,并内置 OpenCV 图像预处理流水线,包括:

  • 自动灰度化
  • 直方图均衡化增强对比度
  • 尺寸归一化(32x100)
  • 去噪滤波(高斯/中值)

最终实现无GPU依赖、平均响应时间 < 1秒的轻量级工业级OCR服务。

💡 核心亮点: 1.模型升级:从 ConvNextTiny 升级为 CRNN,中文识别准确率提升约 28% 2.智能预处理:自动适配低质量图像,减少人工干预 3.双模输出:同时提供可视化 Web 界面与标准 REST API 接口 4.资源友好:仅需 2GB 内存即可运行,适用于树莓派等边缘设备


🧩 工作流设计目标

我们希望实现以下自动化逻辑:

用户上传一张图片 ↓ 调用CRNN-OCR服务进行文字识别 ↓ 将识别结果送入“文本分类”节点(判断是发票 / 合同 / 身份证 / 其他) ↓ 根据分类结果: - 发票 → 存入 /data/invoices/ - 合同 → 存入 /data/contracts/ - 身份证 → 存入 /data/ids/ - 其他 → 存入 /data/others/ ↓ 记录日志并返回结构化结果

整个过程无需人工参与,且具备可扩展性——未来可接入邮件通知、数据库写入、RPA机器人等模块。


⚙️ 技术选型与架构整合

| 组件 | 技术方案 | 说明 | |------|--------|------| | OCR服务 | CRNN + Flask API | 提供/ocr接口返回JSON格式文本 | | 工作流引擎 | Dify AI Workflow | 可视化编排HTTP请求、条件分支、变量传递 | | 分类模型 | Zero-shot Classifier(基于BERT) | 使用HuggingFacefacebook/bart-large-mnli实现零样本分类 | | 存储系统 | 本地文件系统 + 日志记录 | 模拟真实存储路径,便于调试 |

✅ 所有组件均可容器化部署,形成完整MLOps闭环。


🛠️ 实践应用:在Dify中搭建OCR自动化流程

步骤1:启动OCR服务并测试API

首先确保OCR服务已正常运行。假设其内网地址为http://172.18.0.5:5000

测试命令:

curl -X POST http://172.18.0.5:5000/ocr \ -F "image=@./test_invoice.jpg" \ -H "Content-Type: multipart/form-data"

预期返回:

{ "code": 0, "result": [ {"text": "增值税专用发票", "confidence": 0.96}, {"text": "购买方名称:北京某某科技有限公司", "confidence": 0.93}, {"text": "金额:¥8,640.00", "confidence": 0.95} ] }

我们将利用此接口作为工作流的第一个执行节点。


步骤2:在Dify中创建Workflow

登录 Dify 控制台 → 创建新 Workflow → 命名为Auto OCR Classifier

节点1:接收用户输入(Image Upload)

使用User Input节点接收用户上传的图片文件。

配置参数: - 输入类型:file- 支持格式:jpg,png,jpeg- 最大大小:5MB

变量名设为uploaded_image


节点2:调用OCR服务(HTTP Request)

添加HTTP Request节点,连接至CRNN OCR服务。

配置如下:

Method: POST URL: http://172.18.0.5:5000/ocr Headers: Content-Type: multipart/form-data Body Type: form-data Fields: image: {{uploaded_image}}

注意:{{uploaded_image}}是上一步的动态变量引用

设置响应解析规则: - 数据路径:result[*].text- 输出变量:ocr_texts_joined = join(ocr_texts, "\n")

这样我们就得到了完整的识别文本段落。


节点3:文本自动分类(LLM Zero-Shot Classification)

接下来使用 Dify 内置的大语言模型能力,对提取的文本进行分类。

添加Large Language Model节点,提示词(Prompt)设计如下:

你是一个文档分类器,请判断以下内容属于哪一类文档。只能选择一项: 候选类别: - 发票 - 合同 - 身份证 - 其他 请直接输出类别名称,不要解释。 文档内容: {{ocr_texts_joined}}

启用“结构化输出”功能,强制模型返回纯文本类别。

输出变量命名为document_type


节点4:条件路由(Conditional Routing)

添加Condition节点,依据document_type值决定后续路径。

配置多个分支:

| 条件表达式 | 目标路径 | |----------|--------| |{{document_type}} == "发票"| → 存入发票目录 | |{{document_type}} == "合同"| → 存入合同目录 | |{{document_type}} == "身份证"| → 存入身份证目录 | | 默认情况 | → 存入其他目录 |

每个分支连接一个Code Execution节点,执行Python脚本完成文件保存。


节点5:按类别存储文件(Code Node 示例)

以“发票”分支为例,编写 Python 脚本:

import os import shutil from pathlib import Path # 获取输入参数 file_path = '{{uploaded_image}}' output_dir = '/data/invoices/' # 创建目录 Path(output_dir).mkdir(parents=True, exist_ok=True) # 构造新文件名 filename = os.path.basename(file_path) dest = os.path.join(output_dir, filename) # 移动文件 shutil.move(file_path, dest) # 返回结果 { "status": "success", "message": f"文件已分类为发票并保存至 {dest}", "category": "invoice", "saved_path": dest }

💡 实际生产环境中,此处可替换为上传至 MinIO/S3、插入数据库、触发审批流等操作


节点6:统一日志输出(Final Output)

最后添加一个Output节点,汇总所有信息:

{ "original_file": "{{uploaded_image}}", "extracted_text": "{{ocr_texts_joined}}", "document_type": "{{document_type}}", "storage_result": "{{code_node_result.message}}", "timestamp": "{{now()}}" }

用户可在前端清晰看到全流程执行结果。


🧪 实际运行效果演示

  1. 用户上传一张PDF转换而来的发票截图
  2. OCR服务成功识别出“增值税发票”、“纳税人识别号”、“金额”等关键字段
  3. LLM分类器准确判断为“发票”
  4. 系统自动将其移动至/data/invoices/20250405_发票_001.jpg
  5. 返回结构化结果,包含原始文本与存储路径

全程耗时约1.8秒(OCR 0.9s + 分类 0.6s + 存储 0.3s),完全无需人工干预。


🚨 落地难点与优化建议

❗ 实际工程中的常见问题

| 问题 | 原因 | 解决方案 | |------|------|---------| | OCR识别乱序或漏字 | 图像分辨率过低或角度倾斜 | 增加预处理中的透视矫正算法 | | 分类错误(如合同误判为发票) | 文本片段不完整 | 设置最小字符阈值,不足时重新采样 | | 文件路径权限错误 | 容器内外挂载路径不一致 | 使用 Docker Volume 明确绑定/data目录 | | 并发请求阻塞 | 单进程Flask性能瓶颈 | 增加Gunicorn多Worker或加Redis队列 |


✅ 性能优化建议

  1. 缓存机制:对相同哈希值的图片跳过重复识别
  2. 批量处理:支持ZIP压缩包上传,内部循环处理每张图
  3. 异步任务队列:对于大文件使用 Celery + Redis 解耦主流程
  4. 模型蒸馏:将CRNN模型进一步压缩为Tiny版本,提升推理速度30%

🔄 可扩展的进阶应用场景

当前流程仅为基础模板,可根据业务需求拓展:

场景1:财务报销自动化

  • OCR提取金额 → 校验是否超过预算 → 自动发起钉钉审批

场景2:客户资料入库

  • 身份证识别 → 结构化解析姓名/身份证号 → 写入CRM系统

场景3:合同风险审查

  • 提取合同条款 → 调用RAG检索相似历史案例 → LLM生成风险提示

只需在现有工作流末尾追加新的节点即可实现,真正做到了“低代码、高灵活”


📊 对比传统方案的优势

| 维度 | 传统人工处理 | 本方案(Dify + CRNN OCR) | |------|-------------|--------------------------| | 处理速度 | 5分钟/份 | < 2秒/份 | | 准确率 | ~90%(含疲劳误差) | OCR 92% + 分类 88% | | 成本 | 人力成本高 | 初始投入后边际成本趋近于0 | | 扩展性 | 修改流程困难 | 可视化拖拽调整,分钟级上线 | | 可审计性 | 无日志追踪 | 全流程结构化日志留存 |

🔍 特别适合发票审核、档案管理、政务窗口等高频文档处理场景


🧾 总结:打造智能文档处理中枢

本文详细展示了如何利用Dify 工作流引擎轻量级CRNN OCR服务,构建一个全自动的“识别→分类→存储”流水线。

核心价值在于: -去GPU化:全CPU运行,降低部署门槛 -端到端自动化:从图像输入到结构化输出,无人值守 -可编排性强:通过可视化界面自由组合AI能力 -易于维护:各模块解耦,单点故障不影响整体

📌 最佳实践建议: 1. 在正式上线前,建立不少于200张样本的测试集验证OCR准确率 2. 对分类结果设置人工复核通道,逐步过渡到全自动 3. 定期更新OCR模型权重,适应新样式票据变化

随着大模型与边缘计算的发展,这类“小模型+大流程”的组合将成为企业智能化升级的主流范式。而 Dify 正是连接AI能力与业务系统的理想桥梁。


🚀 下一步学习建议: - 尝试接入更强大的 PP-OCRv4 模型提升精度 - 将存储动作改为写入 PostgreSQL 或 Elasticsearch - 添加 Email / DingTalk 节点实现结果通知

让AI不止于识别,更要驱动决策。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 10:52:57

UI-TARS桌面版:革命性智能GUI工具完全攻略与实战应用

UI-TARS桌面版&#xff1a;革命性智能GUI工具完全攻略与实战应用 【免费下载链接】UI-TARS-desktop A GUI Agent application based on UI-TARS(Vision-Lanuage Model) that allows you to control your computer using natural language. 项目地址: https://gitcode.com/Git…

作者头像 李华
网站建设 2026/4/18 6:30:45

为什么越来越多企业用开源OCR?真相是成本

为什么越来越多企业用开源OCR&#xff1f;真相是成本 &#x1f4c4; OCR文字识别&#xff1a;从“看得见”到“读得懂”的关键一步 在数字化转型的浪潮中&#xff0c;光学字符识别&#xff08;OCR&#xff09;技术正成为企业自动化流程的核心引擎。无论是财务发票录入、合同文档…

作者头像 李华
网站建设 2026/4/18 6:29:54

HTML lang=‘zh-cn‘页面识别:OCR镜像支持区域语言标注

HTML langzh-cn页面识别&#xff1a;OCR镜像支持区域语言标注 &#x1f4d6; 技术背景与问题提出 在多语言互联网内容日益丰富的今天&#xff0c;网页和图像中的文字识别&#xff08;OCR&#xff09;已成为信息提取、自动化处理和无障碍访问的核心技术之一。尤其在中文语境下…

作者头像 李华
网站建设 2026/4/18 6:31:26

Vue数据流管理终极指南:5步构建高性能状态同步系统

Vue数据流管理终极指南&#xff1a;5步构建高性能状态同步系统 【免费下载链接】ant-design-x-vue Ant Design X For Vue.&#xff08;WIP&#xff09; 疯狂研发中&#x1f525; 项目地址: https://gitcode.com/gh_mirrors/an/ant-design-x-vue 在现代前端开发中&#x…

作者头像 李华
网站建设 2026/4/18 6:29:51

百度网盘秒传工具完全攻略:告别龟速下载的全新体验

百度网盘秒传工具完全攻略&#xff1a;告别龟速下载的全新体验 【免费下载链接】baidupan-rapidupload 百度网盘秒传链接转存/生成/转换 网页工具 (全平台可用) 项目地址: https://gitcode.com/gh_mirrors/bai/baidupan-rapidupload 还在为百度网盘令人崩溃的下载速度而…

作者头像 李华
网站建设 2026/4/17 23:15:20

PHP如何才能把服务器16核心CPU利用到极致?

要让 PHP 充分利用 16 核 CPU&#xff0c;核心在于 突破 PHP 单进程单线程的限制&#xff0c;通过多进程并行执行 CPU 密集型任务。Web 请求处理&#xff08;I/O 密集&#xff09;与批处理&#xff08;CPU 密集&#xff09;需采用不同策略。一、根本前提&#xff1a;区分任务类…

作者头像 李华