下载 App

托纳姆物语编程系列(1)——Python+openCV做图色定位

2024/05/281010 浏览整活专区
本来是为了教女朋友学python为了吸引兴趣做的教程,最近又刚好对机器视觉有一定需求,有兴趣的可以了解一下。

一丶环境准备

1. Pycharm+Anaconda
这个网上教程很多自己找一个新一点的装好就可以了
2.adb
这个用来控制手机,网上找一下安装好就可以了
3.软件包
安装好之后进入环境新建工程(不清楚也可以查一下,记得选conda解释器),然后打开终端
TapTap
然后我们依次输入以下命令
pip install opencv.python
pip install --pre uiautomator2
pip install pillow
确保没有报错就OK了
TapTap
向工程里添加.py文件
TapTap
新建完成之后我们输入以下代码,然后点击绿色三角运行,就可以在下面的调试框里看到打印出来的“hello 托纳姆物语”了
TapTap
脚本有两种分别是“内存脚本”和“图色脚本”,其中图色脚本重要的就是找图找色,openCV用在这个地方肯定有点大财小用但是如果能勾起你的兴趣继续学习下去我觉得也很不错。这里我直接将图色匹配的代码贴出来,初期我们就把他当一个黑盒子用就可以了。
horizontal linehorizontal line
import cv2
import numpy as np
def sift_match(icon_image, screenshot_image):
    # 初始化 SIFT 检测器
    sift = cv2.SIFT_create()
    # 提取图标和截图的特征点和描述符
    icon_keypoints, icon_descriptors = sift.detectAndCompute(icon_image, None)
    screenshot_keypoints, screenshot_descriptors = sift.detectAndCompute(screenshot_image, None)
    # 创建 FLANN 匹配器
    FLANN_INDEX_KDTREE = 1
    index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
    search_params = dict(checks=50)
    flann = cv2.FlannBasedMatcher(index_params, search_params)
    # 进行特征匹配
    matches = flann.knnMatch(icon_descriptors, screenshot_descriptors, k=2)
    # 应用比率测试筛选匹配
    good_matches = []
    for m, n in matches:
        if m.distance < 0.7 * n.distance:
            good_matches.append(m)
    if len(good_matches) < 5:
        return -1
    # 获取匹配点的位置
    icon_points = np.float32([icon_keypoints[m.queryIdx].pt for m in good_matches])
    screenshot_points = np.float32([screenshot_keypoints[m.trainIdx].pt for m in good_matches])
    center_x = int(np.mean(screenshot_points[:, 0]))
    center_y = int(np.mean(screenshot_points[:, 1]))
    return center_x, center_y
horizontal linehorizontal line
新建一个SIFT.py文件将代码复制进去就可以了,效果如下:
TapTap

二丶代码编写

1.模拟点击
为了自动化首先肯定需要用脚本做点击滑动这些指令。我们使用uiautomator2(一定要预先安装adb)这个软件包实现。具体可以自行了解这里我用模拟器做一个简单示范。
(a)打开模拟器
然后在终端输入
python -m uiautomator2 init
TapTap
没有报错
然后我们用代码连接手机
TapTap
#号是代码注释可以不用写
TapTap
出现ATX就成功了
然后我们需要保存模拟器上的屏幕图像
TapTap
不知道什么玩意违规了将就看
然后我们需要把要找的图片保存下来,比如我想要找到托纳姆物语并点击启动它
我们首先在你工程的文件目录下新建一个traget的文件夹里面放托纳姆物语的图标
TapTap
TapTap
然后在文件夹里面放入图标(用系统自带的草图工具把模拟器的图标截取并保存就可以了)
TapTap
回到Pycharm就可以看到如下效果了(回宿舍换了个电脑编译环境换了一下但是不影响)
TapTap
完善代码
TapTap
效果如下:
但是托纳姆物语是3D视角如果想在游戏里找到指定怪物,有一个解决方案是用YOLO这样的深度学习模型做图像分类,如果点赞多的话可以再写一下,最后的代码贴在后面
horizontal linehorizontal line
import cv2 as cv
import uiautomator2 as u2
import SIFT
d = u2.connect()                #连接模拟器
print(d.info)                   #打印连接设备信息
image = d.screenshot(format='opencv')   #手机截图并保存为opencv格式图像矩阵
image = cv.cvtColor(image, cv.COLOR_BGR2GRAY) #转为灰度图
target = cv.imread("traget/Tolm.png", cv.IMREAD_GRAYSCALE)  #导入目标图像转为opencv格式图像矩阵并转换为灰度图
point = SIFT.sift_match(target, image)        #调用最开始保持的函数对进行匹配,并返回坐标
if point != -1:                                 #如果返回值不等于“-1”,界面上就有对应图标
    d.click(point[0], point[1])                 #点击对应坐标
else:                                           #“else“否则的意思,如果返回值为”-1“,那么界面上没有对应图标
    print("NOT FOUND!!!")                       #没有图标就打印没找到
horizontal linehorizontal line

学编程!玩*****!

波多姆诶截图
波多姆诶
女朋友做的,周末愉快[表情_送花]
1 赞
托纳姆物语编程系列(6)—— 如何认路?截图
托纳姆物语编程系列(6)—— 如何认路?
前段时间看到两年前的东西还有人看,就想着再写一点什么,本来再tlm里面做一个自动驾驶来着,但是有点过于花时间了。一是tlm视角太受限,二是我一个人每次重新训练模型很吃力。不过好在我还是基本完成了视觉部分的功能,本文中以前文章提到的东西我就不会在提了,见谅。 1. 什么是实例分割 说这个之前我得让你知道什么是对象检测,放一个图你就明白了。 对象检测识别场景中你感兴趣的目标并输出是一组边界框,这些
16 赞
13 回复
AScript--一个简单的ui截图
AScript--一个简单的ui
趁着国庆,补一个ui,ui教程,以后有时间再写吧 通过百度网盘分享的文件:airscript 链接:https://pan.baidu.com/s/1pl7ZwsqATeKCuprx3P1MCg?pwd=mm3n 提取码:mm3n --来自百度网盘超级会员V4的分享 里面有一个pj的光速虚拟机,可以在安卓手机上多开tlom。 本来想上架,这样你们就不用配置环境也能用了,但是这个开发平台是要收费
12 赞
4 回复
00:51
暗龙还是太强大了,我只好以绝望挥剑截图
暗龙还是太强大了,我只好以绝望挥剑
1.不想吃操作,攻略看,@牛匕年糕的适合,我这种不搞操作的。 给和我一样不懂想玩的说一下: 蓝的情况下,我个人可以放两次联合巨剑,第三次联合巨剑,方向键,向前拖动,也就是连机点转化的时候,方向键,向前拖动打出再联合巨剑。 2.想吃操作看他攻略@卖萌的咕咕姬他的视频操作帅,但我个人打不出来。 [这些是个人理解]
10 赞
8 回复
魅露瑟哈尔截图
魅露瑟哈尔
简单做了个属性表_(:з」∠)_
8 赞
2 回复
老登转生攻略(非正经攻略),如何快速起号少坐牢截图
老登转生攻略(非正经攻略),如何快速起号少坐牢
首先我又重生了,前三世都在与珂尔连生体的决战中不幸战败,这一世我要拿回属于我的一切,v我50聆听我的复仇计划。 好了接下来说正题,因为是开速起号,所以肯定是要氪金的(开角色栏),起号时间最好选在有648送追2的时候这样可以直接648加基金直接开满角色栏(可以省200块,如果是当乐那么性价比只比月卡低),非充值活动期间至少买基金加月卡这样领完基金可以至少开9个角色栏加上初始1个和勋章2个就有12个角
19 赞
4 回复
全对属门牌哦截图
全对属门牌哦
收集完了,单独为对属开一贴
29 赞
3 回复
03:40
暴击流教导魔导卡斯3:27截图
暴击流教导魔导卡斯3:27
刷了一个月没怎么出货 结果录素材的时候一共打了5把 掉了一个石头一个魔导(掉魔导的没录上) 就很离谱 视频中配置如下 精丽魔导,黑衣,寄甲(巨力 水遁2/1.0 压血无暴星光,阿鲁,铁女(复仇 休美蝶,卡斯,爱亚克 提灯,塔图,德华(和魔炮共用的,正常不推荐塔图 备战灵魂五阶!暴击流异抗教导魔导!7.1光护和衣服小更新! ⭐返回攻略贴⭐
14 赞
16 回复
01:42
异抗压血魔导(轮椅输出)神圣教导之力截图
异抗压血魔导(轮椅输出)神圣教导之力
异抗压血魔导三维分析(满5星) 生存:★★★★★ 输出:★★ 辅助:★★★★ 声明:(等后续点燃补强了_(:з」∠)_) 有什么意见或者建议可以在帖子下面讨论(๑>؂<๑) 1.不要想着魔导输出能多高,想玩输出可以看法师攻略。 2.优点是不惧怕百分比伤害(把假血算在内的除外),正常boss伤害大部分也能抗(高额双抗)。 3.刚需卡斯魔导,没有的话,也不要考虑,附魔魔导不行。 4.不是很建议从
151 赞
109 回复
万物与我都是荒诞的静寂,唯有你是我未曾落空的期盼截图
万物与我都是荒诞的静寂,唯有你是我未曾落空的期盼
与你的初遇起源于收到的一次回复: 刚收到这个回复我其实没想太多,只觉得是水友之间很平常的互动,但是直到我在雪球活动里再次碰见了你: 我是一个很普通的休闲玩家,喜欢搞暖暖把建模弄的漂漂亮亮的,喜欢搞好装备打出大数字让自己玩的舒服,喜欢和三两朋友平时打打闹闹谈天说地。我不太会研究游戏更深层的内容,看不懂怎么叠惯性,怎么设置连击,怎么自己模拟伤害,因为没什么社交能力所以不好意思主动找新朋友聊天,一路走来
36 赞
57 回复