Aspects and implementations of the present disclosure relate to user-selected viewpoint rendering of a virtual meeting.
A platform can enable users to connect with other users through a video-based or audio-based virtual meeting (e.g., a conference call). The platform can provide tools that allow multiple client devices to connect over a network and share each other's audio data (e.g., a voice of a user recorded via a microphone of a client device) and/or video data (e.g., a video captured by a camera of a client device, or video captured from a screen image of the client device) for efficient communication. In some instances, multiple client devices can capture video and/or audio data for a user, or a group of users (e.g., in the same meeting room), during a virtual meeting. For example, a camera of a first client device (e.g., a personal computer) can capture first image data depicting a user (or group of users) at a first angle or position during a virtual meeting and a second client device (e.g., a mobile device) can capture second image data depicting the user(s) at a second angle or position during the virtual meeting. Other users attending the virtual meeting may view the user(s) at the first angle or position or second angle or position. However, the other users may not be able to view the user(s) at any other angles or positions (e.g., other than the first and/or second angles or positions), as no client device(s) captured image data at the other angles or positions. Accordingly, platforms may be limited in the viewpoints that can be provided to participants during a virtual meeting.
The below summary is a simplified summary of the disclosure in order to provide a basic understanding of some aspects of the disclosure. This summary is not an extensive overview of the disclosure. It is intended neither to identify key or critical elements of the disclosure, nor to delineate any scope of the particular implementations of the disclosure or any scope of the claims. Its sole purpose is to present some concepts of the disclosure in a simplified form as a prelude to the more detailed description that is presented later.
In some implementations, a method is disclosed for user-selected viewpoint rendering of a virtual meeting. The method obtaining, by a processing device associated with a platform, first image data generated by a first client device during a virtual meeting and second image data generated by a second client device during the virtual meeting. The first image data depicts one or more objects captured from a first vantage point and the second image data depicts the one or more objects captured from a second vantage point. The method further includes receiving, by the processing device, a request from a third client device for third image data depicting the one or more objects captured from a third vantage point. The method further includes generating, by the processing device, the third image data depicting the one or more objects corresponding to the third vantage point based on the first image data and the second image data. The method further includes providing, by the processing device, a rendering of the third image data for presentation via a graphical user interface (GUI) of the third client device during the virtual meeting in accordance with the request.
Aspects and implementations of the present disclosure will be understood more fully from the detailed description given below and from the accompanying drawings of various aspects and implementations of the disclosure, which, however, should not be taken to limit the disclosure to the specific aspects or implementations, but are for explanation and understanding only.
Aspects of the present disclosure relate to user-selected viewpoint rendering of a virtual meeting. A platform can enable users to connect with other users through a video or audio-based virtual meeting (e.g., a conference call, etc.). A video-based virtual meeting refers to a meeting during which a client device connected to the platform captures and transmits image data (e.g., collected by a camera of the client device) and/or audio data (e.g., collected by a microphone of the client device) to other client devices connected to the platform. The image data can, in some instances, depict a user or a group of users that are participating in the virtual meeting. The audio data can include, in some instances, an audio recording of audio provided by the user or group of users during the virtual meeting. An audio-based virtual meeting refers to a meeting during which a client device captures and transmits audio data (e.g., without generating and/or transmitting image data) to other client devices connected to the platform.
In some instances, multiple client devices can generate image data for the same or a similar scene during a virtual meeting. In an illustrative example, multiple users may attend an event (e.g., a birthday party, a wedding ceremony, etc.). Each user attending the event (referred to as an attendant) may use a respective client device to capture image data depicting scenes of the event. The client devices can provide the captured image data to the platform and the platform can share the image data with client devices of other users (e.g., that are not attending the event). Each client device capturing image data at the event may be at a different position or angle from other client devices (e.g., associated with other attendants) capturing image data of the event. Accordingly, the image data collected by each respective client device can depict a distinct perspective or viewpoint of the event. In some instances, participants of the virtual meeting that are not attending the event can access the image data depicting each distinct perspective or viewpoint of the event, and be presented with first image data depicting the event at a first perspective or viewpoint (generated by a first client device at the event) via a user interface (UI). In response to a user engaging with one or more elements (e.g., buttons, etc.) of the UI, the platform can provide second image data depicting a second perspective or viewpoint (generated by a second client device at the event) via the UI. Enabling the user to find image data that depicts a perspective or viewpoint of interest to the user can consume a large amount of computing resources (e.g., processing cycles, memory space, etc.) of the client device and/or of the platform. In some instances, the image data collected by the client devices at the event may not depict a perspective or viewpoint of interest to the user. In such instances, the user may not be engaged with the virtual meeting and the image data generated and transmitted to the platform may be wasted.
In other or similar instances, a virtual meeting can involve multiple participants that participate in the virtual meeting at the same location (e.g., in the same conference room during a conference call discussion). In some instances, a single client device (e.g., a dedicated conference room camera, a personal computer, a mobile device, etc.) may be located in the conference room and can generate image data depicting the participants in the conference room at a single position or angle for the duration of the conference call. Other participants of the conference call (e.g., that are accessing the conference call via other client devices connected to the platform) may be unable to view the participants in the conference room at a different position or angle than the position or angle of the client device generating the image data. In some instances, the image data generated by the client device may depict some but not all participants in the conference room. In other or similar instances, one or more participants in the conference room may be located too far or too close to the client device for the client device to generate image data that accurately depicts those participants during the virtual meeting. In the above described instances, the image data depicting the participants in the conference room may not provide other participants of the conference call with a complete view of the participants in the conference room. In at least some of the above described instances, the image data generated by the client device may not depict a speaker or presenter of the conference call discussion. In such instances, the other participants of the conference call (e.g., that are not located in the conference room) may not be able to focus on the speaker or the presenter and therefore may not be fully engaged with the conference call discussion. Further, some client devices (e.g., dedicated conference room cameras, etc.) can be configured to zoom in on a participant in a conference room upon detecting that the participant is speaking or presenting. Other participants or objects of interest may not be depicted in image data that is generated by a client device that is zoomed in on a participant that is speaking or presenting. Accordingly, other participants of the conference call may not be able to view non-speaking or non-presenting participants and/or other objects of interest in the conference room. In some instances, such other participants may not be fully engaged in the conference call. Accordingly, the other participants may not be fully engaged with the virtual meeting and, in some instances, speakers and/or presenters may not communicate clearly and effectively with such participants. Image data that is not of interest to other participants of the virtual meeting is therefore wasted, resulting in unnecessary consumption of computing resources of the client devices that generate the image data, the platform, and/or the client devices that access the image data during the virtual meeting. The consumed resources are unavailable to other processes of the system, which can reduce an overall efficiency and increase an overall latency of the system.
Aspects of the present disclosure address the above and other deficiencies by providing user-selected viewpoint rendering of a virtual meeting. Multiple client devices can be located at distinct positions in an environment prior to or during a virtual meeting. In some embodiments, each client device can be located at a position of the environment corresponding to a distinct vantage point of the environment. One or more participants (or objects) of the virtual meeting can be located in a region of the environment that is within a vantage point of two or more client devices in the environment. In one or more embodiments, the client devices can be placed in locations of the environment such that the image data generated by the multiple client devices corresponds to a 360-degree view of the participant(s) (or object(s)) within the environment. An example set-up of multiple client devices in an environment, according to embodiments of the present disclosure, is provided with respect to
During the virtual meeting, each of the multiple client devices can generate image data depicting the participants or object(s) and transmit the generated image data to a platform (e.g., a virtual meeting platform). The platform can provide at least a portion of the image data received from the client devices to additional client devices associated with additional participants of the virtual meeting. In an illustrative example, the platform can provide image data generated by a first client device located in the environment to one or more client devices associated with additional participants of the virtual meeting. An additional participant can access the image data depicting the participant(s) or object(s) in the environment (e.g., generated by the first client device) via a UI of an additional client device associated with the additional participant. The portion of the image data accessed via the UI of the respective additional client device can depict the participant(s) or object(s) in the environment from a perspective or viewpoint corresponding to the distinct vantage point of the first client device in the environment.
In some embodiments, the additional participant that is accessing the image data depicting the perspective or viewpoint of the first client device can provide a request to the additional client device to access image data depicting a different perspective or viewpoint in the environment. The additional participant can provide the request by engaging with one or more UI elements (e.g., buttons) of the UI, in some embodiments. In other or similar embodiments, the additional participant can provide the request by selecting (e.g., clicking, tapping, etc.) a region of the environment depicted by the image data that corresponds to the requested perspective or viewpoint. In additional or alternative embodiments, the additional participant can provide the request by providing a prompt (e.g., a text-based prompt, an audio-based prompt, etc.) to an interface associated with a generative model.
In some embodiments, the requested perspective or viewpoint does not correspond to a vantage point of a client device located in the environment. For example, the additional participant can request a perspective or viewpoint that corresponds to a vantage point between the vantage points of two or more client devices in the environment. The platform can generate image data depicting the participant(s) and/or the object(s) at the requested perspective or viewpoint based on the image data generated by the two or more client devices having the vantage points that surround the vantage point of the requested perspective or viewpoint, as described herein.
In some embodiments, the platform can synchronize the image data generated by the two or more client devices prior to generating the image data depicting the participant(s) and/or the object(s) at the requested perspective or viewpoint. For example, the two or more client devices may by fabricated by different manufacturers and/or may be subject to different image capture settings. Accordingly, the timestamps of image frames generated by the two or more client devices may be different. The platform can determine a difference between the timestamps of the image frames generated by the client devices and can generate a mapping between corresponding image frames generated by the client devices based on the determined timestamp difference to synchronize the image data generated by the client devices. Data indicating the image data generated by the client devices and the generated mappings between the corresponding image frames of the generated image data is referred to herein as synchronized image data. Further details regarding synchronizing the image data and timestamp mapping are described with respect to
In some embodiments, a machine learning model can be trained to predict characteristics (e.g., pixel dimension, pixel depth, color mode, etc.) of image data depicting object(s) in an environment at a target perspective or viewpoint based on given image data depicting the object(s) in the environment at two or more perspectives or viewpoints. The platform can feed the synchronized image data and an indication of the requested perspective or viewpoint as input to the model and can obtain one or more outputs of the model. The one or more outputs can indicate characteristics of image data depicting the participant(s) and/or object(s) in the environment at the requested perspective or viewpoint. The platform can render the image data depicting the participant(s) and/or object(s) at the requested perspective or viewpoint based on the image data indicated by the one or more outputs of the model and can provide the rendered image data to the additional client device (e.g., that provided the request) for presentation to the additional participant of the virtual meeting via a UI of the additional client device. Accordingly, the platform can provide the additional participant with access to an image depicting participant(s) and/or object(s) from a requested perspective or viewpoint in an environment even though no client device in the environment has a vantage point corresponding to the requested perspective or viewpoint.
As indicated above, aspects of the present disclosure cover techniques to enable a user to access images depicting participant(s) or object(s) of a virtual meeting from a requested perspective or viewpoint that does not correspond to a vantage point of a client device generating image data of the participant(s) or object(s) during the virtual meeting. Accordingly, the user can access a perspective or viewpoint of the meeting that is of interest to the user, even though no client devices in the environment of the virtual meeting have a vantage point corresponding to the perspective or viewpoint. As such, the user can be more engaged in the meeting and the overall experience of the user during the virtual meeting can be improved. As the user accesses a perspective or viewpoint of interest and is more engaged in the virtual meeting, image data that is generated by client devices and transmitted to the platform is not wasted and an overall efficiency and overall latency of the system can be improved. In addition, the platform is able to provide, to users, images that depict more perspectives or viewpoints of the virtual meeting than are provided by the vantage points of the client devices capturing the image data in an environment of the virtual meeting and fewer overall client devices may be involved in the setup of the virtual meeting. As fewer client devices are involved in the setup of the virtual meeting, fewer client devices are capturing and transmitting data to the platform, which can further improve an overall efficiency and an overall latency of the system.
In some implementations, data store 110 is a persistent storage that is capable of storing data as well as data structures to tag, organize, and index the data. In some embodiments, a data item can correspond to one or more portions of a document and/or a file displayed via a graphical user interface (GUI) on a client device 102, in accordance with embodiments described herein. Data store 110 can be hosted by one or more storage devices, such as main memory, magnetic or optical storage based disks, tapes or hard drives, NAS, SAN, and so forth. In some implementations, data store 110 can be a network-attached file server, while in other embodiments data store 110 can be some other type of persistent storage such as an object-oriented database, a relational database, and so forth, that may be hosted by platform 120 or one or more different machines coupled to the platform 120 via network 104.
Platform 120 can enable users of client devices 102A-N to connect with each other via a virtual meeting (e.g., virtual meeting 160). A virtual meeting 160 can be a video-based virtual meeting, which includes a meeting during which a client device 102 connected to platform 120 captures and transmits image data (e.g., collected by a camera of a client device 102) and/or audio data (e.g., collected by a microphone of the client device 102) to other client devices 102 connected to platform 120. The image data can, in some embodiments, depict a user or group of users that are participating in the virtual meeting 160. The audio data can include, in some embodiments, an audio recording of audio provided by the user or group of users during the virtual meeting 160. In additional or alternative embodiments, the virtual meeting 160 can be an audio-based virtual meeting, which includes a meeting during which a client device 102 captures and transmits audio data (e.g., without generating and/or transmitting image data) to other client devices 102 connected to platform 120. In some instances, a virtual meeting can include or otherwise be referred to as a conference call. In such instances, a video-based virtual meeting can include or otherwise be referred to as a video-based conference call and an audio-based virtual meeting can include or otherwise be referred to as an audio-based conference call.
The client devices 102A-N can each include computing devices such as personal computers (PCs), laptops, mobile phones, smart phones, tablet computers, netbook computers, network-connected televisions, etc. In additional or alternative embodiments, client devices 102A-N, or one or more components of client devices 102A-102N, can be included in a virtual reality (VR) system (e.g., a wearable VR system). For example, a client device 102 can be included in a VR headset that is worn by a user of platform 120 (e.g., during a virtual meeting). In some implementations, client devices 102A-N may also be referred to as “user devices.” A client device 102 can include an audiovisual component that can generate audio and video data to be streamed to conference platform 120. In some implementations, the audiovisual component can include one or more devices (e.g., a microphone, etc.) that capture an audio signal representing audio provided by the user. The audiovisual component can generate audio data (e.g., an audio file or audio stream) based on the captured audio signal. In some embodiments, the audiovisual component can additionally or alternatively include one or more devices (e.g., a speaker) that output data to a user associated with a particular client device 102. In some embodiments, the audiovisual component can additionally or alternatively include an image capture device (e.g., a camera) to capture images and generate image data (e.g., a video stream) of the captured images.
In some embodiments, one or more client devices 102 can be devices of a physical conference room or a meeting room. Such client devices 102 can be included at or otherwise coupled to a media system 132 that includes one or more display devices 136, one or more speakers 140 and/or one or more cameras 142. A display device 136 can be or otherwise include a smart display or a non-smart display (e.g., a display that is not itself configured to connect to platform 120 or other components of system 100 via network 104). Users that are physically present in the conference room or the meeting room can use media system 132 rather than their own client devices 102 to participate in a virtual meeting, which may include other remote participants. For example, participants in the conference room or meeting room that participate in the virtual meeting may control display 136 to share a slide presentation with, or watch a slide presentation of, other participants that are accessing the virtual meeting remotely. Sound and/or camera control can similarly be performed. As described above, a client device 102 connected to a media system 132 can generate audio and video data to be streamed to platform 120 (e.g., using one or more microphones (not shown), speaker(s) 140 and/or camera(s) 142).
Client devices 102A-N can each include a content viewer, in some embodiments. In some implementations, a content viewer can be an application that provides a user interface (UI) (sometimes referred to as a graphical user interface (GUI)) for users to access a virtual meeting 160 hosted by platform 120. The content viewer can be included in a web browser and/or a client application (e.g., a mobile application, a desktop application, etc.). In one or more examples, a user of client device 102A can join and participate in a virtual meeting 160 via UI 124A presented via display 103A via the web browser and/or client application. A user can also present or otherwise share a document to other participants of the virtual meeting 160 via each of UIs 124A-124N. Each of UIs 124A-124N can include multiple regions that enable presentation of visual items corresponding to video streams of client devices 102A-102N provided to platform 120 during the virtual meeting 160.
In some embodiments, platform 120 can include a virtual meeting manager 152. Virtual meeting manager 152 can be configured to manage a virtual meeting 160 between two or more users of platform 120. In some embodiments, virtual meeting manager 152 can provide UI 142 to each of client devices 102 to enable users to watch and listen to each other during a video conference. Virtual meeting manager 152 can also collect and provide data associated with the virtual meeting 160 to each participant of the virtual meeting 160. Further details regarding virtual meeting manger 152 are provided herein.
In some embodiments, two or more client devices 102 can generate image data (e.g., a video stream) of a participant (or group of participants) or an object (or group of objects) in an environment during a virtual meeting 160. In one example, virtual meeting 160 can correspond to an event, such as a birthday party or a wedding ceremony. A first user can access virtual meeting 160 via UI 124A of client device 102A and a second user can access virtual meeting 160 via UI 124B of client device 102B. The first user can direct a camera component of client device 102A to generate image data depicting one or more objects of the event from a first perspective or viewpoint and the second user can direct a camera component of client device 102B to generate image data depicting the one or more objects from a second perspective or viewpoint. Client device 102A and client device 102B can each transmit the generated image data to platform 120. Other participants of the virtual meeting 160 may access the image data generated by client device 102A and/or client device 102B via a UI 124 of a respective client device 102 associated with the other participants, in some embodiments. In another illustrative example, one or more participants of virtual meeting 160 can be located in a conference room (e.g., that includes media system 132). A camera 142 of media system 132 can capture and transmit image data (e.g., to platform 120) depicting the one or more participants in the conference room at a first perspective or viewpoint. Another camera 142 of media system 132 (or a camera component of a client device 102) can capture and transmit image data (e.g., to platform 120) depicting the one or more participants in the conference room at the second perspective or viewpoint. Other participants of the virtual meeting 160 can access the image data generated by camera(s) 142 and/or the client device(s) 102 via a UI 124 of a respective client device 102 associated with the other participants, as described above.
As indicated above, each client device 102 that generates image data during a virtual meeting 160 can be associated with a distinct vantage point relative to objects in an environment, where each distinct vantage point corresponds to a distinct perspective or viewpoint and represents a location from which the image data is captured during virtual meeting 160. In some embodiments, a participant that is accessing the virtual meeting 160 can request (e.g., via a client device 102) to access image data depicting the objects in the environment at a perspective or viewpoint that does not correspond to a vantage point of a client device in the environment. In response to such a request, platform 120 can generate image data that depicts the objects in the environment at the requested perspective or viewpoint based on image data that is generated by client devices 102 having vantage points that surround the vantage point corresponding to the requested perspective or viewpoint. In some embodiments, platform 120 can generate the image data based on one or more outputs obtained from a machine learning model of predictive system 180. Further details regarding generating image data and predictive system 180 are described herein.
It should be noted that although
In general, functions described in implementations as being performed platform 120, server machine 150 and/or predictive system 180 can also be performed on the client devices 102A-N in other implementations. In addition, the functionality attributed to a particular component can be performed by different or multiple components operating together. Platform 120 can also be accessed as a service provided to other systems or devices through appropriate application programming interfaces, and thus is not limited to use in websites.
Although implementations of the disclosure are discussed in terms of platform 120 and users of platform 120 accessing a conference call hosted by platform 120. Implementations of the disclosure are not limited to conference platforms and can be extended to any type of virtual meeting. Further, implementations of the present disclosure are not limited to image data collected during a virtual meeting and can be applied to other types of image data (e.g., image data generated and provided to a content sharing platform by a client device 102).
In implementations of the disclosure, a “user” can be represented as a single individual. However, other implementations of the disclosure encompass a “user” being an entity controlled by a set of users and/or an automated source. For example, a set of individual users federated as a community in a social network can be considered a “user.” In another example, an automated consumer can be an automated ingestion pipeline of platform 120.
Further to the descriptions above, a user may be provided with controls allowing the user to make an election as to both if and when systems, programs, or features described herein may enable collection of user information (e.g., information about a user's social network, social actions, or activities, profession, a user's preferences, or a user's current location), and if the user is sent content or communications from a server. In addition, certain data can be treated in one or more ways before it is stored or used, so that personally identifiable information is removed. For example, a user's identity can be treated so that no personally identifiable information can be determined for the user, or a user's geographic location can be generalized where location information is obtained (such as to a city, ZIP code, or state level), so that a particular location of a user cannot be determined. Thus, the user can have control over what information is collected about the user, how that information is used, and what information is provided to the user.
It should be noted that for clarify and simplicity, some embodiments of the present disclosure may refer to image data being generated for one or more object(s) in an environment. However, embodiments of the present disclosure can be applied to image data being generated for one or more participant(s) of a virtual meeting 160. Further, embodiments of the present disclosure can be applied to image data generated outside of a virtual meeting 160. For example, embodiments of the present disclosure can be applied to content generated or otherwise created by a client device 102 and provided to a content sharing platform for access by users of the content sharing platform. In other examples, embodiments of the present disclosure can be applied to content generated by two or more surveillance cameras (e.g., surveilling a house, a building, an interior of a house or a building, etc.), cameras generating image data depicting a stage performance or exhibition, and so forth.
In some embodiments, platform 120 and/or virtual meeting manager 152 can be connected to memory 250 (e.g., via network 104, via a bus, etc.). Memory 250 can correspond to one or more regions of data store 110, in some embodiments. In other or similar embodiments, one or more portions of memory 250 can include or otherwise correspond any memory of or connected to system 100.
At block 310, processing logic obtains first image data depicting object(s) at a first vantage point captured by a first client device during a virtual meeting and second image data depicting the object(s) at a second vantage point captured by a second client device during the virtual meeting. In some embodiments, the first client device can correspond to client device 102A and the second client device can correspond to client device 102B. Virtual meeting manager 152 can store image data captured by client device 102A, client device 102B, and/or any other client device 102 at memory 250 as captured image data 252, in some embodiments. In some instances, first image data captured by client device 102A is referred to as captured image data 252A (or simply image data 252A) and second image data captured by client device 102B is referred to as captured image data 252B (or simply image data 252B). One or more users associated with client device 102A and/or client device 102B can engage with other users of platform 120 (e.g., associated client device 102 (d), etc.) during a virtual meeting 160. In some embodiments, the objects depicted by the first image data 252A and/or the second image data 252B can be or otherwise include the users associated with client device 102A and/or client device 102B. In an illustrative example, one or more participants of virtual meeting 160 can be located in a shared environment, such as a conference room or a meeting room. Client device 102A can be positioned at a first vantage point so to generate the first image data 252A having a first perspective or viewpoint of the participants and client device 102B can be positioned at a second vantage point so to generate the second image data 252B having a second perspective or viewpoint of the participants.
As illustrated in
As illustrated in
It should be noted that the positioning of client devices 102 in environment 400 is provided solely for the purpose of explanation and illustration and is not intended to be limiting. Environment 400 can include any number of client devices 102 (or camera components connected to client devices 102), and such client devices 102 and/or camera components can be positioned anywhere within environment 400. In some embodiments, client devices 102 (or camera components connected to client devices 102) can be positioned in environment 400 such that the combination of vantage points by each client device 102 provides a 360-degree view of the participants and/or objects 412 in environment 400.
As described above, client devices 102A-102C can generate image data 252 depicting participants 410 and/or object(s) 412 during a virtual meeting 160. Another participant of the virtual meeting can access the image data 252 via a UI 124 of a respective client device associated with the other participant, in some embodiments.
For purposes of explanation and illustration, UI 450 of
Referring back to
In response to receiving the request, coordinate generator 220 of virtual meeting manager 152 can determine a location of environment 400 that corresponds to the selected region 458. In some embodiments, coordinate generator 220 can access data (e.g., from memory 250) that indicates a distance of client device 102A from a participant 410 and/or object 412 in environment 400. The data can be provided by a user of platform 120 (e.g., a participant 410 in environment 400, a facilitator or administrator of virtual meetings in environment 400, an operator or developer of platform 120), in some embodiments. In other or similar embodiments, the data can be determined by applying one or more distance algorithms between coordinates indicating the position of client device 102A and a position of the participant 410 and/or the object 412 in environment 400. The data accessed by coordinate generator 220 can, in some embodiments, additionally or alternatively indicate a size or dimension associated with the participant 410 and/or the object 412. For example, the data can indicate a width or length of the conference table object 412 in environment 400. In some embodiments, coordinate generator 220 can additionally or alternatively access data that indicates a distance of client device 102B and/or client device 102C from the participant 410 and/or the object 412. Such data can be obtained according to previously described embodiments.
In some embodiments, coordinate generator 220 can calculate coordinates (e.g., Cartesian coordinates, etc.) associated with one or more participants 410 and/or objects 412 in the environment 400 based on the determined distance between client device(s) 102A, 102B, and/or 102C and the participant 410 and/or object 412 in environment 400. The calculated coordinates can be stored at memory 250 as coordinate data 254, in some embodiments. In an illustrative example, coordinate generator 220 can identify a center point of conference table object 412 based on the distance between client device 102A and conference table object 412 and the size or dimension associated with conference table object 412. Coordinate generator 220 can determine that the coordinates associated with the center point of conference table object 412 is approximately (0,0). Coordinate generator 220 can then determine the coordinates associated with the location of client devices 102A, 102B, and/or 102C, participants 410 in environment 400, and/or other objects in environment 400 based on an approximated distance between the center point of conference table object 412 and each respective location. It should be noted that coordinate generator 220 can determine coordinates associated with the participants 410 and/or objects 412 of environment 400 according to other techniques. It should also be noted that coordinate generator 220 can determine the coordinates in environment 400 prior to receiving a request from a client device 102 (e.g., client device 102D) indicating a selected region 458, as described above.
In some embodiments, coordinate generator 220 can additionally or alternatively determine a scaling factor indicating a difference between a size of a participant 410 and/or an object 412 in environment 400 and a size of the participant 410 and/or the object 412 as depicted by image data 252 generated by client device(s) 102A, 102B, and/or 103C. In an illustrative example, coordinate generator 220 can determine a set of pixels associated with conference table object 412 in the image data 252A generated by client device 102A and can determine a dimension of the set of pixels (e.g., X pixels long. Y pixels wide, etc.). Coordinate generator 220 can determine the scaling factor based on the actual size of the conference table object 412 (e.g., as indicated by the data obtained from memory 250) and the determined dimension of the set of pixels.
Coordinate generator 220 can determine coordinates of environment 400 associated with the selected region 458 by the user of client device 102D based on the determined scaling factor and an approximated distance between the selected region 458 and coordinates determined for participants 410 and/or objects 412 in environment 400. In an illustrative example, coordinate generator 220 can determine distance between pixels of image data 252 generated by client device 102 associated with the center of conference table object 412 (e.g., having coordinates 0,0) and pixels of the image data 252 associated with the selected region 458. Coordinate generator 220 can apply (e.g., multiply, etc.) the determined scaling factor to the determined pixel distance to determine the distance between the selected region 458 in environment 400 and the center point of conference table object 412 in environment 400. Coordinate generator 220 can determine coordinates associated with the selected region 458 in environment 400 based on the determined distance. It should be noted that coordinate generator 220 can determine coordinates associated with selected region 458 according to other techniques, in accordance with embodiments of the present disclosure.
Virtual meeting manager 152 can determine whether the coordinates determined for selected region 458 correspond to coordinates for any of client device 102A, 102B, and/or 103C in environment 400. In response to determining that the coordinates for selected region 458 correspond to coordinates for client device 102A, 102B, and/or 103C, virtual meeting manager 152 can identify the image data 252 generated by the client device 102A, 102B, and/or 103C and can provide the identified image data 252 to the user via region 454 of client device 102D. In response to determining that the coordinates for selected region 458 do not correspond to coordinates for client device 102A, 102B, and/or 103C, virtual meeting manager 152 can generate image data depicting the participants 410 and/or the objects 412 in environment 400 from a perspective or viewpoint corresponding to the vantage point of selected region 458, as described herein.
In some embodiments, a user of client device 102D can provide a request for access to image data depicting a particular perspective or viewpoint by providing a prompt (e.g., a text-based prompt, an audio-based prompt, etc.) to an interface associated with a generative model. A generative model refers to a machine learning model or artificial intelligence algorithm that can receive, as an input, a request for content, and can generate the requested content and provide the requested content as an output. In some embodiments, the request can be included in a prompt provided by a user via a prompt interface (not shown). A user can “converse” with the generative model by providing the prompt to the generative model via the prompt interface. One or more outputs of the generative model can mimic natural language or conversation in some embodiments.
In an illustrative example, the user of the client device 102D can provide a prompt to the generative model via the prompt interface. The prompt can include a request to access image data depicting a particular participant 410 or object 412 in environment 400. For example, the prompt can be “Show me Participant 410A in the meeting room.” A generative model engine (not shown) can receive the prompt and can parse the prompt to determine the request of the prompt (e.g., to access image data depicting participant 410A in environment 400). In some embodiments, the generative model engine and/or coordinate generator 220 can determine coordinates associated with a location that includes participant 410A (or a vantage point of participant 410A) in environment 400. The coordinates can include coordinates associated with participant 410A and/or coordinates associated with a region around participant 410A. The generative model engine and/or virtual meeting manager 152 can determine whether coordinates for any of client devices 102A, 102B, and/or 102C correspond to the location that includes participant 410A (or a vantage point of participant 410A) in environment 400, as described above. If the coordinates for any of client devices 102A, 102B, and/or 102C correspond to the location that includes participant 410A (or a vantage point of participant 410A), the generative model engine and/or virtual meeting manager 152 can provide image data 252 generated by the client device 102A, 102B, and/or 102C to the user via the first region 454 of UI 450, as described above. If the coordinates do not correspond to the location that includes participant 410A (or the vantage point of participant 410A), the generative model can generate image data depicting participant 410A, as described herein.
Referring back to
In some instances, client device 102A and client device 102B may have been fabricated by different manufacturers. In other or similar instances, client device 102A and client device 102B may have different settings (e.g., set by a developer or engineer of client devices 102A and/or 102B and/or a user of client devices 102A and/or 102B). In such instances, a timestamp of image frames of image data 252A may not match (or approximately match) the timestamp of corresponding image frames of image data 252B. In yet other or similar instances, client device 102A and client device 102B may have been fabricated by the same manufacturers and have the same (or similar) settings, but the timestamps of image frames of image data 252A may not match (or approximately match) the timestamp of corresponding image frames of image data 252B. Accordingly, synchronization engine 222 can synchronize image data 252A with image data 252B such that the timestamps of image frames of image data 252A match the timestamps of corresponding image frames of image data 252B. Details regarding synchronizing the image frames of image data 252 are provided with respect to
At block 512, processing logic determines a transmission delay between a first client device (e.g., client device 102A) and a second client device (e.g., client device 102B). The transmission delay can represent a delay between a time period when an image frame is generated by a client device 102 and a time period when the image frame is transmitted from the client device 102 to platform 120 and/or another client device 102. In some embodiments, synchronization engine 222 can transmit an initial message (e.g., a packet) to a client device 102 via network 104 at a first time period. The first time period can be indicated by a time of a network time protocol of platform 120. The message can include an instruction for the client device 102 to transmit a response message to synchronization engine 222 that includes an indication of a second time period at which the initial message was received by the client device 102 and a third time period during which the response is transmitted to time synchronization engine 222. Upon receiving the response message from the client device 102 during a fourth time period, synchronization engine 222 can determine a time of the network time protocol that the response message was received. In some embodiments, synchronization engine 222 can access data of memory 250 indicating a transmission latency between platform 120 and a client device 102 over the network. The transmission latency can be associated with all transmissions between platform 120 and client devices 102 and may be provided by a developer or operator of system 100 and/or measured based on transmissions between platform 120 and client devices 102. Synchronization engine 222 can compare a difference between the first time period (i.e., when the message was transmitted to client device 102) and the second time period (i.e., when the message was received by client device 102), as modified by the transmission latency, to determine a transmission delay between the client device 102 and platform 120, in some embodiments. In additional or alternative embodiments, synchronization engine 222 can compare a difference between the third time period (i.e., when the response message was transmitted by client device 102) and the fourth time period (i.e., when the response message was received by client device 102), as modified by the transmission latency, to determine the transmission delay between the client device 102 and platform 120. In some embodiments, synchronization engine 222 can transmit multiple messages to each client device 102 connected to platform 120 and can measure the transmission delay for each message (and received response message). Synchronization engine 222 can determine an aggregate value (e.g., an average) of each determined transmission delay, which can represent the transmission delay between the platform 120 and the client device 102.
Synchronization engine 222 can determine the transmission delay between the platform 120 and each client device 102, as described above. In some embodiments, synchronization engine 222 can select a reference client device 102 to severe as a client device 102 for which to compare the transmission delay of other client devices 102. Synchronization engine 222 can select the reference client device 102 by determining the client device 102 that first connected to platform 120 to join the virtual meeting 160, the client device 102 having a higher processing capacity than other client devices 102, by random selection, and so forth. In an illustrative example, synchronization engine 222 can select client device 102A as the reference client device. In some embodiments, synchronization engine 222 can determine the transmission delay between the reference client device 102 (e.g., client device 102A) and another client device 102 based on a difference between the measured transmission delay between the platform 120 and the reference client device 102 and the measured transmission delay between the platform 120 and the other client device 102. For example, synchronization engine 222 can determine the transmission delay between client device 102A and client device 102B based on a difference between the measured transmission delay between platform 120 and client device 102A and the measured transmission delay between platform 120 and client device 102B.
In additional or alternative embodiments, a reference client device 102A can measure the transmission delay between the reference client device 102A and other client devices 102 by transmitting the message to the other client devices 102 (e.g., instead of platform 120 transmitting the message), as described above. In such embodiments, the reference client device 102A can measure the transmission delay between the reference client device 102A and the other client device and can provide an indication of the measured transmission delay to synchronization engine 222 (e.g., via network 104).
At block 512, processing logic determines a correspondence between a first image frame of first image data generated by the first client device (e.g., image data 252A) and a second image frame of second image data generated by the second client device (e.g., image data 252B). A correspondence can exist between two or more image frames of image data generated by different client devices 102 if the image frames depict one or more objects of a scene having the same (or approximately the same) state during a particular time period. As indicated above, client device 102A and client device 102B may operate according to different settings or protocols (e.g., as defined by a developer or operator of client device 102A and/or 102B, as defined by a user of client device 102A and/or 102B, etc.). In one illustrative example, client device 102A may generate a different number of image frames in a given time period than client device 102B. For instance, client device 102A may have a frame generation rate of 30 frames per second (fps) while client device 102B may have a frame generation rate of 15 fps. Accordingly, client devices 102A and 102B may not generate image frames at the same frame generation rate. Synchronization engine 222 can determine a correspondence between two or more frames of image data 252A and image data 252B in view of the different frame generation rates of client device 102A and 102B, as described with respect to
As indicated above, synchronization engine 222 can determine a correspondence between two or more frames of image data 252A and image data 252B in view of different frame generation rates of client devices 102A and 102B. In some embodiments, synchronization engine 222 can extract one or more features from an image frame of image data 252A and one or more features from an image frame of image data 252B and compare the extracted features to determine a degree of similarity between the image frames. A degree of similarity between image frames can be high if the image frames share a large number of common features, while the degree of similarity can be low if the image frames share a small number of common features. In some embodiments, synchronization engine 222 can determine that an image frame of image data 252A corresponds to an image frame of image data 252B if a degree of similarity between the image frames satisfies a similarity condition (e.g., exceeds a threshold value). In an illustrative example, synchronization engine 222 can determine that a degree of similarity between image frame f1 of image data 252A and image frame f0′ of image data 252B exceeds the threshold value. Accordingly, synchronization engine 222 can determine a correspondence between image frame f1 of image data 252A and image frame f0′ or image data 252B.
Referring back to
At block 516, processing logic calculates a synchronization factor based on the determined transmission delay and the measured frame distance. The synchronization factor can represent a translation that is recognized between image frames of client device 102A and client device 102B in view of the determined transmission delay and the measured frame distance. Synchronization engine 222 can apply the synchronization factor to incoming image data 252 generated by client devices 102A and 102B to obtain synchronized image data 258. The synchronized image data 258 can include a mapping (e.g., representing an alignment) between image frames of incoming image data 252A generated by client device 102A and image frames of incoming image data 252B generated by 102B. Image generator engine 224 can generate image data depicting participants 410 and/or objects 412 in environment 400 from a perspective or viewpoint of selected region 458, as described below.
It should be noted that although some embodiments of the present disclosure describe synchronizing the image frames of image data 252A and image data 252B in response to the request from a user of client device 102D, the synchronization can occur at any time (e.g., prior to the request from the user of client device 102D). Further, embodiments of the present disclosure can be applied to synchronize the image frames of image data 252 generated by each client device 102 in an environment (e.g., client device 102A, client device 102B, client device 102C, etc.). In such embodiments, the synchronization factor can be determined based on the determined transmission delay and the measured frame distance between a selected reference client device (e.g., client device 102A) and each additional client device (e.g., client device 102B, client device 103C, etc.), as described above.
As indicated above, timestamps of image frames of image data 252 generated by different client devices 102 may not align due to different settings of the client devices 102, in some embodiments. In such embodiments, processing logic can estimate and/or calibrate the settings based on the synchronized image data 258. For example, processing logic can obtain synchronized image data 258, as described above. Processing logic can determine a difference in the settings of client devices 102 based on the synchronization factor (e.g., representing the translation or distance between image frames of client devices 102A and 102B). In some embodiments, processing logic can transmit an instruction to client device 102A and/or client device 102B to cause a setting of client device 102A and/or client device 102B to match (or approximately match) the setting of client device 102B and/or client device 102A, respectively.
In some embodiments, image generator engine 224 can generate image data depicting participants 410 and/or objects 412 in environment 400 from a perspective or viewpoint of selected region 458 based on one or more outputs of a machine learning model of predictive system 180.
At block 810, processing logic initializes a training set T to null (e.g., { }). At block 812, processing logic identifies first image data generated by a first client device, a second image data generated by a second client device, and third image data generated by a third client device. Each of the first image data, the second image data, and the third image data can be prior image data generated during a prior virtual meeting, in some embodiments. In other or similar embodiments, the first image data, the second image data, and the third image data can be prior image data generated by respective client devices at any time (e.g., outside of a prior virtual meeting). In some embodiments, each of the first image data, the second image data, and the third image data can depict one or more objects at distinct perspectives or viewpoints. For example, the first image data can depict the object(s) at a first perspective or viewpoint, the second image data can depict the object(s) at a second perspective or viewpoint, and the third image data can depict the object(s) at the third perspective or viewpoint. In some embodiments, the first perspective or viewpoint can correspond to a first vantage point in an environment that included the object(s), and the second perspective or viewpoint can correspond to a second vantage point in the environment that included the object(s). The first vantage point and the second vantage point can surround (e.g., be located on either side of) a third vantage point corresponding to the third perspective or viewpoint, in some embodiments.
In some embodiments, processing logic can synchronize the first image data, the second image data, and the third image data. For example, processing logic can determine a synchronization factor associated with at least a portion of the first image data, the second image data, and the third image data, as described above. Processing logic can apply the synchronization factor to a remaining portion of the first image data, the second image data, and the third image data to synchronize (or align) the image frames of the first image data, the second image data, and the third image data, in accordance with previously described embodiments.
At block 814, processing logic obtains characteristics of the first image data, the second image data, and the third image data. In some embodiments, the characteristics can include a pixel color and/or a pixel density of pixels of one or more image frames of the respective image data. In an illustrative example, processing logic can identify a first image frame of the first image data that is synchronized or aligned with a second image frame of the second image data and a third image frame of the third image data. Processing logic can extract the first characteristics from the first image frame, second characteristics from the second image frame, and the third characteristics from the third image frame, in some embodiments. In additional or alternative embodiments, processing logic can extract characteristics from each synchronized image frame and/or from each non-synchronized image frame of the first image data, the second image data, and the third image data. In some embodiments, processing logic can calculate (or otherwise obtain) a relative position that each image frame was captured based on features of the image frames. The calculated position can be included in characteristics of the image data, as described above.
At block 816, processing logic generates an input/output mapping. The input mapping can be generated based on the obtained characteristics of the first image data and the second image data. The output can be generated based on the obtained characteristics of the third image data. The generated input/output mapping can represent training data that is provided to train model 260, as described below. It should be noted that in some embodiments, processing logic may generate the training data without generating an input/output mapping. For example, processing logic can provide the obtained characteristics of the first image data, the second image data, and the third image data to the machine learning model (e.g., a neural network). A difference between pixels of the image frames in the image data can be used to tune weights of the neural network.
At block 818, processing logic adds the generated training data to training set T. At block 820, processing logic determines whether set T is sufficient for training. In response to processing logic determining that set T is not sufficient for training (e.g., an amount of training data of the training set T falls below a threshold value), method 800 returns to block 812. In response to determining that set T is sufficient for training, method 800 proceeds to block 822. At block 822, processing logic provides training set T to train machine learning model 260 of predictive system 180. In some embodiments, training set generator 712 provides the training set T to training engine 722.
Referring back to
Validation engine 724 may be capable of validating a trained machine learning model 260 using a corresponding set of features of a validation set from training set generator 712. The validation engine 724 may determine an accuracy of each of the trained machine learning models 260 based on the corresponding sets of features of the validation set. The validation engine 724 may discard a trained machine learning model 260 that has an accuracy that does not meet a threshold accuracy. In some embodiments, the selection engine 726 may be capable of selecting a trained machine learning model 260 that has an accuracy that meets a threshold accuracy. In some embodiments, the selection engine 726 may be capable of selecting the trained machine learning model 260 that has the highest accuracy of the trained machine learning models 260.
The testing engine 186 may be capable of testing a trained machine learning model 260 using a corresponding set of features of a testing set from training set generator 712. For example, a first trained machine learning model 260 that was trained using a first set of features of the training set may be tested using the first set of features of the testing set. The testing engine 728 may determine a trained machine learning model 260 that has the highest accuracy of all of the trained machine learning models based on the testing sets.
Predictive component 752 of server machine 750 may be configured to feed image data 252 generated by two or more client devices 102 as input to a trained model 260 and obtain one or more outputs of model 260. In some embodiments, platform 120 can continue to receive image data 252A from client device 102A and image data 252B from client device 102B during and after client device 102D provides request to access the image data depicting the perspective or viewpoint of the selected region 458. Image generator engine 224 can apply synchronization factor 256 to image frames of the continuously received image data 252 to generate synchronized image data 258, as described above. In some embodiments, image generator engine 224 can provide the generated synchronized image data 258 to predictive component 752 and/or predictive component 752 can obtain the synchronized image data 258 from memory 250. As described above, the synchronized image data 258 can include image frames of image data 252A and image data 252B and a mapping indicating an alignment between one or more corresponding frames of image data 252A and image data 252B. Predictive component 752 can provide the synchronized image data 258 as input to trained model 260 and can obtain one or more outputs of model 260. In additional or alternative embodiments, predictive component 752 can extract features of synchronized image frames from synchronized image data 258 and can provide the extracted features as input to model 260.
In some embodiments, the one or more outputs of model 260 can include one or more sets of image features each indicating features of one or more image frames of an image depicting the participants 410 and/or objects 412 of environment 400 at the perspective or viewpoint of the requested region 458. The one or more outputs can further include, for each set of image features, an indication of a level of confidence that a respective set of image features corresponds to the perspective or viewpoint of the requested region 458. Predictive component 752 and/or image generator engine 224 can identify a set of image features having an indicated level of confidence that satisfies one or more confidence criteria (e.g., exceeds a level of confidence threshold, is larger than other levels of confidence indicated for other sets of image features, etc.). Predictive component 752 and/or image generator engine 224 can extract the identified set of image features from the one or more obtained outputs of model 260. The extracted set of image features can be stored at memory 250 as generated image data 262, in some embodiments.
As indicated above, in some embodiments, model 260 can be a trained generative machine learning model. In such embodiments, model 260 can generate new image data based on the provided input image data 252. The generative machine learning model 260 can be supported by an AI server (not shown), in some embodiments. In some embodiments, the AI server can provide a query tool, which enables one or more users of platform 120 to access the generative machine learning model. The query tool can include or otherwise interface with a prompt interface described above). The query tool can be configured to perform automated identification and facilitate retrieval of relevant and timely contextual information for quick and accurate processing of user queries by model 260. As describe above, a user's request via the prompt interface can include a request to access image data depicting a particular participant 410 and/or object 412 in environment 400. Via network 104 (or another network), the query tool may be in communication with one or more client devices 102, the AI server, data store 110, memory 250, and/or platform 120. Communications between the query tool and the AI server may be facilitated by a generative model application programming interface (API), in some embodiments. Communications between the query tool and data store 110 and/or memory 250 via a data management API, in some embodiments. In additional or alternative embodiments, the generative model API can translate queries generated by the query tool into unstructured natural-language format and, conversely, translate responses received from model 260 into any suitable form (e.g., including any structured proprietary format as may be used by the query tool). Similarly, the data management API can support instructions that may be used to communicate data requests to data store 110 and/or memory 250 and formats of data received from data store 110 and/or memory 250.
As indicated above, a user can interact with the query tool via the prompt interface. The prompt interface be or otherwise include a UI element that can support any suitable types of user inputs (e.g., textual inputs, speech inputs, image inputs, etc.). The UI element may further support any suitable types of outputs (e.g., textual outputs, speech outputs, image outputs, etc.). In some embodiments, the UI element can be a web-based UI element, a mobile application-supported UI element, or any combination thereof. The UI element can include selectable items, in some embodiments, that enables a user to select from multiple generative models 260. The UI element can allow the user to provide consent for the query tool and/or generative model 260 to access user data or other data associated with a client device 102 stored in data store 110 and/or memory 250, process, and/or store new data received from the user, and the like. The UI element can additionally or alternatively allow the user to withhold consent to provide access to user data to the query tool and/or generative model 260. In some embodiments, a user input entered via the UI element may be communicated to the query tool via a user API. The user API can be located at the client device 102 of the user accessing the query tool.
In some embodiments, the query tool can include a user query analyzer to support various operations of this disclosure. For example, the user query analyzer may receive a user input, e.g., user query, and generate one or more intermediate queries to generative model 260 to determine what type of user data the generative model 260 might need to successfully respond to user input. Upon receiving a response from generative model 260, the user query analyzer may analyze the response, form a request for relevant contextual data for data store 110 and/or memory 250, which may then supply such data. The user query analyzer may then generate a final query to generative model 260 that includes the original user query and the contextual data received from data store 110 and/or memory 250. In some embodiments, the user query analyzer may itself include a lightweight generative model that may process the intermediate query(ies) and determine what type of contextual data may have to be provided to generative model 260 together with the original user query to ensure a meaningful response from generative model 260.
The query tool may include (or may have access to) instructions stored on one or more tangible, machine-readable storage media of a server machine (e.g., server machine 750) and executable by one or more processing devices of server machine 750. In one embodiment, the query tool may be implemented on a single machine. In some embodiments, the query tool may be a combination of a client component and a server component. In some embodiments the query tool may be executed entirely on the client device(s) 102. Alternatively, some portion of the query tool may be executed on a client computing device while another portion of the query tool may be executed on a server machine.
Referring back to
The example computer system 900 includes a processing device (processor) 902, a main memory 904 (e.g., read-only memory (ROM), flash memory, dynamic random access memory (DRAM) such as synchronous DRAM (SDRAM), double data rate (DDR SDRAM), or DRAM (RDRAM), etc.), a static memory 906 (e.g., flash memory, static random access memory (SRAM), etc.), and a data storage device 918, which communicate with each other via a bus 940.
Processor (processing device) 902 represents one or more general-purpose processing devices such as a microprocessor, central processing unit, or the like. More particularly, the processor 902 can be a complex instruction set computing (CISC) microprocessor, reduced instruction set computing (RISC) microprocessor, very long instruction word (VLIW) microprocessor, or a processor implementing other instruction sets or processors implementing a combination of instruction sets. The processor 902 can also be one or more special-purpose processing devices such as an application specific integrated circuit (ASIC), a field programmable gate array (FPGA), a digital signal processor (DSP), network processor, or the like. The processor 902 is configured to execute instructions 905 (e.g., improving precision of content matching systems at a platform) for performing the operations discussed herein.
The computer system 900 can further include a network interface device 908. The computer system 900 also can include a video display unit 910 (e.g., a liquid crystal display (LCD) or a cathode ray tube (CRT)), an input device 912 (e.g., a keyboard, and alphanumeric keyboard, a motion sensing input device, touch screen), a cursor control device 914 (e.g., a mouse), and a signal generation device 920 (e.g., a speaker).
The data storage device 918 can include a non-transitory machine-readable storage medium 924 (also computer-readable storage medium) on which is stored one or more sets of instructions 905 (e.g., improving precision of content matching systems at a platform) embodying any one or more of the methodologies or functions described herein. The instructions can also reside, completely or at least partially, within the main memory 904 and/or within the processor 902 during execution thereof by the computer system 900, the main memory 904 and the processor 902 also constituting machine-readable storage media. The instructions can further be transmitted or received over a network 930 via the network interface device 908.
In one implementation, the instructions 905 include instructions for providing fine-grained version histories of electronic documents at a platform. While the computer-readable storage medium 924 (machine-readable storage medium) is shown in an exemplary implementation to be a single medium, the terms “computer-readable storage medium” and “machine-readable storage medium” should be taken to include a single medium or multiple media (e.g., a centralized or distributed database, and/or associated caches and servers) that store the one or more sets of instructions. The terms “computer-readable storage medium” and “machine-readable storage medium” shall also be taken to include any medium that is capable of storing, encoding or carrying a set of instructions for execution by the machine and that cause the machine to perform any one or more of the methodologies of the present disclosure. The terms “computer-readable storage medium” and “machine-readable storage medium” shall accordingly be taken to include, but not be limited to, solid-state memories, optical media, and magnetic media.
Reference throughout this specification to “one implementation,” “one embodiment,” “an implementation,” or “an embodiment,” means that a particular feature, structure, or characteristic described in connection with the implementation and/or embodiment is included in at least one implementation and/or embodiment. Thus, the appearances of the phrase “in one implementation,” or “in an implementation,” in various places throughout this specification can, but are not necessarily, referring to the same implementation, depending on the circumstances. Furthermore, the particular features, structures, or characteristics can be combined in any suitable manner in one or more implementations.
To the extent that the terms “includes,” “including,” “has,” “contains,” variants thereof, and other similar words are used in either the detailed description or the claims, these terms are intended to be inclusive in a manner similar to the term “comprising” as an open transition word without precluding any additional or other elements.
As used in this application, the terms “component,” “module,” “system,” or the like are generally intended to refer to a computer-related entity, either hardware (e.g., a circuit), software, a combination of hardware and software, or an entity related to an operational machine with one or more specific functionalities. For example, a component can be, but is not limited to being, a process running on a processor (e.g., digital signal processor), a processor, an object, an executable, a thread of execution, a program, and/or a computer. By way of illustration, both an application running on a controller and the controller can be a component. One or more components can reside within a process and/or thread of execution and a component can be localized on one computer and/or distributed between two or more computers. Further, a “device” can come in the form of specially designed hardware; generalized hardware made specialized by the execution of software thereon that enables hardware to perform specific functions (e.g., generating interest points and/or descriptors); software on a computer readable medium; or a combination thereof.
The aforementioned systems, circuits, modules, and so on have been described with respect to interact between several components and/or blocks. It can be appreciated that such systems, circuits, components, blocks, and so forth can include those components or specified sub-components, some of the specified components or sub-components, and/or additional components, and according to various permutations and combinations of the foregoing. Sub-components can also be implemented as components communicatively coupled to other components rather than included within parent components (hierarchical). Additionally, it should be noted that one or more components can be combined into a single component providing aggregate functionality or divided into several separate sub-components, and any one or more middle layers, such as a management layer, can be provided to communicatively couple to such sub-components in order to provide integrated functionality. Any components described herein can also interact with one or more other components not specifically described herein but known by those of skill in the art.
Moreover, the words “example” or “exemplary” are used herein to mean serving as an example, instance, or illustration. Any aspect or design described herein as “exemplary” is not necessarily to be construed as preferred or advantageous over other aspects or designs. Rather, use of the words “example” or “exemplary” is intended to present concepts in a concrete fashion. As used in this application, the term “or” is intended to mean an inclusive “or” rather than an exclusive “or.” That is, unless specified otherwise, or clear from context, “X employs A or B” is intended to mean any of the natural inclusive permutations. That is, if X employs A; X employs B; or X employs both A and B, then “X employs A or B” is satisfied under any of the foregoing instances. In addition, the articles “a” and “an” as used in this application and the appended claims should generally be construed to mean “one or more” unless specified otherwise or clear from context to be directed to a singular form.
Finally, implementations described herein include collection of data describing a user and/or activities of a user. In one implementation, such data is only collected upon the user providing consent to the collection of this data. In some implementations, a user is prompted to explicitly allow data collection. Further, the user can opt-in or opt-out of participating in such data collection activities. In one implementation, the collect data is anonymized prior to performing any analysis to obtain any statistical patterns so that the identity of the user cannot be determined from the collected data.