Source code for morse.sensors.kinect

import logging; logger = logging.getLogger("morse." + __name__)
from morse.core import blenderapi
from morse.core.sensor import Sensor
from morse.helpers.components import add_data

[docs]class Kinect(Sensor): """ This sensor emulates the kinect output, ie both a depth image and an rgba image. """ _name = "Kinect" add_data('depth', 'none', 'memoryview', "See doc:`depth camera documentation <../sensors/depth_camera>` \ for field **image**") add_data('video', 'none', 'buffer', "See :doc:`video camera documentation <../sensors/video_camera>` \ for field **image**") def __init__(self, obj, parent=None): """ Constructor method. Receives the reference to the Blender object. The second parameter should be the name of the object's parent. """ logger.info('%s initialization' % obj.name) # Call the constructor of the parent class Sensor.__init__(self, obj, parent) self.video_camera_name = self.name() + '.rgb' self.depth_camera_name = self.name() + '.depth' # or [child.name for child in obj.children \ # if child.name.startswith(self.name()+'.rgb')].pop() self.video_camera = None self.depth_camera = None logger.info('Component initialized, runs at %.2f Hz', self.frequency)
[docs] def get_cameras_instance(self): if self.video_camera and self.depth_camera: return # Get the reference to the class instance of the depth and video cameras component_dict = blenderapi.persistantstorage().componentDict if self.video_camera_name in component_dict: self.video_camera = component_dict[self.video_camera_name] if self.depth_camera_name in component_dict: self.depth_camera = component_dict[self.depth_camera_name]
@property
[docs] def capturing(self): """ Returns a boolean which indicates if the sensor actually captures some data """ return self.depth_camera and self.depth_camera.capturing and \ self.video_camera and self.video_camera.capturing
[docs] def default_action(self): """ Get Depth and Video cameras data """ #pass # does nothing for now self.get_cameras_instance() self.local_data['depth'] = self.depth_camera.local_data['points'] self.local_data['video'] = self.video_camera.local_data['image']