***如果只想了解图片相似度识别,直接看第一步即可

***如果想了解appium根据图片识别点击坐标,需要看第一、二、三步

背景|在做UI测试时,发现iOS自定义的UI控件,appium识别不到。所以考虑通过识别图片找坐标,进而通过点击坐标解决问题

依赖python包|opencv、numpy、aircv

第一步:查找图片在原始图片上的坐标点

importaircv as acdef matchImg(imgsrc,imgobj,confidencevalue=0.5):#imgsrc=原始图像,imgobj=待查找的图片

imsrc =ac.imread(imgsrc)

imobj=ac.imread(imgobj)

match_result= ac.find_template(imsrc,imobj,confidence) #{‘confidence‘: 0.5435812473297119, ‘rectangle‘: ((394, 384), (394, 416), (450, 384), (450, 416)), ‘result‘: (422.0, 400.0)}

if match_result is notNone:

match_result[‘shape‘]=(imsrc.shape[1],imsrc.shape[0])#0为高,1为宽

return match_result

说明:通过aircv的find_template()方法,来返回匹配图片的坐标结果

1.入参:

find_template(原始图像imsrc,待查找的图片imobj,最低相似度confidence)

2.返回结果:

{‘confidence‘: 0.5435812473297119, ‘rectangle‘: ((394, 384), (394, 416), (450, 384), (450, 416)), ‘result‘: (422.0, 400.0)

confidence:匹配相似率

rectangle:匹配图片在原始图像上四边形的坐标

result:匹配图片在原始图片上的中心坐标点,也就是我们要找的点击点

注意:如果结果匹配到的confidence小于入参传递的相似度confidence,则会返回None,不返回字典

第二步:将图片匹配的坐标点,转换为手机屏幕上实际的坐标点

因为截图后在PC上的分辨率,和在手机上分辨率不一样,而我们通过第一步求出的坐标点是PC上截图的坐标点,一般比手机上大很多,所以需要转换一下坐标

photo_position=self.driver.get_screenshot_as_file(imgfile)#截屏手机

x= self.driver.get_window_size()[‘width‘]

y= self.driver.get_window_size()[‘height‘]

size_width,size_height= x,y #获得手机d的宽高尺寸

confidencevalue= 0.8 #定义相似度

position = matchImg(imsrc,imobj,confidence)#用第一步的方法,实际就是find_template()方法

if position !=None:

x, y= position[‘result‘]

shape_x, shape_y= tuple(map(int,position[‘shape‘]))

position_x,position_y=int(photo_position_x+(photo_width/shape_x*x)),int(photo_position_y+(photo_height/shape_y*y))

self.driver.tap([(position_x, position_y)])

思路说明:

1.通过appium的方法driver.get_screenshot_as_file(filename)进行截图

2.通过appium的get_window_size获得宽高的字典,进而得到宽和高

3.在PC上通过截图和获取到的手机屏截图做匹配,返回匹配结果坐标以及PC上原图的尺寸

4.通过PC上截图和手机上屏幕的宽高比,以及在PC上的实际坐标点,获得手机上实际的坐标点

5.最后通过appium的方法对手机上的坐标进行点击drive.tap([x,y])

注意:为了匹配结果的精准性,截图最好在PC上原图1:1下截图,不要放大后截图,否则相似度会差很多

第三步:优化,截取手机上部分区域图片,进行相似度匹配,提高匹配精度

因为有些图片太小了,如果在一张大图上进行匹配,经常匹配不到。那如果知道图片出现的大概位置,可以截图那个区域再进行匹配

这里有两种区域截图方法:

1.根据appium定位到的元素进行截图

driver.find_element(*element).screenshot(imgfile)

2.根据截图矩形左上角坐标(百分比x,y)和宽高(百分比)截图

Image.open(imgfile).crop((pc_location_x,pc_location_y,pc_location_x+pc_width,pc_location_y+pc_height)).save(imgfile)

先截取整个手机屏幕,然后根据百分比以及PC上截图的宽高进行计算,通过PIL的crop()方法截图,获得截图上的坐标

然后根据PC和手机上图片的比例获得手机上的坐标

原文地址:http://www.cnblogs.com/meitian/p/7417582.html

python 识图点击_Python图片识别找坐标(appium通过识别图片点击坐标)相关推荐

  1. windows10图片打开找不到内置图片查看器

    windows10图片打开找不到内置图片查看器 第一种解决方法: 找到windows设置按钮–>应用–>默认应用–>重置 如果上面的方法无效,尝试第二种方法,修改注册表,亲测有用 第 ...

  2. python识图自动化_Python自动化测试-验证识别

    一.准备 1.环境基础:Python3 + pycharm + selenium + request + Pillow,chrome浏览器的驱动程序 1)python:这里用的是Python3.7的, ...

  3. python识图 web_python如何调用百度识图api

    一.先去百度识别官网注册开通服务且获得ak和sk 链接:https://cloud.baidu.com/doc/Reference/s/9jwvz2egb 二.代码模板 import cv2 impo ...

  4. python 识图点击_Python图片识别——人工智能篇

    一.安装pytesseract和PIL PIL全称:Python Imaging Library,python图像处理库,这个库支持多种文件格式,并提供了强大的图像处理和图形处理能力. 由于PIL仅支 ...

  5. python识图找图_python识别图片

    import requests from aip import AipOcr image = requests.get('https://static.pandateacher.com/7b5d6d8 ...

  6. python识图找图_利用python进行识别相似图片(二)

    前言 和网上各种首先你要有一个女朋友的系列一样,想进行人脸判断,首先要有脸, 只要能靠确定人脸的位置,那么进行两张人脸是否相似的操作便迎刃而解了. 所以本篇文章着重讲述如何利用openCV定位人脸. ...

  7. python识图打怪_利用python进行识别相似图片(二)

    前言 和网上各种首先你要有一个女朋友的系列一样,想进行人脸判断,首先要有脸, 只要能靠确定人脸的位置,那么进行两张人脸是否相似的操作便迎刃而解了. 所以本篇文章着重讲述如何利用openCV定位人脸. ...

  8. python识图 web_Python图片识别——人工智能篇

    一.安装pytesseract和PIL PIL全称:Python Imaging Library,python图像处理库,这个库支持多种文件格式,并提供了强大的图像处理和图形处理能力. 由于PIL仅支 ...

  9. python识图找图_Python实现识别图片中的所有人脸并显示出来

    原标题:Python实现识别图片中的所有人脸并显示出来 # -*- coding: utf-8 -*- # 识别图片中的所有人脸并显示出来 # filename : find_faces_in_pic ...

最新文章

  1. 下一个亿万市场:企业级SaaS服务谁能独领风骚
  2. 推进五通一平:手淘技术核心三大容器 五大方案首次整体亮相 百川开放全面升级...
  3. 零基础学python需要多久-零基础学python大概要多久
  4. 也是一个国外的final cut pro的模版网站
  5. CentOS系统启动流程和系统初始化
  6. 数据集 | 计算机视觉开源数据集(计算机视觉图像、定位、识别)
  7. 鼠标监听类适配器改良
  8. 不同范数下的余弦定理_第06题 | 从源头追溯「余弦定理」amp; 文理科知识点的异同...
  9. 函数中的 arguments
  10. VC++ Tab Control控件的使用
  11. 「 运动控制 」“ADRC自抗扰控制技术”(Active Disturbance Rejection Control)研究
  12. 未来计算机技术的发展趋势有哪些,浅谈计算机技术的发展趋势
  13. 创建菜单与游戏界面(下)
  14. 基于MPC算法的汽车自适应巡航系统仿真与分析
  15. Focal-UNet
  16. Wireshark分析流量包案例
  17. mysql 报1055错误_MySQL数据库报1055错误
  18. 自动化测试 selenium 模块 webdriver使用02
  19. js开发:数组的push()、pop()、shift()和unshift()
  20. linux dd nand,uboot 中 Nand flash 常用操作命令解释

热门文章

  1. 2022-2028年中国金融业OCR识别行业市场调查研究及前瞻分析报告
  2. Python数据分析与大数据处理从入门到精通
  3. HTML5汽车赛道飙车游戏,死亡赛道飙车
  4. ORB_SLAM3 Track线程详解
  5. 【笔记】OpenSSL 使用
  6. pythondcnda算法聚类_分层聚类ahc算法
  7. 解决 Psycopg2 install失败(针对MAC)
  8. 【Lua】Lua基础语法
  9. 亲测可用~ Ubuntu20.04 findfont: Font family [‘sans-serif‘] not found. Times New Roman 字体缺失
  10. java里部分文件全选怎么整_选定全部文件的快捷键-怎么全选文件夹的文件-文件...