影刀RPA OCR文字识别实战:图片转文字完整教程
2026/7/4 8:12:01 网站建设 项目流程

影刀RPA OCR文字识别实战:图片转文字完整教程

作者:林焱 | 适用人群:需要用影刀进行图片文字识别的 RPA 开发者 | 预计阅读时间:9 分钟


前言:图片中的文字,RPA 也能"读"

做 RPA 经常会遇到这种情况:

  • 验证码图片需要识别才能登录
  • 扫描件/PDF中的文字需要提取出来
  • 图片里的价格/型号需要采集
  • 名片/发票/证件上的信息要录入系统
  • 截图中的错误提示信息要读取

这些场景都有一个共同点——信息在图片里,不是文本

这时候就需要OCR(光学字符识别)技术了。影刀 RPA 内置了 OCR 能力,可以让你在流程中直接调用,把图片中的文字提取出来变成可处理的文本。


一、OCR 是什么?能做什么?

1.1 OCR 基本原理

输入: 一张包含文字的图片 ┌──────────────────────┐ │ Hello World │ │ 你好世界 │ │ ¥199.00 │ └──────────────────────┘ ↓ OCR引擎处理 输出: "Hello World\n你好世界\n¥199.00" 简单说就是: 让计算机"看懂"图片里的字

1.2 OCR 的典型应用场景

场景输入输出价值
验证码识别验证码图片文本字符自动登录
发票/票据发票扫描件结构化数据财务自动化
身份证/名片证件照片姓名/号码等信息录入
截图文字提取程序截图错误日志文本自动化测试

店群矩阵自动化突破运营极限!

|PDF扫描件| 图片型PDF | 可搜索文本 | 档案数字化 |
|商品标签| 商品实拍图 | 名称/规格参数 | 电商采集 |
|车牌识别| 车辆照片 | 车牌号 | 停车管理 |
|手写体识别| 手写单据 | 电子文本 | 表单数字化 |


二、影刀中调用 OCR

2.1 基础用法:识别一张图片

# 方式1: 从文件路径识别 imagePath = "D:\\Images\\captcha.png" ocrResult = OCR_Recognize(imagePath) text = ocrResult.Text # 识别出的全部文本 Log("识别结果: " + text) # 方式2: 从屏幕区域识别(截屏后识别) region = {x: 100, y: 200, width: 150, height: 50} screenshot = ScreenCapture(region) ocrResult = OCR_Recognize(screenshot) text = ocrResult.Text # 方式3: 从网页元素截图识别 element = FindElement(browser, "#captcha-img") elementScreenshot = ElementScreenshot(element) ocrResult = OCR_Recognize(elementScreenshot)

2.2 获取结构化结果

# OCR返回的不只是纯文本,还有丰富的结构化信息 ocrResult = OCR_Recognize("invoice.jpg") ' 完整的识别结果 For Each block In ocrResult.Blocks # 按文本块(段落)遍历 Log("文本块: " + block.Text) Log("置信度: " + ToString(block.Confidence)) # 0~1, 越高越准 Log("位置: (" + block.X + ", " + block.Y + ")") Log("大小: " + block.Width + " x " + block.Height) Next ' 按行遍历 For Each line In ocrResult.Lines Log("第" + line.Index + "行: " + line.Text) Next ' 按单词遍历 For Each word In ocrResult.Words Log("单词: " + word.Text + " (置信度:" + Format(word.Confidence*100, "0") + "%)") Next

2.3 指定识别区域(ROI)


当只需要识别图片的某个部分时:

# 整张图太大,只识别其中一部分 roi = { x := 50, # 左上角x坐标 y := 100, # 左上角y坐标 width := 300, # 区域宽度 height := 80 # 区域高度 } result = OCR_RecognizeWithROI(imagePath, roi) # 典型应用:验证码通常在固定位置 captchaROI = {x:=120, y:=45, width:=80, height:=30} captchaText = OCR_RecognizeWithROI(screenImage, captchaROI)

三、实战案例1:自动识别验证码并登录

这是 RPA 中最常见的 OCR 场景之一:

Function 自动登录带验证码(loginUrl As String, username As String, password As String) browser = 创建浏览器() Navigate(browser, loginUrl) ' ====== 第1步: 填写账号密码 ====== SetInputValue("#username", username) SetInputValue("#password", password) ' ====== 第2步: 识别并填写验证码 ====== maxRetry = 5 # 最多尝试5次 For attempt = 1 To maxRetry ' 刷新验证码图片(每次都要刷新获取新的) Click("#captcha_refresh_icon") # 点击刷新按钮 Wait(1500) # 等待新验证码加载 ' 截取验证码图片 captchaElement = FindElement(browser, "#captcha_image") captchaImg = ElementScreenshot(captchaElement) ' OCR识别 ocrResult = OCR_Recognize(captchaImg) captchaText = ocrResult.Text.Trim() Log("[CAPTCHA] 第" + ToString(attempt) + "次识别: '" + captchaText + "' (置信度:" + Format(ocrResult.AvgConfidence*100, "0") + "%)") ' 填入识别结果 SetInputValue("#captcha_input", captchaText) ' 点击登录 Click("#login_button") Wait(2000) ' 检查是否登录成功 If 当前URL != loginUrl Or Not Contains验证码错误 Then Log("[SUCCESS] 登录成功! (尝试" + ToString(attempt) + "次)") Return browser # 返回已登录的浏览器对象 Else If attempt < maxRetry Then Log("[RETRY] 验证码可能错了,重试...") ClearInput("#captcha_input") End If End If Next ' 所有尝试都失败了 Log("[FAIL] 验证码识别" + maxRetry + "次均未通过,需要人工介入") ScreenshotSave(browser, "login_failed.png") SendAlert("验证码识别失败,请手动登录", "admin@company.com") Return null End Function

提升验证码识别率的技巧

方法说明效果
图像预处理二值化/去噪/增强对比度提升20-40%
多次识别取众数识别3-5次,取出现最多的结果提升30%
结合验证规则已知是4位纯数字/字母过滤非法结果
使用专业OCR引擎如百度OCR/Tesseract比内置引擎更准
# 多次识别取众数的实现 results = New List() For i = 1 To 3 ClickRefreshCaptcha() Wait(1200) img = CaptureCaptcha() text = OCR_Recognize(img).Text.Trim() results.Add(text) Next ' 取出现次数最多的那个 finalText = Mode(results) # 取众数 Log("最终使用: " + finalText)

四、实战案例2:发票信息自动提取

Function 提取发票信息(invoiceImagePath As String) As Object result = New Object() # 全图OCR ocrResult = OCR_Recognize(invoiceImagePath) allText = ocrResult.Text Log("[OCR] 全文:\n" + allText) ' ====== 关键字段提取 ======' ' 发票代码(通常是10位数字) invoiceCode = 正则匹配(allText, "发票代码[::]\s*(\d{10,12})") result.invoiceCode = IfEmpty(invoiceCode, 正则匹配(allText, "\d{10,12}")[0]) ' 发票号码 result.invoiceNo = 正则匹配(allText, "发票号码[::]\s*(\d{8})") ' 开票日期 result.date = 正则匹配(allText, "开票日期[::]\s*(\d{4}年?\d{1,2}月?\d{1,2}日?)") ' 销方名称 result.sellerName = 正则匹配(allText, "销售方[名称:]*[::]?\s*(.+?)(?:\n|$)") ' 购方名称 result.buyerName = 正则匹配(allText, "购买方[名称:]*[::]?\s*(.+?)(?:\n|$)") ' 金额(价税合计) totalMatch = 正则匹配(allText, "(?:价税合计|合计)[((]?[大写]*?[))]?[::]*\s*[¥¥]?\s*([\d,]+\.?\d*)") result.totalAmount = 清理数字(totalMatch) ' 不含税金额 amountMatch = 正则匹配(allText, "[金额合计][::]?\s*[¥¥]?\s*([\d,]+\.?\d*)") result.amount = 清理数字(amountMatch) ' 税额 taxMatch = 正则匹配(allText, "税额[::]?\s*[¥¥]?\s*([\d,]+\.?\d*)") result.taxAmount = 清理数字(taxMatch) ' 输出提取结果 Log("===== 发票信息提取结果 =====") Log("发票代码: " + result.invoiceCode) Log("发票号码: " + result.invoiceNo) Log("开票日期: " + result.date) Log("销售方: " + result.sellerName) Log("购买方: " + result.buyerName) Log("金额: ¥" + result.amount) Log("税额: ¥" + result.taxAmount) Log("价税合计: ¥" + result.totalAmount) Return result End Function

处理批量发票

# 对文件夹中的所有发票图片批量提取 invoiceDir = "D:\\Invoices\\2024年6月\\" images = GetFileList(invoiceDir, "*.jpg;*.png;*.jpeg") excel = CreateExcel() WriteHeaderRow(excel, ["文件名","发票代码","发票号码","开票日期","销售方","购买方","金额","税额","价税合计"]) For Each image In images Try info = 提取发票信息(image.FullName) excelRow = [ image.Name, info.invoiceCode, info.invoiceNo, info.date, info.sellerName, info.buyerName, info.amount, info.taxAmount, info.totalAmount ] AppendRowToExcel(excel, excelRow) Log("[OK] " + image.Name + " → 提取成功") Catch ex AppendRowToExcel(excel, [image.Name, "提取失败: " + ex.Message]) Log("[FAIL] " + image.Name + ": " + ex.Message) End Try Next SaveAndClose(excel, "D:\\Output\\发票信息_" + 今天日期 + ".xlsx")

五、实战案例3:身份证信息自动录入

Function 身份证OCR录入(idCardImagePath As String) ' 影刀可能有专门的身份证识别接口 ' 如果有就用专用接口(准确率更高) idInfo = OCR_IDCard(idCardImagePath) # 专用身份证识别 If idInfo != null Then ' 直接拿到结构化字段 name = idInfo.Name # 姓名 gender = idInfo.Gender # 性别 ethnicity = idInfo.Ethnicity # 民族 birthDate = idInfo.BirthDate # 出生日期 address = idInfo.Address # 地址 idNumber = idInfo.IDNumber # 身份证号 authority = idInfo.IssuingAuthority # 签发机关 validDate = idInfo.ValidPeriod # 有效期 Else ' 回退到通用OCR ocrResult = OCR_Recognize(idCardImagePath) rawText = ocrResult.Text ' 用正则从通用OCR结果中解析 name = 正则提取(rawText, "名\s*(.+)\n性") gender = 正则提取(rawText, "别\s*(男|女)") idNumber = 正则提取(rawText, "\d{17}[\dXx]") address = 正则提取(rawText, "住址\s*(.+?)\n公民身份") End If ' ====== 自动填表 ====== SetInputValue("#real_name", name) SelectByText("#gender", gender) SetInputValue("#id_card_number", idNumber) SetInputValue("#birth_date", birthDate) SetInputValue("#address", address) ' 如果身份证有效期需要单独填 If validDate != "" Then parts = Split(validDate, "-") SetInputValue("#valid_from", parts[0]) If parts.Length > 1 Then SetInputValue("#valid_to", parts[1]) End If End If Log("[IDCARD] 已完成身份证信息录入: " + name + "(" + idNumber + ")") End Function

六、提高 OCR 准确率的技巧

temu店群自动化报活动案例

6.1 图像预处理

原始图片往往不理想,预处理能大幅提升识别率: 1. 灰度化 — 彩色转灰度(减少干扰信息) 2. 二值化 — 黑白分明(去除背景噪点) 3. 去噪 — 消除椒盐噪声/斑点 4. 倾斜校正 — 校正拍摄角度偏差 5. 对比度增强 — 让文字和背景差异更大 6. 缩放放大 — 小字放大会更好识别 # 在影刀中的预处理操作 img = LoadImage("photo.jpg") img = GrayScale(img) # 灰度化 img = BinaryThreshold(img, 128) # 二值化 img = Denoise(img) # 去噪 img = Deskew(img) # 倾斜校正 img = Resize(img, width *= 2) # 放大2倍 result = OCR_Recognize(img) # 用预处理后的图识别

6.2 不同类型文字的策略

文字类型推荐策略预期准确率
打印体(清晰)直接识别95-99%
打印体(模糊/倾斜)预处理后识别85-95%
手写体(工整)手写体专用模型80-90%
手写体(潦草)很难保证准确率60-75%
特殊字体(艺术字/印章)需要训练自定义模型视情况而定
验证码(干扰线/噪点)预处理+多次尝试70-90%

6.3 当内置 OCR 不够用时

方案1: 调用云端OCR API(百度/腾讯/阿里云) 优点: 准确率高,支持多语言 缺点: 需要网络,有调用费用 # 百度OCR示例 baiduResult = BaiduOCR(imagePath, ["general"]) text = baiduResult.words_result[0].words 方案2: 本地部署Tesseract 优点: 免费,本地运行无需网络 缺点: 中文准确率一般,需配置语言包 # Tesseract示例 tesseractResult = TesseractOCR(imagePath, language := "chi_sim+eng") 方案3: 使用影刀官方提供的AI OCR能力 优点: 和影刀深度集成,最方便 缺点: 可能是付费功能 # 影刀AI-OCR示例 aiResult = AI_OCR_Recognize(imagePath, mode := "accurate")

七、OCR 常见问题排查

问题原因解决方法
识别出乱码图片分辨率太低放大图片或重新截取高清版
中英文混杂时中文丢失引擎语言包不全安装中文+英文语言包
数字识别错(0/O, 1/I/l)字体相似导致混淆后加校验逻辑(如身份证号最后一位校验)
表格识别错位表格线干扰文字检测先检测表格结构再逐格识别
速度很慢图片太大压缩或裁剪到需要的区域
特定字体无法识别训练库中没有该字体添加自定义训练样本

总结

OCR 是让 RPA 从"只能处理文字"进化到"能理解图片内容"的关键能力。掌握之后你的适用场景会大幅扩展:

有 OCR vs 无 OCR能做的场景
❌ 没有 OCR只能操作标准化的网页/桌面元素
✅ 有 OCR验证码登录、发票处理、证件录入、截图分析……

学习建议:

  1. 先从影刀内置 OCR 开始,熟练基础操作
  2. 重点练习「验证码识别」+「发票提取」这两个高频场景
  3. 遇到复杂场景再考虑接入第三方 OCR API
  4. 始终记住:图像预处理是提升准确率最有效的手段

本文作者林焱,专注影刀RPA教程与实战分享。
OCR让RPA拥有了"眼睛",能读懂图片里的每一个字!

有问题欢迎评论区留言,看到必回 🔥

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询