Apparatus and methods of automated tracking and counting of objects on a resource-constrained device

The present disclosure provides apparatus and methods for automated tracking and counting of objects in a set of image frames using a resource-constrained device based on analysis of a selected subset of image frames, and based on selectively timing when resource-intensive operations are performed.

BACKGROUND

The present disclosure relates to automated systems for tracking and counting objects.

Various automated systems exist for tracking and/or counting objects. For example, currently there are machine learning approaches for detecting people in an area, but they are extremely expensive computationally. Specifically, machine learning is powerful, but high quality classification with few false positives/negatives requires significant processing resources. There are also computer vision approaches, such as simple blob tracking, but they lack accuracy. There are more complex computer vision approaches, however, these approaches demand large amounts of computational resources.

Thus, there is a need in the art for improvements in tracking and counting objects.

SUMMARY

The disclosure provides a computer device for automated object tracking and counting, including a memory comprising instructions, and a processor in communication with the memory and configured to execute the instructions. The processor is configured to: obtain a set of image frames captured over time; detect one or more objects in the set of image frames; track positioning of the detected one or more objects in each of the set of image frames; determine whether a current timing condition meets one or more classification timing rules; select a subset of image frames from the set of image frames based on a selection parameter of each of the subset of image frames meeting a selection criteria, in response to the current timing condition meeting the one or more classification timing rules; classify as a respective object type each of the detected one or more objects; count a number of the classified object types in the subset of image frames; and output the number of the classified object types as a current count of the classified object type.

In some examples, the selection parameter includes a distance of a position of each of the subset of image frames to a target position, and wherein the selection criteria comprises a number of image frames having a lowest distance.

In some examples, the selection parameter includes an amount that each of the subset of image frames covers a target image frame, and wherein the selection criteria comprises a number of image frames having a highest amount of coverage.

In some examples, the selection parameter includes a direction of movement of each of the subset of image frames, and wherein the selection criteria comprises a defined direction of movement.

In some examples, the one or more classification timing rules allow for adjustability in balancing classification quality and processing speed. For instance, the one or more classification timing rules include enabling the processor to perform one or more of the selecting, the classifying, or the counting in one or more of the following situations: only when the detecting or the tracking is not operating; when a number of subsets or a memory size of the number of the subsets of object image frames are pending processing; or when at least one of the subset of object image frames is pending processing and a time since a last one of the selecting, the classifying, or the counting was performed satisfies (e.g., meets or exceeds) a threshold.

In some examples, the processor is further configured to add the current count corresponding to the number of the classified object types to a value of a previous total count of the classified object types to define a current total count, and to output the current total count.

In some examples, the processor is configured to obtain another set of image frames captured over time in response to the current timing condition not meeting the one or more classification timing rules, and perform the detecting and tracking for the another set of image frames

In another implementation, this disclosure provides an automated method of counting objects including receiving a plurality of image frames from a camera and detecting at least a first unidentified object in each of a first set of the plurality of image frames. Further, the method includes tracking at least the first unidentified object through the first set of the plurality of image frames, and determining a selection parameter associated with each of the first set of the plurality of image frames. Also, the method may include selecting a first subset of image frames from the first set of the plurality of images based on each selection parameter of the first subset of image frames meeting a selection criteria. Additionally, the method may include determining that a classification timing meets a classification timing rule, and automatically classifying the at least one unidentified object as a first type of object based on analyzing the first subset of image frames in response to the classification timing trigger meeting the trigger condition. Further, the method may include identifying a number of the first type of object in the first subset of image frames to define a current count, updating a total count of the first type of object based on the number of the first type of object defined by the current count, and outputting the current count and/or the total count of the first type of object.

In yet another implementation, this disclosure provides a computer-readable medium storing instructions for automated object tracking and counting that are executable by a processor, comprising: instructions to cause the processor to obtain a set of image frames captured over time; instructions to cause the processor to detect one or more objects in the set of image frames; instructions to cause the processor to track positioning of the detected one or more objects in each of the set of image frames; instructions to cause the processor to determine whether a current timing condition meets one or more classification timing rules; instructions to cause the processor to select a subset of image frames from the set of image frames based on a selection parameter of each of the subset of image frames meeting a selection criteria, in response to the current timing condition meeting the one or more classification timing rules; instructions to cause the processor to classify as a respective object type each of the detected one or more objects; instructions to cause the processor to count a number of the classified object types in the subset of image frames; and instructions to cause the processor to output the number of the classified object types as a current count of the classified object type.

Additional advantages and novel features relating to implementations of the present disclosure will be set forth in part in the description that follows, and in part will become more apparent to those skilled in the art upon examination of the following or upon learning by practice thereof.

DETAILED DESCRIPTION

The present disclosure provides apparatus and methods for automated tracking and counting of objects in a set of image frames using a resource-constrained device based on analysis of a selected subset of image frames, and based on selectively timing when resource-intensive operations are performed. For instance, the apparatus and methods may effectively implement processor and/or memory intensive solutions, such as machine vision systems for object tracking and machine learning techniques for object classification, by controlling the timing of resource utilization. Depending on the status of system resources at a given time, the apparatus and methods described herein may receive the set of image frames via a live feed (e.g., a video stream or a stream of still images) and process them in real time, or receive them (live or after-the-fact), store them, and then process them at a later time, or some combination of both. Thus, the present disclosure may allow a relatively resource-constrained device to efficiently balance resource utilization while enabling use of typically resource-intensive solutions.

Referring toFIG. 1, an example automated object tracking and counting system10may be efficiently operated on one or more resource-constrained devices through use of selective image analysis and selectively-timed classification of detected objects in the selected images to generate a current count12of objects in an area, or a total count14of objects moving in or out of the area over time.

Object counting system10may include an object tracker component16for obtaining a set of image frames18that capture images from an area20over time. For example, one or more sensor devices22may capture and provide the set of image frames18, which may include one or more objects24captured within an area20(e.g., a field of view of the respective sensor device22), to object tracker component16. Object tracker component16may receive and process the set of image frames18in real time (e.g., a video stream or a stream of a sequence of still images), or receive them (live or after-the-fact), store them, and then process them at a later time, or some combination of both, depending on the status of system resources, as described in more detail below. In some implementations, object24captured in the set of image frames18may be referred to as a blob (e.g., a binary large object), as the type of object may not yet be identified.

Suitable examples of sensor device22may include, but are not limited to, a still image camera, a video camera, an infrared sensor, a thermal sensor, a sonar device, or any other type of camera or sensor capable of capturing an image of an area in an image frame. Object24may be any type of physical thing, such as all or part of a person, an animal, a car, a truck, a product, or any other thing whose image may be captured by sensor device22. In some implementations, object tracker component16may be further operable to perform a background removal process26to remove a background of area20from the set of images18, thereby producing a set of object image frames28. The set of object image frames28may generally have a size, e.g., number of pixels, smaller than the set of image frames18(which include the background) since the background of area20has been removed, thereby leaving only object24, e.g., having a size corresponding to a portion of area20, in each of the set of object image frames28. At this point, it should be noted that while this discussion refers generally to object24, such object24may be a grouping of two or more objects, e.g., two people walking closely together, a person and a dog walking together, etc. In any case, in other implementations, object tracker component16may receive the set of object image frames28from another device rather than performing background removal process26.

Further, object tracker component16performs an object detection process30to detect object24(or a plurality of different objects) in the set of object image frames28so that each object can be identified and/or so that different objects can be distinguished from one another. Also, object tracker component16performs an object tracker process32to track and store a history of positions, e.g., a tracking history34, of the detected object(s)24in area20over time based on the positions (e.g., x- and y-coordinates) of the detected object(s)24in area20(or the positions of the set of object image frames28in the original image frame, e.g., of sensor device21). In general, at this point, it may not be known what kind of physical thing object28is, but just that some sort of object is present.

Additionally, object tracking and counting system10may include object counter component36, in wired or wireless communication with object tracker component16, for selecting a subset of object image frames38from the set of object image frames28and classifying an object type40of the one or more detected objects24based on analyzing the subset of object image frames38. For example, object counter component24may perform a sample determiner process42, which can determine one or more selection parameters associated with each of the set of object image frames28, and which may select the subset of object image frames28from ones of the set of object image frames28having one or more selection parameters meeting a selection criteria. For example, in one implementation, the selection parameter may be a position44of each of the set of object image frames28, and the selection criteria may be to pick up to a defined number of frames having position44closest in distance to an target position46of an target object frame48. It should be understood that other selection parameters and other selection criteria may be defined, given the specific application of the described techniques, as will be discussed further below.

In any case, object counter component36may then execute an object classifier process50to analyze the subset of object image frames38and classify a respective object type40of the one or more detected objects24in the subset of object image frames38. Object type40may be an identifier of a type of physical thing detected, where such identifier may identify, for example, all or part of a person, a woman, a man, a specific type of animal, a car, a truck, a tractor-trailer, a specific type of product, any other thing that can be identified in a captured image, or a binary type where the given object is identified as the type of object desired to be tracked or as not the desired object to be tracked (e.g., person versus not-person). For example, when operating using the binary object type, the object classifier process50may essentially cause any object not of the desired type to discarded. In the case of a discarded object type, some system resources may be saved by excluding the discarded object type from further processing, e.g., counting or other operations subsequent to the counting. In some cases, object type40may be selected from at least two option, e.g., a certain type of object or not that type of object. In other cases, object type40may be determined from among a plurality of different object types.

Object counter component36may further include an object counter process52configured to identify a number of classified object types40in the subset of object image frames38. For example, the subset of object image frames38may contain a single object of a single object type, more than one object of a single object type, or a plurality of one or more different objects of different object types. As such, object counter process52may operate to generate a log54of each object type40, current count12representing the number of that object type in the current subset of object image frames38, and total count14representing a sum of current count12and a prior value of total count14. In some implementations, current count12may be a number having a positive or negative value depending on a relative direction of travel of object24as determined based on the tracking history34of the set of object image frames28, which object counter component36obtains from object tracker component16. As such, the value of current count12may added to or subtracted from a prior value of total count14to obtain the current value of total count14. Also, in some implementations, object counter process52may follow one or more counting rules, such as but not limited to rules that identify how to count objects depending on their path (e.g., add or subtract, count or don't count based on direction or point of entry or exit from the frame, etc.), which object types to count or not count, when (e.g., time of day ranges) to count, or any other rule that may modify a basic counting procedure for a given scenario.

Object counter component36may further include timing determiner process56configured to control operation of object counter component36or more specifically of sample determiner process42and/or object classifier process50and/or object counter process52so that such processes run at one or more specific times based on one or more classification timing rules. The classification timing rules may be designed in a manner that allows the processes to run on a resource constrained device, and/or in a manner that allows for adjustability in balancing classification quality (e.g., the number of false positives/negatives) and processing speed. Suitable examples of the one or more classification timing rules may include, but are not limited to, one or any combination of rules such as perform sample determiner process42and/or object classifier process50and/or object counter process52; only when object tracker component16is not operating; when a number of subsets or a memory size of the number subset of object image frames38are pending processing (e.g., saved in a processing queue) at object counter component36; when at least one subset of object image frames38is pending processing and a time since a last sample determiner process42and/or object classifier process50was performed satisfies (e.g., meets or exceeds) a threshold; or any other rule that takes into account balancing of device resources, such as usage of a central processing unit (CPU)58and/or memory60to enable object tracking and counting on a resource-constrained computer device implementing automated object tracking and counting system10. As such, timing determiner process56determines if current timing conditions meet one or more classification timing rules.

Additionally, based on its operations, object counter component36outputs current count12and/or the total count14, and optionally the corresponding identified object type28, for one or more objects24detected in the set of image frames18, classified by object counter component36, and, optionally, that meet the counting rules.

Thus, notably, object counter component36provides efficient system resource utilization through the selective choosing of the subset of object image frames38on which further analysis is performed, and via performing the sample determination, classifying, and counting processes under the control of timing determiner process56using classification timing rules, one or any combination of which enable efficient operations in a resource-constrained (e.g., processing and memory constrained) system.

In some implementations, object tracking and counting system10may further include an output device62in wired or wireless communication with object counter component36and able to receive and generate a representation of current count12and/or total count14(and optionally the identifier of object type40) for consumption by a user. For example, output device62may be a user interface or display for presenting an image or visual depiction representing current count12and/or total count14(e.g., a graphic of a number), and/or an audio speaker for generating a sound representing current count12and/or total count14(e.g., a spoken number or a set of tones representing a number), a printer for printing a numerical graphic representing current count12and/or total count14, or a haptic device for generating a haptic representation of current count12and/or total count14, or any other type of mechanism capable of conveying a representation of current count12and/or total count14to a user.

Object tracking and counting system10may be an integral system implemented on a single computer device, or a distributed system with two or more portions (e.g., two or more of sensor device22, object tracker component16, object counter component36, and output device62) implemented on a corresponding two or more computer devices in wired or wireless communication with one another. The object tracking and counting system10may be, for example, any one or any distributed combination of a mobile or fixed computer device including but not limited to an Internet of Things (IoT) device, a sensor device, a sensor device having an activation mechanism (e.g., a motion sensor) that initiates the recording of the set of image frames18based on detection and/or movement of object24within area20, a camera, a desktop or laptop or tablet computer, a cellular telephone, a gaming device, a mixed reality or virtual reality device, a music device, a television, a navigation system, a personal digital assistant (PDA), a handheld device, any other computer device having wired and/or wireless connection capability with one or more other devices, or any other type of computerized device capable of obtaining images, tracking objects in the images, and outputting a.

CPU58may execute instructions stored in memory60. For example, the CPU58may execute an operating system64and one or more applications66. Operating system64may system software that manages computer hardware and software resources and provides common services for computer programs, such as applications66stored in memory60and executable by CPU58. Suitable examples of the one or more applications66may include, but are not limited to, an object counting application that controls the configuration and operation of sensor device22, object tracker component16, object counter component36, and output device62. CPU58may include one or more processors for executing instructions. An example of CPU58can include, but is not limited to, any processor specially programmed as described herein, including a controller, microcontroller, application specific integrated circuit (ASIC), field programmable gate array (FPGA), system on chip (SoC), or other programmable logic or state machine. CPU58may include other processing components such as an arithmetic logic unit (ALU), registers, and a control unit. CPU58may include multiple cores and may be able to process different sets of instructions and/or data concurrently using the multiple cores to execute multiple threads.

Memory60may be configured for storing data and/or computer-executable instructions defining and/or associated with an operating system64and/or the one or more applications66. Memory60may represent one or more hardware memory devices accessible to object tracking and counting system10. An example of memory60can include, but is not limited to, one or more of a type of memory usable by a computer, such as random access memory (RAM), read only memory (ROM), tapes, magnetic discs, optical discs, volatile memory, non-volatile memory, and any combination thereof. Further, memory60may store local versions of applications66being executed by CPU58.

In some implementations, object tracking and counting system10may include a communications component68that provides for establishing and maintaining communications with one or more parties utilizing hardware, software, and services as described herein, and/or between the components of the system, and/or with external devices, such as devices located across a wired and/or wireless communications network and/or devices serially or locally connected to object tracking and counting system10. For example, communications component68may include one or more buses, wired or wireless interfaces, a transmitter and receiver, one or more antennas, etc.

Additionally, in some implementations, object tracking and counting system10may include a user interface component70operable to receive inputs from a user of the system and further operable to generate outputs for presentation to the user. User interface component70may include one or more input devices, including but not limited to a keyboard, a number pad, a mouse, a touch-sensitive display, a digitizer, a navigation key, a function key, a microphone, a voice recognition component, any other mechanism capable of receiving an input from a user, or any combination thereof. Further, user interface component70may include one or more output devices, including but not limited to a display, a speaker, a haptic feedback mechanism, a printer, any other mechanism capable of presenting an output to a user, or any combination thereof. In an implementation, user interface component70may transmit and/or receive data, commands, and/or messages corresponding to the operation of operating system64and/or applications66.

In some implementations, sensor device22and object tracker component16may be implemented as a machine vision system including a blob tracking algorithm.

In some implementations, object counter component36may be implemented in a machine learning model for classifying the objects. Suitable machine learning models may include, but are not limited to, one or more decision trees, neural networks, deep learning, Bayesian networks, genetic algorithms, inductive logic programming, support vector machines, clustering, rules-based learning, supervised learning algorithms, unsupervised learning algorithms, reinforcement learning algorithms, or any other type of artificial intelligence techniques.

It should be understood that object tracking and counting system10may be implemented using specially configured hardware, or in software executed by CPU58thereby transforming CPU58into a specially-configured processor, or in a combination of hardware and software, e.g., firmware.

In an implementation, the apparatus and methods of automated tracking and counting disclosed include a blob tracking technique to track objects through a space. After the objects leave the space, a decision forest based machine learning approach is used to classify each object as a type. In some implementations, a decision forest may be a collection or combination of two or more tree predictors, where each tree may be a set of nodes and edges organized in a hierarchical manner. This mixture of computer vision and machine learning allows objects to be tracked on a low power and/or resource (processor, memory)-constrained device. These techniques could be applied to solve problems with hybrid computer vision machine learning solutions or to a specific solution for people counting on a constrained device.

One or more features of the disclosed apparatus and methods may include, but are not limited to:

using a hybrid machine learning and computer vision approach to detect and classify objects travelling through a frame on constrained devices;

using low cost computer vision techniques to track all objects moving through a frame;

occasionally using expensive machine learning approaches in order to classify the objects that travelled though the frame;

filtering out undesirable objects and accurately counting desired objects;

trading-off computation for accuracy as needed in order to maintain high frame rates or high accuracy depending on the goals, e.g., use accuracy goals to determine how often the expensive approach needs to be run. For example, if higher accuracy is important, send more frames through the machine learning models. On the other hand, if reaction speed is more important than accuracy, check fewer frames;

running expensive machine learning tasks on separate background threads when no tracking tasks need to be completed; and

deferred classification of tracked blobs—where the data for some subset of the data set (based on classification confidence, system load, or purely random selection) is cached in local or cloud storage for classification at a later time or by a much slower but higher precision classifier (or even human review) to feed back into the system for improving the count rate and providing better analysis of the error in the current counting rate.

Referring toFIG. 2, an example method80of operation of object tracking and counting system10includes a plurality of actions, some of which may or may not be performed by object tracking and counting system10depending on how the system is setup. Method80will be explained with some references back toFIG. 1. Further, method80may be used by object tracking and counting system10to track and count a plurality of different types of objects, such as but not limited to tracking people (or heads of people) entering or exiting an area, although it should be understood that there are numerous other implementations.

At block82, method80may include receiving a plurality of image frames. For example, in an implementation, object tracker component16may be in communication with one or more sensor devices22via a wired or wireless communication interface and a wired or wireless communication link and may be able to receive a plurality of images, such as the set of image frames18. The set of image frames18may be a sequence of images of at least one object24in area20, e.g., field of view, as captured by sensor device22at a given frame rate. The frame rate of sensor device22may be configurable and/or dynamically adjustable, so that when sensor device22is setup to track fast moving objects24, the frame rate may be set to a higher number as compared to when sensor device22is set to track relatively slower moving objects24. Further, the one or more objects24may be in all of the set of image frames18, e.g., at different positions in the image frame depending on a path of each object24through area20. For example, sensor device22having a motion detector may be activated to capture the set of image frames18when any object24enters and/or moves within area20. Additionally, each object24may also be referred to as a blob, as the type of object may not yet be determined.

At block84, method80may include removing a background in the image frames. For example, in an implementation, object tracker component16may execute background removal process26, which may be an algorithm that compares each of the set of image frames18and removes portions that do not change over time, e.g., the background, thereby leaving only portions of the image frame that include the one or more objects24or blobs. Removing the background results in the set of image frames being modified to be a set of image frames without background, also referred to herein as the set of object (or blob) image frames28, as these image frames contain the information (e.g., pixels) that represent one or more objects24(or blobs). In some implementations, object tracking and counting system10may improve an efficiency of the process in general, and/or in background removal process26, by configuring the one or more sensor devices22with a detector to trigger image capture based on presence or motion of objects such that all or substantially all of the set of image frames18include one or more objects24. In an implementation, a size (e.g., x- and y-coordinates of the pixels; or an area of the remaining image) of the image frames without background varies depending in a size and shape of the object(s) or blob(s), and may be generally smaller than a size of the original set of image frames.

At block86, method80may include detecting one or more objects (or blobs) in the set of image frames without background. For example, in an implementation, object tracker component16may execute object detection process30on the set of object (or blob) image frames28in order to identify one or more unique objects24(or blobs) across the set of object (or blob) image frames28. For instance, operation of object detection process30may result in object tracker component16maintaining a list that uniquely identifies one or more current blobs in the set of object (or blob) image frames28. The unique identification may be a name, number, size, etc., that can be used to confirm that a blob in one of the set of frames corresponds to the same object as another blob in another one of the set of frames.

At block88, method80may include tracking the one or more objects (or blobs) through the set of image frames without background. For example, in an implementation, object tracker component16may execute object tracker process32to determine position44(e.g., in x- and y-coordinates) for each object image frame28relative to the original image frame, thereby representing a path of each object24through area20. As such, in some implementations, object tracker process32can determine entry and exit points of each object24with respect to area20, as well as direction of travel. Moreover, the tracked positions44may be in a same coordinate system as target position46of target object image frame48, which may be utilized later by the system for selecting the most useful object image frames. In some implementations, the result of object tracker process32may be a list of tracked objects/blobs and their corresponding set of object image frames28.

At decision block90, method80may include determining whether current timing conditions meet one or more classification timing rules. For example, in an implementation, object tracker component16may execute timing determiner process56to control operation of object counter component36, or more specifically of sample determiner process42and/or object classifier process50and/or object counter process52, so that such processes run at one or more specific times based on one or more classification timing rules. As mentioned above, the classification timing rules may be designed in a manner that allows the processes to run on a resource constrained device, and/or in a manner that allows for adjustability in balancing classification quality and processing speed.

It should be noted that while decision block90is illustrated as occurring before block92(selecting a subset of image frames), object tracker component16may execute timing determiner process56prior to any or all of the blocks subsequent to block88.

If the current timing conditions do not meet the one or more classification timing rules, then method80may return to block82. For example, method80may receive or obtain another set of image frames captured over time in response to the current timing condition not meeting the one or more classification timing rules, and may perform blocks84,86,88, and/or90for the other set of image frames.

Alternatively, if the current timing conditions do meet the one or more classification timing rules, then method80may proceed to block92and may include selecting a subset of image frames for further processing. For example, in an implementation, object tracker component16may execute sample determiner process42to select a subset of object image frames38from the received set of object image frames28associated with each detected object. For instance, sample determiner process42may determine one or more selection characteristics of each of the set of object image frames28, and compare them to one or more selection criteria in order to reduce the number of image frames to be further processed.

As mentioned, the selection criteria may be one or more parameters and values that identify what may be considered a target object image frame48, e.g., a frame that may be better suited than other frames to enable object tracker component16to classify an object type of the object and thereby count the object. For instance, the selection parameter may be position44of a given object image frame28, and the selection criteria may be to choose up to a given number of object image frames28that are closest to target position46of target image frame48. Other selection criteria and selection parameters may include, for example, an amount that a given object image frame28covers target object image frame48. Additionally, for example, other alternative or additional selection criteria and selection parameters may include a direction of movement of a given object image frame28, as certain positions and orientations of objects that can be correlated to movement may provide object tracker component16with a better chance of classifying the object. In an implementation, the operation of sample determiner process42may result in a subset of object (or blob) images being selected for further processing.

At block94, method80may include classifying the object(s) (or blob(s)) identified across the subset of image frames. For example, in an implementation, object tracker component16may execute object classifier process50to analyze the subset of object image frames38and classify a respective object type40of the one or more detected objects24in the subset of object image frames38, as discussed above. In an implementation, the operation of object classifier process50may result in labeling one or more objects (or blobs) that appear in all of the subset of object image frames38, which enables identifying of a number and type of object (or blob) for counting purposes.

At block96, method80may include counting the object(s) or blob(s) identified via the classification. For example, in an implementation, object tracker component16may execute object counter process52configured to identify a number of classified object types40in the subset of object image frames38, as described in detail above. In an implementation, the operation of object counter process52may result in current count12, and/or total count14, and/or an identifier of object type40, for one or more of the counted object types and associated with or given a timestamp, to be tracked and transmitted to output device62.

At block98, method80may include generating a representation of current count12, and/or total count14, and/or an identifier of object type40. For example, in an implementation, output device62may generate or otherwise output such representation(s), as described above. In some cases, the representation may be a human-perceptible representation, such as displaying an object name (e.g., identifier of object type40) and/or a number (current count12and/or total count14) on a user interface.

The various illustrative logics, logical blocks, and actions of methods described in connection with the embodiments disclosed herein may be implemented or performed with a specially-programmed one of a general purpose processor, a digital signal processor (DSP), an application specific integrated circuit (ASIC), a field programmable gate array (FPGA) or other programmable logic device, discrete gate or transistor logic, discrete hardware components, or any combination thereof designed to perform the functions described herein. A general-purpose processor may be a microprocessor, but, in the alternative, the processor may be any conventional processor, controller, microcontroller, or state machine. A processor may also be implemented as a combination of computer devices, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration. Additionally, at least one processor may comprise one or more components operable to perform one or more of the steps and/or actions described above.

While implementations of the present disclosure have been described in connection with examples thereof, it will be understood by those skilled in the art that variations and modifications of the implementations described above may be made without departing from the scope hereof. Other implementations will be apparent to those skilled in the art from a consideration of the specification or from a practice in accordance with examples disclosed herein.