Patent ID: 12243318

The headings provided herein are merely for convenience and do not necessarily affect the scope or meaning of the terms used.

DETAILED DESCRIPTION

The description that follows includes systems, methods, techniques, instruction sequences, and computing machine program products that embody illustrative embodiments of the disclosure. In the following description, for the purposes of explanation, numerous specific details are set forth in order to provide an understanding of various embodiments of the inventive subject matter. It will be evident, however, to those skilled in the art, that embodiments of the inventive subject matter may be practiced without these specific details. In general, well-known instruction instances, protocols, structures, and techniques are not necessarily shown in detail.

In this disclosure, different systems and methods are described for determining a mood of a group of people using images from the people's mobile computing devices. Certain embodiments, for example, involve identifying an event that includes two or more attendees, and receiving at least one indicator representing emotions of attendees (e.g. images or text). A mood detection system of a device can then generate a numerical value for each of the indicators. Numerical values for different users at the event can be aggregated by the device to determine an aggregate mood of the attendees of the event.

In certain embodiments a social messaging application (e.g., SNAPCHAT®) executing on user's mobile computer devices that is designed to capture images taken by the device may be used with a mood detection system for determining a mood of a group. In a social messaging application, a user captures an image (e.g., a still image, animated image, video, or the like, via an image sensor of the user device) and composes a message using the social messaging application.

Because the nature of the social messaging application is to communicate using images, the messages passed between users of the social messaging application frequently include the user's face (e.g. “selfies”, images with the user and friends, or the like). The images may also include faces of other individuals within view of the image sensor.

Furthermore, technical advances in facial recognition make it possible for a mood detection system such as mood detection system160ofFIG.1to determine an emotion of a user using an image of the user's face. Such a mood detection system160may also determine a level of the emotion. For example, a happiness rating may be from 0 to 5 and the mood detection system160could determine that one user in an image has a happiness rating of 2 while another user in the image has a happiness rating of 4. Various embodiments are not limited in this regard and any scale of level of an emotion may be used.

In certain embodiments a mood detection system160, as will be further described, determines an event where the users are located and assembles the messages that originate with users who are at the event. The mood detection system160analyzes the various faces in the images and aggregates the resulting emotions to determine an aggregate mood for the group of people. The mood detection system160further infers the mood for the entire group of people, but based on the images received from users in the group.

FIG.1is a network diagram depicting a network system100having a client-server architecture configured for exchanging data over a network, according to one embodiment. For example, the network system100may be a messaging system where clients may communicate and exchange data within the network system100. The data may pertain to various functions (e.g., sending and receiving text and media communication, determining geolocation, etc.) and aspects associated with the network system100and its users. Although embodiments illustrated herein use a client-server architecture, other embodiments may include other network architectures, such as peer-to-peer or distributed network environments.

As shown inFIG.1, the network system100may include a social messaging system130. The social messaging system130is generally based on a three-tiered architecture, consisting of an interface layer124, an application logic layer126, and a data layer128. Each module or engine shown inFIG.1represents a set of executable software instructions and the corresponding hardware (e.g., memory and processor) for executing the instructions. To avoid obscuring the inventive subject matter with unnecessary detail, various functional modules and engines that are not germane to conveying an understanding of the inventive subject matter have been omitted fromFIG.1. Additional functional modules and engines may be used with a social messaging system, such as that illustrated inFIG.1, to facilitate additional functionality that is not specifically described herein. Furthermore, the various functional modules and engines depicted inFIG.1may reside on a single server computer, or may be distributed across several server computers in various arrangements. Moreover, although the social messaging system130is depicted inFIG.1as a three-tiered architecture, the inventive subject matter is by no means limited to such architecture.

As shown inFIG.1, the interface layer124consists of interface module(s) (e.g., a web server)140, which receives requests from various client-computing devices and servers, such as client device(s)110executing client application(s)112, and third party server(s)120executing third party application(s)122. In response to received requests, the interface module(s)140communicates appropriate responses to requesting devices via a network104. For example, the interface module(s)140can receive requests such as Hypertext Transfer Protocol (HTTP) requests, or other web-based, Application Programming Interface (API) requests.

The client device(s)110can execute conventional web browser applications or applications (also referred to as “apps”) that have been developed for a specific platform to include any of a wide variety of mobile computing devices and mobile-specific operating systems (e.g., IOS™, ANDROID™, WINDOWS® PHONE). In an example, the client device(s)110are executing the client application(s)112. The client application(s)112can provide functionality to present information to a user106and communicate via the network104to exchange information with the social messaging system130. Each of the client device(s)110can comprise a computing device that includes at least a display and communication capabilities with the network104to access the social messaging system130. The client device(s)110comprise, but are not limited to, remote devices, work stations, computers, general purpose computers, Internet appliances, hand-held devices, wireless devices, portable devices, wearable computers, cellular or mobile phones, personal digital assistants (PDAs), smart phones, tablets, ultrabooks, netbooks, laptops, desktops, multi-processor systems, microprocessor-based or programmable consumer electronics, game consoles, set-top boxes, network personal computers (PCs), mini-computers, and the like. One or more user(s)106can be a person, a machine, or other means of interacting with the client device(s)110. In some embodiments, the user(s)106interact with the social messaging system130via the client device(s)110. The user(s)106may not be part of the networked environment, but may be associated with the client device(s)110.

As shown inFIG.1, the data layer128has one or more database server(s)132that facilitate access to one or more information storage repositories or database(s)134. The database(s)134are storage devices that store data such as member profile data, social graph data (e.g., relationships between members of the social messaging system130), and other user data.

An individual can register with the social messaging system130to become a member of the social messaging system130. Once registered, a member can form social network relationships (e.g., friends, followers, or contacts) on the social messaging system130and interact with a broad range of applications provided by the social messaging system130.

The application logic layer126includes various application logic module(s)150, which, in conjunction with the interface module(s)140, generate various user interfaces with data retrieved from various data sources or data services in the data layer128. Individual application logic module(s)150may be used to implement the functionality associated with various applications, services, and features of the social messaging system130. For instance, a social messaging application can be implemented with one or more of the application logic module(s)150. The social messaging application provides a messaging mechanism for users of the client device(s)110to send and receive messages that include text and media content such as images (including pictures and/or video). The client device(s)110may access and view the messages from the social messaging application for a specified period of time (e.g., limited or unlimited). In an example, a particular message is accessible to a message recipient for a predefined duration (e.g., specified by a message sender) that begins when the particular message is first accessed. After the predefined duration elapses, the message is deleted and is no longer accessible to the message recipient. Of course, other applications and services may be separately embodied in their own application server module(s)150.

The mood detection system160, as will be further described, identifies an event that includes two or more attendees and receives one or more indicators representing emotions of attendees. The indicators may include images of attendees, textual descriptions, or the like. The mood detection system160then determines a numerical value for each of the indicators where the numerical value indicates an intensity of the emotion. The mood detection system160then aggregates the numerical values to determine an aggregate mood of the attendees of the event as will be further described. In other example embodiments, the mood detection system160generates charts or other graphical representations of the indicators, mood, sentiment, or other determined factors.

FIG.2is a block diagram200illustrating one embodiment of a mood detection system160according to some example embodiments. According to this embodiment, the mood detection system160includes an event module220, an indicator module240, and a mood module260. As illustrated inFIG.1, the social messaging system130includes a mood detection system160. In various embodiments, the mood detection system160can be implemented as a standalone system and is not necessarily included in the social messaging system130.

In various embodiments, some or all of the modules220-260communicate with each other, for example, via a network coupling, shared memory, or the like. Each module of modules220-260can be implemented as a single module, combined into other modules, or further subdivided into multiple modules. Other modules not pertinent to example embodiments can also be included, but are not shown.

In one embodiment, the event module220identifies an event that includes two or more attendees by receiving a request to monitor the event. In one example a host, producer, or other responsible entity transmits a request to monitor an event to the event module220. Embodiments contemplate that the request could take any form. For example, the request could be made through an email or other communication, via a form-driven interface implemented for the receipt of such requests, a webpage accessible from a browser, a physical document, a phone call, proactively on the part of a system operator, etc. The request includes an event identifier, description, location, start time, duration, or other relevant information to identify the event. In response to receiving the request, the event module220identifies the event based on information included in the request.

In another embodiment, the event module220identifies an event by determining that a threshold number of users have transmitted messages from the location of the event. In one specific example, a threshold number of attendees is 20, and the event module220identifies an event based on more than 20 users transmitting messages through the social messaging system from the event.

The client device110can provide the geographic indication that includes a geo-identifier other than a particular geolocation. For example, the geographic indication can include a specified entity name (e.g., a business name), a specified geolocation type (e.g., a historical landmark, a soccer field, or an educational institution), or another geo-identifier operable to identify a particular geolocation.

The client device110provides location services functionality such as receiving or determining the current geolocation of the client device(s)110in real time. The client device(s)110include position components such as location sensors (e.g., a GPS receiver component), altitude sensors (e.g., altimeters or barometers that detect air pressure, from which altitude can be derived), orientation sensors (e.g., magnetometers that provide magnetic field strength along the x, y, and z axes), and the like. The position components can provide data such as latitude, longitude, altitude, and a time stamp at a regular update rate (e.g., a sampling rate). The geolocation module166receives, monitors, or otherwise obtains geolocation data from the position components of the client device(s)110. In other embodiments, the geolocation module166obtains or derives geolocation data of the client device(s)110using other location services such as Internet Protocol (IP) geolocation, WI-FI® signal triangulation, BLUETOOTH® beacon signal detections that can indicate a particular location, and so forth.

The term “real-time data,” as used herein, is intended to include data associated with an event currently happening. For example, the event module220receiving the current geolocation of the client device(s)110in real time includes a particular geolocation detected at the client device(s)110after a delay interval (e.g., due to transmission delay or other delays such as data being temporarily stored at an intermediate device). Thus, in some instances, receiving the current geolocation in real time is intended to include geolocations of the client device(s)110from the past. This discussion of real time applies equally throughout the specification in relation to other uses of the term “real time.”

The event module220provides various data functionality such as exchanging information with databases or servers. For example, the event module220accesses member profiles of the social messaging system130that include profile data from the database(s)134(e.g., social graph data of the user that indicates contact members of the user on the social messaging system130or another social messaging service). In another example, the event module220stores a user preference, a user setting, or other user data in the databases(s)134. In some embodiments, the event module220exchanges information with the third party server(s)120, the client device(s)110, or other sources of information. In one specific example, the event module220determines a location of a message received from a client device110

In one embodiment, the event module220charges an event promoter, host, manager, or the like, according to a fee structure. In one example, the event module220identifies a fee to monitor an event in response to receiving a request to monitor crowd mood at the event. In another example embodiment, the event module220requests a fee to be paid by an event host, or the like, after determining an aggregate mood level for attendees at the event.

The event module220can allow for various fee structures to charge the third party entity in addition to those described above. For instance, the third party entity can be charged per location of use of the mood detection system160, and/or for exclusive, or partially exclusive, use of the aggregate mood level.

In other embodiments, the event module220obtains or derives geolocation data of the client device110using other location services such as Internet Protocol (IP) geolocation, WI-FI® signal triangulation, BLUETOOTH® beacon signal detections that can indicate a particular location, and so forth. In an example, a particular merchant store employs a BLUETOOTH® beacon. When the BLUETOOTH® beacon is detected by the user device, an indication of the detection is communicated to the geolocation module166. In this example, the geolocation of the BLUETOOTH® beacon is known or is accessible via a lookup of a beacon identifier included in the indication of the beacon detection. Based on the indication of the beacon detection and the beacon identifier, the event module220infers that the user device is within a communication distance (e.g., a short distance such as a communication range of approximately ten meters for class2BLUETOOTH®) of the BLUETOOTH® beacon. In this way, the event module220infers the current geolocation of the client device110based on detection of the BLUETOOTH® beacon. In a similar manner, the current geolocation of the client device110can be inferred from other signal detections originating from a known location (e.g., BLUETOOTH® detection of a peer device whose current geolocation can be ascertained or other near field communication (NFC) signal detections).

In one embodiment, the indicator module240receives indicators from attendees of the event. In one example, the indicators are images that include one or more faces of the attendees. In another example, the indicators are textual descriptions of emotions of the attendees. The indicator may also originate at a client device110for an attendee. For example, the client device110may analyze the image to determine a mood and a mood intensity of the attendee106. The client device110then transmits the mood level (the mood and the intensity) of the attendee106to the indicator module240.

In one embodiment, the emotion of the attendee106is selected from a set of predefined emotions. An emotion of an attendee106may include, but is not limited to, anger, fear, grief, joy, or other, or the like. In further examples, a level of the emotion may include a numeric value or textual description. A textual description may also be mapped to a predefined numeric value. For example, happiness may be defined in various levels, such as; glad (value=1), cheery (value=2), happy (value=3), ecstatic (value=4), overjoyed (value=5). Of course, other levels and/or descriptions may be used and this disclosure is not limited in this regard. Furthermore, other emotions may be defined that may not map to a textual description in the English language and an emotion may also be mapped to other emotions using terms in other languages, or the like.

In one embodiment, the mood module260determines a numeric value for each of the indicators. The numeric value may be according to a predefined value. For example, where the attendee describes his/her mood as “ecstatic,” the mood module260may lookup “ecstatic” in a list of predefined moods and determine that the numeric value of the attendee's106emotion is 4 as previously described.

In one embodiment, the mood module260determines a numeric value for each of the indicators received by the indicator module240. The numeric value for each indicator indicates an intensity of the emotion of the attendee106. In one example, each emotion may have a scale from 0 to 5. Of course, this disclosure is not limited in this regard. Further, more specific examples of various emotional ranges are described inFIG.5.

In another embodiment, the indicators are images of an attendee's face. The mood module260determines a mood for each of the faces in the image and also determines a numeric level for the mood. Initially, the mood module260isolates each face in the image. The mood module260then identifies one or more regions for each face and adds points to each region. The points define regions of each face, such as, but not limited to, a mouth, a nose, eyes, eyebrows, and other facial features.

As one skilled in the art may appreciate, points that define some regions will move more than points around other regions. For example, points that define a region for the mouth move more than points that define a region for a nose. Therefore, the mood module260uses points that move little (e.g. points for the nose) as a point of reference to determine how much other points move (e.g. points around the eyes) as the attendee expresses certain emotions.

In certain example embodiments, the mood module260further determines emotions of an attendee based on a distribution of points for the attendee's face. In one example, the distribution of points indicates locations of wrinkles around the eyes, a furrow of an eyebrow, or other locations of facial components.

In another embodiment, the mood module260compares the distribution of points for an attendee's face with a database of facial expressions. The database server (e.g. server132ofFIG.1), may store many sets of data for point distributions representing a large population of people and their facial expressions. For example, the database (FIG.1:134) stores data records for distributions of data points for various facial expressions as described herein.

In certain examples, an emotion of happy is indicated by raised corners of the mouth. In other examples, sadness is indicated by lowered corners of the mouth, lowered eyebrows, or the like as indicated by a data model. Furthermore, a magnitude of the emotion may be indicated by the locations of the points. Therefore, a bigger smile indicates more happiness. Being frightened is indicated by an open mouth and wide open eyes. Of course, as data models evolve over time, many other emotions may be determined based on facial expressions, data regions on a face, or the like as described herein. In one embodiment, the facial expressions may be encoded according to a standard coding system for facial actions and/or expressions. Of course, this disclosure is not limited in this regard.

In another embodiment, the mood module260further considers data received from other biometric sensors (FIG.18:1856) to determine an emotion for an attendee. For example, a biosignal, biorhythm, or the like, may indicate a raised heart rate, other increased electrical signals, or the like and indicates heightened emotional experience which raises the mood level for the attendee. Of course, one skilled in the art may recognize other ways in which a biometric sensor may indicate an emotion or mood by an attendee and this disclosure is meant to include all such ways.

In one embodiment, the mood module260determines a most popular mood level indicated by the attendees and returns the mood level as an aggregated mood level. For example, where 5 attendees indicate a happiness level of 3, and 2 indicate a happiness level of 2, the mood module280determines that the aggregate mood level for the attendees is happiness level 3 because more people have a happiness level of 3 than other happiness levels.

In another embodiment, the mood module260determines an aggregated mood level by taking an average of the numerical values indicated by the indicators received by the indicator module240. For example, where 10 attendees indicate respective mood levels of 3, 3, 4, 5, 5, 6, 7, 7, 7, and 9, the mood module260determines that the aggregate mood level for the attendees is 5.6. Of course, one skilled in the art may apply other statistical models to determine an aggregate value representing a set of other values and this disclosure is not limited in this regard.

In one embodiment, the determined emotions are according to a model of emotions. In one example, a model of emotions is according to Robert Plutchhik's theory as depicted inFIG.5and as one skilled in the art may appreciate. Of course, other emotional models may be used and this disclosure is not limited in this regard. Emotional models and their application to this disclosure are further described regardingFIG.5.

FIG.3is a block diagram illustrating one embodiment300of a system according to some example embodiments. In this example embodiment, the mood detection system160further includes a graphic module280.

In one embodiment, the graphic module280generates a chart to depict the emotions of the attendees. For example, the graphic module280generates a pictorial representation of an aggregate mood for the attendees. In another example, the graphic module280generates a chart that depicts each of the determined emotions of the attendees. In another example, the graphic module280generates a plot of an aggregate emotion over a period of time as depicted inFIG.8. Specific examples of various charts, plots, and/or graphs are depicted inFIGS.8-10.

FIG.4is a diagram illustrating an example400of a group of attendees providing pictographs at an event, according to some example embodiments.FIG.4depicts a specific musical concert with many attendees. Certain attendees have respective client devices110.

In this example, the attendees want to share the event with contacts (e.g., friends or followers) on the social messaging system130. An attendee captures an image or video (e.g., via an image sensor of the client device) and composes a message using a social messaging application executing on the client device110(e.g., SNAPCHAT®).

The attendee can then cause transmission of the message, including the at least one selected pictograph, to one or more message recipients who can view the message and the at least one selected pictograph. In some embodiments, pictographs included in the message are image assets that are transmitted along with contents of the message. In other embodiments, the pictograph included in the message is a character code that a recipient device uses to identify the pictograph included in the message when the message is received (e.g., the pictograph is stored on the client device110prior to receipt of the message or is accessible to the recipient device upon receipt of the message).

In one embodiment, prior to the time of the event, the event module220received a request to monitor this event. In response, the event module220receives the pictographs (e.g. by way of the social messaging system130) from the attendees and determines whether the pictographs were taken at the location of the event as previously described.

In one embodiment, the event module220forwards the pictographs that were taken at the location to the indicator module240. The indicator module240then analyzes each of the pictographs, determines faces therein as previously described, and determines a mood level for each of the faces. The mood module260then aggregates the numerical values for each mood level to determine an aggregate sentiment for the attendees of the event.

In another embodiment, the event module220determines that a threshold number of people have transmitted messages to the mood detection system160from a specific location. In one example a threshold number of messages is 100. According to this embodiment, the event module220identifies a location and/or an event based on receiving more than 100 messages from client devices110operating at the location. Of course, other values may be used and this disclosure is not limited in this regard.

In another embodiment, client devices110within a threshold distance of the location are included in a list of client devices at the location. For example, a threshold distance is 100 meters and messages received from client devices110of the social messaging system130that are within 100 meters of the location are included in a list of client devices110at the location.

In one example embodiment, the mood module260transmits the aggregate mood level to a host for the event. Of course, the mood module260may also include any and/or all graphical representation of the mood level as generated by the graphic module280, or the like, and this disclosure is not limited in this regard.

FIG.5is a chart illustrating one example500of a model of human emotions.FIG.5illustrates a specific emotional model for identifying emotions and their respective interrelations. For example, as depicted inFIG.5, more intense emotions are closer to the center of the model. Emotions that oppose each other are similarly depicted in the illustration. For example, the emotions of serenity, joy and ecstasy oppose grief, sadness, and pensiveness. Furthermore, more intense emotions, such as, but not limited to, loathing, rage, and terror may be located in an inner circle of emotions and less intense emotions may be located outside of the inner circle. Therefore, one scale of emotions may include (in order), grief, sadness506, pensiveness508, serenity502, joy504, and ecstasy.

In one example, a happiness range includes grief (−3), sadness (−2), pensiveness (−1), serenity (1), joy (2), ecstasy (3). A similar range of an emotion includes loathing (−3), disgust (−2), boredom (−1), acceptance (1), trust (2), admiration (3). In another example, an emotional range is vigilance (−3), anticipation (−2), interest (−1), distraction (1), surprise (2), amazement (3). Of course, other emotions and/or ranges of emotion may be defined and used by the mood module260to determine a numeric value for an emotional indicator.

In another example, the emotions of sadness and happiness both include positive values and the mood module260determines a mood level by summing the happiness values and subtracting a sum of the sadness values. If the resulting value is above 0, then the aggregate emotion is happiness. If the resulting value is below 0, then the aggregate emotion is sadness. A mood level for the aggregate emotion is the difference between the sum of the happiness values and the sum of the sadness values.

In another example, the mood module260may determine some emotions on a happiness scale and other emotions on a fear scale. In this example, because the emotions of happiness and fear do not directly oppose each other, the mood module260aggregates the emotions on the happiness scale and the emotions on the fear scale. The mood module260then compares the two sums and determines that the aggregate emotion is the emotion with the highest sum.

FIG.6is a diagram illustrating an example of determining a mood for a group of attendees at an event, according to some example embodiments. In this specific example, attendees are attending a speech and many attendees have a client device110.

In this example, the attendees want to share the experience with contacts (e.g., friends or followers) on the social messaging system130. The attendee captures an image or video (e.g., via an image sensor of the client device) and composes a message using a social messaging application executing on the client device110(e.g., SNAPCHAT®). The social messaging system130receives the current geolocation of the client device110. Furthermore, in this example, the client device is configured to determine a mood level based on the pictograph. The client device110then transmits a description of the determined mood level to the indicator module240. The indicator module240then converts the textual description of the mood to a mood level.

In one example, one attendee transmits a social message604to the social messaging system130. The message604includes a textual description (Happy, level 7) describing a mood for the attendee. Another message606indicates Happiness level 3. Another message608indicates happiness level 4. A last message610indicates sadness level 2.

The mood module260determines a mood level based on the textual description and aggregates sentiment for the attendees that sent messages to the social messaging system. The mood module260infers a mood for the group of attendees based on the received messages604,606,608, and610.

FIG.7is a diagram illustrating an example700of determining a mood for a group of attendees at an event, according to some example embodiments. In this example, one or more video cameras710,712record attendees at a parade.

The video cameras710,712operate as a client device110and capture imagery of the attendees at the event. In one embodiment, camera712transmits periodic imagery to the event module220. In one example, the camera710transmits a single image of the attendees every 10 seconds. Of course, other periods may be used and this disclosure is not limited in this regard. In another example, the camera712streams the video to the event module220and the event module220parses the video into independent images to be indicators indicating emotions of the attendees.

The event module220receives the periodic imagery. Because the imagery includes faces of the attendees, the imagery indicates emotions of the attendees. The indicator module240processes the imagery received from the cameras710,712to determine a numerical value for each of the faces in the images. In another embodiment, the event module220concurrently receives imagery from both cameras710,712. The imagery from the two cameras710,712may be received at different periods, or may be streamed as previously described.

In one embodiment, the mood module260determines a numerical value for each of the indicators, where the numerical value indicates an emotional intensity of the attendees of the event. The mood module260then aggregates the numerical values to determine an aggregate sentiment of the attendees of the event.

In another embodiment, the mood module260records the aggregate sentiment over a period of time. For example, in response to receiving each indicator, the mood module260adds the resulting aggregate sentiment to an array of values. In a further embodiment, the graphic module280plots the array of values. In one embodiment, the mood module260notifies a host for the event regarding the mood of the crowd of attendees. In another example, the mood module260requests compensation for providing the array of values to a host, promoter, or other entity managing the event.

FIG.8is a chart800illustrating one example of a mood of a group of people over time, according to one example embodiment. In this example, the graphic module280generates a plot800of the array of values. The plot800depicts a happiness level for the group of attendees over a period of time.

The period of time may be based on a start time and an end time for the event. In another example, the period of time is a period of time when messages being received from attendees of the event remain above a threshold number of messages per unit time. For example, for each hour the social messaging system130receives 100 or more messages from attendees of the event, the mood module260continues to track the mood level for the group of attendees as described herein.

FIG.9is a chart900depicting various emotions for a group of people according to one example embodiment. In this example, the aggregate sentiment for the group of attendees is 72%. The graphic module280generates the chart900that includes one scale presenting the aggregate sentiment902. Furthermore, the graphic module280generates an array904of charts depicting independent bars for each of the mood scales. In this example, the mood scales include a sad/happy scale, a bored/excited scale, and a disinterested/engaged scale. The graphic module280may plot different scales according to an emotional model, including, but not limited to the model depicted inFIG.5.

In another example, the chart900may be presented real-time. In this example, the graphic module280updates the chart each time new indicators are received. The mood detection system160may provide a user interface to a remote client to present the chart900.

FIG.10is a set of charts1000illustrating one example of emotions for different groups of people according to one example embodiment. In this example, various charts1000depict an aggregate mood level for different demographical groups.

In this example, the indicator module240separates the indicators according to demographical information. For example, the attendee that transmits a social message to the social messaging system130via a client device110may have a profile at the social messaging system130. Therefore, in one example, the indicator module240can determine demographical information in the profile for the attendee.

The graphic module280further generates distinct graphical charts1000for each of the demographical groups. Some attendees may be members of more than one group. For example, an individual in demographic group2may also be in demographic group5.

FIG.11is a flow diagram illustrating an example method1100for determining a mood for a group, according to some example embodiments. The operations of the method1100may be performed by components of the mood detection system160, and are so described below for the purposes of illustration.

The method1100begins and at operation1110, the event module220identifies an event that includes two or more attendees. The method1100continues at operation1120and the indicator module240receives at least one indicator representing emotions of attendees. The indicators may be an image of a face of an attendee or a description of an emotion of an attendee.

The method1100continues at operation1130and the mood module260determines a numerical value for each of the indicators. The numerical value indicates an emotional intensity of the attendee at the event. The method continues at operation1140and the mood module260aggregates the numerical values to determine an aggregate sentiment of the attendees of the event as described herein.

In another embodiment, the indicator module240extracts the images of the attendee's faces from a video stream. The video stream may be from a client device110with a video capable camera.

FIG.12is a flow diagram illustrating an example method1200for determining a mood for a group, according to some example embodiments. The operations of the method1200may be performed by components of the mood detection system160, and are so described below for the purposes of illustration.

The method1200begins and at operation1210, the event module220identifies an event that includes two or more attendees. The method1200continues at operation1220and the indicator module240receives many indicators representing emotions of attendees. The indicators may be an image of a face of an attendee or a textual description of an emotion of an attendee.

The method1200continues at operation1230and the mood module260determines a numerical value for each of the indicators. The numerical value indicates an emotional intensity of the attendee at the event. The method1200continues at operation1240and the graphic module280generates a chart depicting the numerical values of the indicators. The chart may be a wide variety of different pictorial representations of the numerical values and this disclosure is not limited in this regard. The mood module260then, at operation1250, aggregates the numerical values to determine an aggregate sentiment of the attendees of the event as described herein.

FIG.13is a flow diagram illustrating an example method1300for determining a mood for a group, according to some example embodiments. The operations of the method1300may be performed by components of the mood detection system160, and are so described below for the purposes of illustration.

The method1300begins at operation1310, the event module220identifies an event that includes two or more attendees. The method1300continues at operation1220and the indicator module240receives a set of indicators representing emotions of attendees. The method1300continues at operation1330and the indicator module240determines whether more indicators need to be analyzed. For each indicator, the method continues at operation1340and the indicator module240determines demographical properties for the indicator. Determining demographical properties may be based on the image of the face of the attendee or on profile information for the attendee at the social messaging system130. The method continues at operation1350and the mood module260determines a numerical value for each of the indicators as previously described.

After processing the various indicators, the method1300continues at operation1360and the mood module260aggregates the numerical values into each determined demographical group. The method1300continues at operation1370and the graphic module280displays the demographical information via a display accessible by a host for the event.

FIG.14is a flow diagram illustrating an example method1400for determining a mood for a group, according to some example embodiments. The operations of the method1400may be performed by components of the mood detection system160, and are so described below for the purposes of illustration.

The method1400begins at operation1410, where the event module receives one or more messages from client devices110for the social messaging system130. Although the message is destined for other client devices110, the event module220inspects the messages. The method1400continues at operation1430and the event module220determines respective locations for each social message.

The method continues at operation1440, where in response to not receiving a threshold number of messages, the method continues at operation1410and the event module220receives additional messages. In response to receiving a threshold number of messages originating from a similar location, the method continues at operation1450and the event module220registers an event at the location. The method1400continues at operation1460and the mood module260determines a numerical value representing a mood for each received message. The method1400continues at operation1470and the mood module260aggregates numerical values for the mood levels as described herein.

In one example, the threshold number of messages from a common event is 1000 messages. In response to receiving 1000 or more messages from client devices110at a specific location, the event module220determines that an event is occurring at the location and begins tracking emotions for the attendees of the event based on the received social messages.

FIG.15is a flow diagram illustrating an example method1500for determining a mood for a group, according to some example embodiments. The operations of the method1500may be performed by components of the mood detection system160, and are so described below for the purposes of illustration.

The method1500begins at operation1510, where the event module220identifies an event based on receiving a request to monitor the event. The method1500continues at operation1520and the event module220receives a video from the event. The video may be a real-time feed or may be transmitted after the event occurred. The indicator module240extracts specific frames from the video, wherein the specific frames are indicators of emotions of the attendees in the video. The indicator module240determines whether one or more faces are included in each frame and determines whether the frame is an indicator or not. In response to the frame not including any faces, the indicator module240discards the frame. In response to the frame including an image of an attendee for the event, the indicator module240determines that the frame is an indicator.

The method continues at operation1530and the mood module260determines an emotion for the attendee in each frame. The method1500continues at operation1540and the mood module260determines a magnitude for the audio signal corresponding to the frame in the video. The method continues at operation1550and the mood module260adjusts the mood level based on the magnitude of the audio signal. For example, where the magnitude of the audio signal is twice that of an average magnitude for the video, the mood module260doubles the intensity of the mood level. In another example, if the magnitude of the audio is 60% of an average magnitude for the video, the mood module260multiples the intensity of the mood level by 0.6. Of course, the mood module260may use other multipliers and this disclosure is not limited in this regard.

The method1500continues at operation1560and the mood module260aggregates the mood levels. The method continues at operation1570and the graphic module280updates a plot of the mood levels as described herein.

FIG.16depicts an example user device1600(e.g., smart phone) displaying an example user interface, according to some example embodiments. Although user interfaces described herein depict specific example user interfaces and user interface elements, these are merely non-limiting examples and many other alternate user interfaces and user interface elements can be generated by the graphic module280and presented to the user. It will be noted that alternate presentations of the displays described herein include additional information, graphics, options, and so forth; other presentations include less information, or provide abridged information for easy use by the user.

In various example embodiments, the user interface is an example of a message composition user interface of a social messaging app executing on a mobile device. In an embodiment, the user interface1600includes message content comprising an image (still photos/pictures or video) (e.g., captured by a camera sensor of the user device1600).

Modules, Components, and Logic

Certain embodiments are described herein as including logic or a number of components, modules, or mechanisms. Modules can constitute either software modules (e.g., code embodied on a machine-readable medium or in a transmission signal) or hardware modules. A “hardware module” is a tangible unit capable of performing certain operations and can be configured or arranged in a certain physical manner. In various example embodiments, one or more computer systems (e.g., a standalone computer system, a client computer system, or a server computer system) or one or more hardware modules of a computer system (e.g., a processor or a group of processors) is configured by software (e.g., an application or application portion) as a hardware module that operates to perform certain operations as described herein.

In some embodiments, a hardware module is implemented mechanically, electronically, or any suitable combination thereof. For example, a hardware module can include dedicated circuitry or logic that is permanently configured to perform certain operations. For example, a hardware module can be a special-purpose processor, such as a Field-Programmable Gate Array (FPGA) or an Application Specific Integrated Circuit (ASIC). A hardware module may also include programmable logic or circuitry that is temporarily configured by software to perform certain operations. For example, a hardware module can include software encompassed within a general-purpose processor or other programmable processor. It will be appreciated that the decision to implement a hardware module mechanically, in dedicated and permanently configured circuitry, or in temporarily configured circuitry (e.g., configured by software) can be driven by cost and time considerations.

Accordingly, the phrase “hardware module” should be understood to encompass a tangible entity, be that an entity that is physically constructed, permanently configured (e.g., hardwired), or temporarily configured (e.g., programmed) to operate in a certain manner or to perform certain operations described herein. As used herein, “hardware-implemented module” refers to a hardware module. Considering embodiments in which hardware modules are temporarily configured (e.g., programmed), each of the hardware modules need not be configured or instantiated at any one instance in time. For example, where a hardware module comprises a general-purpose processor configured by software to become a special-purpose processor, the general-purpose processor may be configured as respectively different special-purpose processors (e.g., comprising different hardware modules) at different times. Software can accordingly configure a particular processor or processors, for example, to constitute a particular hardware module at one instance of time and to constitute a different hardware module at a different instance of time.

Hardware modules can provide information to, and receive information from, other hardware modules. Accordingly, the described hardware modules can be regarded as being communicatively coupled. Where multiple hardware modules exist contemporaneously, communications can be achieved through signal transmission (e.g., over appropriate circuits and buses) between or among two or more of the hardware modules. In embodiments in which multiple hardware modules are configured or instantiated at different times, communications between such hardware modules may be achieved, for example, through the storage and retrieval of information in memory structures to which the multiple hardware modules have access. For example, one hardware module performs an operation and stores the output of that operation in a memory device to which it is communicatively coupled. A further hardware module can then, at a later time, access the memory device to retrieve and process the stored output. Hardware modules can also initiate communications with input or output devices, and can operate on a resource (e.g., a collection of information).

The various operations of example methods described herein can be performed, at least partially, by one or more processors that are temporarily configured (e.g., by software) or permanently configured to perform the relevant operations. Whether temporarily or permanently configured, such processors constitute processor-implemented modules that operate to perform one or more operations or functions described herein. As used herein, “processor-implemented module” refers to a hardware module implemented using one or more processors.

Similarly, the methods described herein can be at least partially processor-implemented, with a particular processor or processors being an example of hardware. For example, at least some of the operations of a method can be performed by one or more processors or processor-implemented modules. Moreover, the one or more processors may also operate to support performance of the relevant operations in a “cloud computing” environment or as a “software as a service” (SaaS). For example, at least some of the operations may be performed by a group of computers (as examples of machines including processors), with these operations being accessible via a network (e.g., the Internet) and via one or more appropriate interfaces (e.g., an Application Program Interface (API)).

The performance of certain of the operations may be distributed among the processors, not only residing within a single machine, but deployed across a number of machines. In some example embodiments, the processors or processor-implemented modules are located in a single geographic location (e.g., within a home environment, an office environment, or a server farm). In other example embodiments, the processors or processor-implemented modules are distributed across a number of geographic locations.

Software Architecture

FIG.17is a block diagram1700illustrating an architecture of software1702, which can be installed on any one or more of the devices described above.FIG.17is merely a non-limiting example of a software architecture, and it will be appreciated that many other architectures can be implemented to facilitate the functionality described herein. In various embodiments, the software1702is implemented by hardware such as machine1800ofFIG.18that includes processors1810, memory1830, and input/output (I/O) components1850. In this example architecture, the software1702can be conceptualized as a stack of layers where each layer may provide a particular functionality. For example, the software1702includes layers such as an operating system1704, libraries1706, frameworks1708, and applications1710. Operationally, the applications1710invoke API calls1712through the software stack and receive messages1714in response to the API calls1712, consistent with some embodiments. In one example, the mood detection system160operates as an application1710.

In various implementations, the operating system1704manages hardware resources and provides common services. The operating system1704includes, for example, a kernel1720, services1722, and drivers1724. The kernel1720acts as an abstraction layer between the hardware and the other software layers consistent with some embodiments. For example, the kernel1720provides memory management, processor management (e.g., scheduling), component management, networking, and security settings, among other functionality. The services1722can provide other common services for the other software layers. The drivers1724are responsible for controlling or interfacing with the underlying hardware, according to some embodiments. For instance, the drivers1724can include display drivers, camera drivers, BLUETOOTH® drivers, flash memory drivers, serial communication drivers (e.g., Universal Serial Bus (USB) drivers), WI-FI® drivers, audio drivers, power management drivers, and so forth.

In some embodiments, the libraries1706provide a low-level common infrastructure utilized by the applications1710. The libraries1706can include system libraries1730(e.g., C standard library) that can provide functions such as memory allocation functions, string manipulation functions, mathematic functions, and the like. In addition, the libraries1706can include API libraries1732such as media libraries (e.g., libraries to support presentation and manipulation of various media formats such as Moving Picture Experts Group-4 (MPEG4), Advanced Video Coding (H.264 or AVC), Moving Picture Experts Group Layer-3 (MP3), Advanced Audio Coding (AAC), Adaptive Multi-Rate (AMR) audio codec, Joint Photographic Experts Group (JPEG or JPG), or Portable Network Graphics (PNG)), graphics libraries (e.g., an OpenGL framework used to render in two dimensions (2D) and three dimensions (3D) in a graphic content on a display), database libraries (e.g., SQLite to provide various relational database functions), web libraries (e.g., WebKit to provide web browsing functionality), and the like. The libraries1706can also include a wide variety of other libraries1734to provide many other APIs to the applications1710.

The frameworks1708provide a high-level common infrastructure that can be utilized by the applications1710, according to some embodiments. For example, the frameworks1708provide various graphic user interface (GUI) functions, high-level resource management, high-level location services, and so forth. The frameworks1708can provide a broad spectrum of other APIs that can be utilized by the applications1710, some of which may be specific to a particular operating system or platform.

In an example embodiment, the applications1710include a home application1750, a contacts application1752, a browser application1754, a book reader application1756, a location application1758, a media application1760, a messaging application1762, a game application1764, and a broad assortment of other applications such as a third party application1766. According to some embodiments, the applications1710are programs that execute functions defined in the programs. Various programming languages can be employed to create one or more of the applications1710, structured in a variety of manners, such as object-oriented programming languages (e.g., Objective-C, Java, or C++) or procedural programming languages (e.g., C or assembly language). In a specific example, the third party application1766(e.g., an application developed using the ANDROID™ or IOS™ software development kit (SDK) by an entity other than the vendor of the particular platform) may be mobile software running on a mobile operating system such as IOS™, ANDROID™, WINDOWS® Phone, or another mobile operating systems. In this example, the third party application1766can invoke the API calls1712provided by the operating system1704to facilitate functionality described herein.

Example Machine Architecture and Machine-Readable Medium

FIG.18is a block diagram illustrating components of a machine1800, according to some embodiments, able to read instructions from a machine-readable medium (e.g., a machine-readable storage medium) and perform any one or more of the methodologies discussed herein. Specifically,FIG.18shows a diagrammatic representation of the machine1800in the example form of a computer system, within which instructions1816(e.g., software, a program, an application, an applet, an app, or other executable code) for causing the machine1800to perform any one or more of the methodologies discussed herein can be executed. In alternative embodiments, the machine1800operates as a standalone device or can be coupled (e.g., networked) to other machines. In a networked deployment, the machine1800may operate in the capacity of a server machine or a client machine in a server-client network environment, or as a peer machine in a peer-to-peer (or distributed) network environment. The machine1800can comprise, but not be limited to, a server computer, a client computer, a personal computer (PC), a tablet computer, a laptop computer, a netbook, a set-top box (STB), a personal digital assistant (PDA), an entertainment media system, a cellular telephone, a smart phone, a mobile device, a wearable device (e.g., a smart watch), a smart home device (e.g., a smart appliance), other smart devices, a web appliance, a network router, a network switch, a network bridge, or any machine capable of executing the instructions1816, sequentially or otherwise, that specify actions to be taken by the machine1800. Further, while only a single machine1800is illustrated, the term “machine” shall also be taken to include a collection of machines1800that individually or jointly execute the instructions1816to perform any one or more of the methodologies discussed herein. In one specific example, the various modules220,240,260,280are included in the instructions1816.

In various embodiments, the machine1800comprises processors1810, memory1830, and I/O components1850, which can be configured to communicate with each other via a bus1802. In an example embodiment, the processors1810(e.g., a Central Processing Unit (CPU), a Reduced Instruction Set Computing (RISC) processor, a Complex Instruction Set Computing (CISC) processor, a Graphics Processing Unit (GPU), a Digital Signal Processor (DSP), an Application Specific Integrated Circuit (ASIC), a Radio-Frequency Integrated Circuit (RFIC), another processor, or any suitable combination thereof) includes, for example, a processor1812and a processor1814that may execute the instructions1816. The term “processor” is intended to include multi-core processors that may comprise two or more independent processors (also referred to as “cores”) that can execute instructions contemporaneously. AlthoughFIG.18shows multiple processors, the machine1800may include a single processor with a single core, a single processor with multiple cores (e.g., a multi-core processor), multiple processors with a single core, multiple processors with multiples cores, or any combination thereof.

The memory1830comprises a main memory1832, a static memory1834, and a storage unit1836accessible to the processors1810via the bus1802, according to some embodiments. The storage unit1836can include a machine-readable medium1838on which are stored the instructions1816embodying any one or more of the methodologies or functions described herein. The instructions1816can also reside, completely or at least partially, within the main memory1832, within the static memory1834, within at least one of the processors1810(e.g., within the processor's cache memory), or any suitable combination thereof, during execution thereof by the machine1800. Accordingly, in various embodiments, the main memory1832, the static memory1834, and the processors1810are considered machine-readable media1838.

As used herein, the term “memory” refers to a machine-readable medium1838able to store data temporarily or permanently and may be taken to include, but not be limited to, random-access memory (RAM), read-only memory (ROM), buffer memory, flash memory, and cache memory. While the machine-readable medium1838is shown in an example embodiment to be a single medium, the term “machine-readable medium” should be taken to include a single medium or multiple media (e.g., a centralized or distributed database, or associated caches and servers) able to store the instructions1816. The term “machine-readable medium” shall also be taken to include any medium, or combination of multiple media, that is capable of storing instructions (e.g., instructions1816) for execution by a machine (e.g., machine1800), such that the instructions, when executed by one or more processors of the machine1800(e.g., processors1810), cause the machine1800to perform any one or more of the methodologies described herein. Accordingly, a “machine-readable medium” refers to a single storage apparatus or device, as well as “cloud-based” storage systems or storage networks that include multiple storage apparatus or devices. The term “machine-readable medium” shall accordingly be taken to include, but not be limited to, one or more data repositories in the form of a solid-state memory (e.g., flash memory), an optical medium, a magnetic medium, other non-volatile memory (e.g., Erasable Programmable Read-Only Memory (EPROM)), or any suitable combination thereof. The term “machine-readable medium” specifically excludes non-statutory signals per se.

The I/O components1850include a wide variety of components to receive input, provide output, produce output, transmit information, exchange information, capture measurements, and so on. In general, it will be appreciated that the I/O components1850can include many other components that are not shown inFIG.18. The I/O components1850are grouped according to functionality merely for simplifying the following discussion, and the grouping is in no way limiting. In various example embodiments, the I/O components1850include output components1852and input components1854. The output components1852include visual components (e.g., a display such as a plasma display panel (PDP), a light emitting diode (LED) display, a liquid crystal display (LCD), a projector, or a cathode ray tube (CRT)), acoustic components (e.g., speakers), haptic components (e.g., a vibratory motor), other signal generators, and so forth. The input components1854include alphanumeric input components (e.g., a keyboard, a touch screen configured to receive alphanumeric input, a photo-optical keyboard, or other alphanumeric input components), point based input components (e.g., a mouse, a touchpad, a trackball, a joystick, a motion sensor, or other pointing instruments), tactile input components (e.g., a physical button, a touch screen that provides location and force of touches or touch gestures, or other tactile input components), audio input components (e.g., a microphone), and the like.

In some further example embodiments, the I/O components1850include biometric components1856, motion components1858, environmental components1860, or position components1862, among a wide array of other components. For example, the biometric components1856include components to detect expressions (e.g., hand expressions, facial expressions, vocal expressions, body gestures, or eye tracking), measure biosignals (e.g., blood pressure, heart rate, body temperature, perspiration, or brain waves), identify a person (e.g., voice identification, retinal identification, facial identification, fingerprint identification, or electroencephalogram based identification), and the like. The motion components1858include acceleration sensor components (e.g., accelerometer), gravitation sensor components, rotation sensor components (e.g., gyroscope), and so forth. The environmental components1860include, for example, illumination sensor components (e.g., photometer), temperature sensor components (e.g., one or more thermometers that detect ambient temperature), humidity sensor components, pressure sensor components (e.g., barometer), acoustic sensor components (e.g., one or more microphones that detect background noise), proximity sensor components (e.g., infrared sensors that detect nearby objects), gas sensor components (e.g., machine olfaction detection sensors, gas detection sensors to detect concentrations of hazardous gases for safety or to measure pollutants in the atmosphere), or other components that may provide indications, measurements, or signals corresponding to a surrounding physical environment. The position components1862include location sensor components (e.g., a Global Positioning System (GPS) receiver component), altitude sensor components (e.g., altimeters or barometers that detect air pressure from which altitude may be derived), orientation sensor components (e.g., magnetometers), and the like.

Communication can be implemented using a wide variety of technologies. The I/O components1850may include communication components1864operable to couple the machine1800to a network1880or devices1870via a coupling1882and a coupling1872, respectively. For example, the communication components1864include a network interface component or another suitable device to interface with the network1880. In further examples, communication components1864include wired communication components, wireless communication components, cellular communication components, Near Field Communication (NFC) components, BLUETOOTH® components (e.g., BLUETOOTH® Low Energy), WI-FI® components, and other communication components to provide communication via other modalities. The devices1870may be another machine or any of a wide variety of peripheral devices (e.g., a peripheral device coupled via a Universal Serial Bus (USB)).

Moreover, in some embodiments, the communication components1864detect identifiers or include components operable to detect identifiers. For example, the communication components1864include Radio Frequency Identification (RFID) tag reader components, NFC smart tag detection components, optical reader components (e.g., an optical sensor to detect a one-dimensional bar codes such as a Universal Product Code (UPC) bar code, multi-dimensional bar codes such as a Quick Response (QR) code, Aztec Code, Data Matrix, Dataglyph, MaxiCode, PDF417, Ultra Code, Uniform Commercial Code Reduced Space Symbology (UCC RSS)-2D bar codes, and other optical codes), acoustic detection components (e.g., microphones to identify tagged audio signals), or any suitable combination thereof. In addition, a variety of information can be derived via the communication components1864, such as location via Internet Protocol (IP) geolocation, location via WI-FI® signal triangulation, location via detecting a BLUETOOTH® or NFC beacon signal that may indicate a particular location, and so forth.

Transmission Medium

In various example embodiments, one or more portions of the network1880can be an ad hoc network, an intranet, an extranet, a virtual private network (VPN), a local area network (LAN), a wireless LAN (WLAN), a wide area network (WAN), a wireless WAN (WWAN), a metropolitan area network (MAN), the Internet, a portion of the Internet, a portion of the Public Switched Telephone Network (PSTN), a plain old telephone service (POTS) network, a cellular telephone network, a wireless network, a WI-FI® network, another type of network, or a combination of two or more such networks. For example, the network1880or a portion of the network1880may include a wireless or cellular network, and the coupling1882may be a Code Division Multiple Access (CDMA) connection, a Global System for Mobile communications (GSM) connection, or another type of cellular or wireless coupling. In this example, the coupling1882can implement any of a variety of types of data transfer technology, such as Single Carrier Radio Transmission Technology (1×RTT), Evolution-Data Optimized (EVDO) technology, General Packet Radio Service (GPRS) technology, Enhanced Data rates for GSM Evolution (EDGE) technology, third Generation Partnership Project (3GPP) including 3G, fourth generation wireless (4G) networks, Universal Mobile Telecommunications System (UMTS), High Speed Packet Access (HSPA), Worldwide Interoperability for Microwave Access (WiMAX), Long Term Evolution (LTE) standard, others defined by various standard-setting organizations, other long range protocols, or other data transfer technology.

In example embodiments, the instructions1816are transmitted or received over the network1880using a transmission medium via a network interface device (e.g., a network interface component included in the communication components1864) and utilizing any one of a number of well-known transfer protocols (e.g., Hypertext Transfer Protocol (HTTP)). Similarly, in other example embodiments, the instructions1816are transmitted or received using a transmission medium via the coupling1872(e.g., a peer-to-peer coupling) to the devices1870. The term “transmission medium” shall be taken to include any intangible medium that is capable of storing, encoding, or carrying the instructions1816for execution by the machine1800, and includes digital or analog communications signals or other intangible media to facilitate communication of such software.

Furthermore, the machine-readable medium1838is non-transitory (in other words, not having any transitory signals) in that it does not embody a propagating signal. However, labeling the machine-readable medium1838“non-transitory” should not be construed to mean that the medium is incapable of movement; the medium should be considered as being transportable from one physical location to another. Additionally, since the machine-readable medium1838is tangible, the medium may be considered to be a machine-readable device.

Language

Throughout this specification, plural instances may implement components, operations, or structures described as a single instance. Although individual operations of one or more methods are illustrated and described as separate operations, one or more of the individual operations may be performed concurrently, and nothing requires that the operations be performed in the order illustrated. Structures and functionality presented as separate components in example configurations may be implemented as a combined structure or component. Similarly, structures and functionality presented as a single component may be implemented as separate components. These and other variations, modifications, additions, and improvements fall within the scope of the subject matter herein.

Although an overview of the inventive subject matter has been described with reference to specific example embodiments, various modifications and changes may be made to these embodiments without departing from the broader scope of embodiments of the present disclosure. Such embodiments of the inventive subject matter may be referred to herein, individually or collectively, by the term “invention” merely for convenience and without intending to voluntarily limit the scope of this application to any single disclosure or inventive concept if more than one is, in fact, disclosed.

The embodiments illustrated herein are described in sufficient detail to enable those skilled in the art to practice the teachings disclosed. Other embodiments may be used and derived therefrom, such that structural and logical substitutions and changes may be made without departing from the scope of this disclosure. The Detailed Description, therefore, is not to be taken in a limiting sense, and the scope of various embodiments is defined only by the appended claims, along with the full range of equivalents to which such claims are entitled.

As used herein, the term “or” may be construed in either an inclusive or exclusive sense. Moreover, plural instances may be provided for resources, operations, or structures described herein as a single instance. Additionally, boundaries between various resources, operations, modules, engines, and data stores are somewhat arbitrary, and particular operations are illustrated in a context of specific illustrative configurations. Other allocations of functionality are envisioned and may fall within a scope of various embodiments of the present disclosure. In general, structures and functionality presented as separate resources in the example configurations may be implemented as a combined structure or resource. Similarly, structures and functionality presented as a single resource may be implemented as separate resources. These and other variations, modifications, additions, and improvements fall within a scope of embodiments of the present disclosure as represented by the appended claims. The specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense.