def load_apim_audio(packet: RedvoxPacketM) -> Optional[PyarrowSummary]: """ load audio data from a single redvox packet :param packet: packet with data to load :return: audio sensor type, name, data and sample rate """ if srupa.__has_sensor(packet, srupa.__AUDIO_FIELD_NAME): audio_sensor: RedvoxPacketM.Sensors.Audio = packet.sensors.audio return PyarrowSummary( audio_sensor.sensor_description, srupa.SensorType.AUDIO, np.nan, audio_sensor.sample_rate, "", int(audio_sensor.samples.value_statistics.count), 1./audio_sensor.sample_rate, 0., pa.Table.from_pydict({"microphone": np.array(audio_sensor.samples.values)}) ) return None
def load_apim_compressed_audio(packet: RedvoxPacketM) -> Optional[PyarrowSummary]: """ load compressed audio data from a single redvox packet :param packet: packet with data to load :return: compressed audio sensor data if it exists, None otherwise """ if srupa.__has_sensor(packet, srupa.__COMPRESSED_AUDIO_FIELD_NAME): comp_audio: RedvoxPacketM.Sensors.CompressedAudio = ( packet.sensors.compressed_audio ) return PyarrowSummary( comp_audio.sensor_description, srupa.SensorType.COMPRESSED_AUDIO, np.nan, comp_audio.sample_rate, "", np.nan, 1./comp_audio.sample_rate, 0., srupa.apim_compressed_audio_to_pyarrow(comp_audio) ) return None
def load_apim_image(packet: RedvoxPacketM) -> Optional[PyarrowSummary]: """ load image data from a single redvox packet :param packet: packet with data to load :return: image sensor data if it exists, None otherwise """ if srupa.__has_sensor(packet, srupa.__IMAGE_FIELD_NAME): image_sensor: RedvoxPacketM.Sensors.Image = packet.sensors.image timestamps = image_sensor.timestamps.timestamps if len(timestamps) > 1: sample_rate = 1. else: sample_rate = 1 / srupa.__packet_duration_s(packet) return PyarrowSummary( image_sensor.sensor_description, srupa.SensorType.IMAGE, np.nan, sample_rate, "", len(timestamps), 1./sample_rate, 0., srupa.apim_image_to_pyarrow(image_sensor) ) return None
def load_apim_location(packet: RedvoxPacketM) -> Optional[PyarrowSummary]: """ load location data from a single packet :param packet: packet with data to load :return: location sensor data if it exists, None otherwise """ if srupa.__has_sensor(packet, srupa.__LOCATION_FIELD_NAME): loc: RedvoxPacketM.Sensors.Location = packet.sensors.location timestamps = loc.timestamps.timestamps if len(timestamps) > 0: if len(timestamps) > 1: m_intv = dtu.microseconds_to_seconds(float(np.mean(np.diff(timestamps)))) intv_std = dtu.microseconds_to_seconds(float(np.std(np.diff(timestamps)))) else: m_intv = srupa.__packet_duration_s(packet) intv_std = 0. return PyarrowSummary( loc.sensor_description, srupa.SensorType.LOCATION, np.nan, np.nan, "", len(timestamps), m_intv, intv_std, srupa.apim_location_to_pyarrow(loc) ) return None
def load_xyz( packet: RedvoxPacketM, sensor_type: srupa.SensorType, ) -> Optional[PyarrowSummary]: field_name: str = srupa.__SENSOR_TYPE_TO_FIELD_NAME[sensor_type] sensor_fn: Optional[ Callable[[RedvoxPacketM], srupa.Sensor] ] = srupa.__SENSOR_TYPE_TO_SENSOR_FN[sensor_type] if srupa.__has_sensor(packet, field_name) and sensor_fn is not None: sensor = sensor_fn(packet) t = sensor.timestamps.timestamps if len(t) > 1: m_intv = dtu.microseconds_to_seconds(float(np.mean(np.diff(t)))) intv_std = dtu.microseconds_to_seconds(float(np.std(np.diff(t)))) else: m_intv = srupa.__packet_duration_s(packet) intv_std = 0. if len(t) > 0: return PyarrowSummary( sensor.sensor_description, sensor_type, np.nan, np.nan, "", len(t), m_intv, intv_std, srupa.read_apim_xyz_sensor(sensor, field_name) ) return None
def load_apim_best_location(packet: RedvoxPacketM) -> Optional[PyarrowSummary]: """ load best location data from a single redvox packet :param packet: packet with data to load :return: best location sensor data if it exists, None otherwise """ if srupa.__has_sensor(packet, srupa.__LOCATION_FIELD_NAME): loc: RedvoxPacketM.Sensors.Location = packet.sensors.location if loc.HasField("last_best_location") or loc.HasField("overall_best_location"): best_loc: RedvoxPacketM.Sensors.Location.BestLocation if loc.HasField("last_best_location"): best_loc = loc.last_best_location else: best_loc = loc.overall_best_location packet_len_s = srupa.__packet_duration_s(packet) return PyarrowSummary( loc.sensor_description, srupa.SensorType.BEST_LOCATION, np.nan, 1./packet_len_s, "", 1, packet_len_s, 0., srupa.apim_best_location_to_pyarrow(best_loc, packet.timing_information.packet_start_mach_timestamp), ) return None