Patent Description:
The present disclosure relates generally to computer-mediated reality systems, and more particularly, to an augmented reality (AR) system that generates <NUM>-D maps from data gathered by client devices.

Computer-mediated reality technologies allow a user with a handheld or wearable device to add, subtract, or otherwise alter their visual or audible perception of their environment, as viewed through the device. Augmented reality (AR) is at type of computer-mediated reality that specifically alters a real time perception of a physical, real-world environment using sensory input generated at the computing device. <CIT> proposes systems and methods for image based location estimation. In one example, a first positioning system is used to generate a first position estimate. A set of structure facade data describing one or more structure facades associated with the first position estimate is then accessed. A first image of an environment is captured, and a portion of the image is matched to part of the structure facade data. A second position is then estimated based on a comparison of the structure facade data with the portion of the image matched to the structure facade data. <CIT> proposes a method of updating map data. The method entails capturing an image using a camera, determining a location of an object in the image, creating new map data to represent the object in the image, and updating a map database to include the new map data for the object in the image, the method may be implemented on a GPS-enabled wireless communications device having an onboard camera which can transmit the new map data to a map server for updating its map database. Determining the position of the object in the image relative to the wireless device may be accomplished using a rangefinder and compass, triangulation of multiple images of the object, or a stereoscopic camera. The accuracy of the GPS position fix may be improved by capturing images of recognizable objects for which location coordinates are available.

According to a first aspect of the present invention, there is provided a method as set out in claim <NUM>. According to a second aspect of the present invention, there is provided a method as set out in claim <NUM>. According to a third aspect of the present invention, there is provided an augmented reality system as set out in claim <NUM>.

Also disclosed herein is an augmented reality engine including a locally-stored animation engine executed on a portable computer. The animation engine includes a first input that receives a stream of digital images produced by a camera integrated in the portable computer. The digital images may represent a near real-time view of the environment seen by the camera. The animation engine also includes a second input that receives a geolocation position from a geolocation positioning system integrated in the portable computer, a 3D mapping engine that receives the first input and second input and estimates the distance between a camera position at a particular point in time and one or more mapping points, and an output that includes the stream of digital images produced by the camera overlaid with a computer-generated image. The computer generated image may be located in a particular position in the 3D map and remains positioned in the particular position as the user moves the camera to different positions in space. A non-locally stored object detection engine in networked communication with the locally-stored animation engine may be used to detect objects in the 3D map and return an indication of the detected objects (e.g., a location and identification, such as a type) to the portable computer. The object detection engine may use a first input received from the locally-stored animation engine that includes a digital image from the stream of digital images produced by the camera and a second input received from the locally-stored animation engine that includes the geolocation position associated with the digital image received from the locally-stored animation engine.

Other features and advantages of the present disclosure are described below.

A system and method creates a three-dimensional (<NUM>-D) map (e.g., with resolution on the order of a centimeter) and then uses that <NUM>-D map to enable interactions with the real world. In various embodiments, the mapping is accomplished on the client side (e.g., a phone or headset) and is paired with a backend server that provides previously compiled imagery and mapping back to the client device.

In one embodiment, the system selects images and global positioning system (GPS) coordinates on a client side (e.g., on a handheld or worn electronic device) and pairs the selected data with a <NUM>-D map. The <NUM>-D map is built from camera recording modules and an inertial measurement unit (IMU), such as accelerometer or gyroscope. The client data is sent to the server. The server and a client side computing devices process data together to establish the objects and geometry, as well as to determine potential interactions. Examples of potential interactions include those that are made in a room with AR animations.

Through use of the image and the <NUM>-D map together, the system may accomplish object detection and geometry estimation using neural networks or other types of models. An example of a neural network is a computational model used in machine learning which use a large collection of connected simple units (artificial neurons). The units connect together in software, and if the combined input signal is large enough, the units fire their own output signal. The system may use deep learning (e.g., a multi-layer neural network) to contextually understand AR data. Other types of models may include other statistical models or other machine learning models.

In some embodiments, the system aggregates local maps to create one or more global maps (e.g., by linking local maps together). The aggregated maps are combined together into a global map on the server to generate a digital map of the environment, or "world. " For example, two local maps generated by one or more devices for any combination of similar GPS coordinates, similar images, and similar sensor data that include portions that match within a predetermined threshold may be determined to overlap. Thus, the overlapping portions can be used to stitch the two local maps together that may aid in obtaining a global coordinate system that has consistency with a world map and the local maps (e.g., as part of generating the global map). The world map is used to remember previously stored animations in a map that is stored at specific GPS coordinates and further indexed through <NUM>-D points and visual images down to the specific place in the world (e.g., with a resolution on the order of one foot).

Illustrative processes map data to and from the cloud. As described herein, a map is a collection of <NUM>-D points in space that represent the world, in a manner analogous to <NUM>-D pixels. Image data is sent along with the <NUM>-D maps when available and useful. Certain examples send <NUM>-D map data without image data.

In various embodiments, a client device uses <NUM>-D algorithms executed by a processor to generate the <NUM>-D map. The client device sends images, the <NUM>-D map, GPS data, and any other sensor data (e.g., IMU data, any other location data) in an efficient manner. For instance, images may be selectively sent so as to not to bog down transmission or processing. In one example, images may be selectively sent when there is a novel viewpoint but not when images have already been provided for the current viewpoint. An image, for instance, is designated for sending by the algorithm when the field of view of a camera has minimal overlap with previous images from past or recent camera poses, or when the viewpoint has not been observed for an amount of time dependent on the expected movements of the objects. As another example, images may be provided if more than a threshold amount of time has elapsed since a previous image from the current (or a substantially overlapping) viewpoint was provided. This may enable the stored images associated with the map to be updated to reflect a more current (or at least a recent) status of the real world location.

In various embodiments, the cloud side device includes a real time detection system based on <NUM>-D data and images to detect objects, and estimates geometry of the real-world environment. For example, a <NUM>-D map of a room that is not photorealistic (e.g., semi-dense and/or dense <NUM>-D reconstruction), may be determinable with images.

The server fuses together the images and <NUM>-D data with the detection system to build a consistent and readily indexed <NUM>-D map of the world, or composite real world map using GPS data. Once stored, the real world map is searched to locate previously stored real world map and associated animations.

In various embodiments, mapping and tracking is done on the client side. A sparse reconstruction of the real world (digitizing the world) is gathered, along with a location of the camera relative to the real world. Mapping includes creating a point cloud, or collection of <NUM>-D points. The system communicates the sparse representation back to server by serializing and transmitting the point cloud information, along with GPS data. Cloud processing enables multiplayer capabilities (sharing map data between independent devices in real or close to real time) have working physical memory (storing map and animation data for future experiences not stored locally on the device) and object detection.

The server includes a database of maps and images. The server uses the GPS data to determine if a real world map has been previously stored for the coordinates. If located, the stored map is transmitted back to the client device. For example, a user at a home location may receive previously stored data associated with the home location. Additionally, the map and image data can be added to a stored, composite real world.

<FIG> is a block diagram of an AR computing system <NUM> that includes a client device <NUM> cooperating with elements accessed via a network <NUM>, according to an embodiment. For example, the elements may be components of a server device to produce AR data. The client device <NUM> includes, for example, a game engine <NUM> (e.g., the Unity game engine or another physics/rendering engine) and an AR platform <NUM>. The AR platform <NUM> may execute segmentation and object recognition. The AR platform <NUM> shown in <FIG> includes a complex computer vision module <NUM> that executes the client-side image processing (including image segmentation and local <NUM>-D estimation, etc.).

The AR platform <NUM> also includes a simultaneous localization and mapping (e.g., SLAM) module <NUM>. In one embodiment, the SLAM <NUM> functions include a mapping system that builds up point cloud and tracking to find the location of the camera in space. The SLAM processes of the example further re-project animation or an augmented value back into the real word. In other embodiments, the SLAM <NUM> may use different or additional approaches to mapping the environment around a client device <NUM> and/or determining the client device's <NUM> location in that environment.

In the embodiment of <FIG>, the AR platform <NUM> also includes a map retrieval module <NUM> and a deep learning module <NUM> for object recognition. The map retrieval module <NUM> retrieves previously generated maps (e.g., via the network <NUM>). In some embodiments, the map retrieval module <NUM> may store some maps (e.g., a map for a user's home location) locally. The deep learning module <NUM> applies machine-learned algorithms for object recognition. The deep learning module <NUM> may obtain the machine-learned algorithms after training on an external system (e.g., via the network <NUM>). In some embodiments, the deep learning module <NUM> may also provide results of object recognition and/or user feedback to enable further model training.

In the embodiment shown, the components accessed via the network <NUM> (e.g., at a server computing device) include an AR backend engine <NUM> in communication with a one world mapping module <NUM>, an object recognition module <NUM>, a map database <NUM>, an objects database <NUM>, and a deep learning training module <NUM>. In other embodiments, additional or different components may be included. Furthermore, the functionality may be distributed differently than described herein. For example, some or all of the object recognition functionality may be performed at the client device <NUM>.

The one world mapping module <NUM> fuses different local maps together to create a composite real world map. As noted previously, GPS position data from the client device <NUM> that initially generated the map may be used to identify local maps that are likely to be adjacent or overlapping. Pattern matching may then be used to identify overlapping portions of the maps or that two local maps are adjacent to each other (e.g., because they include representations of opposite sides of the same object). If two local maps are determined to overlap or be adjacent, a mapping can be stored (e.g., in the map database) indicating how the two maps relate to each other. The one world mapping module <NUM> may continue fusing together local maps as received from one or more client devices <NUM> to continue improving the composite real world map. In some embodiments, improvements by the one world mapping module <NUM> may include expanding the composite real world map, filling in missing portions of the composite real world map, updating portions of the composite real world map, aggregating overlapping portions from local maps received from multiple client devices <NUM>, etc. The one world mapping module <NUM> may further process the composite real world map for more efficient retrieval by map retrieval modules <NUM> of various client devices <NUM>. In some embodiments, processing of the composite real world map may include subdividing the composite real world map into one or more layers of tiles and tagging of various portions of the composite real world map. The layers may correlate to different zooms such that at a lower level more detail of the composite real world map may be stored compared to a higher level.

The object recognition module <NUM> uses object information from captured images and collected <NUM>-D data to identify features in the real world that are represented in the data. In this manner, the network <NUM> determines that a chair, for example, is at a <NUM>-D location and accesses an object database <NUM> associated with the location. The deep learning module <NUM> may be used to fuse the map information with the object information. In this manner, the AR computing system <NUM> may connect <NUM>-D information for object recognition and for fusion back into a map. The object recognition module <NUM> may continually receive object information from captured images from various client devices <NUM> to add various objects identified in captured images to add to the object database <NUM>. In some embodiments, the object recognition module <NUM> may further distinguish detected objects in captured images into various categories. In one embodiment, the object recognition module <NUM> may identify objects in captured images as stationary or temporary. For example, the object recognition module <NUM> determines a tree to be a stationary object. In subsequent instances, the object recognition module <NUM> may less frequently update the stationary objects compared to objects that might be determined to be temporary. For example, the object recognition module <NUM> determines an animal in a captured image to be temporary and may remove the object if in a subsequent image the animal is no longer present in the environment.

The map database <NUM> includes one or more computer-readable media configured to store the map data generated by client devices <NUM>. The map data can include local maps of <NUM>-D point clouds stored in association with images and other sensor data collected by client devices <NUM> at a location. The map data may also include mapping information indicating the geographic relationship between different local maps. Similarly, the objects database <NUM> includes one or more computer-readable media configured to store information about recognized objects. For example, the objects database <NUM> might include a list of known objects (e.g., chairs, desks, trees, buildings, etc.) with corresponding locations along with properties of those objects. The properties may be generic to an object type or defined specifically for each instance of the object (e.g., all chairs might be considered furniture but the location of each chair may be defined individually). The object database <NUM> may further distinguish objects based on the object type of each object. Object types can group all the objects in the object database <NUM> based on similar characteristics. For example, all objects of a plant object type could be objects that are identified by the object recognition module <NUM> or by the deep learning module <NUM> as plants such as trees, bushes, grass, vines, etc. Although the map database <NUM> and the objects database <NUM> are shown as single entities, they may be distributed across multiple storage media at multiple devices (e.g., as a distributed database).

<FIG> is a flowchart showing processes executed by a client device <NUM> and a server device to generate and display AR data, according to an embodiment. The client device <NUM> and the server computing devices may be similar to those shown in <FIG>. Dashed lines represent the communication of data between the client device <NUM> and server, while solid lines indicate the communication of data within a single device (e.g., within the client device <NUM> or within the server). In other embodiments, the functionality may be distributed differently between the devices and/or different devices may be used.

At <NUM>, raw data is collected at the client device <NUM> by one or more sensors. In one embodiment, the raw data includes image data, inertial measurement data, and location data. The image data may be captured by one or more cameras which are linked to the client device <NUM> either physically or wirelessly. The inertial measurement data may be collected using a gyroscope, an accelerometer, or a combination thereof and may include inertial measurement data up to six degrees of freedom - i.e., three degrees of translation movements and three degrees of rotational movements. The location data may be collected with a global position system (GPS) receiver. Additional raw data may be collected by various other sensors, such as pressure levels, illumination levels, humidity levels, altitude levels, sound levels, audio data, etc. The raw data may be stored in the client device <NUM> in one or more storage modules which can record raw data historically taken by the various sensors of the client device <NUM>.

The client device <NUM> may maintain a local map storage at <NUM>. The local map storage includes local point cloud data. The point cloud data comprises positions in space that form a mesh surface that can be built up. The local map storage at <NUM> may include hierarchal caches of local point cloud data for easy retrieval for use by the client device <NUM>. The local map storage at <NUM> may additionally include object information fused into the local point cloud data. The object information may specify various objects in the local point cloud data.

Once raw data is collected at <NUM>, the client device <NUM> checks whether a map is initialized at <NUM>. If a map is initialized at <NUM>, then the client device <NUM> may initiate at <NUM> the SLAM functions. The SLAM functions include a mapping system that builds up point cloud and tracking to find the location of the camera in space on the initialized map. The SLAM processes of the example further re-project animation or an augmented value back into the real word. If no map was initialized at <NUM>, the client device <NUM> may search the local map storage at <NUM> for a map that has been locally stored. If a map is found in the local map storage at <NUM>, the client device <NUM> may retrieve that map for use by the SLAM functions. If no map is located at <NUM>, then the client device <NUM> may use an initialization module to create a new map at <NUM>.

Once a new map is created, the initialization module may store the newly created map in the local map storage at <NUM>. The client device <NUM> may routinely synchronize map data in the local map storage <NUM> with the cloud map storage at <NUM> on the server side. When synchronizing map data, the local map storage <NUM> on the client device <NUM> may send the server any newly created maps. The server side at <NUM> checks the cloud map storage <NUM> whether the received map from the client device <NUM> has been previously stored in the cloud map storage <NUM>. If not, then the server side generates a new map at <NUM> for storage in the cloud map storage <NUM>. The server may alternatively append the new map at <NUM> to existing maps in the cloud map storage <NUM>.

Back on the client side, the client device <NUM> determines whether a novel viewpoint is detected at <NUM>. In some embodiments, the client device <NUM> determines whether each viewpoint in the stream of captured images has less than a threshold overlap with preexisting viewpoints stored on the client device <NUM> (e.g., the local map storage <NUM> may store viewpoints taken by the client device <NUM> or retrieved from the cloud map storage <NUM>). In other embodiments, the client device <NUM> determines whether a novel viewpoint is detected <NUM> in a multi-step determination. At a high level, the client device <NUM> may retrieve any preexisting viewpoints within a local radius of the client device's <NUM> geolocation. From the preexisting viewpoints, the client device <NUM> may begin to identify similar objects or features in the viewpoint in question compared to the preexisting viewpoints. For example, the client device <NUM> identifies a tree in the viewpoint in question and may further reduce from the preexisting viewpoints within the local radius all preexisting viewpoints that also have trees visible. The client device <NUM> may use additional layers of filtration that are more robust in matching the viewpoint in question to the filtered set of preexisting viewpoints. In one example, the client device <NUM> uses a machine learning model to determine whether the viewpoint in question matches with another viewpoint in the filtered set (i.e., that the viewpoint in question is not novel because it matches an existing viewpoint). If a novel viewpoint is detected <NUM>, then the client device <NUM> records at <NUM> data gathered by the local environment inference. For example, on determining that the client device <NUM> currently has a novel viewpoint, images captured with the novel viewpoint may be sent to the server (e.g., to a map/image database <NUM> on the server side). A novel viewpoint detector module may be used to determine when and how to transmit images with <NUM>-D data. The local environment inference may include updated key frames for the local mapping system and serialized image and/or map data. The local environment inference may be used by the server to fit the novel viewpoint relative to the other viewpoints at a given location in the map.

On the server side, novel viewpoint data (e.g., comprising point cloud information with mesh data on top) may be stored at <NUM> in map/image database on the server side. The server may add different parts of a real world map from stored cloud map storage <NUM> and an object database <NUM>. The cloud environment inference <NUM> (comprising the added component data) may be sent back to the client device. The added data may include points and meshes and object data having semantic labels (e.g., a wall or a bed) to be stored at local map storage <NUM>.

<FIG> is a high-level block diagram illustrating an example computer <NUM> suitable for use as a client device <NUM> or a server. The example computer <NUM> includes at least one processor <NUM> coupled to a chipset <NUM>. The chipset <NUM> includes a memory controller hub <NUM> and an input/output (I/O) controller hub <NUM>. A memory <NUM> and a graphics adapter <NUM> are coupled to the memory controller hub <NUM>, and a display <NUM> is coupled to the graphics adapter <NUM>. A storage device <NUM>, keyboard <NUM>, pointing device <NUM>, and network adapter <NUM> are coupled to the I/O controller hub <NUM>. Other embodiments of the computer <NUM> have different architectures.

In the embodiment shown in <FIG>, the storage device <NUM> is a non-transitory computer-readable storage medium such as a hard drive, compact disk read-only memory (CD-ROM), DVD, or a solid-state memory device. The memory <NUM> holds instructions and data used by the processor <NUM>. The pointing device <NUM> is a mouse, track ball, touch-screen, or other type of pointing device, and is used in combination with the keyboard <NUM> (which may be an on-screen keyboard) to input data into the computer system <NUM>. In other embodiments, the computer <NUM> has various other input mechanisms such as touch screens, joysticks, buttons, scroll wheels, etc., or any combination thereof. The graphics adapter <NUM> displays images and other information on the display <NUM>. The network adapter <NUM> couples the computer system <NUM> to one or more computer networks (e.g., the network adapter <NUM> may couple the client device <NUM> to the server via the network <NUM>).

The types of computers used by the entities of <FIG> can vary depending upon the embodiment and the processing power required by the entity. For example, a server might include a distributed database system comprising multiple blade servers working together to provide the functionality described. Furthermore, the computers can lack some of the components described above, such as keyboards <NUM>, graphics adapters <NUM>, and displays <NUM>.

<FIG> is a flowchart illustrating augmentation <NUM> of images captured by a client device (e.g., the client device <NUM>), according to an embodiment. The client device includes one or more sensors for recording image data and location data and one or more display devices for displaying augmented images.

The client device collects <NUM> image data and location data with one or more sensors on the client device. In one embodiment, the client device may utilize one or more cameras associated with the client device (e.g., cameras as components, cameras physically linked to the client device, or cameras wirelessly linked to the client device). The image data may also include video data stored as a video file or stored as individual frames from the video file. In another embodiment, the client device may utilize a GPS receiver, an inertial measurement unit (IMU), an accelerometer, a gyroscope, an altimeter, another sensor for determining spatial position of the client device, or some combination thereof to record location data of the client device.

The client device determines <NUM> a location of the client device in a <NUM>-D map of the environment. In one embodiment, the client device generates a <NUM>-D map of the environment based on image data or location data as collected. In another embodiment, the client device retrieves a portion of a <NUM>-D map stored on an external system. For example, the client device retrieves a portion of a composite real world <NUM>-D map from a server via a network (e.g., the network <NUM>). The retrieved <NUM>-D map comprises point cloud data that maps objects in the real world to spatial coordinates in the <NUM>-D map. The client device then utilizes the location data to determine a spatial position of the client device within the <NUM>-D map. In additional embodiments, the client device also utilizes the image data to aid in determining the spatial position of the client device within the <NUM>-D map.

The client device determines <NUM> a distance of a mapping point to the client device in the <NUM>-D map of the environment. The client device identifies a mapping point within the <NUM>-D map and corresponding coordinates of the mapping point. For example, the client device identifies an object in the <NUM>-D map, e.g., a tree, a sign, a bench, a fountain, etc. The client device then utilizes the coordinates of the identified mapping point as well as the location of the client device to determine a distance between the client device and the mapping point.

The client device generates <NUM> a virtual object at the mapping point with size based on the distance of the mapping point to the client device. The virtual object may be generated by an application programming interface of an executable application stored on the client device. The virtual object may also be transmitted by an external server to be positioned at the mapping point in the <NUM>-D map. In some embodiments, the virtual object may be selected by the client device based on other sensory data collected by other sensors of the client device. The virtual object may vary in size based on the distance of the client device to the mapping point.

The client device augments <NUM> the image data with the virtual object. The size of the virtual object in the image data depends on the determined distance of the client device to the mapping point. The appearance of the virtual object in the image data may also vary based on other sensory data collected by the client device. In some embodiments, the client device updates the image data with the virtual object periodically, when an input is received by the client device corresponding to the virtual object (e.g., user input interacting with the virtual object), or when sensory data changes (e.g., movement of the client device rotationally or translationally, change in time of day, etc.).

The client device displays <NUM> the augmented image data with the virtual object. The client device may display on one or more displays the virtual object. In embodiments where the client device continually updates the augmented image data, the client device also updates the displays to reflect the updates to the augmentation of the image data.

Claim 1:
A computer-implemented method of generating computer mediated reality data on a client device, the method comprising:
capturing image data with a camera integrated in the client device, the image data representing a near real-time view of an environment around the client device;
capturing location data with a location sensor integrated in the client device, the location data describing a spatial position of the client device in the environment;
generating local map data based on the image data and the location data, the local map data including one or more three-dimensional (3D) point clouds spatially describing one or more objects in the environment around the client device;
accessing a set of viewpoints stored locally on the client device;
identifying a first image in the image data as a novel viewpoint based at least in part on the first image having less than a minimum overlap in field of view with each viewpoint in the set of viewpoints;
transmitting the local map data and the first image as the novel viewpoint to an external server;
receiving a local portion of world map data at the client device from the external server, wherein the world map data is generated by fusing a plurality of local maps generated by one or more client devices and viewpoints captured by one or more client devices, wherein the local portion is selected based on the local map data;
determining a distance between a mapping point in the local portion of world map data and the spatial position of the client device based on location data and the local portion of world map data;
generating a computer mediated reality image at the mapping point in the local portion of world map data based on the image data and the location data; and
displaying the computer mediated reality image at the mapping point.