影刀RPA进阶教程_截图与OCR文字识别在自动化中的实战应用
影刀RPA进阶教程截图与OCR文字识别在自动化中的实战应用——从识别验证码到提取页面文本有些页面上的文字不是真实的DOM元素而是一张图片。验证码是图片、电商主图上的水印是图片、部分老系统页面直接截成图片展示——这些场景下「获取元素文本」完全没用。这时候就该截图OCR了。这篇文章讲清楚影刀怎么截图、怎么调OCR、准确率怎么提升、以及不适合OCR的场景怎么绕开。一、截图指令的四种用法影刀的截图相关指令指令作用适用场景截取元素截图截某个特定元素区域精准截取验证码、价格标签截取全屏截图截整个网页可视区域截取整体页面做记录截取区域截图按坐标截取左上x,y,宽,高精确控制范围获取元素截图返回图片二进制数据后续OCR或保存使用最常用的是「截取元素截图」精准、文件小、后续OCR准确率高。# 截取验证码图片截取元素截图(验证码图片元素)-验证码截图# 保存到本地保存图片(验证码截图,D:\\captcha\\当前验证码.png)二、OCR文字识别的两种方式方式A影刀内置OCR指令拼多多店群自动化报活动上架影刀提供了「OCR识别」指令需要企业版或创业版# 截取元素 → OCR识别截取元素截图(价格标签区域)-截图 OCR识别(截图)-识别文本 输出日志(f识别到的价格{识别文本})优点是不需要额外配置缺点是对模糊文本的准确率一般。方式BPython调用百度/腾讯OCR API推荐影刀的Python代码指令可以调第三方OCR服务准确率远超内置OCR。以百度OCR为例importrequestsimportbase64# 1. 读取截图并转base64withopen(rD:\captcha\captcha.png,rb)asf:img_base64base64.b64encode(f.read()).decode()# 2. 调百度OCR API需先申请API Keyapi_urlhttps://aip.baidubce.com/rest/2.0/ocr/v1/general_basicaccess_token你的access_token# 通过API Key和Secret Key获取responserequests.post(api_url,data{image:img_base64},params{access_token:access_token})resultresponse.json()# {words_result: [{words: 连衣裙}, {words: ¥128.00}], ...}foriteminresult.get(words_result,[]):print(item[words])百度OCR每天有500次免费额度个人使用完全够。如果量更大用腾讯OCR每月1000次免费# 腾讯OCR的调用方式类似api_urlhttps://ocr.tencentcloudapi.com/# 需要签名认证建议用官方SDK代码稍长但官方有示例三、提高OCR准确率的实战技巧技巧1先预处理再识别不是截了图直接丢OCR就完事了。对图片做预处理能大幅提升准确率。fromPILimportImage,ImageFilter,ImageEnhance# 使用PIL做图片预处理imgImage.open(rD:\captcha\captcha.png)# 放大小字识别率低的问题imgimg.resize((img.width*2,img.height*2),Image.LANCZOS)# 转灰度去掉颜色干扰imgimg.convert(L)# 增强对比度让文字更清晰enhancerImageEnhance.Contrast(img)imgenhancer.enhance(2.0)# 二值化黑白分明去掉噪点threshold128imgimg.point(lambdap:255ifpthresholdelse0)img.save(rD:\captcha\captcha_processed.png)预处理后的图片再丢OCR准确率提升非常明显。特别是对付带噪点的验证码和低清晰度的截图。技巧2分区域截取不要截一整张大图丢OCR。把目标区域拆小每个小块单独识别。# 不要这样整张页面丢OCR识别结果混乱截取全屏截图-整张图 OCR识别(整张图)-混乱的结果# 应该这样每个价格标签单独截图获取相似元素列表(商品价格标签)-价格列表 遍历列表(价格列表,价格标签):截取元素截图(价格标签)-小截图 OCR识别(小截图)-价格文本 输出日志(价格文本)技巧3识别后做正则校验OCR不是100%准确的。识别完后用正则校验过滤掉明显错误的结果。importre OCR结果价格12B.00 销量1O248# 提取价格只保留数字和小数点价格列表re.findall(r[\d]\.[\d],OCR结果)# 结果: [12.00] — 自动过滤掉了识别错的12B.00# 提取销量只保留纯数字销量列表re.findall(r\d,OCR结果)# 结果: [12, 00, 1, 248] — 需要自己判断哪个是销量四、OCR不适合的场景OCR不是银弹有些场景怎么调都搞不定TEMU店群矩阵自动化运营核价报活动极度扭曲的验证码字母字母连在一起人眼看都费劲OCR基本白给图片上的彩色文字文字和背景颜色相近对比度低旋转角度太大的文字OCR一般只能处理±15度以内的倾斜这些场景建议绕路验证码走打码平台或人工处理数据找API不跟OCR死磕。五、除了提取文字截图还能干什么用途1流程执行留痕关键步骤截图保存出问题时快速定位# 关键操作前后都截图截取全屏截图-操作前截图 保存图片(操作前截图,fD:\\日志\\{时间戳}_处理前.png)点击元素(提交按钮)截取全屏截图-操作后截图 保存图片(操作后截图,fD:\\日志\\{时间戳}_处理后.png)用途2图片对比验证用影刀的「图片对比」指令验证操作结果截取元素截图(结果展示区)-当前截图# 与预期结果图对比图片对比(当前截图,D:\\预期结果.png)-相似度 如果 相似度0.9:# 相似度低于90%输出日志(操作结果不符合预期请检查)发送飞书通知(异常提醒,流程执行结果异常)六、推荐资源百度OCRai.baidu.com/tech/ocr — 免费500次/天注册即用腾讯OCRcloud.tencent.com/product/ocr — 免费1000次/月Pillow文档Python图片处理库影刀的Python代码指令已内置Pillow直接from PIL import Image即可作者林焱本文为《影刀RPA学习手册》系列文章之一内容源于实操经验的整理与分享。