1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import numpy as np
- import matplotlib.pyplot as plt
- import matplotlib.animation as animation
- import math
- import time
- import os
- import cv2
- import datetime
- scale = 0.25
- template = cv2.imread('character.png')
- template = cv2.resize(template, (0, 0), fx=scale, fy=scale)
- template_size = template.shape[:2]
- def search(img):
- result = cv2.matchTemplate(img, template, cv2.TM_SQDIFF)
- min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
- cv2.rectangle(img, (min_loc[0], min_loc[1]), (min_loc[0] + template_size[1], min_loc[1] + template_size[0]), (255, 0, 0), 4)
- return img, min_loc[0] + template_size[1] / 2, min_loc[1] + template_size[0]
- def pull_screenshot():
- filename = datetime.datetime.now().strftime("%H%M%S") + '.png'
- os.system('mv 1.png {}'.format(filename))
- os.system('adb shell screencap -p /sdcard/1.png')
- os.system('adb pull /sdcard/1.png .')
- def jump(distance):
- press_time = distance * 1.35
- press_time = int(press_time)
- cmd = 'adb shell input swipe 320 410 320 410 ' + str(press_time)
- print cmd
- os.system(cmd)
- def update_data():
- global src_x, src_y
- img = cv2.imread('1.png')
- img = cv2.resize(img, (0, 0), fx=scale, fy=scale)
- img, src_x, src_y = search(img)
- return img
- fig = plt.figure()
- index = 0
- # pull_screenshot()
- img = update_data()
- update = True
- im = plt.imshow(img, animated=True)
- def updatefig(*args):
- global update
- if update:
- time.sleep(1)
- pull_screenshot()
- im.set_array(update_data())
- update = False
- return im,
- def onClick(event):
- global update
- global src_x, src_y
-
- dst_x, dst_y = event.xdata, event.ydata
- distance = (dst_x - src_x)**2 + (dst_y - src_y)**2
- distance = (distance ** 0.5) / scale
- print 'distance = ', distance
- jump(distance)
- update = True
- fig.canvas.mpl_connect('button_press_event', onClick)
- ani = animation.FuncAnimation(fig, updatefig, interval=5, blit=True)
- plt.show()
|