Python图片识别找坐标(appium通过识别图片点击坐标)

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

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

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

依赖python包|opencv、numpy、aircv

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

import aircv as ac
def 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 not None:
        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,不返回字典

参考文档:https://github.com/NetEaseGame/aircv

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

因为截图后在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和手机上图片的比例获得手机上的坐标

时间: 2024-10-02 19:37:50

Python图片识别找坐标(appium通过识别图片点击坐标)的相关文章

Python人工智能之图片识别,Python3一行代码实现图片文字识别

1.Python人工智能之图片识别,Python3一行代码实现图片文字识别 2.tesseract-ocr安装包和中文语言包 注意: 原文地址:https://www.cnblogs.com/jycjy/p/8799295.html

图片文字转换成word--内附 复杂图片文字识别资料简介

ocr-超级免费版软件哦: 简体中文+英文混排的文档识别:纯英文的文档识别:可以自动版面分析,也可以手动版面分析:分析结果支持边界区域自动调整:支持横排文字识别.竖排文字识别.照片保留:识别后的内容可以保存为可全文检索的双层pdf.或者txt文档,后续会更新双层pdf的结果显示效果:识别率99.8% 第一步,安装. 直接下载,解压后,找到.exe的文件,然后安装. 第二步,在桌面上找到文通免费版的快捷图标,双击进入软件. 第三步,就是正式的软件操作了. 分三个步骤来完成OCR识别: 1)你可以选

迅捷OCR文字识别软件教你如何将图片转文字

大家平时接收到的资料或者下载的文件,很多都是图片格式的,有时候需要将里面的文字提取出来应用在别的地方,这时候就需要将图片转文字了,具体如何去操作呢?准备工作:图片转文字需要使用到工具,我们可以打开电脑搜索下载一个迅捷OCR文字识别软件到自己的电脑中去,接下来会使用到. 操作步骤: 1:将安装好的软件打开,打开你会发现自动弹出来一个窗口,主要讲解软件的功能优势,简单看一下将其关闭. 2:关闭弹窗之后,进入的就是整个软件的基本板块,这时候我们点击上方图片局部识别板块. 3:紧接着就可以将你需要识别转

appium python 点击坐标 tap

appium python 点击坐标 tap 有时候定位元素的时候,你使出了十八班武艺还是定位不到,怎么办呢?(面试经常会问)那就拿出绝招:点元素所在位置的坐标 tap用法 1.tap是模拟手指点击,一般页面上元素的语法有两个参数,第一个是positions,是list类型最多五个点,duration是持续时间,单位毫秒 tap(self, positions, duration=None): Taps on an particular place with up to five fingers

[python爬虫] Selenium定向爬取海量精美图片及搜索引擎杂谈

我自认为这是自己写过博客中一篇比较优秀的文章,同时也是在深夜凌晨2点满怀着激情和愉悦之心完成的.首先通过这篇文章,你能学到以下几点:        1.可以了解Python简单爬取图片的一些思路和方法        2.学习Selenium自动.测试分析动态网页和正则表达式的区别和共同点        3.了解作者最近学习得比较多的搜索引擎和知识图谱的整体框架        4.同时作者最近找工作,里面的一些杂谈和建议也许对即将成为应届生的你有所帮助        5.当然,最重要的是你也可以尝

iOS手势UIGestureRecognizer识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势) (转)

1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加了移动设备使用便捷性. iOS系统在3.2以后,为方便开发这使用一些常用的手势,提供了UIGestureRecognizer类.手势识别UIGestureRecognizer类是个抽象类,下面的子类是具体的手势,开发这可以直接使用这些手势识别. UITapGestureRecognizer UIPinchGestureRecognizer UIRotationGestureRecog

[置顶] JAVA识别身份证号码,H5识别身份证号码,tesseract-ocr识别(一)(转)

背景介绍: 这段时间正在做一个流动人口管理项目,其中要求使用H5网页拍照识别身份证,当时就蒙圈了,这不是APP的功能吗?产品为了快速迭代一直把APP的功能往H5上堆砌,没办法只有想办法解决了. 查了一些资料,发现除了收费的OCR(百度.云脉等等)比较好的并支持中文的就只有tesseract了,当然我收费的OCR我也没测试. 暂时决定使用tesseract了. 思路介绍 我的思路是这样的: 由H5调用摄像头—–>拍照上传到服务端—->服务端识别身份信息—–>服务端返回身份信息. 关键点提高

80行Python代码实现自动爬取色情网站图片

用Python爬取色情网站的图片,技术宅的小玩具.在这里我将会向你详细介绍用Python下载一个色情网站图片的全部步骤,你会从中看到Python的简洁以及技术宅的无聊. 首先你应该应该有一个色情网站的网址,当然我不会给你的,自己找!!!我会告诉你其中的规律: http://www.*****.com/htm/piclist[1]/[2].htm 一个色情网站的图片区中,URL不同的只有[1][2]两处,通过观察你可以发现,[1]处表示图片种类(丝袜美腿.清纯唯美.****.and so on),

python爬虫3——获取审查元素(板野友美吧图片下载)

测试环境:python2.7 + beautifulsoup4.4.1 + selenium2.48.0 测试网址:http://tieba.baidu.com/p/2827883128 目的是下载该网页下所有图片,共160+张.可以分为以下几步: 1.获取网页源代码. 发现直接通过urllib2或者request获取到的源代码和实际图片对应不起来,通过chrome审查元素功能可以查询到对应的图片,猜测是该页面的图片加载是通过ajax异步传输的.因此使用工具selenium + chromedr