日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python控制手机自动刷新闻_Python控制android手机实现微信自动跳一跳

發布時間:2023/11/30 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python控制手机自动刷新闻_Python控制android手机实现微信自动跳一跳 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習一個新東西一定要有趣,如果只是簡單學習語法太枯燥了。弄了個跳一跳的程序,注釋寫的很清楚#!/usr/bin/env?python

#?encoding:?utf-8

#?@software:?PyCharm

#?@time:?2019/7/10?15:39

#?@author:?Paulson●Wier

#?@file:?jump_跳一跳.py

#?@desc:

import?os

import?random

import?time

import?cv2

import?numpy?as?np

def?get_screenshot():

#?截取手機的屏幕

os.system('adb?shell?/system/bin/screencap?-p?/sdcard/screencap.png')

#?把模擬器里面的文件傳到電腦上

os.system('adb?pull?/sdcard/screencap.png?screencap.png')

def?get_start(img):

"""

模板匹配,獲取跳一跳起點的位置參數(小跳棋)

????:param?img:跳一跳當前圖片

:return?跳塊中心點坐標(x,y)

"""

#?使用標準相關系數匹配,1表示完美匹配,?-1表示糟糕匹配,?0表示沒有任何相關性

????result?=?cv2.matchTemplate(img,?temple,?cv2.TM_CCOEFF_NORMED)

#?使用函數?minMaxloc,?確定匹配結果矩陣的最大值和最小值(val),以及它們的位置(loc)

min_val,?max_val,?min_loc,?max_loc?=?cv2.minMaxLoc(result)

#?此處選取最大值的位置,為圖像的左上角

t1?=?max_loc

#?獲取圖像的右下角

br?=?(t1[0]?+?tw,?t1[1]?+?th)

t_x_center?=?(t1[0]?+?br[0])?//?2

t_y_center?=?int(max_loc[1]?*?0.25?+?br[1]?*?0.75)

print(f"跳塊中心點坐標({t_x_center},{t_y_center})")

return?t_x_center,?t_y_center

def?get_next(img):

"""

獲取下一跳目標方塊中心點坐標

????:param?img:

:return:

"""

#?高斯模糊

????img_rgb?=?cv2.GaussianBlur(img,?(5,?5),?0)

????canny_img?=?cv2.Canny(img_rgb,?1,?10)

#?輸出邊緣檢測圖像的高和寬

????H,?W?=?canny_img.shape

#?第一個頂點的高度,row為列表(代表每一行的像素值),?max(row)?獲取列表中最大的像素值

#?對圖像高度大于400的行進行遍歷(這樣可以去除上方數字以及小程序塊的影響)。

#?np.nonzero()?表示獲取列表元素數值不為0的位置,

????y_top?=?np.nonzero([max(row)?for?row?in?canny_img[420:]])[0][0]?+?420

#?獲取第一個頂點的寬度值

????x_top?=?int(np.mean(np.nonzero(canny_img[y_top])))

#?跳過小白圈,然后遍歷

y_bottom?=?y_top?+?125

for?row?in?range(y_bottom,?H):

????????if?canny_img[row,?x_top]?!=?0:

y_bottom?=?row

break

#?得到方塊的中心點

x_center,?y_center?=?x_top,?(y_top?+?y_bottom)?//?2

print(f"目標方塊中心點({x_center},{y_center})",)

return?x_center,?y_center

def?game_over(img):

"""

模板匹配,檢測是否要將程序結束

"""

#?如果在游戲截圖中匹配到帶"再玩一局"字樣的模板,則循環中止

????res_end?=?cv2.matchTemplate(img,?temp_end,?cv2.TM_CCOEFF_NORMED)

if?cv2.minMaxLoc(res_end)[1]?>?0.95:

print('Game?over!')

return?True

def?jump(distance,?flag=1.5):

#?設置按壓時間,系數為默認為1.35

press_time?=?int(distance?*?flag)

#?生成隨機手機屏幕模擬觸摸點,防止成績無效

#?生成隨機整數(0-9),最終數值為(0-90)

rand?=?random.randint(0,?9)?*?10

#?adb長按操作,即在手機屏幕上((320-410),(410-500))坐標處長按press_time毫秒

cmd?=?('adb?shell?input?swipe?%i?%i?%i?%i?'?+?str(press_time))?%?(320?+?rand,?410?+?rand,?320?+?rand,?410?+?rand)

#?輸出adb命令

print(cmd)

#?執行adb命令

os.system(cmd)

def?main():

i?=?0

while?True:

#?將安卓手機上的截圖移到電腦當前文件夾下

i?+=?1

get_screenshot()

#?讀取截圖圖像

????????img?=?cv2.imread('screencap.png',?0)

????????if?game_over(img):

print(f"第{i-1}次跳動失敗")

break

print(f"第{i-1}次跳動成功")??#?提示上一次跳動是否成功

????????begin_x,?begin_y?=?get_start(img)

????????target_x,?target_y?=?get_next(img)

distance?=?((begin_x-target_x)**2?+?(begin_y-target_y)**2)?**?0.5

#?將起點位置繪制出來,一個圓

????????cv2.circle(img,?(begin_x,?begin_y),?20,?255,?-1)

#?將終點位置繪制出來,一個圓

????????img_end?=?cv2.circle(img,?(target_x,?target_y),?20,?188,?-1)

#?保存圖片

????????cv2.imwrite('last.png',?img_end)

#?根據獲得的距離來設置按壓時長

jump(distance)

time.sleep(1.3)

if?__name__?==?'__main__':

#?游戲結束的模板圖像

temp_end?=?cv2.imread('end.jpg',?0)

#?讀取小跳棋模板圖像

temple?=?cv2.imread('temple.png',?0)

#?獲取小跳棋模板圖像的高和寬

th,?tw?=?temple.shape[:2]

main()

總結

以上是生活随笔為你收集整理的python控制手机自动刷新闻_Python控制android手机实现微信自动跳一跳的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。