Python圖片識別找座標(appium通過識別圖片點擊座標)

來源:互聯網
上載者:User

標籤:結果   解析度   open   name   定位   解決問題   strong   依賴   img   

***如果只想瞭解圖片相似性識別,直接看第一步即可***如果想瞭解appium根據圖片識別點擊座標,需要看第一、二、三步  背景|在做UI測試時,發現iOS自訂的UI控制項,appium識別不到。所以考慮通過識別圖片找座標,進而通過點擊座標解決問題  依賴python包|opencv、numpy、aircv   第一步:尋找圖片在原始圖片上的座標點
import aircv 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 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和手機片的比例獲得手機上的座標 

Python圖片識別找座標(appium通過識別圖片點擊座標)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.