Patent ID: 12242935

Like reference symbols in the various drawings indicate like elements

DETAILED DESCRIPTION

In the following description of automatic invasive device orientation and position prediction technique embodiments, reference is made to the accompanying drawings, which form a part thereof, and show by way of illustration examples by which the automatic invasive device orientation and position prediction technique embodiments described herein may be practiced. It is to be understood that other embodiments may be utilized and structural changes may be made without departing from the scope of the claimed subject matter.

1.0 Automatic Invasive Device Orientation and Position Prediction

The following sections provide an introduction to the automatic invasive device orientation and position prediction technique embodiments described herein, as well as exemplary implementations of processes and an architecture for practicing these embodiments. Details of various embodiments and components are also provided.

As a preliminary matter, some of the figures that follow describe concepts in the context of one or more structural components, variously referred to as functionality, modules, features, elements, etc. The various components shown in the figures can be implemented in any manner. In one case, the illustrated separation of various components in the figures into distinct units may reflect the use of corresponding distinct components in an actual implementation. Alternatively, or in addition, any single component illustrated in the figures may be implemented by plural actual components. Alternatively, or in addition, the depiction of any two or more separate components in the figures may reflect different functions performed by a single actual component.

Other figures describe the concepts in flowchart form. In this form, certain operations are described as constituting distinct blocks performed in a certain order. Such implementations are illustrative and non-limiting. Certain blocks described herein can be grouped together and performed in a single operation, certain blocks can be broken apart into plural component blocks, and certain blocks can be performed in an order that differs from that which is illustrated herein (including a parallel manner of performing the blocks). The blocks shown in the flowcharts can be implemented in any manner.

1.1 Introduction

In general, automatic invasive device position and orientation prediction techniques described herein are capable of inferring a device's 3D orientation (roll, pitch, yaw) and 3D position (forward/back aka anterior/posterior, up/down aka cranial/caudal, left/right) from one or more 2D images of said devices. This can be accomplished, for example, via machine learning algorithms that learn, from 2D data, to correctly predict 3D information for a device, such as a device's position and orientation from a fixed or predefined origin and canonical orientation. Operation with machine learning algorithms can include, for example, (1) a training stage in which a machine learns to identify device positioning and orientation from annotated images of devices, and (2) an inference stage in which the now-trained machine infers a device's position and/or orientation from images that do not include the true position or orientation of the device (no annotations available). While the description below entails learning both a device's position and orientation, it applies equally well to learning to predict only a device's position or orientation as well.

Automatic invasive device position and orientation prediction techniques are described below with regard toFIGS.1and5.FIG.1is an example system100for providing enhanced imaging of an example medical instrument.FIG.5is a flowchart of an example technique500for performing automatic invasive device position and orientation predictions, for instance, using the example system100or other systems.

Referring toFIG.1, the example system100can be trained to predict absolute or relative invasive object position and/or orientation. An example patient1is situated on an example operating table2. An example invasive implement3, such as filters, stents, drains, snares4, and/or other devices are inserted into the patient1. For instance, an IVC filter3and a snare4are depicted inFIG.1. Other configuration and/or device/instrument/implement combinations are also possible. For example, system100can be used to determine the position and/or orientation of any surgical or invasive device(s).

An example imaging device5is positioned such that the invasive device(s)3can be imaged. For instance, the device5can be a fluoroscope that is used for imaging the device3and snare4. The device5can be any imaging device, such as ultrasound, CT, MRI, and/or optical imaging device. The imaging device5sends and/or creates images (e.g., 2D imaging data) that are sent to a computer7, as indicated by step A. For example, the imaging device5can transmit fluoroscopy data via a wired and/or wireless communications channel between the imaging device5and the computer7. The computer7can be any of a variety of appropriate computing devices, such as a desktop computer, tablet computing device, embedded computing device, and/or mobile computing device that is capable of receiving the 2D imaging data as it is delivered from the imaging device5. The computer7can access position and orientation models from a data repository10that are specific to the invasive devices3,4, and specific to the imaging device5, as indicated by step B. Such models can have been trained by the computer7and/or other computer(s) prior to the imaging data being received, and can be continually updated/refined over time. The 2D imaging data can be applied to the model to determine position and orientation of the implement3and/or the device4, as indicated by step C. The images can be annotated with position and/or orientation information to provide a 3D visualization of the implement3and/or the device4on a monitor8to an operator performing the operation, as indicated by step D.

For example, an operator can interact with the computer7to (a) initialize the tracking of the position and orientation of a single device3from its origin, or (b) initialize the tracking of the position and orientation between two devices3,4. Following initialization, as the imaging device5produces new images, the position and orientation requested by the operator are overlaid on top of the images produced and displayed on the monitor8.

FIG.2is a screenshot200of an example output of an imaging system (radiograph) overlaid with the output of an automatic orientation and translation prediction system, such as the system100. For example, the screenshot200can be determined by the computer7and output on the monitor8. In the depicted example, the screenshot200includes a target device202and a source device204that are identified in an example 2D image206. A position and orientation model for the device used to produce the image206and for the target/source devices202,204, is retrieved and applied to the image206by the computer7to generate example orientation and position information208. In the depicted example, the example information208includes visual guides to indicate 3D orientation and position of the devices202,204, such as visual left/right information210, visual cranial/caudal information212, and visual anterior/posterior information214. Other visual 3D position information can additionally and/or alternatively be output as well, such as roll, pitch, and yaw information. Although the orientation and position information208is overlaid on the side of the 2D image206in this example, it can be incorporated and/or displayed with the image206in other ways, such as being used to generate real time 3D graphics depicting the devices202,204within the patient's body.

1.2 Training

Given one or more images of an invasive device, where each image is annotated with the device's position and/or orientation, a machine learning algorithm can be trained to predict the position and orientation of the device that matches the annotation. For example, a supervised deep learning algorithm can be used to generate a model of the position and orientation of the device based on 2D images. Each image can be obtained from existing medical imaging techniques (e.g. x-rays, ultrasound, CT, MRI) and/or from computer generated imagery of such devices. In the former case, human annotators may provide per-image annotations of each device's position and orientation, whereas in the latter case, such annotations may be generated automatically (Section 1.2.1). In both cases, the labels do not annotate the pixels themselves, but rather exist as metadata to each image describing the relative positions and/or orientations of the devices in the image. Such annotations (e.g., labels) can be provided as inputs along with the images themselves to one or more machine learning algorithms that can use the inputs (e.g., images, annotations) to generate an imaging model that can be used to correctly predict 3D information for a device, such as a device's position and orientation from a fixed or predefined origin and canonical orientation.

For example, the example computer7can train one or more machine learning algorithms using annotated data (e.g., images, annotations) that is specific to the imaging device5and the invasive devices3,4. Sections 1.2.1-1.2.4 describe example techniques for obtaining annotated/labeled training data, as indicated by step502inFIG.5. For example, images can be annotated with 3D orientation information (e.g., (roll, pitch, yaw) and position information (e.g., forward/back aka anterior/posterior, up/down aka cranial/caudal, left/right), which can be generated on real imaging data (e.g., images generated from a medical device being used on a patient) and/or from simulations (e.g., computer generated imagery to mimic real images). Real images can additionally and/or alternatively be annotated manually by qualified practitioners interpreting the images (see Sec. 1.2.3). Images generated from simulations can, by virtue of having been generated from a simulation, automatically provide orientation and/or position information for the images (see Sec. 1.2.2). In some implementations, invasive devices may already be equipped with components that provide some orientation and/or position information that could be incorporated into model training and for position/orientation determinations. For example, drains have included markers that help the operator know where side holes (where fluid enters the drain are) and the side holes are already present in a certain orientation on current devices. The position and orientation of such markers can be incorporated with and used as part of the techniques described in this document to determine device orientation and/or position on devices that are equipped to provide some orientation/position information, like the described drain in the preceding sentence,

1.2.1 Annotation of Images with Position and Orientation Information

To train a machine learning system to identify the position and orientation of one or more medical devices, a dataset can first be created that represents examples of said devices and their correct positions and orientations. Examples of such annotations include:The position and orientation of a single device relative to a fixed origin. For example, in a sequence of images, the position and orientation of a device in any frame can be defined relative to the position and orientation of the device or fixed element in the first frame.The position and orientation between two or more devices. For example, the distance (position) and relative orientations can be determined between an IVC filter and snare. An additional example relates to orientation of a guidewire with a previously placed stent.
1.2.2 Automatic Data Creation

To generate large amounts of labeled training data, computer generated imagery can be synthetically created to mimic real images. For example, CG modeling software can be utilized to create a 3D model of the invasive device and rendered using various photometric effects (blurring, synthetic occlusion) to mimic real medical images. This approach can enable the automatic creation of large numbers of images that are automatically labeled by the software that creates them. For example, a computer program can execute the rendering of a CG model of a single IVC filter at various positions and orientations. Because the computer program chooses (possibly randomly) the position and orientation at which to render the IVC filter, the position and orientation can therefore be automatically paired with the created image.

1.2.3 Manual Data Annotation

When manually creating a dataset of images, a medical practitioner or medical system can provide medical imagery with or without identifying marks or data. Such images can be labeled by one or more humans with the device's position and orientation.

1.2.4 Alteration of the Medical Device to Aid Inference

In certain cases, the invasive devices themselves may be altered to ease the task of such automatic inference. For example, invasive medical devices can be altered by:coating existing devices with radiation absorbing material, which can readily be detected and differentiated from other surfaces and/or objects that are not coated (FIG.3), anddesigning devices with additional non-medical application other than aiding the ability to automatically orient and position the device (FIG.4).

Additional, alternative, and/or other alterations of medical devices are also possible. Such medical device alterations can be used in combination with the machine learning described throughout this document to aid the machine in learning to predict device positions and orientations.

1.2.5 Example Machine Learning Model Architecture

Various machine learning architectures can be used and trained to predict relative position and orientations from imagery data, such as Deep Learning, Random Forests, AdaBoost and Support Vector Machines.FIG.6is a block diagram of an example machine learning architecture600that can be used and trained to predict relative position and orientations from imagery data. The example machine learning architecture600can be implemented on any of a variety of appropriate computing devices and systems, such as the computer7described above with regard toFIG.1. The example architecture600can be used to perform one or more portions of the technique500, such as training a model based on labeled training data (step502) and/or applying a model to unlabeled image data (step510) and determining the position and orientation of the device (step512).

The example machine learning system600receives data characterizing an image input1000, such as pixel data from an image of arbitrary size (e.g., 2D imaging data from the imaging device5). The image is then fed through an example convolutional layer1001, an example pooling layer1002, an example set of residual layers1003-1006, and another example pooling layer1007that can pool the resulting features into outputs, such as the position1008and orientation1009of a medical device (e.g., the device4) captured in the imaging data. The machine learning system600can generate the position1008and orientation1009outputs so as to augment/enhance the imaging data, such as providing predictive position for the device along a third dimension (instead just two dimensions represented in the imaging data) and/or orientation of the device relative to one or more reference points, planes, or axes.

In instances where the architecture600is being trained to generate a predictive model, the position/orientation annotations for the input image data1000that are provided as training data are compared to the predictions for position1008and orientation1009. The model's weights are then updated accordingly, using an optimization algorithm, such as Gradient Descent and/or the Adam Optimizer. When the architecture600has been trained and is being used with unannotated image data, the position1008and orientation1009that are output by the trained model provided by the architecture600can be used to supplement the image data in real time, for example, with on-screen annotations, overlaid graphics/annotations, and/or other graphical features.

Each of one or more convolutional layers1001can represent, for example, the convolution of a K×K set of N filters. These filters can be applied at each input location at a specified stride. For example, a stride of 1 indicates that each input is convolved with each K×K filter at that layer, whereas a stride of 2 indicates that every other input is convolved.

For example, the first convolutional Layer1001can include 64 7×7 filters and a stride of 2. The subsequent max pooling layer1002can use a 3×3 kernel of stride 2. The subsequent 4 residual layers (1003,1004,1005,1006) can each use a subnetwork that takes the output from the previous stage as its input, performs a series of mathematical operations to that input, and produces a new transformed output. The output from the final subnetwork1006can be passed to an average pooling layer1007that produces a single vector of dimension2048, for example. This vector is the model's transformed representation of the imaging data from which the position and orientation are predicted. The position1008and the orientation1009can be in any of a variety of formats. For example, the position (or offset)1008can be a vector of length3representing the distance between two objects in the input or the distance between one object and a fixed reference point. In another example, the orientation1009can be a vector of length3representing the roll, pitch and yaw between two devices or between the device and a fixed reference point. Other formats for the position1008and the orientation1009are also possible. The position1008and the orientation1009can be output in an interface presented in real time to a physician manipulating the device that is being imaged, like the example interface that is depicted inFIG.2.

FIG.7is a block diagram of an example subnetwork700, such as the subnetworks A, B, C and D (1003-1006) described above with regard toFIG.6. For example, each of the subnetworks A-D (1003-1006) can be implemented using an architecture that is the same as or similar to the subnetwork700. Some or all of the subnetworks A-D (1003-1006) can be implemented using other architectures.

The example subnetwork700can be defined using three parameters: the number of feature map outputs D, the number of feature maps in the bottleneck layers B, and the stride S used to compute the convolutions. The subnetwork700takes an input vector1010, and performs a series of operations along multiple pathways. In a first example pathway (1011), a single 1×1 convolution1011with D filters is performed with stride S. In the second example pathway (1012-1014), a 1×1 convolution1012with B filters and stride 1 is performed, followed by a 3×3 convolution1013with D filters and stride S, followed by a 1×1 convolution1014with D filters and stride 1. The resulting vectors from each of the multiple pathways can be summed1015and passed through a nonlinear function, such as a rectified linear unit, to generate output1016. The resulting output1016can be, for example, a vector of dimension D which represents the output of the subnetwork700.

1.3 Inferring Position and Orientation Using a Trained Model

Inferring a device's position and orientation using a trained model (as described above) can be done in any of a variety of ways, such as through inferring the position and orientation of a device from a single image, inferring the position and orientation of a device from a single image given one or more reference images, and/or inferring the position and orientation of a device from a sequence of images. For example, a position and orientation model for the device can be trained on annotated/labeled data (e.g., single image, single image in light of reference images, sequence of images), as indicated by step504inFIG.5and described above. Such a model can then be used to infer position and orientation information from raw/unannotated image data. For example, image data (e.g., single image, single image and reference image, sequence of images) can be received (step506), the trained model can be accessed (step508), the model can be applied to the image data (step510) to interpret the images and predict the position and orientation of an invasive device (step512), and the predicted orientation and position information can be output (step514). Examples of training a model to infer position and orientation information using different image data are described below in sections 1.3.1-1.3.3.

1.3.1 Inferring the Position and Orientation of a Device from a Single Image

To predict the position and orientation of a device from a single image, a dataset can be assembled containing a series of images, real or synthetic (CG), each of which can be annotated with the device's position and orientation. A machine learning algorithm, for example, a supervised deep learning algorithm, can then be trained to predict the position and orientation of the device in the image. The predicted orientation for roll, pitch and yaw can be in radian space, in which case a cosine distance loss function can be used. Alternatively, the roll, pitch and yaw may be discretized and a sigmoid-cross entropy can be used for training.

1.3.2 Inferring the Position and Orientation of a Device from a Single Image and a Reference Image

To predict the position and orientation of a device from an image and a reference image, a dataset can be assembled containing pairs of images. Each pair can include a source image and a target image. The source image can be considered the reference image from which the position and orientation is measured. For example, the source image can be a device in a canonical or origin location/orientation. The target image can be of the same device, but translated and/or rotated. Each pair of images can be annotated with the translation and rotation of the device between the source and target images. A machine learning algorithm, for example, a supervised deep learning algorithm, can be trained to predict the position and orientation of the device in the image. The predicted orientation for roll, pitch and yaw can be in radian space, in which case a cosine distance loss function is used. Alternatively, the roll pitch and yaw can be discretized and a sigmoid-cross entropy used for training.

1.3.3 Inferring the Position and Orientation of a Device from a Sequence of Images

To predict the position and orientation of a device from a sequence of images, a dataset can be assembled with image sequences. Each sequence (of one or more images) can be annotated with position and orientation labels. A machine learning algorithm, for example, a long short-term memory (LSTM) model, can be trained to predict the position and orientation of the device in the image. The predicted orientation for roll, pitch and yaw can be in radian space, in which case a cosine distance loss function is used. Alternatively, the roll pitch and yaw can be discretized and a sigmoid-cross entropy used for training.

1.4 Utilization of the Automatic Position and Orientation Prediction Between Multiple Devices

An operator can use the aforementioned devices and prediction mechanism as follows. An invasive device(s) can be inserted into the patient and the imaging mechanism (e.g., x-ray, ultrasound, CT, MRI) is oriented towards the patient to produce initial imaging of the patient's internals and the invasive device. A computer can receive the output of the imaging mechanism (e.g., the raw 2D images themselves), as indicated by step506. The computer can access a model trained on the imaging mechanism and the invasive device(s), as indicated by step508. The model can be applied to the imaging data, as indicated by step510, to interpret the images and predict the position and orientation of the invasive device(s) using the trained machine learning algorithm, as indicated by step512. The predicted position and orientation can be used to augment the 2D imaging data (e.g., overlaid, provided adjacent to the 2D image), as indicated by step514, and can be displayed to the practitioner, as indicated by step516. For example, displaying this information can be done on a separate monitor or by overlaying the predictions on top of the raw images themselves.

FIG.9depicts example object inserted into the body such as a needle, wire, catheter, stent or probe, can be localized relative to a user-specified landmark (e.g. a lesion, specific part of a body, foreign body or second medical device (green dot) via any imaging modality such as fluoroscopy, ultrasound or MRI. Note that this does not require any specialized equipment nor materials used for the inserted objects and/or positioning of medically invasive devices, but instead provides additional information to assist in guiding the device through image analysis techniques described throughout this document.

FIG.8is a block diagram of computing devices800,850that may be used to implement the systems and methods described in this document, as either a client or as a server or plurality of servers. Computing device800is intended to represent various forms of digital computers, such as laptops, desktops, workstations, personal digital assistants, servers, blade servers, mainframes, and other appropriate computers. Computing device850is intended to represent various forms of mobile devices, such as personal digital assistants, cellular telephones, smartphones, and other similar computing devices. Additionally computing device800or850can include Universal Serial Bus (USB) flash drives. The USB flash drives may store operating systems and other applications. The USB flash drives can include input/output components, such as a wireless transmitter or USB connector that may be inserted into a USB port of another computing device. The components shown here, their connections and relationships, and their functions, are meant to be exemplary only, and are not meant to limit implementations described and/or claimed in this document.

Computing device800includes a processor802, memory804, a storage device806, a high-speed interface808connecting to memory804and high-speed expansion ports810, and a low speed interface812connecting to low speed bus814and storage device806. Each of the components802,804,806,808,810, and812, are interconnected using various busses, and may be mounted on a common motherboard or in other manners as appropriate. The processor802can process instructions for execution within the computing device800, including instructions stored in the memory804or on the storage device806to display graphical information for a GUI on an external input/output device, such as display816coupled to high speed interface808. In other implementations, multiple processors and/or multiple buses may be used, as appropriate, along with multiple memories and types of memory. Also, multiple computing devices800may be connected, with each device providing portions of the necessary operations (e.g., as a server bank, a group of blade servers, or a multi-processor system).

The memory804stores information within the computing device800. In one implementation, the memory804is a volatile memory unit or units. In another implementation, the memory804is a non-volatile memory unit or units. The memory804may also be another form of computer-readable medium, such as a magnetic or optical disk.

The storage device806is capable of providing mass storage for the computing device800. In one implementation, the storage device806may be or contain a computer-readable medium, such as a floppy disk device, a hard disk device, an optical disk device, or a tape device, a flash memory or other similar solid state memory device, or an array of devices, including devices in a storage area network or other configurations. A computer program product can be tangibly embodied in an information carrier. The computer program product may also contain instructions that, when executed, perform one or more methods, such as those described above. The information carrier is a computer- or machine-readable medium, such as the memory804, the storage device806, or memory on processor802.

The high speed controller808manages bandwidth-intensive operations for the computing device800, while the low speed controller812manages lower bandwidth-intensive operations. Such allocation of functions is exemplary only. In one implementation, the high-speed controller808is coupled to memory804, display816(e.g., through a graphics processor or accelerator), and to high-speed expansion ports810, which may accept various expansion cards (not shown). In the implementation, low-speed controller812is coupled to storage device806and low-speed expansion port814. The low-speed expansion port, which may include various communication ports (e.g., USB, Bluetooth, Ethernet, wireless Ethernet) may be coupled to one or more input/output devices, such as a keyboard, a pointing device, a scanner, or a networking device such as a switch or router, e.g., through a network adapter.

The computing device800may be implemented in a number of different forms, as shown in the figure. For example, it may be implemented as a standard server820, or multiple times in a group of such servers. It may also be implemented as part of a rack server system824. In addition, it may be implemented in a personal computer such as a laptop computer822. Alternatively, components from computing device800may be combined with other components in a mobile device (not shown), such as device850. Each of such devices may contain one or more of computing device800,850, and an entire system may be made up of multiple computing devices800,850communicating with each other.

Computing device850includes a processor852, memory864, an input/output device such as a display854, a communication interface866, and a transceiver868, among other components. The device850may also be provided with a storage device, such as a microdrive or other device, to provide additional storage. Each of the components850,852,864,854,866, and868, are interconnected using various buses, and several of the components may be mounted on a common motherboard or in other manners as appropriate.

The processor852can execute instructions within the computing device850, including instructions stored in the memory864. The processor may be implemented as a chipset of chips that include separate and multiple analog and digital processors. Additionally, the processor may be implemented using any of a number of architectures. For example, the processor810may be a CISC (Complex Instruction Set Computers) processor, a RISC (Reduced Instruction Set Computer) processor, or a MISC (Minimal Instruction Set Computer) processor. The processor may provide, for example, for coordination of the other components of the device850, such as control of user interfaces, applications run by device850, and wireless communication by device850.

Processor852may communicate with a user through control interface858and display interface856coupled to a display854. The display854may be, for example, a TFT (Thin-Film-Transistor Liquid Crystal Display) display or an OLED (Organic Light Emitting Diode) display, or other appropriate display technology. The display interface856may comprise appropriate circuitry for driving the display854to present graphical and other information to a user. The control interface858may receive commands from a user and convert them for submission to the processor852. In addition, an external interface862may be used to provide in communication with processor852, so as to enable near area communication of device850with other devices. External interface862may provide, for example, for wired communication in some implementations, or for wireless communication in other implementations, and multiple interfaces may also be used.

The memory864stores information within the computing device850. The memory864can be implemented as one or more of a computer-readable medium or media, a volatile memory unit or units, or a non-volatile memory unit or units. Expansion memory874may also be provided and connected to device850through expansion interface872, which may include, for example, a SIMM (Single In Line Memory Module) card interface. Such expansion memory874may provide extra storage space for device850, or may also store applications or other information for device850. Specifically, expansion memory874may include instructions to carry out or supplement the processes described above, and may include secure information also. Thus, for example, expansion memory874may be used to provide as a security module for device850, and may be programmed with instructions that permit secure use of device850. In addition, secure applications may be provided via the SIMM cards, along with additional information, such as placing identifying information on the SIMM card in a non-packable manner.

The memory may include, for example, flash memory and/or NVRAM memory, as discussed below. In one implementation, a computer program product is tangibly embodied in an information carrier. The computer program product contains instructions that, when executed, perform one or more methods, such as those described above. The information carrier is a computer- or machine-readable medium, such as the memory864, expansion memory874, or memory on processor852that may be received, for example, over transceiver868or external interface862.

Device850may communicate wirelessly through communication interface866, which may include digital signal processing circuitry where necessary. Communication interface866may provide for communications under various modes or protocols, such as GSM voice calls, SMS, EMS, or MMS messaging, COMA, TDMA, PDC, WCDMA, CDMA2000, or GPRS, among others. Such communication may occur, for example, through radio-frequency transceiver868. In addition, short-range communication may occur, such as using a Bluetooth, WiFi, or other such transceiver (not shown), In addition, GPS (Global Positioning System) receiver module870may provide additional navigation- and location-related wireless data to device850, which may be used as appropriate by applications running on device850.

Device850may also communicate audibly using audio codec860, which may receive spoken information from a user and convert it to usable digital information. Audio codec860may likewise generate audible sound for a user, such as through a speaker, e.g., in a handset of device850. Such sound may include sound from voice telephone calls, may include recorded sound (e.g., voice messages, music files, etc.) and may also include sound generated by applications operating on device850.

The computing device850may be implemented in a number of different forms, as shown in the figure. For example, it may be implemented as a cellular telephone880. It may also be implemented as part of a smartphone882, personal digital assistant, or other similar mobile device.

Various implementations of the systems and techniques described here can be realized in digital electronic circuitry, integrated circuitry, specially designed ASICs (application specific integrated circuits), computer hardware, firmware, software, and/or combinations thereof. These various implementations can include implementation in one or more computer programs that are executable and/or interpretable on a programmable system including at least one programmable processor, which may be special or general purpose, coupled to receive data and instructions from, and to transmit data and instructions to, a storage system, at least one input device, and at least one output device.

These computer programs (also known as programs, software, software applications or code) include machine instructions for a programmable processor, and can be implemented in a high-level procedural and/or object-oriented programming language, and/or in assembly/machine language. As used herein, the terms “machine-readable medium” and “computer-readable medium” refers to any computer program product, apparatus and/or device (e.g., magnetic discs, optical disks, memory, Programmable Logic Devices (PLDs)) used to provide machine instructions and/or data to a programmable processor, including a machine-readable medium that receives machine instructions as a machine-readable signal. The term “machine-readable signal” refers to any signal used to provide machine instructions and/or data to a programmable processor.

To provide for interaction with a user, the systems and techniques described here can be implemented on a computer having a display device (e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor) for displaying information to the user and a keyboard and a pointing device (e.g., a mouse or a trackball) by which the user can provide input to the computer. Other kinds of devices can be used to provide for interaction with a user as well; for example, feedback provided to the user can be any form of sensory feedback (e.g., visual feedback, auditory feedback, or tactile feedback); and input from the user can be received in any form, including acoustic, speech, or tactile input.

The systems and techniques described here can be implemented in a computing system that includes a back end component (e.g., as a data server), or that includes a middleware component (e.g., an application server), or that includes a front end component (e.g., a client computer having a graphical user interface or a Web browser through which a user can interact with an implementation of the systems and techniques described here), or any combination of such back end, middleware, or front end components. The components of the system can be interconnected by any form or medium of digital data communication (e.g., a communication network). Examples of communication networks include a local area network (“LAN”), a wide area network (“WAN”), peer-to-peer networks (having ad-hoc or static members), grid computing infrastructures, and the Internet.

The computing system can include clients and servers. A client and server are generally remote from each other and typically interact through a communication network. The relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other.

Although a few implementations have been described in detail above, other modifications are possible. Moreover, other mechanisms for performing the systems and methods described in this document may be used. In addition, the logic flows depicted in the figures do not require the particular order shown, or sequential order, to achieve desirable results. Other steps may be provided, or steps may be eliminated, from the described flows, and other components may be added to, or removed from, the described systems. Accordingly, other implementations are within the scope of the following claims.