def take_snapshot(self):
        if not os.path.exists(self.image_dir):
            os.makedirs(self.image_dir)

        # first hold our current position so drone doesn't try and keep flying while we take the picture.
        pos = self.client.getMultirotorState(
            vehicle_name=self.id).kinematics_estimated.position
        self.client.moveToPositionAsync(
            pos.x_val,
            pos.y_val,
            self.z,
            0.25,
            3,
            airsim.DrivetrainType.MaxDegreeOfFreedom,
            airsim.YawMode(False, self.camera_heading),
            vehicle_name=self.id)
        responses = self.client.simGetImages(
            [airsim.ImageRequest(0, airsim.ImageType.Scene)],
            vehicle_name=self.id)  # scene vision image in png format
        response = responses[0]
        filename = self.photo_prefix + \
            str(self.snapshot_index) + "_" + str(int(time.time()))
        self.snapshot_index += 1
        airsim.write_file(os.path.normpath(self.image_dir + filename + '.png'),
                          response.image_data_uint8)
        print("Saved snapshot: {}".format(filename))
        # cause smooth ramp up to happen again after photo is taken.
        self.start_time = time.time()
    def take_snapshot(self) -> None:
        if not os.path.exists(self.image_dir):
            os.makedirs(self.image_dir)

        # first hold our current position so drone doesn't try and keep flying while we take the picture
        pos = self.client.getMultirotorState().kinematics_estimated.position
        self.client.moveToPositionAsync(
            pos.x_val,
            pos.y_val,
            self.z,
            velocity=0.25,
            timeout_sec=3,
            drivetrain=airsim.DrivetrainType.MaxDegreeOfFreedom,
            yaw_mode=airsim.YawMode(is_rate=False,
                                    yaw_or_rate=self.camera_heading))

        png_image = self.client.simGetImage("0", airsim.ImageType.Scene)
        filename = "{}{}_{:.0f}".format(self.photo_prefix, self.snapshot_index,
                                        time.time())
        self.snapshot_index += 1
        airsim.write_file(os.path.normpath(
            os.path.join(self.image_dir, filename + '.png')),
                          bstr=png_image)
        print("Saved snapshot: {}".format(filename))
        # cause smooth ramp up to happen again after photo is taken
        self.start_time = time.time()
Exemple #3
0
def _take_pictures_loop(client):
    print("[ff] Press [space] to take pictures (or any other key to stop)")
    record = ""
    img_count = 0
    while True:
        if msvcrt.kbhit():
            if msvcrt.getch() != b" ":
                break  # https://stackoverflow.com/a/13207813

            response, *_ = client.simGetImages(
                [airsim.ImageRequest(ff.CameraName.front_center, airsim.ImageType.Scene)]
            )

            img_count += 1
            print(f"     {img_count} pictures taken", end="\r")

            timestamp, position, orientation = get_record_line_from(response)
            tx, ty, tz = position
            qx, qy, qz, qw = orientation
            record += "\n" + " ".join([str(_) for _ in [timestamp, tx, ty, tz, qx, qy, qz, qw]])

            airsim.write_file(
                os.path.join(args.output_folder, f"out_{timestamp}.png"),
                response.image_data_uint8,
            )

    print("***\n" + record + "\n***")
    print()
Exemple #4
0
def checkSafe(drone,yawVal,droneNetwork):
    
    imagequeue = []
    tmp_dir = r"C:\Users\Ernest\Pictures\DronePic"

    drone.moveByAngleZAsync(0,0,-1,yaw=yawVal,duration=1)
    time.sleep(4)
    responses = drone.simGetImages([airsim.ImageRequest(0,airsim.ImageType.Scene)])
    imagequeue.append(responses[0].image_data_uint8)

    filename = os.path.join(tmp_dir, "current")
    airsim.write_file(os.path.normpath(filename + '.png'),imagequeue[0])

    img_addr = r"C:\Users\Ernest\Pictures\DronePic\current.png"

    img = image.load_img(img_addr, target_size = (80,80))
    img_test = image.img_to_array(img)
    img_test = np.expand_dims(img_test, axis=0)
    img_test = preprocess_input(img_test)

    result = droneNetwork.predict(img_test)

    if result == [[1.]]:
        return True
    else:
        return False

    """yah = input(" :").lower()
Exemple #5
0
def captureImages(dataPath, ctr, filename):
    # Check if the file already exists or not
    # If it exists then skip the retrieval of responses from the simulator
    # NOTE: Should only be used only when dataset collection has to be resumed

    # flag = 0 means that the files are not present/missing, hence data has to be recorded
    flag = 0
    for i in range(0, len(dataPath)):
        filepath = dataPath[i] + '/' + filename
        if (os.path.isfile(os.path.normpath(filepath + '.png')) or os.path.isfile(os.path.normpath(filepath + '.pfm'))):
            flag = 1
            print("File exists")
            break
        else:
            flag = 0

    if (flag == 0):
        # Retrive responses from AirSim client
        responses = client.simGetImages([
            airsim.ImageRequest("front_left", airsim.ImageType.Scene),
            airsim.ImageRequest("front_right", airsim.ImageType.Scene),
            airsim.ImageRequest("front_left", airsim.ImageType.DepthPlanner, True),
            airsim.ImageRequest("front_right", airsim.ImageType.DepthPlanner, True)])

        for i, response in enumerate(responses):
            if response.pixels_as_float:
                depth_raw = airsim.get_pfm_array(response)
                save_depth_float_as_uchar16(os.path.normpath(dataPath[i] + '/' + filename + '.png'), depth_raw)
            else:
                airsim.write_file(os.path.normpath(dataPath[i] + '/' + filename + '.png'), response.image_data_uint8)
 def do_screenshot(self, is_display=False):
     """ get camera images from the car
     Returns:
         image_paths (list): filepaths of the screenshots
     """
     responses = self.client.simGetImages([
         airsim.ImageRequest("front_center", airsim.ImageType.Scene),
         airsim.ImageRequest("bottom_center", airsim.ImageType.Scene),
     ])
     log.debug('Retrieved images: %d' % len(responses))
     filename_prefix = self.image_folder + "{}-".format(self.image_id)
     self.image_id += 1
     image_paths = []
     for idx, response in enumerate(responses):
         filename = filename_prefix + str(idx)
         if response.compress:  #png format
             log.debug('image type {}, size {}'.format(
                 response.image_type, len(response.image_data_uint8)))
             filename = os.path.normpath(filename + '.png')
             airsim.write_file(filename, response.image_data_uint8)
         else:
             log.error('error: image format not support')
         image_paths.append(filename)
     if is_display:
         self.display(image_paths)
     return image_paths
Exemple #7
0
def save_image(client, tmp_dir, count, id):
    vehicle_name = "Drone" + str(id)
    responses = client.simGetImages ([airsim.ImageRequest ("1", airsim.ImageType.Scene, False, False)], \
                                      vehicle_name=vehicle_name)
    filename = os.path.join(tmp_dir, str(count))

    for idx, response in enumerate(responses):
        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 format
            print("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 array
            print("Type %d, size %d" %
                  (response.image_type, len(response.image_data_uint8)))
            img1d = np.fromstring(response.image_data_uint8,
                                  dtype=np.uint8)  # get numpy array
            img_rgb = img1d.reshape(
                response.height, response.width,
                3)  # reshape array to 4 channel image array H X W X 3
            cv2.imwrite(os.path.normpath(filename + '.jpg'),
                        img_rgb)  # write to png
    save_imu_pose(client, filename, id)
Exemple #8
0
def log_responses(responses, idx):

    for response_idx, response in enumerate(responses):
        filename = os.path.join(
            tmp_dir, "{}_{}_{}".format(idx, response.image_type, response_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 format
            print("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 array
            print("Type %d, size %d" %
                  (response.image_type, len(response.image_data_uint8)))
            img1d = np.fromstring(response.image_data_uint8,
                                  dtype=np.uint8)  # get numpy array
            img_rgb = img1d.reshape(
                response.height, response.width,
                3)  # reshape array to 3 channel image array H X W X 3
            cv2.imwrite(os.path.normpath(filename + '.png'),
                        img_rgb)  # write to png
 def genImg(self, im_num, vehicle_name):
     responses = self.getImg(vehicle_name)
     # pprint.pprint(responses[0].camera_position)
     # pprint.pprint(responses[0].camera_orientation)
     filename_img = self.cam_folder + ("%.6d.png" % im_num)
     filename_ts = self.pose_folder + ("cam_ts%.6d.txt" % im_num)
     for idx, response in enumerate(responses):
         if self.compress_img:  #png format
             airsim.write_file(os.path.normpath(filename_img),
                               response.image_data_uint8)
         else:  #uncompressed array
             img1d = np.fromstring(response.image_data_uint8,
                                   dtype=np.uint8)
             img_rgb = img1d.reshape(response.height, response.width, 3)
             cv2.imwrite(os.path.normpath(filename_img), img_rgb)
         output = open(os.path.normpath(filename_ts), 'wb')
         pickle.dump(response.time_stamp, output)
         output.close()
     camera_info = self.client.simGetCameraInfo("0",
                                                vehicle_name=vehicle_name)
     filename_cam_pose = self.pose_folder + vehicle_name + (
         "campose%.6d.txt" % im_num)
     op1 = open(os.path.normpath(filename_cam_pose), 'wb')
     pickle.dump(camera_info, op1)
     op1.close()
     return camera_info
def saveImage(response, filename):
    if response.pixels_as_float:
        print(
            f"""Type {response.image_type}, size {len(response.image_data_float)}, "
                  height {response.height}, width {response.width}""")
        # airsim.write_pfm(os.path.normpath(filename + '.pfm'), airsim.get_pfm_array(response))
        depth = np.array(response.image_data_float, dtype=np.float64)
        depth = depth.reshape(response.height, response.width, -1)
        depth = np.array(depth * 255, dtype=np.uint8)
        # save pic
        cv2.imwrite('{}.png'.format(filename), depth)
    elif response.compress:  #png format
        print("Type %d, size %d, height %d, width %d" %
              (response.image_type, len(
                  response.image_data_uint8), response.height, response.width))
        airsim.write_file(os.path.normpath(filename + '.png'),
                          response.image_data_uint8)
    else:  #uncompressed array
        print(
            f"""Type {response.image_type}, size {len(response.image_data_uint8)}, "
                  height {response.height}, width {response.width}""")
        img1d = np.fromstring(response.image_data_uint8,
                              dtype=np.uint8)  # get numpy array
        img_rgb = img1d.reshape(
            response.height, response.width,
            3)  # reshape array to 3 channel image array H X W X 3
        cv2.imwrite(os.path.normpath(filename + '.png'),
                    img_rgb)  # write to png
    def grab_images(self,idx2):
        responses = self.client.simGetImages([
            airsim.ImageRequest("0", airsim.ImageType.DepthVis),  #depth visualization image
            airsim.ImageRequest("1", airsim.ImageType.DisparityNormalized, True), #depth in perspective projection
            #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 array
        
        print('Retrieved images: %d', len(responses))

        for response in responses:
            filename = self.fold+'py' + str(idx2)
            if not os.path.exists(self.fold):
                os.makedirs(self.fold)

            if response.pixels_as_float:
                print("Type %d, size %d" % (response.image_type, len(response.image_data_float)))
                depth_img=response
                dimg_array=np.array(response.image_data_float).reshape(144,256)
                dimg2=copy.deepcopy(((dimg_array/(dimg_array.max()))*255).astype(np.uint8))
                dimg= Image.fromarray(dimg2)
                if dimg.mode != 'RGB':
                    dimg = dimg.convert('RGB')
                
                print("Saving Depth Image!")
                dimg.save(os.path.normpath(filename+'_depth.png'))
                dimg = dimg.convert('I')

                rawImage = self.client.simGetImage(0, airsim.ImageType.DepthPerspective,"")
                #png= np.array(rawImage[0].image_data_float,dtype=np.uint8).reshape(144,256)
                png = cv2.imdecode(np.frombuffer(rawImage, np.uint8) , cv2.IMREAD_UNCHANGED)
                gray = cv2.cvtColor(png, cv2.COLOR_BGR2GRAY)
                Image3D = cv2.reprojectImageTo3D(np.array(gray), self.projectionMatrix)
                print("Saving Point Cloud!")
                self.savePointCloud(np.array(Image3D), filename+'_cloudpoint.asc')

                #airsim.write_file(os.path.normpath(file_name+'_depth.png'),)
            elif response.compress: #png format
                print("Type %d, size %d" % (response.image_type, len(response.image_data_uint8)))
                #print(type(response.image_data_uint8))
                print("Saving RGB Image!")
                airsim.write_file(os.path.normpath(filename + '.png'), response.image_data_uint8)
                img_data=Image.open(io.BytesIO(response.image_data_uint8))
                if img_data.mode != 'RGB':
                    img_data = img_data.convert('RGB')
                #img_data.show()

            else: #uncompressed array
                pass
                # print("Type %d, size %d" % (response.image_type, len(response.image_data_uint8)))
                # img1d = np.fromstring(response.image_data_uint8, dtype=np.uint8) #get numpy array
                # img_rgba = img1d.reshape(response.height, response.width, 4) #reshape array to 4 channel image array H X W X 4
                # img_rgba = np.flipud(img_rgba) #original image is flipped vertically
                # img_rgba[:,:,1:2] = 100 #just for fun add little bit of green in all pixels
                # airsim.write_png(os.path.normpath(filename + '.greener.png'), img_rgba) #write to png 

        self.img_data=img_data
        self.dimg=dimg
Exemple #12
0
def fly(client: airsim.MultirotorClient, args: argparse.Namespace) -> None:
    if args.verbose:
        print(
            f"[ff] HomeGeoPoint: {Vec3.from_GeoPoint(client.getHomeGeoPoint())}\n"
        )
        print(
            f"[ff] VehiclePose.position: {Vec3.from_Vector3r(client.simGetVehiclePose().position)}\n"
        )

    initial_state = client.getMultirotorState()
    if initial_state.landed_state == airsim.LandedState.Landed:
        print(f"[ff] Taking off")
        client.takeoffAsync(timeout_sec=8).join()
    else:
        client.hoverAsync().join()  # airsim.LandedState.Flying

    #__move_on_path(client, args.flight_path, args.flight_velocity)
    #__move_on_box(client, z=-20, side=20, velocity=args.flight_velocity)
    if not args.use_viewpoints:
        future = client.moveOnPathAsync([
            airsim.Vector3r(coord.x, coord.y, coord.z)
            for coord in args.flight_path
        ], args.flight_velocity)
    else:
        import viewpoints
        future = client.moveOnPathAsync(
            [airsim.Vector3r(*position) for position in viewpoints.Positions],
            args.flight_velocity)

    print(f"[ff] Press [space] to take pictures")
    ch, img_count, img_responses = msvcrt.getch(), 0, []
    while ch == b' ':
        img_responses.extend(
            client.simGetImages([
                airsim.ImageRequest(
                    ff.CameraName.bottom_center,
                    airsim.ImageType.Scene,
                    False,
                    True  # compressed PNG image
                )
            ]))
        img_count += 1
        print(f"     {img_count} pictures taken", end="\r")
        ch = msvcrt.getch()
    print()

    print(f"[ff] Waiting for drone to finish path...", end=" ", flush=True)
    future.join()
    print(f"done.")

    for i, response in enumerate(img_responses):
        airsim.write_file(os.path.join(args.output_folder, f"out_{i}.png"),
                          response.image_data_uint8)

    time.sleep(4)
    print(f"[ff] Drone reset")
    client.reset()
Exemple #13
0
def save_image(client, camera_list, iter):
    for camera in camera_list:
        if not os.path.exists('c:/temp/{}'.format(camera)):
            os.makedirs('c:/temp/{}'.format(camera))
    #client.simGetImagesでやるとよいかも
    for camera in camera_list:
        filename = 'c:/temp/{}/{}'.format(camera, str(iter))
        png_image = client.simGetImage(camera, airsim.ImageType.Scene)
        airsim.write_file(os.path.normpath(filename + ".png"), png_image)
Exemple #14
0
 def take_snapshot(self):
     # first hold our current position so drone doesn't try and keep flying while we take the picture.
     pos = self.client.getMultirotorState().kinematics_estimated.position
     self.client.moveToPositionAsync(pos.x_val, pos.y_val, self.z, 0.5, 10, airsim.DrivetrainType.MaxDegreeOfFreedom, 
         airsim.YawMode(False, self.camera_heading)).join()
     responses = self.client.simGetImages([airsim.ImageRequest(1, airsim.ImageType.Scene)]) #scene vision image in png format
     response = responses[0]
     filename = "photo_" + str(self.snapshot_index)
     self.snapshot_index += 1
     airsim.write_file(os.path.normpath(filename + '.png'), response.image_data_uint8)        
     print("Saved snapshot: {}".format(filename))
     self.start_time = time.time()  # cause smooth ramp up to happen again after photo is taken.
Exemple #15
0
def fly(client: airsim.MultirotorClient, args: argparse.Namespace) -> None:
    initial_pose = client.simGetVehiclePose()
    initial_state = client.getMultirotorState()

    if args.verbose:
        ff.print_pose(initial_pose,
                      to_eularian_angles=airsim.to_eularian_angles)

    if initial_state.landed_state == airsim.LandedState.Landed:
        print("[ff] Taking off")
        client.takeoffAsync(timeout_sec=8).join()
    else:
        client.hoverAsync().join()  # airsim.LandedState.Flying

    print("[ff] Flying viewpoints...")
    print("[ff] Press [space] to take pictures (or any other key to stop)"
          )  # TODO
    future = _move_by_path(client, args)

    img_count = 0
    while True:
        if msvcrt.kbhit():
            if msvcrt.getch() != b" ":
                break  # https://stackoverflow.com/a/13207813

            response, *_ = client.simGetImages([
                airsim.ImageRequest(
                    ff.CameraName.front_center,
                    airsim.ImageType.Scene,
                    False,
                    True,  # compressed PNG image
                )
            ])
            img_count += 1
            print(f"     {img_count} pictures taken", end="\r")
            airsim.write_file(
                os.path.join(args.output_folder, f"out_{img_count}.png"),
                response.image_data_uint8,
            )
            # TODO save poses to .log file
            print("camera_position:", response.camera_position)  # Vector3r
            print("camera_orientation:",
                  response.camera_orientation)  # Quaternionr
    print()

    print(f"[ff] Waiting for drone to finish path...", end=" ", flush=True)
    future.join()
    print("done")

    time.sleep(4)
    client.reset()
    print("[ff] Drone reset")
Exemple #16
0
 def generate_image(self, v_identifier):
     """
     Generate Image
     """
     responses = self.client.simGetImages([
         airsim.ImageRequest(
             "front_center",
             airsim.ImageType.Scene)  # scene vision image in png format
     ])
     image_filename = os.path.normpath(
         os.path.join(self.data_dir, str(v_identifier)) + '.png')
     airsim.write_file(image_filename, responses[0].image_data_uint8)
     # log_file("Image saved", str(image_filename))
     return image_filename
Exemple #17
0
def save_images(responses, prefix=""):
    for i, response in enumerate(responses):
        filename = os.path.join(tmp_dir, prefix + "_" + str(i))
        if response.pixels_as_float:
            print(
                f"Type {response.image_type}, size {len(response.image_data_float)}, pos {response.camera_position}"
            )
            airsim.write_pfm(os.path.normpath(filename + '.pfm'),
                             airsim.get_pfm_array(response))
        else:
            print(
                f"Type {response.image_type}, size {len(response.image_data_uint8)}, pos {response.camera_position}"
            )
            airsim.write_file(os.path.normpath(filename + '.png'),
                              response.image_data_uint8)
 def take_snapshot(self):
     # first hold our current position so drone doesn't try and keep flying while we take the picture.
     pos = self.client.getMultirotorState(self.name).kinematics_estimated.position
     self.client.moveToPositionAsync(pos.x_val, pos.y_val, self.z, 
                                     velocity=0.5, timeout_sec=10, 
                                     drivetrain=airsim.DrivetrainType.MaxDegreeOfFreedom, 
                                     yaw_mode=airsim.YawMode(False, self.camera_heading), 
                                     vehicle_name=self.name).join()
     responses = self.client.simGetImages([airsim.ImageRequest(1, airsim.ImageType.Scene)], 
                                          self.name) #scene vision image in png format
     response = responses[0]
     filename = f"photo_{self.snapshot_index}_{self.name}"
     self.snapshot_index += 1
     airsim.write_file(os.path.normpath(filename + '.png'), response.image_data_uint8)        
     print("Saved snapshot: {}".format(filename))
     self.start_time = time.time() # cause smooth ramp up to happen again after photo is taken.
Exemple #19
0
def getDroneImages(client):
    # 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 array
    print('Retrieved images: %d' % len(responses))

    tmp_dir = os.path.join(tempfile.gettempdir(), "airsim_drone")
    print("Saving images to %s" % tmp_dir)
    try:
        os.makedirs(tmp_dir)
    except OSError:
        if not os.path.isdir(tmp_dir):
            raise

    for idx, response in enumerate(responses):

        filename = os.path.join(tmp_dir, str(str(idx) + random_generator(4)))

        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 format
            print("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 array
            print("Type %d, size %d" %
                  (response.image_type, len(response.image_data_uint8)))
            img1d = np.fromstring(response.image_data_uint8,
                                  dtype=np.uint8)  # get numpy array
            img_rgb = img1d.reshape(
                response.height, response.width,
                3)  # reshape array to 4 channel image array H X W X 3
            cv2.imwrite(os.path.normpath(filename + '.png'),
                        img_rgb)  # write to png
 def _observe_at_view(self, view, img_path):
     """Fly to given position and take a photo at given orientation."""
     position = view["position"]
     position = (Vector3r(position[0], position[1], position[2])
                 if type(position) == list else position)
     print("Observe (%f, %f, %f) with yaw %f and pitch %f" % (
         position.x_val,
         position.y_val,
         position.z_val,
         view["yaw"] / math.pi * 180,
         view["pitch"] / math.pi * 180,
     ))
     self._move_to(position, yaw=view["yaw"] / math.pi * 180)
     # self._uav.hoverAsync().join()
     # time.sleep(5)
     self._uav.simSetCameraOrientation(
         "0", airsim.to_quaternion(view["pitch"], 0.0, 0.0))
     png = self._uav.simGetImage("0", airsim.ImageType.Scene)
     ReconstructionNavigator.mkdir(os.path.dirname(img_path))
     airsim.write_file(img_path, png)
def take_picture(drone_name, is_save=True):
    responses = client.simGetImages([
        airsim.ImageRequest("front_center", airsim.ImageType.Scene),
        # airsim.ImageRequest("bottom_center", airsim.ImageType.Scene),
    ], vehicle_name=drone_name)
    if is_save:
        drone_image_folder = '{}\\{}'.format(image_folder, drone_name)
        if not os.path.isdir(drone_image_folder):
            os.makedirs(drone_image_folder)
        for idx, response in enumerate(responses):
            if response.compress: #png format
                print('image type {}, size {}'.format(
                    response.image_type, len(response.image_data_uint8)))
                filename = '{}\\{}-{}.png'.format(
                    drone_image_folder, image_id[drone_name], idx)
                image_id[drone_name] += 1
                airsim.write_file(filename, response.image_data_uint8)
                print('save image: {}'.format(filename))
            else:
                print('error: image format not support')
    return responses
Exemple #22
0
def saveImage(response, filename):
    if response.pixels_as_float:
        # airsim.write_pfm(os.path.normpath(filename + '.pfm'), airsim.get_pfm_array(response))
        depth = np.array(response.image_data_float, dtype=np.float64)
        depth = depth.reshape((response.height, response.width, -1))
        depth = np.array(depth * 255, dtype=np.uint8)
        # save pic
        cv2.imwrite(os.path.normpath(filename + '.png'), depth)

    elif response.compress:  #png format
        airsim.write_file(os.path.normpath(filename + '.png'),
                          response.image_data_uint8)

    else:  #uncompressed array
        img1d = np.fromstring(response.image_data_uint8,
                              dtype=np.uint8)  # get numpy array
        img_rgb = img1d.reshape(
            response.height, response.width,
            3)  # reshape array to 3 channel image array H X W X 3
        cv2.imwrite(os.path.normpath(filename + '.png'),
                    img_rgb)  # write to png
Exemple #23
0
def query_sensors(client, unique_path_str):
    folder_name = 'sensors'
    if not (os.path.isdir(folder_name)):
        os.makedirs(folder_name);

    # Query three cameras
    images = client.airsim_client.simGetImages([
        airsim.ImageRequest("Front", airsim.ImageType.Scene),
        airsim.ImageRequest("Follow", airsim.ImageType.Scene),
        airsim.ImageRequest("Wheel", airsim.ImageType.Scene)])

    # Query both accelerometers
    sensor_values = client.airsim_client.readSensors()

    # Get the current bot state
    bot_state = client.airsim_client.getUrdfBotState()

    airsim.write_file(os.path.join(folder_name, '{0}_front.png'.format(unique_path_str)), images[0].image_data_uint8)
    airsim.write_file(os.path.join(folder_name, '{0}_follow.png'.format(unique_path_str)), images[1].image_data_uint8)
    airsim.write_file(os.path.join(folder_name, '{0}_wheel.png'.format(unique_path_str)), images[2].image_data_uint8)

    with open(os.path.join(folder_name, '{0}_state.json'.format(unique_path_str),), 'w') as f:
        f.write(jsonpickle.encode(bot_state))

    for sensor_name in [n for n in sensor_values['readings']]:
        data_file = os.path.join(folder_name, '{0}_data.csv'.format(sensor_name))
        data_dict = sensor_values['readings'][sensor_name]
        keys = sorted([k for k in data_dict])
        if not (os.path.isfile(data_file)):
            with open(data_file, 'w') as f:
                f.write('{0}\n'.format(','.join(keys)))

        with open(data_file, 'a') as f:
            f.write('{0}\n'.format(','.join([str(data_dict[k]) for k in keys])))
def take_photo(airsim_client,
               pose_client,
               current_state,
               file_manager,
               viewpoint=""):
    """
    Description: 
        Calls simulator to take picture and return GT values simultaneously.
        Writes picture file.

    Inputs: 
        airsim_client: an object of type VehicleClient or DroneFlightClient
        pose_client: an object of type PoseEstimationClient
        current_state: an object of type State
        file_manager: object of type FileManager
        viewpoint: int. (default: ""), the viewpoint from which the drone is looking at the person
    Returns:
        photo: photo taken at simulation step
    """
    if not airsim_client.is_using_airsim:
        viewpoint = airsim_client.chosen_cam_view

    photo = airsim_retrieve_gt(airsim_client, pose_client, current_state,
                               file_manager)
    if airsim_client.is_using_airsim:
        loc = file_manager.update_photo_loc(linecount=airsim_client.linecount,
                                            viewpoint=viewpoint)
        airsim.write_file(os.path.normpath(loc), photo)
        if airsim_client.linecount > 3 and pose_client.quiet:
            loc_rem = file_manager.take_photo_loc + '/img_' + str(
                airsim_client.linecount - 2) + '.png'
            if os.path.isfile(loc_rem):
                os.remove(loc_rem)
    else:
        file_manager.update_photo_loc(
            linecount=airsim_client.get_photo_index(), viewpoint=viewpoint)
    return photo
Exemple #25
0
imagequeue = []

while True:

    # get RGBA camera images from the car
    responses = client.simGetImages(
        [airsim.ImageRequest(1, airsim.ImageType.Scene)])

    # add image to queue
    imagequeue.append(responses[0].image_data_uint8)

    # dump queue when it gets full
    if len(imagequeue) == QUEUESIZE:
        for i in range(QUEUESIZE):
            airsim.write_file(
                os.path.normpath(IMAGEDIR + '/image%03d.png' % i),
                imagequeue[i])
        imagequeue.pop(0)

    collision_info = client.simGetCollisionInfo()

    if collision_info.has_collided:
        print(
            "Collision at pos %s, normal %s, impact pt %s, penetration %f, name %s, obj id %d"
            % (pprint.pformat(collision_info.position),
               pprint.pformat(collision_info.normal),
               pprint.pformat(collision_info.impact_point),
               collision_info.penetration_depth, collision_info.object_name,
               collision_info.object_id))
        break
Exemple #26
0
    print("CameraInfo %d: %s" % (camera_name, pp.pprint(camera_info)))

airsim.wait_key('Press any key to get images')
for x in range(3): # do few times
    z = x * -20 - 5 # some random number
    client.simSetVehiclePose(airsim.Pose(airsim.Vector3r(z, z, z), airsim.to_quaternion(x / 3.0, 0, x / 3.0)), True)

    responses = client.simGetImages([
        airsim.ImageRequest("0", airsim.ImageType.DepthVis),
        airsim.ImageRequest("1", airsim.ImageType.DepthPerspective, True),
        airsim.ImageRequest("2", airsim.ImageType.Segmentation),
        airsim.ImageRequest("3", airsim.ImageType.Scene),
        airsim.ImageRequest("4", airsim.ImageType.DisparityNormalized),
        airsim.ImageRequest("4", airsim.ImageType.SurfaceNormals)])

    for i, response in enumerate(responses):
        if response.pixels_as_float:
            print("Type %d, size %d, pos %s" % (response.image_type, len(response.image_data_float), pprint.pformat(response.camera_position)))
            airsim.write_pfm(os.path.normpath('/temp/cv_mode_' + str(x) + "_" + str(i) + '.pfm'), airsim.get_pfm_array(response))
        else:
            print("Type %d, size %d, pos %s" % (response.image_type, len(response.image_data_uint8), pprint.pformat(response.camera_position)))
            airsim.write_file(os.path.normpath('/temp/cv_mode_' + str(x) + "_" + str(i) + '.png'), response.image_data_uint8)

    pose = client.simGetVehiclePose()
    pp.pprint(pose)

    time.sleep(3)

# currently reset() doesn't work in CV mode. Below is the workaround
client.simSetVehiclePose(airsim.Pose(airsim.Vector3r(0, 0, 0), airsim.to_quaternion(0, 0, 0)), True)
for pitch in range(-5, 5, 5):
    for yaw in range(-10, 10, 2):
        q = airsim.to_quaternion(pitch/10.0, 0, yaw/10.0)
        client.simCharSetHeadRotation(q)
        time.sleep(0.1)

airsim.wait_key('Press any key to get images')
for x in range(3): # do few times
    responses = client.simGetImages([
        airsim.ImageRequest("0", airsim.ImageType.DepthVis),
        airsim.ImageRequest("0", airsim.ImageType.Segmentation),
        airsim.ImageRequest("0", airsim.ImageType.Scene),
        airsim.ImageRequest("0", airsim.ImageType.SurfaceNormals)])

    for i, response in enumerate(responses):
        if response.pixels_as_float:
            print("Type %d, size %d, pos %s" % (response.image_type, len(response.image_data_float), pprint.pformat(response.camera_position)))
            airsim.write_pfm(os.path.normpath('/temp/cv_mode_' + str(x) + "_" + str(i) + '.pfm'), airsim.get_pfm_array(response))
        else:
            print("Type %d, size %d, pos %s" % (response.image_type, len(response.image_data_uint8), pprint.pformat(response.camera_position)))
            airsim.write_file(os.path.normpath('/temp/cv_mode_' + str(x) + "_" + str(i) + '.png'), response.image_data_uint8)

    pose = client.simGetVehiclePose()
    pose.position.x_val = pose.position.x_val + 1
    pose.position.y_val = pose.position.y_val - 0.5
    pose.position.z_val = pose.position.z_val - 0.5
    client.simSetVehiclePose(pose, True)

    time.sleep(3)

client.reset()
Exemple #28
0
        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 array
    print('Retrieved images: %d', len(responses))

    for response in responses:
        filename = 'c:/temp/py' + str(idx)
        if not os.path.exists('c:/temp/'):
            os.makedirs('c:/temp/')
        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 format
            print("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 array
            print("Type %d, size %d" % (response.image_type, len(response.image_data_uint8)))
            img1d = np.fromstring(response.image_data_uint8, dtype=np.uint8) #get numpy array
            img_rgba = img1d.reshape(response.height, response.width, 4) #reshape array to 4 channel image array H X W X 4
            img_rgba = np.flipud(img_rgba) #original image is flipped vertically
            img_rgba[:,:,1:2] = 100 #just for fun add little bit of green in all pixels
            airsim.write_png(os.path.normpath(filename + '.greener.png'), img_rgba) #write to png 


#restore to original state
client.reset()

client.enableApiControl(False)

Exemple #29
0
def get_camtrap_images(env_num, animal_class, num_animals):
    output_folder = r"C:\Users\t-sabeer\Documents\AirSimImages\\"

    pp = pprint.PrettyPrinter(indent=4)

    client = connect_to_airsim()

    object_lookup = set_segmentation_ids(client, animal_class, num_animals)

    time.sleep(5)  #env needs time to generate
    camera_position_list = [(-45, -45, 0, -.1, 0.8), (-45, 0, 0, -.1, -.7),
                            (0, -45, 0, -.1, 2.0), (0, 0, 0, -.1, -2.3)]
    for cam_num, cam_pos in enumerate(camera_position_list):
        client.simSetVehiclePose(
            airsim.Pose(airsim.Vector3r(cam_pos[0], cam_pos[1], cam_pos[2]),
                        airsim.to_quaternion(cam_pos[3], 0, cam_pos[4])), True)
        #client.simSetCameraOrientation("0", airsim.to_quaternion(-0.161799, 0, 0)); #radians
        #pose = client.simGetVehiclePose()
        #pp.pprint(pose)
        #print('Pose ' + str(cam_num))
        #print(pose)
        time.sleep(1)  #new camera position needs time to update
        for x in range(3):  # create sequence of 3

            responses = client.simGetImages([
                airsim.ImageRequest("0", airsim.ImageType.Scene),
                airsim.ImageRequest("0", airsim.ImageType.Segmentation, False,
                                    False)
            ])

            for i, response in enumerate(responses):
                if response.pixels_as_float:
                    #print("Type %d, size %d, pos %s" % (response.image_type, len(response.image_data_float), pprint.pformat(response.camera_position)))
                    airsim.write_pfm(
                        os.path.normpath(output_folder + str(env_num) +
                                         '_cam_' + str(cam_num) + '_frame_' +
                                         str(x) + "_" + str(i) + '.pfm'),
                        airsim.get_pfm_array(response))
                if response.compress:
                    #print("Type %d, size %d, pos %s" % (response.image_type, len(response.image_data_uint8), pprint.pformat(response.camera_position)))
                    airsim.write_file(
                        os.path.normpath(output_folder + str(env_num) +
                                         '_cam_' + str(cam_num) + '_frame_' +
                                         str(x) + "_" + str(i) + '.jpg'),
                        response.image_data_uint8)
                else:
                    img = np.fromstring(response.image_data_uint8,
                                        dtype=np.uint8)  #get numpy array
                    img_rgba = img.reshape(response.height, response.width, 4)
                    img_rgba = np.flipud(
                        img_rgba)  #original image is flipped vertically
                    airsim.write_png(
                        os.path.normpath(output_folder + str(env_num) +
                                         '_cam_' + str(cam_num) + '_frame_' +
                                         str(x) + "_" + str(i) + '.png'),
                        img_rgba)  #write to png

            time.sleep(1)  #1fps frame rate
        #pose = client.simGetVehiclePose()
        #pp.pprint(pose)

    return
	def image_handle(self, collision_info):
		#Saves images stored in im_list from flight and logs times in nanoseconds
		#Depth image handling: https://github.com/microsoft/AirSim/issues/921
		gap_time = math.floor(self.gap / self.speed) #Determine time needed from collision to give danger reading
		del_ind = math.floor(gap_time / self.time_step) + self.num_frames #Number of frames to delete (add num_frames because need full set of frames when giving result
		del self.cam_im_list[-del_ind:]
		del self.state_list[-del_ind:]
		if len(self.cam_im_list) >= 2*self.num_frames: #Check if enough frames to generate safe and danger images


			#Define range of indexes to sample from for safe images
			min_ind = 0
			max_ind = len(self.cam_im_list) - 2*self.num_frames + 1
			start_ind = self.generate_index(min_ind, max_ind) #Generate start index for 5 safe images

			#Store collision time
			collision_time = collision_info.time_stamp 

			#Store relevant safe images and data associated
			for idx, im in enumerate(self.cam_im_list[start_ind:start_ind + self.num_frames]):

				#Generate time to collision for current frame
				time_to_collision = collision_time - im[0].time_stamp 

				#Save rgb image to file 
				airsim.write_file(os.path.normpath(os.path.join(self.fold_path, 'flight' + "_" + "rgb" + "_" +"safe"  + '_' +  str(self.flight_num)  + '_' + str(idx) + '.png')), im[0].image_data_uint8)

				#Generate depth image
				depth = im[1]
				depth_im = self.generate_depth_image(depth)
				
				#Save depth image
				cv2.imwrite(os.path.normpath(os.path.join(self.fold_path, 'flight' +  "_" + "depth" + "_" +"safe"  + '_' +  str(self.flight_num)  + '_' + str(idx)+  '.png')), depth_im)

				#find index of state being used, relative to initial list so can get state info
				state_ind = start_ind + idx 

				#Store state information and save to csv
				linear_velocity = self.state_list[state_ind].kinematics_estimated.linear_velocity
				angular_velocity = self.state_list[state_ind].kinematics_estimated.angular_velocity
				x_lin_vel, y_lin_vel, z_lin_vel, x_ang_vel, y_ang_vel, z_ang_vel = linear_velocity.x_val, linear_velocity.y_val, linear_velocity.z_val, angular_velocity.x_val, angular_velocity.y_val, angular_velocity.z_val
				row = [str(self.flight_num), 'safe', str(idx),str(x_lin_vel),str(y_lin_vel), str(z_lin_vel), str(x_ang_vel), str(y_ang_vel), str(z_ang_vel), str(np.sqrt(x_lin_vel**2 + y_lin_vel**2 + z_lin_vel**2)), str(self.speed), str(time_to_collision), str(start_ind), str(len(self.cam_im_list))]
				with open(self.csv_path, 'a') as csvFile:
					writer = csv.writer(csvFile)
					writer.writerow(row)

			#Store relevant danger images and data associated
			for idx, im in enumerate(self.cam_im_list[len(self.cam_im_list) - self.num_frames:]):

				#Generate time to collision for current frame
				time_to_collision = collision_time - im[0].time_stamp #time stamp the same for im[0] and im[1]

				#Save rgb image to file
				airsim.write_file(os.path.normpath(os.path.join(self.fold_path,'flight' +  "_"  + "rgb" + "_" +  "danger" + '_' + str(self.flight_num)  + '_' + str(idx) + '.png')), im[0].image_data_uint8)
				
				#Generate depth image
				depth = im[1]
				depth_im = self.generate_depth_image(depth)

				#Save depth image
				cv2.imwrite(os.path.normpath(os.path.join(self.fold_path,'flight' "_"  + "depth" + "_" +"danger"  + '_' +  str(self.flight_num)  + '_' + str(idx) +  '.png')), depth_im)

				#find index of state being used, relative to initial list so can get state info
				state_ind = len(self.state_list) - self.num_frames + idx #Want state corresponding to 

				#Store state information
				linear_velocity = self.state_list[state_ind].kinematics_estimated.linear_velocity
				angular_velocity = self.state_list[state_ind].kinematics_estimated.angular_velocity
				x_lin_vel, y_lin_vel, z_lin_vel, x_ang_vel, y_ang_vel, z_ang_vel = linear_velocity.x_val, linear_velocity.y_val, linear_velocity.z_val, angular_velocity.x_val, angular_velocity.y_val, angular_velocity.z_val
				row = [str(self.flight_num), 'danger', str(idx),str(x_lin_vel),str(y_lin_vel), str(z_lin_vel), str(x_ang_vel), str(y_ang_vel), str(z_ang_vel), str(np.sqrt(x_lin_vel**2 + y_lin_vel**2 + z_lin_vel**2)), str(self.speed), str(time_to_collision), str(start_ind), str(len(self.cam_im_list))]
				with open(self.csv_path, 'a') as csvFile:
					writer = csv.writer(csvFile)
					writer.writerow(row)

			self.flight_num += 1 #Increase fligh number for saving images
        imgL_0 = cv2.imdecode(
            airsim.string_to_uint8_array(rLeft[0].image_data_uint8),
            cv2.IMREAD_UNCHANGED)
        imgR_0 = cv2.imdecode(
            airsim.string_to_uint8_array(rRight[0].image_data_uint8),
            cv2.IMREAD_UNCHANGED)
        img = np.concatenate((imgL_0, imgR_0), axis=1)
        cv2.imshow('***', img)
        key = cv2.waitKey(1)
        if key == ord('s'):
            loc = [[p.x_val, p.y_val, p.z_val],
                   [o.w_val, o.x_val, o.y_val, o.z_val]]
            trajactory.append(loc)

            fname = str(id).zfill(5)
            airsim.write_file((saveDir + fname + '_L.png'),
                              rLeft[0].image_data_uint8)
            airsim.write_file((saveDir + fname + '_R.png'),
                              rRight[0].image_data_uint8)

            airsim.write_pfm(((saveDir + fname + '_D.pfm')),
                             airsim.get_pfm_array(rLeft[1]))
            airsim.write_file((saveDir + fname + '_M.png'),
                              rLeft[2].image_data_uint8)
            id = id + 1

        # cv2.imshow('***', img), cv2.waitKey(), cv2.destroyAllWindows()
        ...
    with open(saveDir + 'path.json', 'w') as write_file:
        json.dump(trajactory, write_file)
    cv2.destroyAllWindows()
Exemple #32
0
import os

# connect to the AirSim simulator
client = airsim.MultirotorClient()
client.confirmConnection()
client.enableApiControl(True)
client.armDisarm(True)

# Async methods returns Future. Call join() to wait for task to complete.
client.takeoffAsync().join()
client.moveToPositionAsync(-10, 10, -10, 5).join()

# take images
responses = client.simGetImages([
    airsim.ImageRequest("0", airsim.ImageType.DepthVis),
    airsim.ImageRequest("1", airsim.ImageType.DepthPlanar, True)
])
print('Retrieved images: %d', len(responses))

# do something with the images
for response in responses:
    if response.pixels_as_float:
        print("Type %d, size %d" %
              (response.image_type, len(response.image_data_float)))
        airsim.write_pfm(os.path.normpath('/temp/py1.pfm'),
                         airsim.getPfmArray(response))
    else:
        print("Type %d, size %d" %
              (response.image_type, len(response.image_data_uint8)))
        airsim.write_file(os.path.normpath('/temp/py1.png'),
                          response.image_data_uint8)
Exemple #33
0
    os.makedirs(tmp_dir)
except OSError:
    if not os.path.isdir(tmp_dir):
        raise

for 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 format
        print("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 array
        print("Type %d, size %d" %
              (response.image_type, len(response.image_data_uint8)))
        img1d = np.fromstring(response.image_data_uint8,
                              dtype=np.uint8)  # get numpy array
        img_rgb = img1d.reshape(
            response.height, response.width,
            3)  # reshape array to 4 channel image array H X W X 3
        cv2.imwrite(os.path.normpath(filename + '.png'),
                    img_rgb)  # write to png

airsim.wait_key('Press any key to reset to original state')
client.armDisarm(False)
client.reset()
client.enableApiControl(False)
Exemple #34
0
        os.makedirs(os.path.join(tmp_dir, str(n)))
except OSError:
    if not os.path.isdir(tmp_dir):
        raise

for x in range(50): # do few times
    #xn = 1 + x*5  # some random number
    client.simSetVehiclePose(airsim.Pose(airsim.Vector3r(x, 0, -2), airsim.to_quaternion(0, 0, 0)), True)
    time.sleep(0.1)

    responses = client.simGetImages([
        airsim.ImageRequest("0", airsim.ImageType.Scene),
        airsim.ImageRequest("1", airsim.ImageType.Scene),
        airsim.ImageRequest("2", airsim.ImageType.Scene)])

    for i, response in enumerate(responses):
        if response.pixels_as_float:
            print("Type %d, size %d, pos %s" % (response.image_type, len(response.image_data_float), pprint.pformat(response.camera_position)))
            airsim.write_pfm(os.path.normpath(os.path.join(tmp_dir, str(x) + "_" + str(i) + '.pfm')), airsim.get_pfm_array(response))
        else:
            print("Type %d, size %d, pos %s" % (response.image_type, len(response.image_data_uint8), pprint.pformat(response.camera_position)))
            airsim.write_file(os.path.normpath(os.path.join(tmp_dir, str(i), str(x) + "_" + str(i) + '.png')), response.image_data_uint8)

    pose = client.simGetVehiclePose()
    pp.pprint(pose)

    time.sleep(3)

# currently reset() doesn't work in CV mode. Below is the workaround
client.simSetVehiclePose(airsim.Pose(airsim.Vector3r(0, 0, 0), airsim.to_quaternion(0, 0, 0)), True)