HunyuanOCR 接入 RPA 机器人:UiPath 与影刀兼容性测试
在企业自动化迈向'无人值守'的今天,一个看似简单却频繁出现的难题正在困扰着 RPA 工程师:如何让机器人'看懂'屏幕上那些无法复制的文字?
比如财务人员每天要处理上百张扫描发票,信息藏在图片里;客服系统弹出的验证码截图需要自动识别;跨国业务中混杂中英日韩多语种的合同文本等待提取……这些非结构化视觉数据,正是传统 RPA 的'盲区'。而解决这一瓶颈的关键,正是将 OCR 能力深度融入自动化流程。
近年来,随着大模型技术的发展,OCR 不再只是简单的文字识别工具。腾讯推出的HunyuanOCR,作为基于混元多模态架构打造的端到端轻量级专家模型,正以其出色的泛化能力和低部署门槛,成为增强 RPA 视觉感知能力的理想候选者。
那么问题来了——它真的能在真实生产环境中,稳定对接主流 RPA 平台吗?我们以国内广泛使用的影刀 RPA和国际主流的UiPath为例,从部署、调用到集成路径进行了完整验证。
为什么是 HunyuanOCR?
传统的 OCR 方案往往采用'检测 + 识别'两阶段级联架构,例如 PP-OCR 系列搭配 LayoutParser 做版面分析。这类组合虽然精度尚可,但存在明显的工程痛点:
- 模型数量多,维护成本高;
- 推理链路长,延迟叠加;
- 错误传播严重(检测错了,识别必然失败);
- 显存占用动辄超过 10GB,难以边缘部署。
而 HunyuanOCR 走的是另一条技术路线:原生多模态 + 端到端统一建模。这意味着它不需要拆分成多个子任务,而是像人一样'一眼看全图',直接输出带位置信息的结构化文本结果。
整个流程非常简洁:
- 输入图像经过归一化预处理;
- 多模态编码器联合提取图文特征;
- 解码器一次性生成所有文本行及其语义标签;
- 输出 JSON 格式结果,包含文字内容、坐标框、置信度等字段。
更关键的是,这个能力被压缩在一个仅1B 参数的模型中。实测表明,在 NVIDIA RTX 4090D 上启用 FP16 量化后,显存占用可控制在 8GB 以内,完全满足本地或私有服务器部署需求。
不仅如此,它还内置了对超 100 种语言的支持,无论是中文为主夹杂英文的产品说明书,还是纯阿拉伯文的报关单,都能准确识别。对于涉及海外业务的企业来说,这省去了额外配置语言包的麻烦。
最令开发者心动的一点是:它提供了标准 RESTful API 接口。换句话说,只要能发 HTTP 请求的地方,就能调用它的 OCR 能力——而这恰恰为 RPA 集成打开了大门。
RPA 平台如何'看见'世界?
无论是 UiPath 还是影刀 RPA,它们的本质都是'软件操作模拟器'。它们擅长点击按钮、填写表单、读取数据库,但在面对图像时却束手无策。毕竟,屏幕上的文字如果是以像素形式存在的,操作系统本身并不会告诉 RPA'这里写着'订单编号:20240517''。
这时候就需要引入'视觉增强'机制。其核心逻辑其实并不复杂:
- RPA 截取目标区域的屏幕图像;
- 将图像上传至 OCR 服务;
- 解析返回的文本结果;
- 在后续流程中使用这些数据进行判断或填入。
这种模式被称为 Screen Scraping + OCR Augmentation,是目前非侵入式自动化的主流做法。尤其适用于老旧 ERP、封闭客户端、WebCanvas 渲染页面等无法通过 DOM 抓取信息的场景。
幸运的是,两大平台都支持外部服务调用:
- UiPath 提供'Python Scope'活动,允许嵌入 Python 脚本;
- 影刀 RPA 支持'运行代码块'节点,可直接编写 Python 逻辑。
这意味着我们可以把 HunyuanOCR 当作一个本地微服务来使用,通过简单的 HTTP 通信完成图文识别闭环。
下面这段 Python 脚本,就是连接两者的核心桥梁:
import requests
import json
from PIL Image
base64
OCR_API_URL =
():
(image_path, ) img_file:
base64.b64encode(img_file.read()).decode()
():
payload = {
: image_to_base64(image_path),
:
}
headers = {
:
}
:
response = requests.post(OCR_API_URL, data=json.dumps(payload), headers=headers, timeout=)
response.raise_for_status()
result = response.json()
texts = [item[] item result.get(, [])]
.join(texts)
requests.exceptions.RequestException e:
()
__name__ == :
text = ocr_extract()
text:
()
(text)

