当前位置:   article > 正文

python使用uiautomator2操作雷电模拟器9找图(二)_uiautomator2和aircv做图片识别

uiautomator2和aircv做图片识别

昨天写过一篇文章

python使用uiautomator2操作雷电模拟器9找图(一)-CSDN博客

今天在实际中有遇到了新的问题:一幅主图中,可能存在多个相同的子图,想要找到所有的子图,并操作。比如:

主图:

子图(在主图中有两个):

上代码,主要就是用find_all_template代替了find_template。

可参考:滑动验证页面

  1. import aircv as ac
  2. import uiautomator2 as u2
  3. d = u2.connect() # connect to device
  4. print(d.info)
  5. displayWidth = d.info['displayWidth']
  6. displayHeight = d.info['displayHeight']
  7. print(displayWidth,displayHeight)
  8. d.screenshot('主图.png')
  9. time.sleep(3)
  10. imsrc = ac.imread('主图.png')
  11. imobj = ac.imread('子图.png')
  12. # pos = ac.find_template(imsrc, imobj)
  13. pos_list=ac.find_all_template(imsrc, imobj)#可以找到所有符合条件的子图,结果是个列表
  14. print(pos_list)
  15. #[{'result': (89.0, 1072.0), 'rectangle': ((27, 1045), (27, 1099), (151, 1045), (151, 1099)), 'confidence': 0.9999960660934448}, {'result': (89.0, 652.0), 'rectangle': ((27, 625), (27, 679), (151, 625), (151, 679)), 'confidence': 0.9972855448722839}]
  16. for one in pos_list:
  17. if float(one['confidence']) > 0.95:
  18. d.click(one['result'][0]/displayWidth,one['result'][1]/displayHeight)

实际中还有情况,比如这些子图在一屏中显示不全,需要上划手机屏幕,不断的出现,这时上面的代码就要结合uiautomator2的操作。

d.swipe_ext('up',0.5)#模拟使用手指由下向上滑动手机页面

 其中,0.5为指定方向滑动百分之多少,为float型数据,数据范围是:0.01 到 0.999。

可参考:(1)https://www.cnblogs.com/xiondun/p/17896525.html(2)https://www.cnblogs.com/renjie1105/p/13472356.html

使用一个while循环,将上述两段代码结合起来,直到符合某种条件,break退出循环,就可以了。有时根据情况,还需要两层while循环,一定要注意逻辑以及循环的退出,参考文章:https://www.cnblogs.com/hd92/p/14598250.html


                
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/643259
推荐阅读
相关标签
  

闽ICP备14008679号