0. 渲染游戏画面

1 用到的函数

# initialize env
env = gym.make() 
frame = env.render()  
frame = np.transpose(frame, (1, 0, 2))  # 调整图像方向
frame = pygame.surfarray.make_surface(frame)
screen.blit(frame, (0, 0))
pygame.display.flip()

1.1 检查图像的形状

首先,我们需要确认从 env.render() 返回的图像的形状。通常情况下,rgb_array 模式返回的图像形状是 (height, width, channels),其中 channels 通常是 3(RGB)。

import gym
import numpy as npenv = gym.make('Pendulum-v1',render_mode="rgb_array")
env.reset()# 获取一帧图像
frame = env.render()
print(f"Frame shape: {frame.shape}")env.close()

1.2 根据图像形状调整

假设 frame.shape 输出的结果是 (height, width, 3),那么我们不需要调整图像方向。如果确实需要调整图像方向,可以根据实际情况调整 np.transpose 的参数。

例如,如果你需要将图像的宽度和高度对调,可以使用以下代码:

frame = np.transpose(frame, (1, 0, 2))  # 将宽度和高度对调

但如果 frame.shape(height, width, 3),那么直接使用 frame 即可,无需调整。

1.3 代码解读

首先,需要确保您已经导入了 pygame,并正确地初始化了 pygame 显示窗口。

import pygame
import numpy as np# 初始化 pygame
pygame.init()# 假设您的环境分辨率为 800x600
screen_width, screen_height = 800, 600
screen = pygame.display.set_mode((screen_width, screen_height))# 训练或测试中的代码部分,处理帧显示
for episode in range(test_episodes):state = env.reset()done = Falsewhile not done:# 渲染环境并获取帧frame = env.render(mode='rgb_array')  # 使用 'rgb_array' 模式来获取帧frame = np.transpose(frame, (1, 0, 2))  # 转置 frame,使得宽度和高度与显示的顺序一致# 将 numpy 数组转换为 pygame.Surfaceframe_surface = pygame.surfarray.make_surface(frame)# 显示帧screen.blit(frame_surface, (0, 0))pygame.display.flip()# 智能体选择动作action = agent.select_action(state)# 执行动作next_state, reward, done, _ = env.step(action)state = next_state# 结束后保持一段时间pygame.time.wait(500)# 关闭 pygame 和环境
pygame.quit()
env.close()

代码详细说明

  1. 获取环境渲染帧

    • frame = env.render():使用 'rgb_array' 模式从环境中获取帧,这样返回的是一个 numpy 数组,形状为 (height, width, channels),通常是 RGB 三通道图像。
  2. 转换 numpy 数组为 Pygame Surface

    • 使用 pygame.surfarray.make_surface(frame)numpy.ndarray 转换为 pygame.Surface
    • pygame.surfarray.make_surface() 只能处理二维数组的转置形式,因此如果渲染出来的帧的维度是 (height, width, channels),您可能需要调整顺序(例如使用 np.transpose(frame, (1, 0, 2))),以便适应 make_surface 的输入要求。
  3. 显示帧

    • screen.blit(frame_surface, (0, 0)):将转换后的 Surface 对象绘制到屏幕上。
    • pygame.display.flip() 刷新显示以确保更新的帧在屏幕上显示。
  4. 初始化 Pygame

    • 使用 pygame.init() 进行初始化,并使用 pygame.display.set_mode() 来创建显示窗口。
  5. 延迟以查看效果

    • 使用 pygame.time.wait(500) 保持画面以便观察智能体的效果。

注意

  • 问题来源env.render() 返回的是 numpy.ndarray,而 pygameblit() 方法需要一个 Surface 对象。
  • 解决方法:使用 pygame.surfarray.make_surface()numpy.ndarray 转换为 pygame.Surface,这样就可以正确地显示在屏幕上。

这样就能将 OpenAI Gym 环境的帧显示到 Pygame 窗口中,并使用智能体执行的动作来实时观察它在环境中的行为。

2 完整示例代码

以下是一个完整的示例代码,展示了如何在 PyGame 中显示 Gym 环境的渲染结果,并控制帧率:

import gym
import pygame
import numpy as np
import timepygame.init()
screen_width, screen_height = 800, 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption('CartPole-v1')env = gym.make('CartPole-v1',render_mode="rgb_array")
env.reset()# 获取一帧图像,检查形状
frame = env.render()
print(f"Frame shape: {frame.shape}")for _ in range(100):frame = env.render()  # 获取图像帧# 检查并调整图像方向(如果需要)if frame.shape[0] > frame.shape[1]:frame = np.transpose(frame, (1, 0, 2))  # 将宽度和高度对调# 将图像转换为 PyGame 表面frame = pygame.surfarray.make_surface(frame)frame_surface = pygame.transform.scale(frame, (screen_width, screen_height))screen.blit(frame_surface, (0, 0))pygame.display.flip()# 控制帧率time.sleep(0.05)for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()quit()action = env.action_space.sample()_, _, done, _, _ = env.step(action)if done:breakenv.close()
pygame.quit()

解释

  1. 初始化 PyGame:设置 PyGame 环境,创建一个窗口。
  2. 创建 Gym 环境:加载 CartPole-v1 环境并重置。
  3. 检查图像形状:获取一帧图像并打印其形状,确保你知道图像的尺寸。
  4. 调整图像方向:根据需要调整图像的方向。如果 frame.shape(height, width, 3),则不需要调整。
  5. 显示图像:将图像转换为 PyGame 表面并显示在窗口中。
  6. 控制帧率:使用 time.sleep 控制每帧图像的显示时间。
  7. 处理事件:处理 PyGame 事件,如窗口关闭。
  8. 执行动作:随机选择一个动作并执行。
  9. 关闭环境:关闭 Gym 环境和 PyGame 窗口。

结果
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【西藏】《西藏自治区本级政务信息化项目建设和运维费用预算支出标准》(藏财建〔2024〕68号)-省市费用标准解读系列08

2024年9月1日,西藏自治区财政厅和经济和信息化厅正式施行最新信息化建设和运维项目预算支出标准《西藏自治区本级政务信息化项目建设和运维费用预算支出标准》(藏财建〔2024〕68号)(以下简称“68号文”)。同时&#xf…

Autosar CP Transformer规范工作原理和应用场景导读

一、AUTOSAR规范中Transformer的主要功能和分类 (一)主要功能 数据转换与处理 从运行时环境(RTE)获取数据,进行序列化(将复杂数据结构转换为线性字节数组)或其他转换操作(如添加校…

【网络安全 | 并发问题】Nginx重试机制与幂等性问题分析

未经许可,不得转载。 文章目录 业务背景Nginx的错误重试机制proxy_next_upstream指令配置重试500状态码非幂等请求的重试问题幂等性和非幂等性请求non_idempotent选项的使用解决方案业务背景 在现代互联网应用中,高可用性(HA)是确保系统稳定性的关键要求之一。为了应对服务…

天津营业执照注销流程

营业执照不注销会有什么影响?1、公司不经营,放几年自动注销?真相:不管放多长时间,公司是不会自动注销的。相反,放任长久不维护,公司会出现异常,营业执照被吊销,公司股东、…

MySQL数据库专栏(五)连接MySQL数据库C API篇

摘要 本篇文章主要介绍通过C语言API接口链接MySQL数据库,各接口功能及使用方式,辅助类的封装及调用实例,可以直接移植到项目里面使用。 目录 1、环境配置 1.1、添加头文件 1.2、添加库目录 2、接口介绍 2.1、MySql初始化及数据清理 2.1.…

计算机课程管理:Spring Boot实现的工程认证路径

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于工程教育认证的计算机课程管理平台的开发全过程。通过分析基于工程教育认证的计算机课程管理平台管理的不足,创建了一个计算机管理基于工程教育认…

【无人机设计与控制】无人机集群路径规划:5种最新优化算法(ECO、AOA、SFOA、MGO、PLO)求解无人机集群路径规划

摘要 本文提出了基于无人机集群路径规划的研究,通过使用五种最新优化算法(ECO、AOA、SFOA、MGO、PLO)进行求解。这些算法主要优化无人机在复杂环境中的路径,以实现多目标规划问题的高效解。实验结果表明,不同算法在收…

从0开始搭建一个生产级SpringBoot2.0.X项目(十)SpringBoot 集成RabbitMQ

前言 最近有个想法想整理一个内容比较完整springboot项目初始化Demo。 SpringBoot集成RabbitMQ RabbitMQ中的一些角色: publisher:生产者 consumer:消费者 exchange个:交换机,负责消息路由 queue:队列…

牧神记开分9.7,2024新国漫巅峰出现了

现在国漫越来越卷了,卷播放量也卷评分。最近,b站上线不久的国漫《牧神记》开分9.7,口碑还是相当不错的,已经和《凡人修仙传》评分齐平。这部国漫仅仅播出4集,为什么就能获得这么高的评分呢?下面就一起来看看…

了解GPT大模型,读这本书就够了!(文末送书)

小异最近发现,当国外OpenAI的权力的游戏反转再反转的时候,国内的AI创业者们除了吃瓜之外也没闲着。 有很多程序员正在AIGC赛道中默默发财,有通过短视频做内容爆火,接广告的;有卖AI解决方案的;有卖AI课程的…

〔 MySQL 〕数据库基础

1. 数据库基础(重点) 1.1 什么是数据库 存储数据用文件就可以了,为什么还要弄个数据库?文件保存数据有以下几个缺点: ● 文件的安全性问题 ● 文件不利于数据查询和管理 ● 文件不利于存储海量数据 …

关于C++友元函数的优缺点和应用场景!

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C 友元函数的相关内容! 关于…

笔记本怎么开启TPM2.0_笔记本开启TPM2.0教程(不同笔记本开启tpm2.0方法)

在win11最低要求是提示,电脑必须满足 TPM 2.0,并开需要开启TPM 才能正常安装windows11系统,有很多笔记本的用户问我,笔记本怎么开启tpm功能呢?下面小编就给大家详细介绍一下笔记本开启tpm功能的方法。 如何确认你笔记本…

Fastjson反序列化漏洞部署复现1.2.24版本反序列RCE笔记

环境部署 docker容器地址:https://github.com/vulhub/vulhub/tree/master/fastjson/1.2.24-rce 启动docker环境 docker容器每次一启动就报错 根据docker log [容器id] 查看报错日志发现有如下报错 library initialization failed - unable to allocate file desc…

PostgreSQL pg-xact(clog)目录文件缺失处理

一、 背景 前些天晚上突然收到业务反馈,查询DB中的一个表报错 Could not open file "pg-xact/005E": No such file or directory. 两眼一黑难道是文件损坏了...登录查看DB日志,还好没有其他报错,业务也反馈只有这一个表在从库查询报…

【Python】项目结构

【Python】项目结构 前言前置知识Python 的基本项目结构int main() 与 def main() 的区别举例:基于 KNN 的 OpenCV 数字识别的项目结构 前言 本文总结了 Python 项目结构的知识,规范项目结构能使得项目开发过程高效流畅,提升代码可读性、团队…

arcgis pro 学习笔记

二维三维集合在一起,与arcgis不同 一、首次使用,几个基本设置 1.选项——常规里面设置自动保存时间 2.新建工程文件,会自动加载地图,可以在选项里面设置为无,以提高启动效率。 3.设置缓存位置,可勾选每次…

OpenCV视觉分析之目标跟踪(11)计算两个图像之间的最佳变换矩阵函数findTransformECC的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 根据 ECC 标准 78找到两幅图像之间的几何变换(warp)。 该函数根据 ECC 标准 ([78]) 估计最优变换(warpMatri…

Redis 典型应用 - 缓存(cache)

一、什么是缓存 缓存(cache)是计算机中的⼀个经典的概念.在很多场景中都会涉及到. 核⼼思路就是把⼀些常⽤的数据放到触⼿可及(访问速度更快)的地⽅,⽅便随时读取. 这⾥所说的"触⼿可及"是个相对的概念. 对于硬件的访问速度来说,通常情况下: CPU寄存器>内存>…

DevCheck Pro手机硬件检测工具v5.33

前言 DevCheck Pro是一款手机硬件和操作系统信息检测查看工具,该软件的功能非常强大,为用户提供了系统、硬件、应用程序、相机、网络、电池等一系列信息查看功能 安装环境 [名称]:DevCheckPro [版本]:5.33 [大小]&a…