
【项目背景】
Chrome浏览器断网时出现的小恐龙游戏是许多人熟悉的彩蛋。玩家需要控制小恐龙跳跃避开仙人掌,随着游戏加速,反应速度成为挑战。
如果让AI“看”懂游戏画面,自动识别仙人掌并控制跳跃,会是怎样有趣的体验?本项目利用Mind+ V2的目标检测训练功能,让计算机学会识别游戏中的仙人掌和小恐龙,再通过屏幕截图实时推理,自动发送空格键完成游戏。整个过程无需任何硬件,只需一台电脑,就能让零基础的学生在趣味中掌握目标检测的完整流程。
【项目功能】
1.自动截取游戏画面
2.实时检测画面中的仙人掌(目标检测)
3.根据仙人掌左边缘与恐龙的距离,智能判断跳跃时机
4.自动模拟按下空格键,控制恐龙跳跃
5.实时显示检测框和调试信息
【模型训练过程】(数据采集→标注→训练→部署)
1. 素材采集
进入Chrome断网游戏页面(地址栏输入 chrome://dino ),使用截图工具截取不同距离、不同大小的仙人掌和小恐龙的图片。建议至少采集50张以上,覆盖不同游戏速度下的场景。
采集技巧:让游戏运行一段时间,在游戏加速后多截取一些画面,增加样本多样性。

2. 数据标注
在Mind+ V2中新建“目标检测”训练项目,将采集的图片导入。使用矩形框分别标注“dino”(小恐龙)和“cactus”(仙人掌)两类物体。


3. 模型训练
在Mind+ V2中设置训练参数(建议默认设置),开始训练。训练完成后导出模型文件(.onnx)和配置文件(.yaml),保存到项目文件夹。

4. 模型部署
在Mind+的Python积木编程中,使用“模型训练推理库”扩展,加载训练好的模型。编写积木代码,通过自动转代码功能生成Python脚本,再进一步优化。


【程序设计过程】
1. 程序框架流程
开始 → 加载模型 → 打开显示窗口 → 进入循环
↓
截取屏幕 → 模型推理 → 检测仙人掌
↓
找到最靠近恐龙的仙人掌(左边缘最小)
↓
计算左边缘与恐龙的距离
↓
距离≤阈值 → 模拟按空格 → 跳跃冷却
↓
显示检测结果 → 按ESC退出2. 核心代码(最终优化版)
以下代码基于Mind+ V2自动生成的Python代码修改,解决了多仙人掌处理、跳跃时机优化、置信度字段缺失等实际问题。
# -*- coding: UTF-8 -*-
# 自动跳跃小恐龙(Chrome Dino Game)
# 使用Mind+ V2目标检测模型
import cv2
import numpy as np
import time
import pyautogui
from PIL import ImageGrab
# Mind+ V2 模型训练推理库导入
from model_mp_io import IO_Windows, ImageWriter
from model_mp_core import ObjectDetectionInference
# ================== 可调参数 ==================
DINO_X = 150 # 恐龙在图像中的固定X坐标(需实际测量)
JUMP_DISTANCE = 40 # 跳跃触发距离(像素)
JUMP_COOLDOWN_MS = 500 # 跳跃冷却(毫秒)
SCREEN_REGION = None # 全屏截图,也可裁剪游戏区域
DEBUG = True
# ==============================================
# 加载模型
inference = ObjectDetectionInference(
get_asset_path_by_name("best.onnx"),
get_asset_path_by_name("data.yaml")
)
# 初始化显示窗口
windows_name = IO_Windows()
detection_img_output = ImageWriter()
WINDOW_TITLE = "Dino Auto Jump"
cv2.namedWindow(WINDOW_TITLE, cv2.WINDOW_NORMAL)
print("请将恐龙游戏窗口置于前台,按ESC退出")
debug_printed = False
last_jump_time = 0
while True:
# 1. 截图
screen_pil = ImageGrab.grab(bbox=SCREEN_REGION)
img = cv2.cvtColor(np.array(screen_pil), cv2.COLOR_RGB2BGR)
# 2. 推理
result_output = inference.inference(img)
# 3. 处理检测结果(找最靠左的仙人掌)
cactus_detected = False
closest_x1 = float('inf')
if len(result_output['result']) > 0:
img = detection_img_output.draw(img, result_output)
for det in result_output['result']:
if DEBUG and not debug_printed:
print("检测项字段:", det.keys())
debug_printed = True
class_name = det.get('class_name', '')
bbox = det.get('bbox', det.get('box', None))
if bbox is None:
continue
if class_name.lower() in ['cactus', '仙人掌']:
x1 = bbox[0] # 左边缘
if x1 < closest_x1:
closest_x1 = x1
cactus_detected = True
if DEBUG:
conf = det.get('confidence', det.get('score', 'N/A'))
print(f"检测到 {class_name},置信度 {conf},左边缘 X={x1}")
# 4. 跳跃控制
current_time = time.time() * 1000
if cactus_detected and closest_x1 != float('inf'):
distance = closest_x1 - DINO_X
if distance <= JUMP_DISTANCE and (current_time - last_jump_time) > JUMP_COOLDOWN_MS:
pyautogui.press('space')
last_jump_time = current_time
if DEBUG:
print(f" → 跳跃!距离={distance} 像素")
# 5. 显示画面
cv2.imshow(WINDOW_TITLE, img)
# 6. ESC退出
if cv2.waitKey(1) & 0xFF == 27:
break
cv2.destroyAllWindows()3. 关键技巧说明
| 问题 | 解决方案 | |
| 多个仙人掌同时出现 | 选择左边缘最小的仙人掌(最靠近恐龙) | |
| 跳跃时机过早/过晚 | 使用仙人掌左边缘计算距离,通过JUMP_DISTANCE微调 | |
| 模型输出字段不统一 | 使用.get()安全访问,兼容bbox/box、confidence/score | |
| 连续跳跃 | 增加冷却时间JUMP_COOLDOWN_MS | |
| 恐龙位置确定 | 在截图中用画图工具测量恐龙脚部X坐标 |
【效果展示】
游戏运行时,窗口实时显示检测框和距离信息。
当仙人掌左边缘接近恐龙时,程序自动按下空格,恐龙跳跃。
随着游戏加速,AI仍能准确识别并跳跃,分数可达数百分。
1.运行效果截图

2.演示视频
【教学意义与可复现性】
本项目将看似复杂的“目标检测”转化为一个趣味游戏辅助工具,学生可在以下环节获得实践:
数据采集:理解样本多样性对模型的影响
数据标注:掌握标注规范
模型训练:体验训练-测试-迭代的AI工作流
代码调试:从积木编程到Python代码的过渡,理解参数调整的作用
跨学科融合:计算机视觉+自动化控制+游戏逻辑
所有文件(模型、代码、截图样本)均已整理,其他学习者只需按照步骤操作,即可在30分钟内复现完整项目,非常适合作为AI启蒙的教学案例。
【项目文件清单】
项目程序文件:dino_auto_jump.mpcode(dino_auto_jump.zip)
模型训练文件:dino_detection.mpmodel
模型文件:best.onnx(best.zip)、data.yaml
训练图片:image文件夹
程序文档:python代码.py
附件
附件

返回首页
回到顶部
评论