最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

airsim

IT圈 admin 2浏览 0评论

airsim

使用python编程,将飞机上携带的摄像机的图片保存下来。

首先完成我的上一篇文章airsim手动控制无人机.

在Epicgame Editor中点击运行后,然后在spyder编译器中运行如下代码:

python代码如下:

# manul UAV
import airsim
import os
import time
import tempfile
import numpy as np
import cv2# connect to the airsim simulator
client = airsim.MultirotorClient()
client.confirmConnection()# setup segmentation
found = client.simSetSegmentationObjectID("[\w]*", 12, True); # --- all objectID = 12	color=[242, 107, 146]
found = client.simSetSegmentationObjectID("UAV[\w]",19,True); # all UAV objectID = 19 color=[0, 53, 65]# initialize the UAV
name = "UAV"+str(1)
client.enableApiControl(True,name)
client.armDisarm(True,name)time.sleep(2)# take images
# get camera images from the car
responses = client.simGetImages([#airsim.ImageRequest("0", airsim.ImageType.DepthVis),  #depth visualization image#airsim.ImageRequest("1", airsim.ImageType.DepthPerspective, True), #depth in perspective projection#airsim.ImageRequest("1", airsim.ImageType.Scene), #scene vision image in png format#airsim.ImageRequest("1", airsim.ImageType.Scene, False, False)  #scene vision image in uncompressed RGBA arrayairsim.ImageRequest("0",airsim.ImageType.Scene, True, True)])print('Retrieved images: %d' % len(responses))tmp_dir = os.path.join(os.getcwd(), "picture")
print ("Saving images to %s" % tmp_dir)
try:os.makedirs(tmp_dir)
except OSError:if not os.path.isdir(tmp_dir):raisefor idx, response in enumerate(responses):filename = os.path.join(tmp_dir, str(idx))if response.pixels_as_float:print("Type %d, size %d" % (response.image_type, len(response.image_data_float)))airsim.write_pfm(os.path.normpath(filename + '.pfm'), airsim.get_pfm_array(response))elif response.compress: #png formatprint("Type %d, size %d" % (response.image_type, len(response.image_data_uint8)))airsim.write_file(os.path.normpath(filename + '.png'), response.image_data_uint8)else: #uncompressed arrayprint("Type %d, size %d" % (response.image_type, len(response.image_data_uint8)))img1d = np.fromstring(response.image_data_uint8, dtype=np.uint8) # get numpy arrayimg_rgb = img1d.reshape(response.height, response.width, 3) # reshape array to 4 channel image array H X W X 3cv2.imwrite(os.path.normpath(filename + '.png'), img_rgb) # write to png

对代码的部分解释:

  1. client.simSetSegmentationObjectID("[\w]*", 12, True)

    这个函数是对于分割图来说的,如果你没有用到分割图,就可以删掉这个函数。

    这句话的意思是对所有的物体的分割ID 全部设置为12,每个id都对应一个颜色

  2. airsim.ImageRequest函数

    (相机ID,图片类型,是否使用pixels_as_float(pfm格式),是否使用压缩图片)

  3. 相机ID

    front_center,0

    front_right,1

    front_left,2

    bottom_center,3

    back_center,4

  4. 图片类型

    Scene=0; 彩色图

    DepthPlanner=1; 深度图

    DepthPerspective = 2;

    DepthVis = 3

    DisparityNormalized = 4

    Segmentation = 5 分割图

    SurfaceNormals = 6 三维重建图

    Infrared = 7 红外图

airsim

使用python编程,将飞机上携带的摄像机的图片保存下来。

首先完成我的上一篇文章airsim手动控制无人机.

在Epicgame Editor中点击运行后,然后在spyder编译器中运行如下代码:

python代码如下:

# manul UAV
import airsim
import os
import time
import tempfile
import numpy as np
import cv2# connect to the airsim simulator
client = airsim.MultirotorClient()
client.confirmConnection()# setup segmentation
found = client.simSetSegmentationObjectID("[\w]*", 12, True); # --- all objectID = 12	color=[242, 107, 146]
found = client.simSetSegmentationObjectID("UAV[\w]",19,True); # all UAV objectID = 19 color=[0, 53, 65]# initialize the UAV
name = "UAV"+str(1)
client.enableApiControl(True,name)
client.armDisarm(True,name)time.sleep(2)# take images
# get camera images from the car
responses = client.simGetImages([#airsim.ImageRequest("0", airsim.ImageType.DepthVis),  #depth visualization image#airsim.ImageRequest("1", airsim.ImageType.DepthPerspective, True), #depth in perspective projection#airsim.ImageRequest("1", airsim.ImageType.Scene), #scene vision image in png format#airsim.ImageRequest("1", airsim.ImageType.Scene, False, False)  #scene vision image in uncompressed RGBA arrayairsim.ImageRequest("0",airsim.ImageType.Scene, True, True)])print('Retrieved images: %d' % len(responses))tmp_dir = os.path.join(os.getcwd(), "picture")
print ("Saving images to %s" % tmp_dir)
try:os.makedirs(tmp_dir)
except OSError:if not os.path.isdir(tmp_dir):raisefor idx, response in enumerate(responses):filename = os.path.join(tmp_dir, str(idx))if response.pixels_as_float:print("Type %d, size %d" % (response.image_type, len(response.image_data_float)))airsim.write_pfm(os.path.normpath(filename + '.pfm'), airsim.get_pfm_array(response))elif response.compress: #png formatprint("Type %d, size %d" % (response.image_type, len(response.image_data_uint8)))airsim.write_file(os.path.normpath(filename + '.png'), response.image_data_uint8)else: #uncompressed arrayprint("Type %d, size %d" % (response.image_type, len(response.image_data_uint8)))img1d = np.fromstring(response.image_data_uint8, dtype=np.uint8) # get numpy arrayimg_rgb = img1d.reshape(response.height, response.width, 3) # reshape array to 4 channel image array H X W X 3cv2.imwrite(os.path.normpath(filename + '.png'), img_rgb) # write to png

对代码的部分解释:

  1. client.simSetSegmentationObjectID("[\w]*", 12, True)

    这个函数是对于分割图来说的,如果你没有用到分割图,就可以删掉这个函数。

    这句话的意思是对所有的物体的分割ID 全部设置为12,每个id都对应一个颜色

  2. airsim.ImageRequest函数

    (相机ID,图片类型,是否使用pixels_as_float(pfm格式),是否使用压缩图片)

  3. 相机ID

    front_center,0

    front_right,1

    front_left,2

    bottom_center,3

    back_center,4

  4. 图片类型

    Scene=0; 彩色图

    DepthPlanner=1; 深度图

    DepthPerspective = 2;

    DepthVis = 3

    DisparityNormalized = 4

    Segmentation = 5 分割图

    SurfaceNormals = 6 三维重建图

    Infrared = 7 红外图

发布评论

评论列表 (0)

  1. 暂无评论