python + tensorflow 开局托儿所自动点击脚本

python开局托儿所自动点击脚本

    • 屏幕截图
    • 图片数字识别
    • 消除算法
    • 自动点击

屏幕截图

python 屏幕截图可以使用pyautogui或者PIL。我使用的是PIL中的ImageGrab(要授权)。

image = ImageGrab.grab(bbox=(0, 0, tool.static_window_width, tool.static_window_height))
image = np.array(image.getdata(), np.uint8).reshape(image.size[1], image.size[0], 4)
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

先上连接:开局托儿所
将截取的图片转成灰度图后就是下面这个样子。
开局托儿所屏幕截图
接下来将每个数字截取出来。16行10列,共有160个数字。

for i in range(16):
			x_start = self.x_start
			x_end = x_start + self.num_width
			imgelist = list()
			center_pos = []
			for j in range(10):
				every_num = image[y_start:y_end,x_start:x_end]
				every_num = cv2.resize(every_num, (28, 28), interpolation=cv2.INTER_AREA)
				_, every_num = cv2.threshold(every_num, 127, 255, cv2.THRESH_BINARY)
				
				center_pos.append((x_start + self.num_width/2,y_start + self.num_width/2))
				imgelist.append(every_num)
				x_start += x_dis
				x_end   += x_dis

			self.imagelists.append(imgelist)
			self.center_pos.append(center_pos)
			y_start += y_dis
			y_end   += y_dis

图片数字识别

裁剪好图片就可以使用深度学习模型进行数字识别,这里也是使用经典的LeNet模型。首先要手动标注一部分数字作为训练集进行训练。(github链接包含我手动标注的训练集,可以直接使用)
手动准备训练集
有了训练集就可以开始训练模型。LeNet 网络结构:

def buildModel(self):
        self.model.add(Conv2D(input_shape=(28,28,1),filters=6, kernel_size=(5,5), strides=(1,1), padding='same', activation='relu'))
        self.model.add(MaxPool2D(pool_size=(2,2), strides=(2,2),padding='same'))
        self.model.add(Conv2D(filters=16, kernel_size=(5,5), strides=(1,1), padding='valid', activation='relu'))
        self.model.add(MaxPool2D(pool_size=(2,2), strides=(2,2),padding='same'))
        self.model.add(Conv2D(filters=120, kernel_size=(5,5), strides=(1,1), padding='valid', activation='relu'))
        self.model.add(MaxPool2D(pool_size=(2,2), strides=(2,2),padding='same'))
        self.model.add(Flatten())
        self.model.add(Dense(84, activation='relu'))
        self.model.add(Dense(9, activation='softmax'))
         # 形成网络(同时添加优化器)
        self.model.compile(loss='categorical_crossentropy',
                      optimizer=RMSprop(),
                      metrics=['accuracy'])

        self.load_model()
        # 查看网络结构,输出形状,参数个数
        print(self.model.summary())

训练好模型就可以对数字图片进行识别,

 def predict(self,imgs):
        predict = self.model.predict(imgs)
        index = np.argmax(predict,axis = 1)
        index=index.reshape(16,10)
        index += 1

        print(index)
        return index

消除算法

识别好图片后接下来就是消除了,算法思路是从左上角开始优先列遍历,贪心思想,只要遇到相加为10的就消除。step是一各栈结构,记录每一步,循环遍历,直到找不到解时候在回退。这里采用的固定回溯,每次回溯当前步数的4/5。在20s的时间内如果没有搜索完所有可能也要退出。

def comput_ij(self,i,j):
	yend = i 
	xend = j
	res = []
	while yend < len(self.map):
		sum = 0
		xend = j
		while xend < len(self.map[0]):
			for k in range(i,yend+1):
				sum += self.map[k][xend]
			if sum == 10:
				res.append((yend,xend))
			elif sum >10:
				if yend != i and xend == j :
					 return res
				else:
					break
			xend += 1
		yend += 1

	return res
def kjtes(self):
	time_start = time.time()
	time_end = time.time()

	while (time_end - time_start) <20:
		if not self.setps.is_empty():
			for t in range(int(self.setps.size() / 5 * 4)):
				self.backup()

		isfind = True
		while isfind:
			isfind = False
			i = 0
			while i < len(self.map):
				j = 0
				while j < len(self.map[0]):
					results = self.comput_ij(i,j)
					if len(results) >0 :
						for res in results:
							if(self.set_steps(i,j,res[0],res[1]) == True):
								isfind = True
								break
					j += 1
				i += 1
		
		new_map = np.array(self.map)
		cnt_array = np.where(new_map,0,1)
		score = np.sum(cnt_array)
		if score > self.score:
			print("------",score)
			self.score = score
			self.result = copy.deepcopy(self.current_result.items)

		time_end = time.time()
		if int(time_end- time_start ) % 10 == 0:
			print("耗时....",(time_end- time_start),self.score,self.max_size,self.min_size)
			print("------",self.score)

未完。。。明天继续

自动点击

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/486260.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ModbusRTU/TCP/profinet网关在西门子博图软件中无法连接PLC的解决方法

ModbusRTU/TCP/profinet网关在西门子博图软件中无法连接PLC的解决方法 在工业生产现场&#xff0c;ModbusRTU/TCP/profinet网关在与西门子PLC连接时&#xff0c;必须要使用西门子的博图软件来进行配置&#xff0c;博图v17是一个集成软件平台&#xff0c;专业版支持300、400、12…

海外基金牌照的优势及注意事项-华媒舍

一、了解海外基金牌照 在投资领域&#xff0c;海外基金牌照是指投资者可以通过获得海外金融监管机构颁发的许可证&#xff0c;参与海外基金投资。拥有海外基金牌照的投资者可以享受更广泛的投资机会&#xff0c;包括跨境投资、全球资产配置等。 二、海外基金牌照的优势 多元化…

Unity 学习日记 8.2D物理引擎

1.2D刚体的属性和方法 2.碰撞器

还在购买蜘蛛池做SEO?有用吗?

蜘蛛池是什么&#xff1f;租用蜘蛛池对SEO优化到底有没有用&#xff1f;网上很多说法&#xff0c;且各执一词&#xff0c;那些出租蜘蛛池的写的软文不算。站长帮一直本着负责任的态度&#xff0c;从客观的角度&#xff0c;来为大家一一解惑。 本文 虚良SEO 原创&#xff0c;转载…

如何查询网贷大数据信用报告?哪个查询平台更好?

在互联网金融迅速发展的当下&#xff0c;网贷大数据查询平台已成为许多人在申请贷款前的重要工具。然而&#xff0c;随着这些平台的广泛使用&#xff0c;安全问题日益凸显&#xff0c;许多用户反映自己的个人信息在查询过程中被泄露。为了应对这一挑战&#xff0c;本文将探讨如…

fiddler配合夜神模拟器对APP进行抓包

fiddler 配置 设置https Tools – -> Options —> HTTPS 在这里插入图片描述 下载证书&#xff0c;并安装 修改模拟器网络连接 cmd 查看本机本地IP点击模拟器wifi, 长按修改为手动配置&#xff1a; IP 8888使用浏览器&#xff0c;访问IP 8888 下载证书 。点击Fiddler…

RabbitMQ详细讲解

目录 4.0 AMQP协议的回顾 4.1 RabbitMQ支持的消息模型 4.2 引入依赖 4.3 第一种模型(直连) 1. 开发生产者 2. 开发消费者 3. 参数的说明 4.4 第二种模型(work quene) 1. 开发生产者 2.开发消费者-1 3.开发消费者-2 4.测试结果 5.消息自动确认机制 4.5 第三种模型(…

【力扣白嫖日记】1069.产品销售分析II

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 1069.产品销售分析II 表&#xff1a;Sales 列名类型sale_idintproduct_idintyearintquantityintpriceint s…

【Redis】Redisson实现分布式锁

Redisson是一个在Redis的基础上实现的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;。它不仅提供了一系列的分布式的Java常用对象&#xff0c;还提供了许多分布式服务&#xff0c;其中就包含了各种分布式锁的实现。 官网地址 GitHub地址 Redisson入门 1.引…

2024年中国数字经济行业市场前景预测研究报告

随着数字化技术的飞速发展&#xff0c;数字经济已经成为全球经济的重要组成部分。它不仅改变了传统产业的商业模式和运营方式&#xff0c;也催生了许多新兴产业和业态。数字经济的核心在于数据&#xff0c;通过数据的采集、分析和应用&#xff0c;可以实现精准营销、个性化服务…

RabbitMQ 的高阶应用及可靠性保证

目录 一、RabbitMQ 高阶应用 1.1 消息何去何从 1.2 过期时间 1.3 死信队列 1.4 延迟队列 1.5 优先级队列 1.6 消费质量保证&#xff08;QOS&#xff09; 二、持久化 三、生产者确认 四、消息可靠性和重复消费 4.1 消息可靠性 4.2 重复消费问题 上篇文章介绍了 Rabb…

皓学IT:JavaWEB_Cookie

一、Cookie 1.1.Cookie概述 Cookie翻译成中文是小甜点&#xff0c;小饼干的意思。在HTTP中它表示服务器送给客户端浏览器的小甜点。其实Cookie就是一个键和一个值构成的&#xff0c;随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来&#xff0c;当…

【快刊合集】计算机类SCI,IEEE出版社,中科院2/1区TOP,分数逐年攀升!!

本期推荐 【SciencePub学术】本期&#xff0c;小编给大家推荐的是1本计算机类的甄选好刊&#xff0c;该期刊隶属于IEEE出版社旗下&#xff0c;最新的影响因子已达到7&#xff0c;是1本业内认可度非常高的期刊。 01 期刊基本信息 【期刊简介】IF&#xff1a;7.5-8.0&#xff0…

Git进阶命令-reset

一、reset命令使用场景 有时候我们提交了一些错误的或者不完善的代码&#xff0c;需要回退到之前的某个稳定的版本,面对这种情况有两种解决方法: 解决方法1&#xff1a;修改错误内容&#xff0c;再次commit一次 解决方法2&#xff1a;使用git reset 命令撤销这一次错误的com…

网络类型及数据链路层协议

目录 一、网络的分类 二、数据链路层协议 1、MA网络以太网协议 2、P2P网络 3、HDLC ---高级数据链路控制协议 HDLC地址借用 三、PPP协议 1、PPP协议的优点 2、PPP数据帧封装结构 3、PPP会话的搭建 4、LCP建立——链路建立阶段 4.1协商阶段 4.2认证阶段 4.3 PAP---密…

Java基础【上】韩顺平(反射、类加载、final接口、抽象类、内部类)

涵盖知识点&#xff1a;反射、类加载、单例模式、final、抽象类、接口、内部类&#xff08;局部内部类、匿名内部类、成员内部类、静态内部类&#xff09; P711 反射机制原理 创建如下目录结构&#xff0c;在模块下创建src文件夹&#xff0c;文件夹要设置为Sources文件夹&…

农夫山泉财报公布在即,消费升级的瓶装水市场或将重新洗牌

农夫山泉财报公布在即&#xff0c;消费升级的瓶装水市场或将重新洗牌 新年伊始&#xff0c;2024年对于中国瓶装水行业注定是一个地动山摇的一年&#xff0c;随着农夫山泉董事长钟睒睒上次被媒体集体关注&#xff0c;农夫山泉遭遇上市以来的最大舆论风波。 3月26日农夫山泉的财…

2024 年 8 个最佳 PDF 转 JPG 转换器[免费和付费]

虽然 PDF&#xff08;便携式文档文件&#xff09;是一种流行的文档共享格式&#xff0c;但有时您可能希望将 PDF 文件转换为JPG&#xff0c;然后在网页或社交媒体上共享它们。 在本文中&#xff0c;我们将讨论适用于 Windows 10 和 11 的出色 PDF 到 JPG 转换器的所有特性。 …

精准、快速、便捷:游标尺模式在软件设计中的三大优势

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;并且坚持默默的做事。 &#x1f680; 转载自&#xff1a;探索设计模式的魅力&#xff1a;精准、快速、便捷&#xf…

注册马来西亚商标常见问题

马来西亚商标法于1983年9月1日正式生效。这部商标法废除了马来亚、沙巴和沙捞越三地区各自的商标法规和申请程序&#xff0c;使马来西亚有了一部统一商标法。此外&#xff0c;马来西亚有关商标的法规包括1983年9月1日同时生效的《1983年商标法实施细则》。在马来西亚&#xff0…