从零实现Python自动扫雷(三):基于TensorFlow识别雷块

一、系统架构概述

本扫雷AI识别系统由以下几个核心组件构成:

  1. 图像预处理模块:负责将游戏截图转换为模型可处理的格式
  2. TensorFlow模型模块:加载预训练模型并进行预测
  3. 地图管理模块:维护游戏地图状态并与识别系统交互
  4. 窗口交互模块:从游戏窗口获取实时图像数据

二、核心代码解析

2.1 图像预处理函数

1
2
3
4
5
6
7
def im_array(im):
im_L = im.convert("L") # 转换为灰度图像
Core = im_L.getdata()
arr1 = np.array(Core, dtype='float32') / 255.0 # 归一化
list_img = arr1.tolist()
images = np.array(list_img).reshape(-1,25, 25,1) # 调整为模型输入格式
return images

关键技术点

  • 图像灰度化处理减少计算复杂度
  • 像素值归一化到[0,1]范围提高模型稳定性
  • 调整图像维度匹配模型输入要求(25×25×1)

2.2 OCR分类器类

1
2
3
4
5
6
7
8
class OcrClassifier:
def __init__(self, window, map: MineMap):
self.model = tf.keras.models.load_model('my_model.h5')
logger.info("tf.keras.models模型加载完成!")
self.window = window
self.dict_label={0:0, 1:1, 2:2, 3:3, 4:4, 5:5, 6:-9, 7:-1}
self.imgs = None
self.map = map

类成员说明

  • model:预训练的TensorFlow Keras模型
  • dict_label:模型输出到游戏逻辑的映射字典
  • window:窗口管理对象,用于获取游戏截图
  • map:地图管理对象,维护游戏状态
  • imgs:缓存当前游戏区域图像

2.3 分类预测方法

1
2
3
4
def classify(self, im):
img = im_array(im) # 图像预处理
predictions_single = self.model.predict(img) # 模型预测
return self.dict_label[np.argmax(predictions_single)] # 获取最终分类

工作流程

  1. 输入原始图像(25×25像素)
  2. 调用im_array进行预处理
  3. 使用加载的模型进行预测
  4. 将预测结果映射为游戏逻辑可识别的标签

2.4 全图分类方法

1
2
3
4
5
6
7
8
9
def classify_all(self):
self.get_cropped_image() # 获取当前游戏区域截图
for i in range(self.map.width):
for j in range(self.map.height):
self.map.set_grid_img(i, j, self.imgs[i][j])
if(self.map.need_grid_classify(i, j)):
ans = self.classify(self.imgs[i][j])
logger.info("({},{})处预测值:".format(i,j) + str(ans))
self.map.set_grid_flag(i, j, ans)

算法逻辑

  1. 获取当前游戏区域截图并切分为网格
  2. 遍历每个网格单元
  3. 检查该单元是否需要重新分类
  4. 调用分类器进行预测并更新地图状态
  5. 记录分类日志

三、性能优化考虑

  1. GPU加速

    1
    2
    3
    # 可选的GPU设备配置代码
    gpus = tf.config.experimental.list_physical_devices(device_type='GPU')
    tf.config.experimental.set_visible_devices(devices=gpus[2:4], device_type='GPU')
  2. 缓存机制:已识别且未变化的格子可跳过重复识别

四、总结

该系统与之前实现的窗口管理和点击操作模块相结合,可构建完整的扫雷AI解决方案。下一步可研究游戏策略算法,如基于概率的推理和模式识别。


从零实现Python自动扫雷(三):基于TensorFlow识别雷块
https://blog.cngo.xyz/posts/6059.html
作者
cngo
发布于
2024年12月19日
许可协议