成品图片
1. 准备材料
1.1 Python
Python是一门计算机编程语言,比其他编程语言都要简单,比较适合初学者。做这个智能点击你需要有Python的编程基础和对涉及模块内容的掌握。Python的编程基础在一些学习编程的网站或者图书馆里面都有。
1.2 Pycharm
Pycharm是一种IDE软件,中文是集成开发环境 ,用来表示辅助程序员开发的应用软件。或者你可以理解为Python语言在Pycharm软件里面运行。关于怎么安装和使用Pycharm,网上教程都有。
2. 智能点击思路
对屏幕进行截图,对截图的内容进行比对,如果可以比对的上,进行点击操作,重复前面内容并组合成完整的一连串点击操作。
3.代码部分
3.1截图
截图使用的是pillow模块,pycharm安装模块需要在File--Settings--Project--Python Interpreter--+里面搜索模块名字来安装,然后import导入模块。
全屏截图
安装pillow模块
from PIL import ImageGrab #导入PIL模块
im = ImageGrab.grab() #全屏截屏
im.save('A.png') #图片保存为 A.png
3.2 图像识别
图像识别是软件最核心的部分,没有图片识别就无法进行智能点击。图片识别使用python的opencv模块,opencv原理是把图片变成数组,通过计算数组来对图片进行操作。在Python Interpreter里面搜索opencv-python安装opencv模块。图片识别方式有很多,有图片比对,特征识别,AI识别等等。这些方式各有各的优缺点。
图片比对
优点:代码简单,复制函数即用。识别速度很快,识别正确率高。
缺点:截屏图片和比对图片的大小固定,改变截屏图片的大小就不能识别。所以阴阳师软件的窗体大小不能改变,要与截屏时的大小对应。只能在一个软件里面用(阴阳师PC,安卓模拟器),换软件也不能识别。
import cv2 as cv
def coordinate(original, part):
img = cv.imread(original)
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
template = cv.imread(part, 0)
w, h = template.shape[::-1]
res = cv.matchTemplate(img_gray, template, cv.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(res)
#print(min_val+max_val)
if min_val + max_val > 0.18: #0到0.5可定义精度
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
return top_left, bottom_right
else:
return -1
输入
original 输入屏幕截图图片(图片的相对位置或绝对位置,例子"E:\Desktop\A.png")
part 输入需要识别的图片(图片的相对位置或绝对位置,例子"E:\Desktop\picture.png")
输出
如果未识别返回-1,如果识别了,返回 part 在 original 的左上角和右下角的坐标。
其他
cv.imread(图片位置,通道)
通道 = 0, 灰度(黑白)
通道 = 1,彩色(BGR,和标准的RGB颜色是反的,如果需要展示图片需要转换,不然很怪。)
通道不同,数组的大小就不同,你可以把灰度想象成1维数组(时间复杂度 O(n)),彩色想象成2维数组(时间复杂度O(n^2))。因此不同通道对图片计算的速度影响比较大,很明显用灰度计算要比彩色快很多。所以在这里我们使用的是灰度。
0.18是区间在0和0.5之间比对的精度,0最低识别精度,0.5最高识别精度。
特征识别
优点:准确率较高,识别速度较快,最大的优点是可以改变阴阳师的窗口大小和换软件也能识别(阴阳师PC,安卓模拟器)
缺点:对图片的要求比较高,需要特征非常明显的图片(颜色差异大)才能正确识别,不然比较容易识别错误,导致错误的点击。
AI识别
优点:可以改变阴阳师的窗口大小和换软件也能识别(阴阳师PC,安卓模拟器),不需要特征明显的图片,机器训练即可。
缺点:代码难度极高,需要学习人工智能的基础知识和数学(数学不是一般的难),识别速度会比较慢,因为计算量大。