百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

OpenCV应用——魔灵召唤辅助实现(一)

cac55 2024-10-21 03:44 29 浏览 0 评论

魔灵召唤是韩国的一个卡牌收集类游戏(阴阳师的玩法也是从此而来的),笔者我断断续续玩这游戏也得有三年,这个游戏已经存活了五年,可见这个游戏是非常的坚挺呀。

但是游戏有点肝,非佛系玩家的我总是忍不住要去玩它,恍惚间头发已经稀疏,不禁抚额长叹:哎!要是有个不被封的脚本就好了!我需要做一个物理外挂!!!让官方检测不出来的那种,哼。


在参谋了网上的一些资料后,我大致整理了下思路:

  1. 获取手机截图,这一操作官方肯定检测不到吧。or视觉拍照,官方肯定也检测不到呀。
  2. OpenCV处理得到的手机截图(拍出的照片),因为游戏的一些画面是固定的,我们只需找出屏幕上需要模拟点击的位置即可,采用模板匹配方法。
  3. 模板匹配完成获得需要点击的屏幕位置,控制板子执行相应的动作。
  4. 可以使用树莓派、arduino之类的,但是我老本行虽然是电机控制,这些板子还没用过……用一些plc之类的成本又会提升,后续学习一下树莓派吧。


好,那我们先搞定第一步:手机截图获取。

如何用电脑获取手机截图?可以使用adb工具。

adb工具即Android Debug Bridge(安卓调试桥) tools。

它就是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互。

一、adb下载

以下是adb工具包最新Google官方版下载地址:

ADB和Fastboot for Windows

https://dl.google.com/android/repository/platform-tools-latest-windows.zip

ADB和Fastboot for Mac

https://dl.google.com/android/repository/platform-tools-latest-darwin.zip

ADB和Fastboot for Linux

https://dl.google.com/android/repository/platform-tools-latest-linux.zip

由于这些是直接的 Google 链接,用户可以确保下载不仅是官方的,而且将始终能够获得最新版本的 ADB 和 Fastboot 。

二、adb初步使用

下载好的文件直接解压即可,将文件路径添加到环境变量的用户变量的path里。

比如我的路径是:

C:\Users\Administrator\platform-tools_r28.0.2-windows\platform-tools

只需要:




好,现在win+R 调出 运行窗口,输入cmd打开控制台,输入 adb,如果没有报错则表示安装成功,并且你会看到adb的使用指南。

输入 adb version:




将手机通过USB连接到电脑,输入 adb devices:




那么问题来了,到了这一步很容易会卡住,只显示“List of devices attached”,请检查以下几条(不好意思暂时只学习了android的):

(1)手机打开的USB调试,在开发者模式下把USB相关选项勾上,依据手机品牌自行查询~

(2)如果手机端设置没有问题,电脑上依然未检测到手机设备,那么看一下手机驱动是否安装。



(3)adb版本太低,但是如果是从上面链接下载的,不会存在这个问题。

现在我们安装成功了,使用一下截图指令来获取手机截图吧!

首先看一下说明:




那我们使用的指令就是 adb shell screencap -p ,不过截图方式也有两种

第一种是先命令手机截图并存到手机sd内,然后读到电脑上。

adb shell screencap -p /sdcard/screen.png

adb pull /sdcard/screen.png

真是麻烦呀,还要占手机内存,那必须要保存几次之后清空,否则开着游戏一直截图,手机不得爆了==

第二种方法是直接保存到电脑上

adb shell screencap -p > E:/summonerswar.png

哈哈第二种方法这么简单,赶快打开看看,???what the hell?




网上查找一下原因:

在windows操作系统下,回车符是\r\n,在Linux操作系统下,回车符是\n。安卓系统是基于Linux内核开发而来的,所以在安卓系统中回车符也是\n,这样就会出现一个问题,在安卓系统中截图得到的二进制数据流中,如果出现\n,Windows会将\n解析成\r\n,所以截图命令得到的png文件不能正常打开。要使得在Windows系统中能对截图得到的png文件进行操作,需要将png文件中数据部分的\r\n转换成\n,这样就能够得到正确的文件。

因此,我们还需使用python对文件进行一番操作。

三、使用python对adb获取的文件进行处理

adb指令在python中怎么使用?调用os模块就可以了。

import os
def convert_img(path):
 with open(path, 'br') as f:
 img_old = f.read()
 img_new = img_old.replace(b'\r\n', b'\n')
 with open(path, 'bw') as f:
 f.write(img_new)
if __name__ == '__main__':
 os.system('adb shell screencap -p > E:/PycharmProjects/android_summonerswar/pictures/summonerswar_0.png')
 convert_img(r'E:\PycharmProjects\android_summonerswar\pictures\summonerswar_0.png')


运行一下,发现在不运行魔灵召唤时获得的截图是正常的,运行魔灵召唤时就不正常(长宽反了),找了半天没找到原因,我们就取个巧,通过改变大小还原截图吧。

加入resize之后的程序:

import os
import cv2
import time
def getimg_toPC(imgname):
 '''
 直接从获取手机截屏到电脑上
 :param imgname: 截屏文件名,xxx.png
 :return: None
 '''
 os.system('adb shell screencap -p > E:/PycharmProjects/android_summonerswar/pictures/'+imgname)
 with open('E:/PycharmProjects/android_summonerswar/pictures/'+imgname, 'br') as f:
 img_old = f.read()
 img_new = img_old.replace(b'\r\n', b'\n')
 with open('E:/PycharmProjects/android_summonerswar/pictures/'+imgname, 'bw') as f:
 f.write(img_new)
 img = cv2.imread('E:/PycharmProjects/android_summonerswar/pictures/'+imgname)
 img_new = cv2.resize(img, (1000, 461), cv2.INTER_AREA)
 cv2.imwrite('E:/PycharmProjects/android_summonerswar/pictures_resize/'+imgname, img_new)
def getimg_sdcard(imgname):
 os.system('adb shell /system/bin/screencap -p /sdcard/'+imgname)
 os.system('adb pull /sdcard/'+imgname + ' E:/PycharmProjects/android_summonerswar/pictures/'+imgname)
if __name__ == '__main__':
 img_name = 'screen.png'
 while True:
 time.sleep(2)
 getimg_toPC(img_name)
 img = cv2.imread('E:/PycharmProjects/android_summonerswar/pictures_resize/'+img_name)
 cv2.imshow('here', img)
 cv2.waitKey(0)


终于得到了想要的图像,注意读上来的分辨率要比电脑大,因此等比例缩小了下(1000,461):




好,第一步完成啦,下一步准备OpenCV中模板匹配的应用喽~

相关推荐

Linux :远程访问的 16 个最佳工具(一)

通过远程桌面协议(RDP)可以访问远程Linux桌面计算机,这是Microsoft开发的专有协议。它为用户提供了一个图形界面,可以通过网络连接连接到另一台/远程计算机。FreeRDP是...

Guacamole安装部署_guacamole简单搭建

Guacamole安装部署Guacamole简介Guacamole是提供连接远程桌面的解决方案的开源项目(也可以说是一个远程桌面网关),通过浏览器就能远程操作服务器,适用于Chrome、Firefox...

1-FreeRTOS入门指南_freertos+lwip

本专栏是根据官方提供的文档进行FreeRTOS的各个功能函数的说明,以及函数的使用本专栏不涉及动手操作,只是对原理进行说明,FreeRTOS基础知识篇更新完成会对如何在开发板上进行上手实战操作。这里不...

Windows暂停远程桌面,这些工具可替代

Windows暂停远程桌面,这些工具可替代近日,Windows官方宣布将于2025年5月27日起,在Windows10和Windows11应用商店中下架“Microsoft远程桌面”应用。这一消...

现在做 Web 全景合适吗?_前端全景

作者:前端藏经阁转发链接:https://www.yuque.com/xwifrr/uxqg5v/cgclx0前言Web全景在以前带宽有限的条件下常常用来作为街景和360°全景图片可查看。它可以...

网页直连,MSTSC远程控制Windows新姿势!

不用安装软件,打开浏览器就能远程办公?今天要聊的是一种颠覆传统的远程控制玩法,直接用网页连接Windows电脑,无需下载客户端,手机、平板、Mac甚至Linux都能轻松操作。这可不是吹牛,结合MSTS...

QQ出现大面积盗号,原因已查明,请抓紧改密码

你没有看错,QQ又上了微博热搜,这次比较严重了,QQ出现大面积盗号,多个QQ群出现yellow信息,其次导致多位成员被踢出,并且还被封号处理,到底怎么回事?请继续往下看。在6月26日晚上10点左...

我在淘宝花10块钱,买到了能玩“宝可梦”的Q群机器人

十一月雨|文我是个没事喜欢逛淘宝的人,虽然是个不怎么好的习惯,但总是能够发现一些奇奇怪怪的东西,这次我发现的是一种Q群机器人。Q群机器人,大多是基于腾讯SmartQQ协议实现的一种能自动回复、自定...

Metasploit最实用的攻击模块"Meterpreter"

Meterpreter命令详解Meterpreter是Metasploit渗透测试平台框架中功能最强大的攻击载荷模块,在最新的Metasploitv4.5.0版本中,攻击载荷模块已经达到了25...

手机QQ再更新,上线了一个想让人“无法回避”的新功能

近日,手机QQ更新了V8.2.6.700版本,苹果iOS版和安卓版手机QQ上线了一个新功能:可以实时显示对方的手机电量以及充电状态。开通电量显示也很简单,长按主页左上方的头像,在在线状态中选择我的电量...

「网络安全」常见攻击篇(20)——点击劫持

什么是点击劫持?点击劫持(Clickjacking)技术又称为界面伪装攻击(UIredressattack),是一种视觉上的欺骗手段。通常有两种方式:攻击者使用一个透明的iframe,覆盖...

曾利用驱动人生升级通道传播的木马下载器攻击方法再次升级

一、概述御见威胁情报中心1月25日再次监测到曾利用驱动人生升级通道传播的木马下载器攻击方法再升级。本次升级主要变化在于攻击模块,木马在之前的版本上,新增计划任务“DnsScan”,在其中将永恒之蓝攻击...

QQ飞车手游:点券首个功能性宠物上架,实战稳定触发还不快入手?

随着版本的逐渐更新,点券宠物在道具模式发挥逐渐越来越小,曾经探讨点券宠物在道具是不是真的没有用?直到出现了波斯猫改变了,我对点券宠物在道具模式的看法,如今又一个强势点券宠物来袭,而且特性触发简单,还是...

工单系统设计实战(上):核心配置与效能提升

流程的标准化并非终点,而是研发效能持续革命的基石。当工单系统真正成为研发团队的“神经中枢”,每一次需求的精准流转、每一行代码的受控提交、每一次版本的可靠发布,都将汇聚成驱动产品持续进化的强大动力...

6个编辑PDF文档内容的工具(软件+网站)

在日常办公、学习和生活中,PDF文件因其格式稳定、跨平台兼容性强等特点,被广泛应用。但有时我们拿到PDF文件后,却发现需要修改其中的内容,总感觉有点难搞。其实PDF文档编辑修改也很简单,这里分享6个软...

取消回复欢迎 发表评论: