影刀RPA AI图像识别自动化:验证码与商品图片智能处理

📅 2026/7/8 4:55:45
影刀RPA AI图像识别自动化:验证码与商品图片智能处理
影刀RPA AI图像识别自动化验证码与商品图片智能处理作者林焱什么情况用做RPA自动化最头疼的场景之一就是「流程卡在图像上」登录时弹了个图形验证码流程直接挂掉需要判断网页上的商品图片是否加载成功还是显示404占位图批量下载了上千张图片需要筛选出含有人像的用作头像和纯产品图的每天要从监控截图中判断是否有异常画面这些靠传统RPA的元素判断和OCR都搞不定。但调用AI图像识别接口可以轻松解决。核心场景需要RPA「看懂」图片内容的自动化任务。怎么做第一步选一个图像识别方案根据需求挑合适的工具拼多多店群自动化上架方案需求推荐方案成本文字验证码识别打码平台超级鹰/图鉴1-2分/次图片内容分类通义千问VL / GPT-4V几分钱/张| 图片相似度对比 | OpenCV 感知哈希 | 免费 || OCR文字提取 | 百度OCR / PaddleOCR | 有免费额度 |第二步文字验证码自动识别实战图形验证码是RPA的头号杀手。接入打码平台是最实用的方案。以超级鹰为例注册后拿到用户名、密码、软件ID。importrequestsimportbase64fromhashlibimportmd5classChaojiyingClient:超级鹰打码平台接入def__init__(self,username,password,soft_id):self.usernameusername self.passwordmd5(password.encode()).hexdigest()self.soft_idsoft_id self.base_urlhttps://upload.chaojiying.net/Upload/Processing.phpdefrecognize(self,image_path,code_type1902): 识别验证码图片 code_type: 1902常见4位英文数字, 10044位数字, 10055位数字 withopen(image_path,rb)asf:image_base64base64.b64encode(f.read()).decode()payload{user:self.username,pass2:self.password,softid:self.soft_id,codetype:str(code_type),file_base64:image_base64}resprequests.post(self.base_url,datapayload,timeout30)resultresp.json()ifresult[err_no]0:return{success:True,code:result[pic_str],code_id:result[pic_id]}else:return{success:False,error:result[err_str]}# 使用示例cjChaojiyingClient(your_username,your_password,123456)影刀流程中的拧螺丝环节截图验证码用影刀的「截图元素」功能精确截取验证码图片区域保存到本地截图保存到临时目录Python节点识别调用打码平台返回识别结果填写验证码用「填写输入框」指令填入识别结果容错处理如果提交后提示验证码错误重新截图再试第三步通义千问VL——让AI描述图片内容通义千问的多模态版本可以直接接收图片URL或base64然后回答关于图片的问题。importrequestsimportbase64importjsonclassQwenVision:通义千问视觉模型调用def__init__(self,api_key):self.api_keyapi_key self.urlhttps://dashscope.aliyuncs.com/compatible-mode/v1/chat/completionsdefask_about_image(self,image_path,question):上传图片并提问# 读取图片转base64withopen(image_path,rb)asf:image_b64base64.b64encode(f.read()).decode()headers{Authorization:fBearer{self.api_key},Content-Type:application/json}payload{model:qwen-vl-plus,messages:[{role:user,content:[{type:image_url,image_url:{url:fdata:image/png;base64,{image_b64}}},{type:text,text:question}]}]}resprequests.post(self.url,headersheaders,jsonpayload,timeout30)returnresp.json()[choices][0][message][content]defis_product_image(self,image_path):判断是否为商品图prompt判断这张图片是否是一张正常的商品展示图。 返回格式只返回JSON {is_product: true/false, reason: 简短理由} 注意商品图通常主体清晰、背景简洁。占位图、破损图、纯色图不是商品图。resultself.ask_about_image(image_path,prompt)try:returnjson.loads(result)except:return{is_product:False,reason:解析失败}# 使用示例# qw QwenVision(your-api-key)# result qw.is_product_image(product_001.jpg)第四步OpenCV感知哈希——图片相似度去重电商采集经常会抓到大量重复的图片同一商品不同角度、水印版本等。用感知哈希做去重不需要联网。importcv2importnumpyasnpimportosfromcollectionsimportdefaultdictclassImageDeduplicator:图片去重——基于感知哈希staticmethoddefperceptual_hash(image_path,hash_size8): 计算图片的感知哈希值 相似的图片会产生相似的哈希值 imgcv2.imread(image_path)ifimgisNone:returnNone# 缩放 灰度化imgcv2.resize(img,(hash_size1,hash_size))graycv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 计算差异哈希diffgray[:,1:]gray[:,:-1]returnsum(2**ifori,vinenumerate(diff.flatten())ifv)staticmethoddefhamming_distance(hash1,hash2):汉明距离——越小越相似returnbin(hash1^hash2).count(1)defdeduplicate_folder(self,folder_path,threshold5): 扫描文件夹标记相似图片 汉明距离 threshold 视为重复 image_files[fforfinos.listdir(folder_path)iff.lower().endswith((.png,.jpg,.jpeg,.bmp,.webp))]hashes{}groupsdefaultdict(list)forfinimage_files:pathos.path.join(folder_path,f)hself.perceptual_hash(path)ifhisNone:continuehashes[f]h# 两两比较fileslist(hashes.keys())foriinrange(len(files)):forjinrange(i1,len(files)):distself.hamming_distance(hashes[files[i]],hashes[files[j]])ifdistthreshold:groups[files[i]].append(files[j])returndict(groups)# 使用dedupImageDeduplicator()# 参数设5很严格几乎一样才算重复设10较宽松duplicatesdedup.deduplicate_folder(./product_images,threshold8)forkey,dupsinduplicates.items():print(f{key}与以下图片相似:{dups})第五步用PaddleOCR做本地免费OCR不想花钱用百度OCRPaddleOCR离线免费识别效果也不错。 准备工作在影刀的Python节点里先pip安装 pip install paddlepaddle paddleocr frompaddleocrimportPaddleOCRclassLocalOCR:本地免费OCR识别def__init__(self,use_gpuFalse):self.ocrPaddleOCR(use_angle_clsTrue,langch,use_gpuuse_gpu)defrecognize(self,image_path):识别图片中的文字resultsself.ocr.ocr(image_path,clsTrue)text_list[]ifresultsandresults[0]:forlineinresults[0]:boxline[0]# 文字框坐标 [[x1,y1],[x2,y2],[x3,y3],[x4,y4]]textline[1][0]# 识别出的文字confidenceline[1][1]# 置信度text_list.append({![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/56787c1a9b4c403690f1ca7281f1cb0e.png#pic_center)text:text,confidence:round(confidence,2),box:box})returntext_listdefextract_number_from_image(self,image_path):从图片中提取金额等数字信息常用于发票textsself.recognize(image_path)importre numbers[]foritemintexts:matchesre.findall(r[\d,]\.?\d*,item[text])numbers.extend(matches)returnnumbers# 使用# ocr LocalOCR()# result ocr.recognize(invoice.png)# for item in result:# print(f识别文字: {item[text]}, 置信度: {item[confidence]})有什么坑坑1打码平台不是万能的超级鹰这类平台对扭曲字母噪点的传统验证码效果好准确率80-90%但对滑块验证码、点选验证码让你点图中的红绿灯基本无能为力。实际体感滑块验证码目前真没什么好办法打码平台准确率低得离谱。如果遇到滑块验证老老实实走手动介入——设置暂停等人工拉滑块。坑2PaddleOCR首次加载巨慢PaddleOCR第一次加载模型的时候要下载模型文件整个过程可能需要1-3分钟。如果你在影刀的Python节点里每次都PaddleOCR()新建实例每张图都要加载一次慢到怀疑人生。TEMU店群如何管理运营解决方法把OCR实例做成全局变量单例模式只在第一次创建。# 全局单例_ocr_instanceNonedefget_ocr():global_ocr_instanceif_ocr_instanceisNone:frompaddleocrimportPaddleOCR _ocr_instancePaddleOCR(use_angle_clsTrue,langch)return_ocr_instance坑3大模型图像识别的token费用通义千问VL按图片分辨率收费一张1080p的图片可能吃掉几千token。如果你不加压缩一天处理几百张图账单直接炸了。解决方法上传前用Pillow压缩图片到合理分辨率800x600足够识别验证码和商品图。fromPILimportImagedefcompress_image(input_path,output_path,max_size800):imgImage.open(input_path)img.thumbnail((max_size,max_size),Image.LANCZOS)img.save(output_path,quality70)# 质量70%肉眼几乎看不出坑4感知哈希对旋转和裁剪敏感同一张图片旋转15度或裁剪了边角感知哈希的汉明距离可能就大到被判定为不相似了。解决方法对于可能有旋转/裁剪的场景先做图像对齐或添加多种哈希均值哈希 差异哈希 感知哈希交叉验证。坑5影刀截图存在色差影刀的截图功能在不同分辨率、不同缩放比例的显示器上截出来的图尺寸和颜色可能有细微差异。这会影响OCR和验证码识别的准确率。解决方法在影刀流程开始前检查屏幕缩放或者把截图统一resize到固定尺寸再传给识别模块。总结AI图像识别让RPA从「瞎子」进化到「看得见」。文字验证码用打码平台便宜够用图片内容理解用多模态大模型效果好但烧钱去重和分类用OpenCV本地跑零成本。选对工具组合别让图片成为自动化的拦路虎。