前言

上一篇文章,简单介绍了一下Python框架下如何去玩跳一跳 AlphaJump - 如何用机器学习去玩微信小游戏跳一跳(一)

主要通过判断下一跳的位置和棋子的距离来计算屏幕按压时间,使得棋子可以精准的抵达下一跳的位置。

不同屏幕对应的系数并不一样,这里给出1080*1920下的参数和公式

这一篇主要介绍如何使用Tensorflow的物体识别的API去检测跳一跳中的物体以及搭建自己的识别别框架用于。

准备工作

由于之前不小心搞坏了linux环境以及最近特别多的漏洞需要各种研究分析一直没机会处理,最近终于用闲暇时间在window上搭建起来。赶紧把文补上。先来上一下基础环境配置

在你准备好python3.5 以及 tensorflow 后。就可以开始安装object_detection 了。由于涉及的类和库非常的多,分离起来十分困难,直接下载tensorflow下的models。以后学习研究也非常方便。

安装配置 object_detection

官方的安装说明 installation

也可以按照我的来

python models/research/object_detection/builders/model_builder_test.py

搭建识别框架

框架结构

我在这篇文章中说过 使用TensorFlow自动识别验证码(一) 深度学习的基本思路是

我们框架也是依据此来建立目录

开始训练

采样数据

为了简单,我这里把图片的物体分为两种

但 tensorflow 并不能直接识别图片,需要一种叫tfrecord格式的才可以进入模型训练。

在目录 models\research\object_detection\dataset_tools 下提供了多种的格式转换工具。

这里我选择的 datitran 使用的采样方式 。

我这里一共手工标注了250张的图片。 把这些图片和XML分成两份,一份34,一份216 分别放到

把 在 datitran 下载回来的 xml_to_csv.py 文件放到 objectdecting_wechatjump 目录下

把 models\research\object_detection\dataset_tools 下的 create_pascal_tf_record.py 稍作修改

至此 我们的采样数据完成了,接下来是创建一个识别模型

创建识别模型

这里我们不需要自己创建识别模型,因为我们用的就是tensorflow基于COCO数据集提供的几种识别模型 下载地址

这里我们选择最快的 ssd_mobilenet_v1_coco
下载回来后解压,文件列表如下

saved_model[dir]
checkpoint
frozen_inference_graph.pb
model.ckpt.data-00000-of-00001
model.ckpt.index
model.ckpt.meta

这是一个识别模型最终的输出结果。我们最后训练也会导出同样的文件结构。
其中frozen_inference_graph.pb就是训练结果,里面已经包含了多种的识别。

model.ckpt 前缀的文件就是训练模型,我们把

三个文件放到 objectdecting_wechatjump\modle\train_set目录下作为我们训练的初始模型。

在train_set 新建 object-detection.pbtxt
仿照 models\research\object_detection\data 下的pbtxt格式
写上刚才的物体标签

item {
  id: 1
  name: 'movtarget'
}

item {
  id: 2
  name: 'jumptarget'
}

保存为 object-detection.pbtxt 也放到 objectdecting_wechatjump\modle\train_set 目录下。

到models\research\object_detection\samples\configs 目录下 把训练配置参数配置文件 ssd_mobilenet_v1_pets.config 复制到 objectdecting_wechatjump\modle\train_set

修改以下参数

本来此处,我们的训练模型已经配置完成,可以进入下一步的训练阶段。
但实际上,开始训练的时候往往训练一阵子就内存耗光直接奔溃了程序,无法继续。
查阅了好多资料和源码后,最终发现配置项中需要添加和修改如下参数:
在 train_config: 中

至此,辛苦的活都做完了。接下来就是训练模型阶段。

训练模型

我们先来看一下当前目录的情况

我们的识别框架基本成型,训练模型非常简单,直接调用原生的训练文件train.py即可

执行 python models/research/object_detection/train.py

开始后会显示步数和lost信息

使用 tensorboard --logdir="objectdecting_wechatjump/modle/train" 可以看到界面的训练情况

在目录 objectdecting/modle/train 下 我们已经可以看到模型生成了

在我的970训练了1个多小时后,步数抵达到了24425,来试试导出模型 测试一下

导出模型和验证

把 models\research\object_detection\sexport_inference_graph.py的导出文件 拷贝到
objectdecting_wechatjump目录下 。
执行 python export_inference_graph.py
参数

导出完成后,如图,和我们下载的ssd_mobilenet_v1的模型一样的结构

接下来我们写一下验证文档,总体思路是

保存为checkmodel.py 。 具体我就不贴代码了 ,稍后会在我的github上同步。github.com/wstart

测试结果如下

基本上完整识别了所有的目标。只需要取Y轴最高的jumptarget和movtarget的中心点,然后通过时间计算系数,就可以完美的跳了。 最高纪录好像22000,后来就停了,不过微信已经把我加入黑名单了,没办法更新分数。

总结

源链接

Hacking more

...