利用Pygame实时显示Carla中RGB相机的画面

这篇具有很好参考价值的文章主要介绍了利用Pygame实时显示Carla中RGB相机的画面。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

  关于显示Carla中RGB相机的画面,我找到的几乎都是使用cv来显示的画面的,但是经过我自己尝试发现,利用cv来显示的画面帧数非常低,画面及其不流畅。如果你尝试过Carla自带的demo就会发现demo中用pygame制作窗口显示的画面就十分流畅,所以我就试着模仿demo利用pygame来显示RGB相机画面。
  先给大家推荐一篇文章,里面十分详细地介绍了Carla中大部分的传感器,大家可以根据这篇文章来试用cv来显示传感器中的画面。
  https://blog.csdn.net/weixin_44169614/article/details/119824465

开始主题

1.创建Pygame窗口:

下面是使用pygame编写游戏的基本结构:

def main():
    #初始化游戏并创建一个屏幕对象
    pygame.init()
    pygame.font.init()
    display = pygame.display.set_mode((1920, 1080), pygame.HWSURFACE | pygame.DOUBLEBUF)   # 窗口可以自己修改大小
    pygame.display.set_caption("Camera Vision")   # 窗口名称

    # 开始游戏的主循环
    while True:
        # 监视键盘和鼠标事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
               sys.exit()
        # display.blit()将画面加载到窗口,暂时先不加画面
        # 让最近绘制的屏幕可见
        pygame.display.flip()

2.连接Carla:略

3.Carla内放置一辆车:

这个很多教程的啦,我就不解释了,用类来写方便管理

class CarManager(object):
    def __init__(self, world): # world = client.get_world()
        self.world = world
        self.ego_vehicle = None
        
        blueprint_library = world.get_blueprint_library()
        self.ego_vehicle_bp = blueprint_library.find('vehicle.audi.a2')
        self.ego_vehicle_bp.set_attribute('color', '0, 0, 0')
        transform = random.choice(world.get_map().get_spawn_points())
        # transform = carla.Transform(carla.Location(x=-78.034149, y=12.967159, z=0.6), carla.Rotation(yaw=-179.84079))
        
        self.ego_vehicle = self.world.spawn_actor(self.ego_vehicle_bp, transform)
        self.ego_vehicle.set_autopilot(True)

4.给车加传感器,处理传感器数据

class SensorManager(object):
    def __init__(self, world, car):  # world = client.get_world()    car = CarManager(world) 
        self.surface = None
        self.world = world
        self.car = car
        # 添加RGB相机,相机的图像大小记得和pygame窗口一样哦
        blueprint_library = world.get_blueprint_library()
        self.camera_bp = blueprint_library.find('sensor.camera.rgb')
        self.camera_bp.set_attribute('image_size_x', '1920')
        self.camera_bp.set_attribute('image_size_y', '1080')
        self.camera_bp.set_attribute('fov', '110')
        camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4))
        self.camera = self.world.spawn_actor(self.camera_bp, camera_transform, attach_to=self.car.ego_vehicle)
        # 设置监听传感器的处理函数
        self.camera.listen(lambda image: self._parse_image(image))

    # 这个函数是绘制图像的,提供给pygame来显示
    def render(self, display):
        if self.surface is not None:
            display.blit(self.surface, (0, 0))

    # 对传感器的raw图像进行处理
    def _parse_image(self, image):
        array = np.frombuffer(image.raw_data, dtype=np.dtype("uint8"))
        array = np.reshape(array, (image.height, image.width, 4))
        array = array[:, :, :3]
        array = array[:, :, ::-1]
        self.surface = pygame.surfarray.make_surface(array.swapaxes(0, 1))

5.完整代码:

import glob
import carla
import sys
import os
import numpy as np
import pygame
from numpy import random

try:
    sys.path.append(glob.glob('../carla/dist/carla-*%d.%d-%s.egg' % (
        sys.version_info.major,
        sys.version_info.minor,
        'win-amd64' if os.name == 'nt' else 'linux-x86_64'))[0])
except IndexError:
    pass


class SensorManager(object):
    def __init__(self, world, car):
        self.surface = None
        self.world = world
        self.car = car
        # 添加RGB相机
        blueprint_library = world.get_blueprint_library()
        self.camera_bp = blueprint_library.find('sensor.camera.rgb')
        self.camera_bp.set_attribute('image_size_x', '1920')
        self.camera_bp.set_attribute('image_size_y', '1080')
        self.camera_bp.set_attribute('fov', '110')
        camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4))
        self.camera = self.world.spawn_actor(self.camera_bp, camera_transform, attach_to=self.car.ego_vehicle)
        # set the callback function
        self.camera.listen(lambda image: self._parse_image(image))

    def render(self, display):
        if self.surface is not None:
            display.blit(self.surface, (0, 0))

    def _parse_image(self, image):
        array = np.frombuffer(image.raw_data, dtype=np.dtype("uint8"))
        array = np.reshape(array, (image.height, image.width, 4))
        array = array[:, :, :3]
        array = array[:, :, ::-1]
        self.surface = pygame.surfarray.make_surface(array.swapaxes(0, 1))


class CarManager(object):
    def __init__(self, world):
        self.world = world
        self.ego_vehicle = None
        blueprint_library = world.get_blueprint_library()
        self.ego_vehicle_bp = blueprint_library.find('vehicle.audi.a2')
        self.ego_vehicle_bp.set_attribute('color', '0, 0, 0')
        # transform = random.choice(world.get_map().get_spawn_points())
        transform = carla.Transform(carla.Location(x=-78.034149, y=12.967159, z=0.6), carla.Rotation(yaw=-179.84079))
        self.ego_vehicle = self.world.spawn_actor(self.ego_vehicle_bp, transform)
        self.ego_vehicle.set_autopilot(True)


def main():
    pygame.init()
    pygame.font.init()
    try:
        client = carla.Client('127.0.0.1', 2000)
        client.set_timeout(20.0)
        world = client.get_world()

        display = pygame.display.set_mode((1920, 1080), pygame.HWSURFACE | pygame.DOUBLEBUF)
        pygame.display.set_caption("Camera Vision")

        car = CarManager(world)
        sensor = SensorManager(world, car)

        clock = pygame.time.Clock()
        while True:
            clock.tick_busy_loop(60)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    return
            world.wait_for_tick()
            sensor.render(display)
            pygame.display.flip()
    finally:
        car.ego_vehicle.destroy()
        sensor.camera.stop()
        sensor.camera.destroy()
        print('done.')
        pygame.quit()


if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print(' - Exited by user -')

各位加油,冲冲冲!!!文章来源地址https://www.toymoban.com/news/detail-589013.html

到了这里,关于利用Pygame实时显示Carla中RGB相机的画面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 电脑传输数据STM32模拟I2C显示实时画面到OLED

    写的不好,还望大家指正,有的地方引用了一下大佬的代码。 一、所需硬件: STM32F103C8T6 USB转串口模块 OLED 128*64显示屏 STLINK 二、代码部分 1.stm32串口部分代码 2.stm32OLED屏幕部分代码 3.主程序 4.电脑通过opencv库截取电脑当前1080p一帧画面,并对图片二值化处理,通过电脑端编写

    2024年02月13日
    浏览(30)
  • scrcpy2.0+实时将手机画面显示在屏幕上并用鼠标模拟点击2023.7.26

    想要用AI代打手游,除了模拟器登录,也可以直接使用第三方工具Scrcpy,来自github,它是一个开源的屏幕镜像工具,可以在电脑上显示Android设备的画面,并支持使用鼠标进行交互。 step1:windows版本的releases,其他版本去github主页里找找: step2:解压后:   如果PC已经安装过

    2024年02月15日
    浏览(29)
  • 奥比中光astra深度相机通过openni直接显示rgb彩色图、depth深度图、ir红外图

    本文章的前提为astra深度相机驱动安装完成能够正常显示使用,如果没有安装好请看另一篇文章 Thinker Board 2开发板上使用奥比中光 astra 深度相机 也可以看其他人的类似奥比中光astra深度相机的教程 创建python文件复制下面代码既可使用 注意 depth图和ir图有冲突不能同时使用 这

    2024年02月14日
    浏览(76)
  • Android Studio新功能-设备镜像Device mirroring-在电脑侧显示手机实时画面并可控制

    下载最新的灰测版本-蜥蜴 成功运行到真机后,点击右侧Running Devices选项卡,再点击+号 选中当前设备; 非常丝滑同步,在电脑侧也可以顺畅控制真机 该功能大大方便了我们视线保持在显示器上专注开发,并且便于与UI视觉进行校准与比对。 Device mirroring You can now mirror your p

    2024年02月08日
    浏览(29)
  • 如何获取当前摄像头实时画面(或说图片)

    可以使用所在平台提供的摄像头接口或第三方库来获取当前摄像头实时画面(或图片),具体实现方式可能因不同平台和库而异。以下是几个常见平台的示例方法: 在 Windows 平台上,可以使用 DirectShow 或 Media Foundation API 获取摄像头实时画面。 在 macOS 平台上,可以使用 AVFo

    2024年02月10日
    浏览(43)
  • Unity实战(10):如何将某个相机的画面做成贴图(RenderTexture)

    目录 前言 一、创建物体、材质与相机 二、将RenderTexture赋给材质 2.1 修改rt1的一些属性 2.2 将rtMat1材质的shader改为Unlit/Texture,并将rt1赋给这个材质 三、效果呈现 本文记录如何将某个相机的画面做成贴图,即游戏某些场景中小地图做法或虚拟监控效果,使用到的是RenderTexture

    2024年02月09日
    浏览(29)
  • 【深度相机D435i】Windows+Ubuntu下调用D435i利用Python读取、保存RGB、Depth图片

    最近组里面的项目需要用到D435i深度相机采集深度图片,所以记录一下在Windows+Ubuntu的环境下使用D435i深度相机的流程,以及如何利用python读取、保存常见的RGB、Depth图片。 D435i 在小巧外形中采用英特尔模块和视觉处理器,是一个功能强大的一体产品,可与可定制软件配合使用

    2024年02月02日
    浏览(32)
  • 说点人话的强化学习:如何显示当前训练的环境,openai gym不显示画面,env.render()不显示画面,CartPole不显示画面

    在早期版本gym中,调用env.render()会直接显示当前画面,但是现在的新版本中这一方法无效。现在有一下几种方法显示当前环境和训练中的画面: 1. render_model = \\\"human\\\" 显示效果:   问题: 该设置下,程序会输出所有运行画面。但是这一步会带来一个问题,因为画面渲染需要时

    2024年02月13日
    浏览(26)
  • 小白教程:PyQt5点击按钮,调用笔记本电脑摄像头将实时画面显示在label控件上,并且使用UI代码和逻辑代码分开的方式

    能力一般,水平有限,真心欢迎批评指正!以后会不断完善修改,如果对你有帮助欢迎点赞收藏! 小白教程,当我们掌握了一点点的Qt Designer的技能,得意于能够在界面上作画的时候,怎么编写其中的逻辑关系是我们进一步想要了解的,下面介绍了 点击按钮--调用笔记本电脑

    2024年01月17日
    浏览(67)
  • COI实验室技能:python控制相机的方法——采集、处理、显示、实时

    COI实验室技能:python控制相机的方法——采集、处理、显示、实时   本文介绍如何利用python控制办公摄像头、工业相机和科研相机。将数据采集和处理统一到python代码中。   主要围绕解决采用什么库、掌握这个库的控制相机方法(参数配置、读取数据等等)、结合自己的算

    2024年02月13日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包