Body posture estimation

By using machine learning technology in a virtual rendering system to generate virtual objects from a single RGB image, it solves the problem of unstable virtual objects in existing technologies, and realizes the efficient rendering animation virtual objects without deep sensor equipment. Effect.

CN119359871APending Publication Date: 2025-01-24SNAP INC
View PDF 0 Cites 0 Cited by

Patent Information

Application Number
CN202411405954.0
Authority / Receiving Office
CN · China
Patent Type
Applications(China)
Current Assignee / Owner
Priority Date
2019-02-06
Filing Date
2020-02-06
Publication Date
2025-01-24

AI Technical Summary

Technical Problem

Existing virtual rendering systems may encounter rendering problems in augmented reality experience, such as virtual objects disappearing or irregular representations, resulting in illusion rupture.

Method used

By applying machine learning technology to generate virtual objects from a single RGB image, you do not need to obtain the deep diagram of the user's body, use machine learning to identify the position of the bone and adjust the skeleton to match the user's posture.

Benefits of technology

It achieves accurate and fast rendering of animated virtual objects without a depth sensor device, enhancing the user's real interactive experience with VR or AR content.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN119359871A_ABST
    Figure CN119359871A_ABST
Patent Text Reader

Abstract

A system, including a computer-readable storage medium storing a program, and a method for detecting a gesture of a user. The program and method includes: receiving a monocular image including a depiction of a body of a user; detecting a plurality of bone joints of the body depicted in the monocular image; and determining a posture represented by the body depicted in the monocular image based on the detected plurality of skeletal joints of the body. Modifying the posture of the avatar by adjusting a set of skeletal joints of the skeleton of the avatar based on the detected plurality of skeletal joints of the body to match the posture represented by the body depicted in the monocular image; and generating, for display, an avatar having a modified gesture that matches the gesture represented by the body depicted in the monocular image.
Need to check novelty before this filing date? Find Prior Art

Description

[0001] This application is a divisional application of a patent application with an application date of February 6, 2020, application number 202080012718.6, and invention name “Body Posture Estimation”.

[0002] Priority claim

[0003] This application claims priority to U.S. Patent Application No. 16 / 269,312, filed on February 6, 2019, the entire contents of which are incorporated herein by reference. Technical Field

[0004] The present disclosure generally relates to generating a virtual object based on an image depicting a user. Background Art

[0005] Virtual rendering systems can be used to create engaging and entertaining augmented reality experiences in which virtual object graphics (e.g., avatars) appear to exist in the real world. Such systems can experience rendering issues due to environmental conditions, user motion, unexpected visual interruptions between the camera and the object being rendered, etc. This can cause virtual objects to disappear or otherwise behave erratically, breaking the illusion that the virtual objects exist in the real world. BRIEF DESCRIPTION OF THE DRAWINGS

[0006] In the drawings, which are not necessarily drawn to scale, like numerals may describe similar components in different views. To easily identify the discussion of any particular element or act, the most significant digit or digits in a reference numeral refer to the drawing number in which the element is first introduced. Some embodiments are illustrated by way of example and not limitation in the figures of the accompanying drawings, in which:

[0007] Figure 1 is a block diagram illustrating an example messaging system for exchanging data (eg, messages and associated content) over a network according to an example embodiment.

[0008] Figure 2 is a schematic diagram illustrating data that may be stored in a database of a messaging server system according to an example embodiment.

[0009] Figure 3 is a schematic diagram illustrating the structure of a message generated by a messaging client application for communication according to an example embodiment.

[0010] Figure 4 is a block diagram illustrating an example body pose estimation system according to an example embodiment.

[0011] Figure 5 is a diagram illustrating body joint positions for determining a body posture according to an example embodiment.

[0012] Figure 6 is a flow chart illustrating an example operation of a body pose estimation system according to an example embodiment.

[0013] Figures 7A-8C are illustrative inputs and outputs of a body pose estimation system according to an example embodiment.

[0014] Fig. 9 is a block diagram illustrating a representative software architecture, according to an example embodiment, which may be used in conjunction with the various hardware architectures described herein.

[0015] Fig.10 is a block diagram illustrating components of a machine capable of reading instructions from a machine-readable medium (eg, a machine-readable storage medium) and performing any one or more of the methodologies discussed herein, according to some example embodiments. DETAILED DESCRIPTION

[0016] The following description includes systems, methods, techniques, instruction sequences, and computing machine program products that embody illustrative embodiments of the present disclosure. In the following description, for the purpose of explanation, many specific details are set forth to provide an understanding of various embodiments. However, it will be apparent to those skilled in the art that embodiments may also be practiced without these specific details. Typically, well-known instruction instances, protocols, structures, and techniques need not be shown in detail.

[0017] Typically, virtual reality (VR) and augmented reality (AR) systems display an avatar representing a given user by capturing an image of the user and additionally obtaining a depth map using a depth sensor of the real-world human body depicted in the image. By processing the depth map and image together, VR and AR systems can mimic the actions performed by the user. While such systems can render the user's avatar well, the need for depth sensors limits their scope of application. This is because adding a depth sensor to a user's device to display an avatar increases the overall cost and complexity of the device, thereby reducing their appeal.

[0018] The disclosed embodiments improve the efficiency of using electronic devices by applying machine learning techniques to generate one or more virtual objects from a single image of a user's body for presentation in a VR or AR application. Virtual objects (e.g., three-dimensional objects, such as 3D subtitles, emoticons, characters, avatars, animations, looping animations of personalized avatars or characters, looping or non-looping animated graphics, such as dancing hot dogs, artistic fonts with animations, etc.) are directly generated from a single red, green, and blue (RGB) image (e.g., a monocular RGB image) or a video depicting an RGB image of a real-world user's body. The disclosed embodiments generate virtual objects without obtaining a depth map of the real-world user's body. This enables a user device with a simple RGB camera (without a depth sensor) to accurately and quickly render animated virtual objects based on the body posture of a real-world user in a VR or AR application, thereby allowing the user to interact with VR or AR content in a more realistic environment.

[0019] In some embodiments, one such virtual object is selected by a user and added to an RGB image, and the pose of the virtual object is modified to match the pose of the user's body to provide the illusion that the selected virtual object is part of a real-world scene and is imitating the user. Specifically, the disclosed embodiments process an image depicting the user's body using machine learning techniques to identify skeletal joints. The pose represented by the identified skeletal joints is determined. After determining the pose represented by the skeletal joints, the corresponding skeletal joints of the avatar skeleton are adjusted to change the pose of the avatar to match the pose represented by the identified skeletal joints of the user's body. An avatar with a modified pose that matches the pose represented by the identified skeletal joints of the user's body is generated for display to the user.

[0020] In some embodiments, the avatar is a first avatar that is generated for simultaneous display with a first user in an image or video. An image of the first avatar mimicking a gesture of the first user can be captured and sent to a second user. The second user can also capture an image in which the second avatar mimics the gesture of the second user. The captured image depicting the second user and the second avatar is sent to the first user. The captured image of the first user with the first avatar and the second user with the second avatar can be displayed simultaneously and shared with other users.

[0021] In some embodiments, the position of the avatar is adjusted relative to the user's position in a given image or video based on the user's position and / or posture within the image or video. For example, the avatar position changes to follow the user from one place to another around the image or video. In another implementation, based on the user's posture and joint position, the movement of the avatar can be adjusted to allow the avatar to interact with other virtual objects in the image. For example, the user's arm can be raised so that the corresponding arm of the avatar is raised to contact a virtual object (e.g., an apple on a tree) presented in the image or video.

[0022] Figure 1 1 is a block diagram illustrating an example messaging system 100 for exchanging data (e.g., messages and associated content) over a network 106. The messaging system 100 includes a plurality of client devices 102, each client device hosting a plurality of applications including a messaging client application 104 and an AR / VR application 105. Each messaging client application 104 and AR / VR application 105 is communicatively coupled to other instances of the messaging client application 104 and a messaging server system 108 via a network 106 (e.g., the Internet).

[0023] Thus, each messaging client application 104 and AR / VR application 105 is able to communicate and exchange data with another messaging client application 104 and AR / VR application 105 and messaging server system 108 via network 106. Data exchanged between messaging client applications 104, AR / VR applications 105 and between messaging client applications 104 and messaging server system 108 includes functionality (e.g., commands to call functions) and payload data (e.g., text, audio, video, or other multimedia data).

[0024] The AR / VR application 105 is an application that includes a set of functions that allow the client device 102 to access the body posture estimation system 124. In some implementations, the AR / VR application 105 is a component or feature that is part of the messaging client application 104. The AR / VR application 105 uses an RGB camera to capture a monocular image of the user's real-world body. The AR / VR application 105 applies various trained machine learning techniques to the captured image of the body to generate an avatar. For example, the avatar is generated to have the same posture as the posture of the user's body depicted in the image. As another example, the avatar is generated to be displayed simultaneously with the user, and the position of the avatar changes between frames based on the relative position of the user in the image. For example, the avatar position changes to maintain a constant distance between the avatar and the user, so the avatar appears to follow around the user. In some embodiments, the AR / VR application 105 continuously captures images of the user's body in real time or periodically to continuously or periodically update the generated avatar. This allows the user to walk around in the real world and see the avatar update in real time. The AR / VR application 105 presents various content (e.g., messages, games, advertisements, etc.) and allows the user to modify the posture of the avatar in the AR / VR application 105 to interact with other virtual content (e.g., the avatar posture can be modified to pick a virtual apple from a virtual tree). After generating the avatar, the user can perform an action or gesture to capture an image of the user and the avatar to send to another user.

[0025] In order for the AR / VR application 105 to generate an avatar directly from the captured RGB image, the AR / VR application 105 obtains one or more trained machine learning techniques from the body posture estimation system 124 and / or the messaging server system 108. The trained machine learning technique processes the captured RGB image to extract one or more features corresponding to the body depicted in the captured RGB image from the RGB image. The features are analyzed to identify one or more skeletal joints and their corresponding alignments relative to each other. Specifically, the features are analyzed to determine the joint positions of a set of specified skeletal joints. The joint positions are provided to a database with offsets to identify postures within the offsets of the determined joint positions. After the posture is identified, the avatar is obtained and the skeleton of the avatar is adjusted to imitate or replicate the identified posture. In some embodiments, the skeleton of the avatar is adjusted directly according to the determined joint positions rather than according to the identified posture. Then an avatar is generated for display based on the skeleton adjusted to imitate the body posture depicted in the captured image.

[0026] In some embodiments, the RGB image is a first frame of a plurality of frames of a video. In such a case, after detecting the user's body in the first frame using a first machine learning technique, the body pose estimation system 124 estimates the position and proportion of the user's body in a second frame of the plurality of frames. The second frame may be adjacent to the first frame. In some implementations, a second machine learning technique is applied to the first frame to predict or estimate the position and proportion of the user's body in the second frame.

[0027] During training, the body pose estimation system 124 obtains a first plurality of input training images including different real-world body poses. These training images also provide real information about the body pose depicted in each image. A machine learning technique (e.g., a neural network) is trained based on features of a plurality of training images. Specifically, the machine learning technique extracts one or more features from a given training image and estimates the body pose by analyzing the joint positions of the body depicted in the given training image. The machine learning technique obtains real information corresponding to the training image and adjusts one or more coefficients to improve subsequent estimates of the body pose depicted in subsequent images. In some implementations, another machine learning technique extracts one or more features from a given training image and estimates the body pose in subsequent images adjacent to the given training image by analyzing the joint positions of the body depicted in the given training image. The machine learning technique obtains real information corresponding to the training image, which identifies the body pose in the subsequent image, and adjusts one or more coefficients to improve subsequent estimates of the body pose depicted in the subsequent image and estimates of the body pose and proportion in the subsequent image. In some implementations, during training, the machine learning technique obtains a reference 3D depth map for each training image and uses the reference 3D depth map to estimate the body pose.

[0028] The messaging server system 108 provides server-side functionality to specific messaging client applications 104 via the network 106. Although certain functions of the messaging system 100 are described herein as being performed by the messaging client application 104 or by the messaging server system 108, it should be understood that the location of certain functions within the messaging client application 104 or the messaging server system 108 is a design choice. For example, it may be technically preferable to first deploy certain technologies and functions within the messaging server system 108 and then migrate the technologies and functions to the messaging client application 104 where the client device 102 has sufficient processing power.

[0029] The messaging server system 108 supports various services and operations provided to the messaging client applications 104. Such operations include sending data to the messaging client applications 104, receiving data from the messaging client applications 104, and processing data generated by the messaging client applications 104. As examples, the data may include message content, client device information, geolocation information, media annotations and overlays, virtual objects, message content persistence conditions, social network information, and live event information. The data exchange in the messaging system 100 is invoked and controlled through functions available through the user interface (UI) of the messaging client applications 104.

[0030] Turning now specifically to the messaging server system 108, an application program interface (API) server 110 is coupled to and provides a programming interface to an application server 112. The application server 112 is communicatively coupled to a database server 118, which facilitates access to a database 120 in which data associated with messages processed by the application server 112 is stored.

[0031] In particular, the API server 110 is addressed, which receives and sends message data (e.g., commands and message payloads) between the client device 102 and the application server 112. Specifically, the API server 110 provides a set of interfaces (e.g., routines and protocols) that can be called or queried by the messaging client application 104 in order to invoke the functionality of the application server 112. The API server 110 exposes various functions supported by the application server 112, including: account registration; login functionality; sending messages from a particular messaging client application 104 to another messaging client application 104 via the application server 112; sending media files (e.g., images or videos) from a messaging client application 104 to a messaging server application 114 for possible access by another messaging client application 104; setting of collections of media data (e.g., stories); retrieval of such collections; retrieval of a friend list of a user of a client device 102; retrieval of messages and content; adding friends to and removing friends from a social graph; the location of friends in a social graph; access to user conversation data; access to avatar information stored on the messaging server system 108; and opening application events (e.g., related to a messaging client application 104).

[0032] The application server 112 hosts multiple applications and subsystems, including a messaging server application 114, an image processing system 116, a social networking system 122, and a body posture estimation system 124. The messaging server application 114 implements multiple message processing techniques and functions, which particularly relate to the aggregation and other processing of content (e.g., text and multimedia content) included in messages received from multiple instances of the messaging client application 104. As will be described in further detail, text and media content from multiple sources can be aggregated into collections of content (e.g., referred to as stories or galleries). The messaging server application 114 then makes these collections available to the messaging client application 104. Given the hardware requirements of such processing, the messaging server application 114 can also perform other processor- and memory-intensive processing of the data on the server side.

[0033] Application server 112 also includes an image processing system 116 that is dedicated to performing various image processing operations, typically on images or videos received within the payload of messages at messaging server application 114. Portions of image processing system 116 may also be implemented by body pose estimation system 124.

[0034] The social networking system 122 supports various social networking functions and services and makes them available to the messaging server application 114. To this end, the social networking system 122 maintains and accesses an entity graph within the database 120. Examples of functions and services supported by the social networking system 122 include identifying other users of the messaging system 100 with whom a particular user has a relationship or that a particular user is "following," and also identifying other entities and interests of a particular user. Such other users may also be referred to as friends of the user.

[0035] The application server 112 is communicatively coupled to a database server 118 , which facilitates access to a database 120 in which data associated with messages processed by the messaging server application 114 is stored.

[0036] Figure 2 2 is a schematic diagram 200 illustrating data that may be stored in a database 120 of a messaging server system 108 according to certain example embodiments. Although the contents of the database 120 are illustrated as including a plurality of tables, it should be appreciated that the data may be stored in other types of data structures, such as an object-oriented database.

[0037] The database 120 includes message data stored in a message table 214. The entity table 202 stores entity data including an entity graph 204. The entities for which records are maintained in the entity table 202 may include individuals, corporate entities, organizations, objects, places, events, etc. Regardless of the type, any entity about which the messaging server system 108 stores data may be a recognized entity. Each entity has a unique identifier and an entity type identifier (not shown).

[0038] The entity graph 204 also stores information about relationships and associations between entities. By way of example only, such relationships may be social, professional (e.g., working in the same company or organization), interest-based, or activity-based.

[0039] The message table 214 may store a collection of conversations between a user and one or more friends or entities. The message table 214 may include various attributes of each conversation, such as a list of participants, the size of the conversation (e.g., the number of users and / or the number of messages), the chat color of the conversation, a unique identifier of the conversation, and any other functions related to the conversation.

[0040] The database 120 also stores annotation data in the form of an example of a filter in the annotation table 212. The database 120 also stores the received annotated content in the annotation table 212. The filter for which data is stored in the annotation table 212 is associated with a video (for which data is stored in the video table 210) and / or an image (for which data is stored in the image table 208) and is applied to the video and / or image. In one example, the filter is displayed as an overlay superimposed on an image or video during presentation to the recipient user. The filter can be of various types, including a user-selected filter from a filter library presented to the sender user by the messaging client application 104 when the sender user is composing a message. Other types of filters include geographic location filters (also referred to as geographic filters) that can be presented to the sender user based on geographic location. For example, based on geographic location information determined by a global positioning system (GPS) unit of the client device 102, the messaging client application 104 can present a geographic location filter specific to a neighborhood or a specific location within the UI. Another type of filter is a data filter, which may be selectively presented to the sender user by the messaging client application 104 based on other input or information collected by the client device 102 during the message creation process. Examples of data filters include the current temperature at a particular location, the current speed at which the sender user is traveling, the battery life of the client device 102, or the current time.

[0041] Other annotation data that may be stored in the annotation table 208 is so-called "shot" data. A "shot" may be real-time special effects and sounds that may be added to an image or video.

[0042] As described above, the video table 210 stores video data that, in one embodiment, is associated with a message for which a record is maintained within the message table 214. Similarly, the image table 208 stores image data associated with a message for which message data is stored within the entity table 202. The entity table 202 may associate various annotations from the annotation table 212 with the various images and videos stored in the image table 208 and the video table 210.

[0043] The trained machine learning technique 207 stores parameters that have been trained during training of the body posture estimation system 124. For example, the trained machine learning technique 207 stores trained parameters of a neural network machine learning technique.

[0044] The body posture training images 209 store multiple images of depictions of real-world body postures. The multiple images stored in the body posture training images 209 include various depictions of real-world body postures and 3D depth information captured for each image from a 3D depth sensor. The multiple images also include real information identifying the body posture of one or more body skeletal joints and the real skeletal joint positions. Figure 5 Examples of skeletal joint positions identified for a given posture are shown. These skeletal joint positions include the positions of the right wrist, right elbow, right shoulder, nose on the face, left shoulder, left elbow, and left wrist. The skeletal joint positions can be determined relative to each other (e.g., how high one skeletal joint is relative to another skeletal joint or how high or low one skeletal joint is relative to the nose) to determine a given posture. These body posture training images 209 are used by the body posture estimation system 124 to train machine learning techniques that are used to determine body posture and skeletal joint positions from received RGB monocular images of the user's body.

[0045] Back to Figure 2 , the story table 206 stores data related to a collection of messages and associated images, video, or audio data that are compiled into a collection (e.g., a story or gallery). The creation of a particular collection may be initiated by a particular user (e.g., each user for whom a record is maintained in the entity table 202). A user may create a "personal story" in the form of a collection of content that the user has created and sent / broadcasted. To this end, the UI of the messaging client application 104 may include an icon that is user-selectable to enable the sending user to add specific content to his or her personal story.

[0046] A collection may also constitute a "live story," which is a collection of content from multiple users that is created manually, automatically, or using a combination of manual and automatic techniques. For example, a "live story" may consist of a curated stream of user-submitted content from various locations and events. For example, a user whose client device has location services enabled and who is in a common location or event at a particular time may be presented an option via the UI of the messaging client application 104 to contribute content to a particular live story. A live story may be identified to a user by the messaging client application 104 based on his or her location. The end result is a "live story" told from a community perspective.

[0047] Another type of content collection is called a "location story," which enables users whose client devices 102 are located within a particular geographic location (e.g., on a college or university campus) to contribute to a particular collection. In some embodiments, contributions to location stories may require secondary authentication to verify that the end user belongs to a particular organization or other entity (e.g., is a student on a university campus).

[0048] Figure 3 is a schematic diagram illustrating the structure of a message 300 generated by a messaging client application 104 for communication with another messaging client application 104 or a messaging server application 114 according to some embodiments. The content of a particular message 300 is used to populate a message table 214 stored in a database 120 accessible to a messaging server application 114. Similarly, the content of the message 300 is stored in memory as "in-transit" or "in-flight" data of a client device 102 or an application server 112. The message 300 is shown as including the following components:

[0049] Message identifier 302 : a unique identifier that identifies the message 300 .

[0050] Message text payload 304 : will be generated by the user through the UI of the client device 102 and included in the message 300 .

[0051] Message image payload 306 : Image data captured by a camera component of the client device 102 or retrieved from the memory of the client device 102 and included in the message 300 .

[0052] Message video payload 308 : Video data captured by a camera component or retrieved from a memory component of the client device 102 and included in the message 300 .

[0053] Message audio payload 310 : audio data captured by a microphone or retrieved from a memory component of the client device 102 and included in the message 300 .

[0054] Message annotation 312: Annotation data representing an annotation (eg, a filter, sticker, or other enhancement) to be applied to the message image payload 306, the message video payload 308, or the message audio payload 310 of the message 300.

[0055] Message duration parameter 314: A parameter value indicating the amount of time in seconds that the content of a message (eg, message image payload 306, message video payload 308, message audio payload 310) is to be presented to or made accessible to a user via the messaging client application 104.

[0056] Message geolocation parameter 316: Geolocation data (e.g., latitude and longitude coordinates) associated with the content payload of the message. Multiple message geolocation parameter 316 values ​​may be included in the payload, with each of these parameter values ​​being associated with a respective content item included in the content (e.g., a specific image within a message image payload 306, or a specific video within a message video payload 308).

[0057] Message story identifier 318: An identifier value that identifies one or more content collections (e.g., "stories") associated with a particular content item in the message image payload 306 of the message 300. For example, multiple images within the message image payload 306 may each be associated with multiple content collections using an identifier value.

[0058] Message tags 320: Each message 300 may be tagged with a plurality of tags, each tag indicating the subject of the content included in the message payload. For example, where a particular image included in the message image payload 306 depicts an animal (e.g., a lion), a tag value indicating the relevant animal may be included within the message tags 320. The tag values ​​may be manually generated based on user input, or may be automatically generated using, for example, image recognition.

[0059] • Message sender identifier 322: An identifier (eg, a messaging system identifier, an email address, or a device identifier) ​​that indicates the user of the client device 102 on which the message 300 was generated and from which the message 300 was sent.

[0060] Message recipient identifier 324: An identifier (eg, a messaging system identifier, an email address, or a device identifier) ​​indicating one or more users of client device 102 to which message 300 is addressed. In the case of a conversation between multiple users, this identifier may indicate each user participating in the conversation.

[0061] The content (e.g., value) of each component of message 300 may be a pointer to a location in a table storing content data values. For example, the image value in message image payload 306 may be a pointer (or address) to a location in image table 208. Similarly, the value in message video payload 308 may point to data stored in video table 210, the value stored in message annotation 312 may point to data stored in annotation table 212, the value stored in message story identifier 318 may point to data stored in story table 206, and the values ​​stored in message sender identifier 322 and message recipient identifier 324 may point to user records stored in entity table 202.

[0062] Figure 4 is a block diagram illustrating an example body pose estimation system 124 according to an example embodiment. The body pose estimation system 124 operates on a set of input data (e.g., a monocular image 401 depicting a user's real body and body pose training image data 402). The set of input data is obtained from the body pose training images 209 stored in the database 200 during the training phase, and is obtained from the RGB camera of the client device 102 when the AR / VR application 105 is being used. The body pose estimation system 124 includes a machine learning technology module 412, a skeletal joint position module 414, a pose determination module 416, a virtual object modification module 418, a virtual object mode selection module 419, and a virtual object display module 420.

[0063] During training, in accordance with the disclosed embodiments, the body pose estimation system 124 receives a given training image (e.g., a monocular image 401 depicting a real-world body, such as an image of a user's face, arms, torso, hips, and legs) from the body pose training image data 402. The body pose estimation system 124 applies one or more machine learning techniques to the given training image using the machine learning techniques module 412. The machine learning techniques module 412 extracts one or more features from the given training image to estimate skeletal joint positions of skeletal joints depicted in the image. For example, the machine learning techniques module 412 obtains a given training image depicting a user's face, arms, torso, hips, and legs. The machine learning techniques module 412 extracts features corresponding to the user's face and arms from the image to identify one or more skeletal joints (e.g., Figure 5 The joints shown in the figure include left / right wrist joints, left / right elbow joints, left / right shoulder joints and nose position).

[0064] The machine learning technology module 412 determines the relative position of the identified skeletal joints to determine the posture corresponding to the skeletal joint position. In one embodiment, the machine learning technology module 412 uses the depth information associated with a given training image to help determine the skeletal joint position and posture of the body. The machine learning technology module 412 compares the determined skeletal joint position and the determined posture with the real skeletal joint position and posture provided as a part of the body posture training image data 402. Based on the difference threshold of the comparison, the machine learning technology module 412 updates one or more coefficients and obtains one or more additional body posture training images. After a specified number of epochs or training images are processed and / or when the difference threshold reaches a specified value, the machine learning technology module 412 completes the training and the parameters and coefficients of the machine learning technology module 412 are stored in the trained machine learning technology 207. In some embodiments, the part of the machine learning technology module 412 is implemented by the skeletal joint position module 414 and the posture determination module 416.

[0065] After training, in accordance with the disclosed embodiments, the body pose estimation system 124 receives an input image 401 (e.g., a monocular image depicting a real-world body, such as an image of a user's face, arms, torso, hips, and legs) as a single RGB image from a client device 102. The body pose estimation system 124 applies the trained machine learning technique module 412 to the received input image 401 to extract one or more features representing skeletal joints of the body depicted in the image 401.

[0066] In some embodiments, the rate at which features are extracted from a video stream depicting a user's body is based on how close or far the user is positioned relative to the image capture device. For example, if the user is positioned away from the image capture device and appears very small in the video image, the features of the user's body are analyzed less frequently and the posture of the user's body is analyzed less frequently (e.g., once every 5 frames). If the user is close to the image capture device and appears very large in the image of the video, the features of the user's body are analyzed more frequently and the posture of the user's body is analyzed more frequently (e.g., once every 2 frames). The extracted features are provided to the skeletal joint position module 414. The skeletal joint position module 414 analyzes the skeletal joint features to determine the coordinates of specific skeletal joints. For example, the skeletal joint position module 414 determines the x, y coordinates of a specific point of each skeletal joint, such as the x, y coordinates of the left wrist, the x, y coordinates of the left elbow, the x, y coordinates of the left shoulder, the x, y coordinates of the nose (or other facial features, such as mouth, ears or eyes), the x, y coordinates of the right wrist, the x, y coordinates of the right elbow, and the x, y coordinates of the right shoulder. The skeletal joint position module 414 provides the x, y coordinates of the specified skeletal joints to the pose determination module 416. In some embodiments, the skeletal joint position module 414 provides the x, y coordinates of the specified skeletal joints to the virtual object modification module 418. In one embodiment, the x, y coordinates represent the x, y offset of each skeletal joint relative to the neutral pose of the body.

[0067] The posture determination module 416 determines the relative position of each skeletal joint received from the skeletal joint position module 414. For example, the posture determination module 416 determines that the left wrist is lower than the right wrist in the y-direction by more than a first specified amount but less than a second specified amount. Based on this determination, the posture determination module 416 estimates that the posture depicted in the image corresponds to a first posture. As another example, the posture determination module 416 determines that the left wrist is lower than the right wrist in the y-direction by more than a first specified amount and a second specified amount. Based on this determination, the posture determination module 416 estimates that the posture depicted in the image corresponds to a second posture. In some embodiments, the posture determination module 416 searches a database based on the x, y coordinates received from the skeletal joint position module 414 to identify a posture within a predetermined threshold of the x, y coordinates.

[0068] The virtual object mode selection module 419 receives a selection of a virtualization mode from the client device 102. For example, a list of mode options may be presented to a user of the AR / VR application 105. In response to receiving a user selection of a given mode option from the list, the given mode is provided to the virtual object mode selection module 419 as a selection of a virtualization mode. The mode options may include a single avatar imitation option, a multiple avatar imitation option, an avatar visualization control option, an avatar follow option, and an avatar virtual world interaction option. The virtualization mode selection controls the way in which the skeletal joint position of the user's body affects the skeleton of the avatar or the position of the avatar relative to the user in the display. The mode options may include a list of avatars of different forms and types for the user to select. The selected avatar is then used to obtain the corresponding skeleton to adjust the skeleton according to the user's posture.

[0069] The virtual object modification module 418 can adjust the skeleton of a given avatar based on the mode selected by the virtual object mode selection module 419 and the posture or skeletal joint position received from the skeletal joint position module 414 and / or the posture determination module 416. The virtual object modification module 418 adjusts the presentation of the avatar in the image, for example, by changing the posture, visual attributes and / or position of the avatar in the image. The adjusted avatar is provided to the virtual object display module 420 by the virtual object modification module 418. The virtual object display module 420 combines the adjusted avatar into the received monocular image depicting the user's body, thereby presenting the adjusted avatar and the user simultaneously in the image. The image is provided to the client device 102 by the virtual object display module 420, which can then be sent to another user or stored for later access and display.

[0070] For example, selection of a single avatar mimicry option instructs the virtual object modification module 418 to modify the skeleton of the avatar based on the relative distances between the skeletal joints of the user's body. In this manner, the skeleton is modified to replicate or mimic the posture represented by the user's body. Specifically, if it is determined that the left wrist is offset from the neutral position of the left wrist by a certain proportion or percentage in the captured RGB image, the left wrist of the corresponding avatar skeleton is raised to a position that is also the same proportion or percentage higher from the neutral position of the avatar's left wrist. Each skeletal joint is similarly adjusted to replicate the relative position of the skeletal joint positions of the body depicted in the image. For example, if Fig. 7A As shown, the user's body 723 is identified and the left wrist position of the user's body 723 is determined to be lower than the neutral left wrist position by a first amount, and the right wrist position of the user's body 723 is determined to be higher than the neutral right wrist position by a second amount. In one embodiment, Figure 5Represents the neutral skeletal joint position of the user's body. The skeletal joint positions of the skeleton of the avatar 734 are similarly adjusted relative to their corresponding neutral positions to offset similar first and second amounts. As a result, the avatar 734 appears to imitate or copy the posture represented by the user's body 723.

[0071] As another example, selection of the multiple avatar imitation option instructs the virtual object modification module 418 to modify the skeletons of the multiple copies of the avatar based on the relative distances between the skeletal joints of the user's body. Fig. 8A The avatars depicted in the first neutral position 1020 shown in image 1011 animate a pose corresponding to the user's body as shown in image 1012. Specifically, the multiple avatars shown in image 1011 may appear in different neutral poses (e.g., crawling on the floor on four legs). In response to selection of the multiple avatar imitation option, the pose estimation system 124 analyzes the sequence of received monocular RGB images to determine when the user's pose matches the specified pose. In response to determining that the user's pose matches the specified pose, the pose estimation system 124 causes all avatars to copy the user's pose (e.g., standing on two legs and positioning the left and right arms in a pose similar to the user). The skeleton of the avatar is adjusted in a similar manner to that performed for a single avatar when the single avatar imitation option is selected. Another example is shown in images 1013 and 1014. In image 1013, the avatar 1030 transitions from a neutral position (lying flat on the floor) to a pose position 1032 that mimics the user's pose (e.g., standing on two legs and positioning the left and right arms in a pose similar to the user). When the avatar is a collection of paper pieces, the paper pieces are animated to fly around until the pieces are arranged in a certain order and in a pose that matches the user's body pose in front of or behind the user.

[0072] As another example, selection of the avatar visualization control option instructs the virtual object modification module 418 to modify the visual attributes of the avatar based on the user's gesture. For example, the avatar is rendered on the screen as moving from top to bottom or from left to right at a given rate. Specifically, Figure 8BThe cloud shown in image 1110 of can be animated to move downward across the screen in front of the user. The rate at which the cloud moves across the screen can be increased or decreased based on the user's posture or based on how slowly or quickly the user transitions from one posture to another. As another example, an avatar (e.g., a cloud) can be placed on the user's hand, as shown in image 1112. When the user changes the posture from a hand hanging vertically and straight in the air to a hand stretched horizontally, the avatar continues to follow the user's hand and is positioned on the user's hand, but the visual attributes of the avatar change (e.g., the cloud now appears as a rainbow above the user, from the first cloud located on one hand to the second cloud located on the second hand) as shown in Figure 1114. Changes in visual attributes can also include changing the face depicted on the avatar from a smile to a frown, or the color of the avatar can be changed based on changes in the position of the user's skeletal joints.

[0073] As another example, selection of the avatar virtual world interaction instructs the virtual object modification module 418 to cause the avatar to interact with another virtual object in the image. For example, the avatar is displayed in an image that includes a virtual object (e.g., a virtual tree and a virtual apple on the tree). The avatar poses and movements track and mimic the user's skeletal joint positions in a manner that allows the avatar to interact with the virtual object. Specifically, Figure 8C A virtual apple 810 and an avatar 812 are shown, whose arms have left and right wrists that are horizontal to each other in a specific position in a vertical direction. The right hand of the avatar 812 in this position is a first distance away from the virtual apple 810. When the body 820 of the user depicted in the image raises the right arm, the right arm 816 of the avatar 812 is also raised relative to the left arm, which also raises the right wrist of the avatar 812. In this position, the right wrist and right elbow of the avatar 812 are higher than the left wrist and left elbow, and the right hand of the avatar 812 is a second distance away from the virtual apple 810. The distance between the right hand of the avatar 812 and the position of the virtual apple 810 is determined to be less than a threshold value, and therefore, the virtual apple 810 is separated from the virtual tree 814 and fixed to the right hand of the avatar 812. As shown, the virtual apple 810 is no longer presented on the virtual tree 814, and when the user lowers their arms, the left and right arms of the avatar are also lowered to show that the right hand is now holding the virtual apple 810. In this way, a user can cause avatar 812 to mimic the user's gestures to interact with one or more virtual objects in an image or video.

[0074] As another example, selection of the avatar follow option instructs the virtual object modification module 418 to maintain a given distance between the avatar and the user. Specifically, this option causes the avatar to follow the user across a series of images. For example, the position of the avatar in an image depicting the user's body changes as the user's body position changes in the image. In particular, if the user moves to the right by a certain amount, the position of the displayed avatar also moves to the right by the same certain amount. Figure 8C The avatar is shown in a first position 830 relative to the user depicted in the image and at a first distance between the avatar and the user in 2D or 3D space. As the user moves to a second position, the avatar is moved to a second position 832 to maintain the same distance from the user depicted in the image.

[0075] Figure 6 600 is a flowchart illustrating example operations of the body posture estimation system 124 in performing process 600 according to an example embodiment. Process 600 may be embodied in computer-readable instructions executed by one or more processors, such that the operations of process 600 may be performed in part or in whole by functional components of the messaging server system 108 and / or the AR / VR application 105; accordingly, process 600 is described below by way of example and with reference thereto. However, in other embodiments, at least some of the operations of process 600 may be deployed on various other hardware configurations. Therefore, process 600 is not intended to be limited to the messaging server system 108 and may be implemented in whole or in part by any other component. Some or all of the operations of process 600 may be performed in parallel, out of order, or omitted entirely.

[0076] At operation 601, the body pose estimation system 124 receives a monocular image including a depiction of a user's body. For example, the machine learning technique module 412 receives the monocular image 401 depicting the user's body. The machine learning technique module 412 extracts one or more features from the image indicating skeletal joints.

[0077] At operation 602, the body pose estimation system 124 detects a plurality of skeletal joints of a body depicted in the monocular image 401. For example, the skeletal joint position module 414 processes the features extracted by the machine learning technique module 412 to determine the positions of a set of skeletal joints. The positions may be determined relative to a neutral position of each skeletal joint.

[0078] At operation 603, the body pose estimation system 124 determines the pose represented by the body depicted in the monocular image 401 based on the detected plurality of skeletal joints of the body. For example, the pose determination module 416 analyzes the relative position of each skeletal joint position to identify a pose corresponding to the skeletal joint position.

[0079] At operation 604, the body pose estimation system 124 modifies the pose of the avatar to match the pose represented by the body depicted in the monocular image 401 by adjusting a set of skeletal joints of the avatar's skeleton based on the detected plurality of skeletal joints of the body. For example, the virtual object modification module 418 adjusts the skeletal joints of the avatar's skeleton based on the virtual object mode provided by the virtual object mode selection module 419 so that each skeletal joint is offset from the neutral position of the joint by an amount corresponding to the amount by which the corresponding skeletal joint of the body in the image 401 deviates from the neutral position.

[0080] At operation 605, the body pose estimation system 124 generates an avatar for display with a modified pose that matches the pose represented by the body depicted in the monocular image 401. For example, the virtual object display module 420 receives the adjusted pose avatar and combines the avatar in the image 401 depicting the user's body to send to the client device 102.

[0081] Fig. 7A -C shows illustrative inputs and outputs of the body posture estimation system 124 according to an example embodiment. Fig. 7A The inputs and outputs shown in -C may be implemented by the AR / VR application 105. In some embodiments, the first user accesses the body pose estimation system 124 to swap an image depicting the user and the corresponding avatar to another user. The first user is presented with a screen 711 including an avatar selection area and an option to start swapping images. After the first user selects an avatar and selects the start option, instructions are presented to the first user in screen 712 to position the first user at a specified distance from the image capture device. For example, the first user is instructed to step back so that the user's body fits into the image captured by the image capture device.

[0082] In one embodiment, the first user is instructed to move far enough away from the image capture device until a predetermined set of skeletal joints are visible but not all skeletal joints are visible. Specifically, the body posture estimation system 124 may only require the wrist position, elbow position, shoulder position, and nose position to be visible in the image, without requiring the leg position. In some embodiments, the skeletal joints of the first user that are visible in the image cause the same corresponding skeletal joints of the avatar to be adjusted. For example, if only the arms of the first user are visible in the image, only the arms of the avatar are adjusted to mimic the arm position of the first user. If the user's entire body (including the user's legs) is visible, the entire avatar skeleton (including the avatar's legs) is adjusted to mimic the body posture of the first user.

[0083] The body posture of the user is obtained in screen 713 and the body posture estimation system 124 generates an avatar 734 having the same or similar posture as the first user for display in screen 714. The first user can say a predetermined word, or, if the user maintains the same posture for a threshold period of time, a screenshot or image is captured that features the user in the posture and the avatar mimicking the user's posture.

[0084] like Figure 7B , screenshot 741 is displayed to the first user in screen 721. A blank space 760 may be included in screen 721, indicating that receipt of a corresponding screenshot from a second user is pending. The first user may select or press blank area 760 to cause a list of recipients to be presented in screen 722. Specifically, screen 722 presents a list of friends of the first user. The first user may select a given friend "Matt", and the body posture estimation system 124 sends screenshot 741 to the selected friend "Matt".

[0085] like Figure 7C , the second user 731 follows a similar sequence as the first user so that the second avatar 732 imitates the posture of the second user 731, as shown in screen 730. Specifically, screen 730 is provided on a different mobile device associated with the second user 731. The second user 731 selects the second avatar 732 and is instructed to step back so that the body posture estimation system 124 can estimate the body posture of the user 731 and adjust the selected second avatar 732 to imitate the body posture of the second user. The body posture estimation system 124 captures an image 751 depicting the second user 731 and the second avatar 732 with a given posture, and presents the captured image 751 in screen 740. The captured image 751 is automatically sent to the first user. The captured image 751 depicting the second user 731 and the second avatar 732 with a given posture is presented together with a screenshot 741 depicting the first user and the first avatar with another posture.

[0086] Fig. 9 is a block diagram illustrating an example software architecture 906 that may be used in conjunction with the various hardware architectures described herein. Fig. 9 is only a non-limiting example of a software architecture, and it will be appreciated that a number of other architectures may be implemented to facilitate the functionality described herein. Software architecture 902 may be implemented in a system such as Fig.10 1000, which includes, among other things, a processor 1004, a memory / storage device 1006, and an input / output (I / O) component 1018. A representative hardware layer 952 is shown and may represent, for example, Fig.10The machine 1000 of the embodiment of the present invention. The representative hardware layer 952 includes one or more processing units 954 with associated executable instructions 904. The executable instructions 904 represent executable instructions of the software architecture 906, including implementations of the methods, components, etc. described herein. The hardware layer 952 also includes a memory and / or storage module memory / storage device 956 also having executable instructions 904. The hardware layer 1252 may also include other hardware 1258.

[0087] exist Fig. 9 In the example architecture of , software architecture 906 can be conceptualized as a stack of layers, each of which provides specific functionality. For example, software architecture 906 may include layers such as operating system 902, library 920, framework / middleware 918, application 916, and presentation layer 914. In operation, applications 916 or other components within these layers may call API call 908 through the software stack, and receive message 912 in response to API call 908. The layers shown are representative in nature, and not all software architectures have all layers. For example, some mobile or dedicated operating systems may not provide framework / middleware 918, while other operating systems may provide such layers. Other software architectures may include additional or different layers.

[0088] The operating system 902 can manage hardware resources and provide public services. The operating system 902 may include, for example, a kernel 922, services 924, and drivers 926. The kernel 922 may act as an abstraction layer between the hardware and other software layers. For example, the kernel 922 may be responsible for memory management, processor management (e.g., scheduling), component management, networking, security settings, etc. Services 924 may provide other public services to other software layers. Drivers 926 are responsible for controlling or interfacing with the underlying hardware. For example, drivers 926 include display drivers, camera drivers, drives, flash drives, serial communications drivers (such as Universal Serial Bus (USB) drivers), drivers, audio drivers, power management drivers, etc., depending on the hardware configuration.

[0089] The library 920 may provide a common infrastructure that may be used by the application 916 and / or other components and / or layers. The library 920 generally provides the following functions: allowing other software components to perform tasks in an easier manner than by directly interfacing with the basic operating system 902 functions (e.g., kernel 922, service 924, and / or driver 926). The library 920 may include a system library 944 (e.g., a C standard library) that may provide functions such as memory allocation functions, string manipulation functions, mathematical functions, and the like. In addition, the library 920 may include an API library 946 such as a media library (e.g., a library for supporting the presentation and operation of various media formats (e.g., MPEG4, H.264, MP3, AAC, AMR, JPG, PNG)), a graphics library (e.g., an OpenGL framework that may be used to present two-dimensional and three-dimensional graphics content on a display), a database library (e.g., SQLite that may provide various relational database functions), a network library (e.g., WebKit that may provide network browsing functions), and the like. The library 920 may also include a variety of other libraries 948 to provide a variety of other APIs to the application 916 and other software components / modules.

[0090] Framework / middleware 918 (sometimes also referred to as middleware) provides a high-level, general-purpose infrastructure that can be used by applications 916 and / or other software components / modules. For example, framework / middleware 918 can provide various graphical UI (GUI) functions, advanced resource management, advanced location services, etc. Framework / middleware 918 can provide a wide range of other APIs that can be used by applications 916 and / or other software components / modules, some of which may be specific to a particular operating system 902 or platform.

[0091] Applications 916 include built-in applications 938 and / or third-party applications 940. Examples of representative built-in applications 938 may include, but are not limited to, contact applications, browser applications, book reader applications, location applications, media applications, messaging applications, and / or game applications. Third-party applications 940 may include applications that are created by entities other than the vendor of a particular platform using Android TM or iOS TM Applications developed with a software development kit (SDK) can be developed on mobile operating systems (such as iOS TM 、Android TM , Third-party applications 940 may call API calls 908 provided by a mobile operating system (such as operating system 902) to facilitate the functionality described herein.

[0092] Applications 916 may utilize built-in operating system functionality (e.g., kernel 922, services 924, and / or drivers 926), libraries 920, and framework / middleware 918 to create a UI to interact with a user of the system. Alternatively or additionally, in some systems, interaction with the user may occur through a presentation layer such as presentation layer 914. In these systems, the application / component "logic" may be separated from aspects of the application / component that interact with the user.

[0093] Fig.10 1 is a block diagram of components of a machine 1000 according to some example embodiments, which components are capable of reading instructions from a machine-readable medium (e.g., a machine-readable storage medium) and performing any one or more of the methodologies discussed herein. Specifically, Fig.10 A diagrammatic representation of a machine 1000 in the example form of a computer system is shown, in which instructions 1010 (e.g., software, programs, applications, applet, application programs, or other executable codes) for causing the machine 1000 to perform any one or more of the methods discussed herein may be executed. In this way, the instructions 1010 may be used to implement the modules or components described herein. The instructions 1010 convert a general, unprogrammed machine 1000 into a specific machine 1000 that is programmed to perform the functions described and shown in the described manner. In alternative embodiments, the machine 1000 operates as a standalone device, or may be coupled (e.g., networked) to other machines. In a network deployment, the machine 1000 may operate as 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 machine 1000 may include, but is not 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 phone, 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 network appliance, a network router, a network switch, a network bridge, or any machine capable of executing instructions 1010 in sequence or otherwise, which specify actions to be taken by the machine 1000. In addition, while only a single machine 1000 is shown, the term "machine" should also be construed to include a collection of machines that individually or collectively execute instructions 1010 to perform any one or more of the methodologies discussed herein.

[0094] The machine 1000 may include a processor 1004, a memory / storage device 1006, and an I / O component 1018, which may be configured to communicate with each other, for example, via a bus 1002. In an example embodiment, the processor 1004 (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) may include, for example, a processor 1008 and a processor 1012, which may execute instructions 1010. The term "processor" is intended to include a multi-core processor 1004, which may include two or more independent processors (sometimes referred to as "cores") that may execute instructions simultaneously. Although Fig.10 A plurality of processors 1004 is shown, but the machine 1000 may include a single processor having a single core, a single processor having multiple cores (eg, a multi-core processor), multiple processors having a single core, multiple processors having multiple cores, or any combination thereof.

[0095] The memory / storage 1006 may include a memory 1014, (such as a main memory, or other memory storage) and a storage unit 1016, which may be accessed by the processor 1004, such as via the bus 1002. The storage unit 1016 and the memory 1014 store instructions 1010 that embody any one or more of the methodologies or functions described herein. During execution by the machine 1000, the instructions 1010 may also reside, in whole or in part, within the memory 1014, within the storage unit 1016, within at least one of the processors 1004 (e.g., within a cache memory of the processor), or any combination thereof. Thus, the memory 1014, the storage unit 1016, and the memory of the processor 1004 are examples of machine-readable media.

[0096] I / O components 1018 may include a variety of components to receive input, provide output, generate output, send information, exchange information, collect measurements, etc. The specific I / O components 1018 included in a particular machine 1000 will depend on the type of machine. For example, a portable machine such as a mobile phone will likely include a touch input device or other such input mechanism, while a headless server machine will likely not include such a touch input device. It should be understood that I / O components 1018 may be included in Fig.101028. The I / O components 1018 are grouped according to function only for the purpose of simplifying the following discussion, and the grouping is by no means limiting. In various example embodiments, the I / O components 1018 may include output components 1026 and input components 1028. The output components 1026 may include visual components (e.g., displays such as plasma display panels (PDPs), light emitting diode (LED) displays, liquid crystal displays (LCDs), projectors, or cathode ray tubes (CRTs)), acoustic components (e.g., speakers), tactile components (e.g., vibration motors, resistor mechanisms), other signal generators, etc. The input components 1028 may include alphanumeric input components (e.g., keyboards, touch screens configured to receive alphanumeric input, optical keyboards, or other alphanumeric input components), point-based input components (e.g., mice, touch pads, trackballs, joysticks, motion sensors, or other pointing instruments), tactile input components (e.g., physical buttons, touch screens that provide touch position and / or force or touch gestures, or other tactile input components), audio input components (e.g., microphones), etc.

[0097] In further example embodiments, the I / O component 1018 may include a biometric component 1039, a motion component 1034, an environment component 1036, or a position component 1038, among a variety of other components. For example, the biometric component 1039 may include a component for detecting expressions (e.g., hand expressions, facial expressions, voice expressions, body postures, or eye tracking), measuring bio-signals (e.g., blood pressure, heart rate, body temperature, sweat, or brain waves), identifying a person (e.g., voice recognition, retinal recognition, facial recognition, fingerprint recognition, or EEG-based recognition), etc. The motion component 1034 may include an acceleration sensor component (e.g., an accelerometer), a gravity sensor component, a rotation sensor component (e.g., a gyroscope), etc. Environmental component 1036 may include, for example, an illumination sensor component (e.g., a photometer), a temperature sensor component (e.g., one or more thermometers that detect ambient temperature), a humidity sensor component, a pressure sensor component (e.g., a barometer), an acoustic sensor component (e.g., one or more microphones that detect background noise), a proximity sensor component (e.g., an infrared sensor that detects nearby objects), a gas sensor (e.g., a gas detection sensor that detects concentrations of hazardous gases for safety or measures pollutants in the atmosphere), or other components that may provide indications, measurements, or signals corresponding to the surrounding physical environment. Position component 1038 may include a position sensor component (e.g., a GPS receiver component), an altitude sensor component (e.g., an altimeter or barometer that detects the altitude from which the air pressure can be obtained), an orientation sensor component (e.g., a magnetometer), etc.

[0098] A variety of technologies may be used to achieve communication. I / O components 1018 may include a communication component 1040 that is operable to couple machine 1000 to network 1037 or device 1029 via coupling 1024 and coupling 1022, respectively. For example, communication component 1040 may include a network interface component or other suitable device that interfaces with network 1037. In further examples, communication component 1040 may include a wired communication component, a wireless communication component, a cellular communication component, a near field communication (NFC) component, Components (e.g. Low energy consumption), Device 1029 may be another machine or any of a variety of peripheral devices (eg, a peripheral device coupled via USB).

[0099] In addition, the communication component 1040 can detect an identifier or include a component operable to detect an identifier. For example, the communication component 1040 may include a radio frequency identification (RFID) tag reader component, an NFC smart tag detection component, an optical reader component (e.g., an optical sensor for detecting one-dimensional barcodes such as universal product codes (UPC) barcodes, multi-dimensional barcodes (e.g., Quick Response (QR) codes, Aztec codes, data matrix, digital graphics, Max codes, PDF417, Super codes, UCC RSS-2D barcodes), and other optical codes), or an acoustic detection component (e.g., a microphone for identifying a tagged audio signal). In addition, various information can be obtained via the communication component 1040, such as obtaining a location via Internet Protocol (IP) geolocation, ... Signal triangulation to obtain location, obtaining location via detection of NFC beacon signals that can indicate a specific location, etc.

[0100] Glossary

[0101] As used herein, "carrier wave signal" refers to any intangible medium capable of storing, encoding, or carrying instructions, whether transitory or non-transitory, for execution by a machine, and includes digital or analog communications signals or other intangible media to facilitate communication of such instructions. Instructions may be sent or received over a network using a transitory or non-transitory transmission medium through a network interface device and using any of a number of well-known transmission protocols.

[0102] In this context, a "client device" refers to any machine that interfaces with a communication network to obtain resources from one or more server systems or other client devices. A client device may be, but is not limited to, a mobile phone, desktop computer, laptop computer, PDA, smart phone, tablet computer, ultrabook, netbook, notebook computer, multiprocessor system, microprocessor-based or programmable consumer electronics, game console, set-top box, or any other communication device that a user can use to access a network.

[0103] In this context, a "communication network" refers to one or more parts of a network, which may be an ad hoc network, an intranet, an extranet, a virtual private network (VPN), a local area network (LAN), a wireless local area network (WLAN), a wide area network (WAN), a wireless wide area network (WWAN), a metropolitan area network (MAN), the Internet, a part of the Internet, a part of the public switched telephone network (PSTN), a plain old telephone service (POTS) network, a cellular telephone network, a wireless network, A network, another type of network, or a combination of two or more such networks. For example, the network or a portion of a network may include a wireless or cellular network, and the coupling may 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 coupling may implement any of a variety of types of data transmission technologies, such as single carrier radio transmission technology (1xRTT), evolution data optimized (EVDO) technology, general packet radio service (GPRS) technology, enhanced data rates for GSM evolution (EDGE) technology, the third generation partnership project (3GPP) including 3G, fourth generation wireless (4G) networks, universal mobile telecommunications system (UMTS), high speed packet access (HSPA), world wide interoperability for microwave access (WiMAX), long term evolution (LTE) standards, other standards defined by various standards development organizations, other remote protocols, or other data transmission technologies.

[0104] In this context, a "transient message" is a message that is accessible for a time-limited duration. A transient message can be text, an image, a video, etc. The access time for a transient message can be set by the sender of the message. Alternatively, the access time can be a default setting or a setting specified by the recipient. Regardless of the setting technique, the message is transient.

[0105] In this context, "machine-readable medium" refers to a component, device, or other tangible medium capable of temporarily or permanently storing instructions and data, and may include, but is not limited to, random access memory (RAM), read-only memory (ROM), buffer memory, flash memory, optical media, magnetic media, cache, other types of storage devices (e.g., erasable programmable read-only memory (EPROM)), and / or any suitable combination thereof. The term "machine-readable medium" should be considered to include a single medium or multiple media (e.g., centralized or distributed databases, or associated caches and servers) capable of storing instructions. The term "machine-readable medium" should also be understood to include any medium or combination of multiple media capable of storing instructions (e.g., code) executed by a machine so that the instructions, when executed by one or more processors of the machine, cause the machine to perform any one or more of the methods described herein. Therefore, "machine-readable medium" refers to a single storage device or device, as well as a "cloud-based" storage system or storage network including multiple storage devices or devices. The term "machine-readable medium" itself does not include signals.

[0106] In this context, "component" refers to a device, physical entity, or logic with boundaries defined by function or subroutine calls, branch points, APIs, or other techniques that provide partitioning or modularization of specific processing or control functions. Components can be combined through their interfaces with other components to perform machine processes. A component can be a packaged functional hardware unit designed to be used with other components and a part of a program that generally performs a specific function of related functions. A component can constitute a software component (e.g., code embodied on a machine-readable medium) or a hardware component. A "hardware component" is a tangible unit that can perform certain operations and can be configured or set in a certain physical manner. In various example embodiments, one or more computer systems (e.g., a stand-alone computer system, a client computer system, or a server computer system) or one or more hardware components of a computer system (e.g., a processor or a group of processors) can be configured by software (e.g., an application or an application portion) as a hardware component that operates to perform certain operations described herein.

[0107] The hardware component may also be implemented mechanically, electronically, or any suitable combination thereof. For example, the hardware component may include a dedicated circuit or logic that is permanently configured to perform certain operations. The hardware component may be a dedicated processor, such as a field programmable gate array (FPGA) or an ASIC. The hardware component may also include programmable logic or circuits that are temporarily configured by software to perform certain operations. For example, the hardware component may include software executed by a general-purpose processor or other programmable processor. After being configured by such software, the hardware component becomes a specific machine (or a specific component of a machine) that is specifically customized to perform the configured function, and is no longer a general-purpose processor. It is understood that the decision to implement the hardware component mechanically in a dedicated and permanently configured circuit or in a temporarily configured circuit (e.g., configured by software) can be driven by cost and time considerations. Therefore, the phrase "hardware component" (or "hardware-implemented component") should be understood to include a tangible entity that is physically constructed, permanently configured (e.g., hardwired) or temporarily configured (e.g., programmed), an entity that operates in some way or performs certain operations described herein. Considering embodiments in which the hardware component is temporarily configured (e.g., programmed), each hardware component does not need to be configured or instantiated at any time. For example, where a hardware component includes a general purpose processor that is configured by software to be a special purpose processor, the general purpose processor may be configured as different special purpose processors (e.g., including different hardware components) at different times. Thus, the software correspondingly configures a particular processor or processors, for example, to constitute a particular hardware component at one time and another different hardware component at another different time.

[0108] Hardware components can provide information to other hardware components and receive information from other hardware components. Therefore, the described hardware components can be considered to be communicatively coupled. In the case of multiple hardware components being present at the same time, communication can be achieved by signal transmission (e.g., through appropriate circuits and buses) between two or more hardware components. In embodiments where multiple hardware components are configured or instantiated at different times, communication between such hardware components can be achieved, for example, by storing and obtaining information in a memory structure accessible to multiple hardware components. For example, a hardware component can perform an operation and store the output of the operation in a memory device to which it is communicatively coupled. Then, another hardware component can access the memory device at a later time to obtain and process the stored output.

[0109] The hardware component may also initiate communication with an input or output device and may operate on a resource (e.g., a collection of information). The various operations of the example methods described herein may be performed at least in part 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 may constitute a processor-implemented component that operates to perform one or more operations or functions described herein. As used herein, a "processor-implemented component" refers to a hardware component implemented using one or more processors. Similarly, the methods described herein may be implemented at least in part by a processor, wherein a specific processor or processor is an example of hardware. For example, at least some of the operations of a method may be performed by one or more processors or processor-implemented components. In addition, one or more processors may also be operable to support the execution of relevant operations in a "cloud computing" environment or as "software as a service" (SaaS). For example, at least some of the operations may be performed by a group of computers (as an example of a machine including a processor), wherein the operations may be accessed via a network (e.g., the Internet) and via one or more appropriate interfaces (e.g., APIs). The execution of certain operations may be distributed among processors, not only residing in a single machine, but also deployed across multiple machines. In some example embodiments, the processor or processor-implemented components may be located in a single geographic location (e.g., in a home environment, an office environment, or a server farm). In other example embodiments, the processor or processor-implemented components may be distributed across multiple geographic locations.

[0110] In this context, a "processor" refers to any circuit or virtual circuit (a physical circuit emulated by logic executed on an actual processor) that manipulates data values ​​according to control signals (e.g., "commands," "opcodes," "machine codes," etc.) and produces corresponding output signals suitable for operating a machine. A processor may be, for example, 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 ASIC, a radio frequency integrated circuit (RFIC), or any combination thereof. A processor may further be a multi-core processor having two or more independent processors (sometimes referred to as "cores") that can execute instructions simultaneously.

[0111] In this context, a "timestamp" refers to a series of characters or coded information that identifies when a particular event occurred, such as giving a date and time, sometimes accurate to a fraction of a second.

[0112] Changes and modifications may be made to the disclosed embodiments without departing from the scope of the present disclosure. These and other changes or modifications are intended to be included within the scope of the present disclosure as expressed in the following claims.

Claims

1. A method comprising: Receiving a video from a first user; determining that a predetermined set of skeletal joints of the first user are visible in the video; adjusting a portion of a first avatar corresponding to the predetermined set of skeletal joints of the first user visible in the video to represent a pose of the predetermined set of skeletal joints; Detect conditions for capturing screenshots; as well as In response to detecting the condition, a screenshot of the first user and the first avatar is captured.

2. The method according to claim 1, further comprising: Input is received from the first user selecting the first avatar from a plurality of avatars.

3. The method according to claim 1, wherein: The condition includes the passage of a threshold time period.

4. The method according to claim 1, wherein: The condition includes a verbal command received from the user to capture the screenshot.

5. The method according to claim 1, further comprising: displaying the screenshot to the first user; as well as While the screenshot is displayed, a blank space is displayed indicating that receipt of a corresponding screenshot from the second user is pending.

6. The method according to claim 5, further comprising: An input is received from the first user selecting the blank space.

7. The method according to claim 6, further comprising: In response to receiving input from the first user selecting the blank space, a list of recipients is caused to be presented.

8. The method according to claim 7, further comprising: receiving an input of selecting a designated recipient from the recipient list as a second user; as well as In response to receiving input selecting the designated recipient, the screenshot is sent to the second user.

9. The method according to claim 8, further comprising: Receiving the video of the second user; making it possible to determine that less than a second predetermined set of skeletal joints of the second user are visible in the video; causing a portion of a second avatar corresponding to less than all of the skeletal joints of the second user visible in the video to be adjusted to represent a pose of the second user; causing detection of a second condition for capturing a second screenshot; as well as In response to detecting the second condition, causing a second screenshot of the second user and the second avatar to be captured.

10. The method according to claim 9, further comprising: causing the second screenshot to be automatically sent to the first user; as well as The second screenshot is caused to be presented to the first user in place of the blank space.

11. The method according to claim 1, further comprising: generating a plurality of identical avatars having a first set of different poses for display; as well as The gesture is detected to correspond to a specified gesture.

12. The method of claim 11 , further comprising, in response to detecting that the gesture corresponds to the specified gesture: modifying the first set of different gestures of the plurality of avatars to have a same gesture that matches a gesture of the first user; and The plurality of avatars having the same pose are generated for display.

13. The method according to claim 12, further comprising: Modification of the first set of different poses of the plurality of avatars in the generated display is animated.

14. The method according to claim 1, wherein: A rate at which the predetermined set of skeletal joints are determined is adjusted based on a position of the first user relative to an image capture device.

15. A system comprising: A processor is configured to perform operations, the operations comprising: Receiving a video from a first user; Determining that a predetermined set of skeletal joints of the first user are visible in the video; adjusting a portion of a first avatar corresponding to the predetermined set of skeletal joints of the first user visible in the video to represent a pose of the predetermined set of skeletal joints; Detecting conditions for capturing screenshots; and In response to detecting the condition, a screenshot of the first user and the first avatar is captured.

16. The system of claim 15, wherein: The operations also include receiving input from the first user selecting the first avatar from a plurality of avatars.

17. The system of claim 15, wherein: The condition includes the passage of a threshold time period.

18. The system of claim 15, wherein: The condition includes a verbal command received from the user to capture the screenshot.

19. The system of claim 15, wherein: The operations also include: displaying the screenshot to the first user; and While the screenshot is displayed, a blank space is displayed indicating that receipt of a corresponding screenshot from the second user is pending.

20. A non-transitory machine-readable storage medium comprising instructions that, when executed by one or more processors of a machine, cause the machine to perform operations comprising: Receiving a video from a first user; determining that a predetermined set of skeletal joints of the first user are visible in the video; adjusting a portion of the first avatar visible in the video corresponding to the predetermined set of skeletal joints of the first user to represent a posture of the predetermined set of skeletal joints; Detect conditions for screenshots; as well as In response to detecting the condition, a screenshot of the first user and the first avatar is captured.