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

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

屏幕截图

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

python 复制代码
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个数字。

python 复制代码
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 网络结构:

python 复制代码
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())

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

python 复制代码
 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的时间内如果没有搜索完所有可能也要退出。

python 复制代码
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
python 复制代码
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)

未完。。。明天继续

自动点击

相关推荐
番茄电脑全能王2 小时前
《CS2》提示mss32.dll丢失的根源与应对策略。《CS2》提示mss32.dll丢失是什么原因?mss32.dll丢失怎么办?
网络·经验分享·游戏·电脑
InSighT__5 小时前
设计模式与游戏完美开发(2)
java·游戏·设计模式
Camllia377 小时前
《CS2》报错dxgi.dll缺失怎么办?《CS2》游戏提示dxgi.dll缺失要怎么解决?
游戏
葡萄架子8 小时前
用Python写炸金花游戏
windows·python·游戏
la_vie_est_belle16 小时前
《Cocos Creator游戏实战》非固定摇杆实现原理
游戏·cocos creator·游戏开发·cocos·非固定摇杆
zh路西法19 小时前
【C++决策和状态管理】从状态模式,有限状态机,行为树到决策树(二):从FSM开始的2D游戏角色操控底层源码编写
c++·游戏·unity·设计模式·状态模式
soragui20 小时前
【ChatGPT】OpenAI 如何使用流模式进行回答
linux·运维·游戏
番茄电脑全能王1 天前
《鸣潮》运行时提示找不到emp.dll是什么原因?缺失emp.dll文件要怎么解决?
网络·数据库·经验分享·游戏·电脑
Artistation Game1 天前
一、c#基础
游戏·unity·c#·游戏引擎
番茄电脑全能王1 天前
《诛仙世界》游戏运行时提示d3dx9_43.dll丢失怎么办?d3dx9_43.dll丢失要怎么解决?
游戏