A system and method for correcting the perspective of visual data in real-time is disclosed. A electronic device accesses live visual data through a camera associated with an electronic device. The electronic device displays the live visual data on a display associated with the electronic device. The electronic device detects tilt data from a sensor associated with the electronic device, wherein tilt data indicates that the electronic device has tilted from an original angle to a current angle. In response to detecting tilt data from the sensor associated with the electronic device, the electronic devices alters the displayed live visual data to correct a live perspective of a live video feed.

TECHNICAL FIELD

The disclosed example embodiments relate generally to the field of mobile devices and, in particular, to the field of data transformation.

BACKGROUND

The rise of the computer age has resulted in a wide variety of electronic devices. One common type of electronic device is a personal electronic device that is intended to be carried around by a user, such as a smart phone, a tablet computer, or a smart watch. Each personal device has a large number of capabilities that increase its usefulness.

One common capability provided by personal devices is a camera. Cameras that are built into a personal electronic device allow the personal electronic device to capture visual data for pictures and videos. That data can be saved on the personal electronic device and displayed on the display associated with the device (e.g., a touch screen for a tablet computer). In some cases, the personal electronic devices can modify the visual data.

Like reference numerals refer to the same or similar parts throughout the drawings.

DETAILED DESCRIPTION

The present disclosure describes methods, systems, and non-transitory computer readable storage mediums storing computer program products for correcting the perspective of visual data in real-time. In the following description, for purposes of explanation, numerous specific details are set forth to provide a thorough understanding of the various aspects of different example embodiments. It will be evident, however, to one skilled in the art, that any particular example embodiment may be practiced without all of the specific details and/or with variations permutations and combinations of the various features and elements described herein. It is understood, in various embodiments, that the operations and actions described herein can be performed by one or more processors of a mobile device executing an image processing application.

When a picture or video is taken by an electronic device camera (such as a mobile device camera), the tilt and positioning of the electronic device results in nearer objects appearing larger in an image and far objects appearing small in the image. Further, when a picture of a tall building is taken by the electronic device positioned near the bottom of the building, the electronic device is tilted upward. The upward tilt of the electronic device results in perspective distortions in which an image appearing on the electronic device's display screen portrays the top of the building as smaller than the bottom of the building, and the sides of the building will appear to be converging upwards. In contrast, a picture taken without any tilt of the electronic device does not have any areas of visual data that are smaller or larger or converging.

In some example embodiments, the perspective distortions can be corrected automatically, without manual intervention by the user, and in real-time. The electronic device detects visual data (e.g., data generated by the camera) and automatically adjusts the visual data to correct the perspective distortion (e.g., make the visual data appear as though the electronic device is not tilted with respect to the subject of the picture).

In some example embodiments, the electronic device (e.g., smart phone or tablet computer) has one or more sensors that produce data indicative of the electronic device's current position, tilt, and movement. For example, an accelerometer produces data that describes the current angle or angle changes of an electronic device.

Using the angle of the tilt, the electronic device can automatically, and in real-time, adjust the captured visual data to correct the perspective distortion caused by the tilt such that the visual data appears to be from an electronic device that is not tilted. In some example embodiments, this is accomplished by applying a transform matrix (e.g., an affine transformation) to each (x,y) coordinate position of each pixel of the live camera feed (e.g. live video feed, live image feed).

In some example embodiments, perspective correction is accomplished by transforming the visual data to enlarge (e.g., add pixels to) some sections of visual data and shrink (e.g., remove pixels from) other sections of the visual data. The net effect is that when a user tilts an electronic device upwards, the image being shown on the display of the electronic device does not present an image with perspective distortion (e.g., convergence). Instead, when viewing a building from the bottom (e.g., with the electronic device tilted upwards) the image data would be transformed such that the sides of the building are corrected automatically and in real-time so that they are portrayed as vertical and non-converging on the display of the electronic device.

In some example embodiments, the perspective correction includes applying predetermined static variables to the live camera feed. The static variables are included in the transform matrix and further modify the incoming visual data (e.g., pixel locations) so that the subject of the incoming visual data is skewed such that the subject of the incoming visual data is portrayed on the display of the electronic device within a desirable size range and as though the electronic device is positioned within a desirable distance range from the subject in the physical world. Application of the static variables ensures the perspective correction is optimized to be the most aesthetically pleasing. For example, if the subject of the incoming visual data is far away from the electronic device in the physical world, it will appear smaller in the electronic device display—the static variables included in the transformation function (e.g., a transform matrix) skew the incoming visual data so that the displayed visual image or video feed portrays a somewhat closer subject (even though it is not) since a closer subject would be larger on the display of the electronic device. By skewing the incoming visual data with the static variables, the effects of the perspective correction will be more noticeable and optimized aesthetically.

FIG. 1is a block diagram depicting an electronic device120, in accordance with some example embodiments. The electronic device120includes an interface module(s)122, a visual data capture module130, a transformation module140, a display module150, and transformation data132. The electronic device120is connected to one or more third party systems102. One or more communication networks110interconnect these components. The communication network110may be any of a variety of network types, including local area networks (LANs), wide area networks (WANs), wireless networks, wired networks, the Internet, personal area networks (PANs), or a combination of such networks.

In some example embodiments, as shown by way of example inFIG. 1, the electronic device120generally includes three types of components, including front-end components, application logic components, and data components. As is understood by skilled artisans in the relevant computer and Internet-related arts, each module or engine shown inFIG. 1represents a set of executable software instructions and the corresponding hardware (e.g., memory and processor) for executing the instructions. To avoid unnecessary detail, various functional modules and engines that are not germane to conveying an understanding of the various example embodiments have been omitted fromFIG. 1. However, a skilled artisan will readily recognize that various additional functional modules and engines may be used with a electronic device120, such as that illustrated inFIG. 1, to facilitate additional functionality that is not specifically described herein. Furthermore, the various functional modules and engines depicted inFIG. 1may reside on a single server computer or may be distributed across several server computers in various arrangements. Moreover, although depicted inFIG. 1as a three-component type of architecture, the various example embodiments are by no means limited to this architecture.

As shown by way of example inFIG. 1, the electronic device120includes an interface module(s) (e.g., a web server)122, which receives data and/or requests from various third party systems102, and communicates data back to the appropriate third party systems102when appropriate. For example, the network interface module(s)122sends a request to a third party system102for visual processing data for a particular type of filter or transformation. In response, the interface module122receives the requested data and transmits it to data storage.

As shown by way of example inFIG. 1, the data components include transformation data132for storing information on how to accomplish each potential transformation step. It should be noted that, in this application, database is used to refer to any method or type of data storage or retention and is not limited to formal databases. Thus, any data structure or format may be used to hold the data in transformation data132. The application logic components include a visual data capture module130, a transformation module140, and a display module150.

The visual data capture module130interfaces with a visual data capture device (e.g., a camera) to record live visual data in either video or image format. In some example embodiments, that data is either stored at the electronic device120or transmitted to a third party system102.

In some example embodiments, the visual data capture module130then accesses the transformation data132to determine the current tilt of the electronic device120and access the data needed to perform a transformation to correct the perspective for the current visual data. The visual data capture module130constantly updates the tilt information from the transformation data132and adjusts the transformation to maintain the correct transformation.

In some example embodiments, the transformation module140receives the visual data and the transformation data132from the visual data capture module130. The transformation module140then transforms the data (e.g., pixel by pixel with a transformation matrix) to correct the perspective. In some example embodiments, correcting the perspective includes enlarging some portions of the visual data and reducing the size of some portions of the visual data. In this way, the visual data (e.g., the live video or the image) is corrected such that the visual display shows an image or video with no converging lines, and so on.

In some example embodiments, the display module150receives the transformed visual data from the transformation module140. The display module150then sends the transformed visual data to the display associated with the electronic device120.

FIG. 2is a block diagram illustrating an electronic device120in accordance with some embodiments. The electronic device120typically includes one or more processing units (CPU's)202, one or more network interface210, memory212, and one or more communication buses214for interconnecting these components. The electronic device120includes a user interface204. The user interface204includes a display device206and optionally includes an input means such as a keyboard, mouse, a touch sensitive display, or other input device208. Furthermore, some electronic devices120use a microphone and voice recognition to supplement or replace the keyboard.

Memory212includes high-speed random access memory, such as dynamic random-access memory (DRAM), static random access memory (SRAM), double data rate random access memory (DDR RAM) or other random access solid state memory devices; and may include non-volatile memory, such as one or more magnetic disk storage devices, optical disk storage devices, flash memory devices, or other non-volatile solid state storage devices. Memory212may optionally include one or more storage devices remotely located from the CPU(s)202. Memory212, or alternately, the non-volatile memory device(s) within memory212, comprise(s) a non-transitory computer readable storage medium.

In some embodiments, memory212or the computer readable storage medium of memory212stores the following programs, modules and data structures, or a subset thereof:an operating system216that includes procedures for handling various basic system services and for performing hardware dependent tasks;a network communication module210that is used for connecting the electronic device120to other computers via the one or more communication networks (e.g., network110inFIG. 1), such as the Internet, other wide area networks, local area networks, metropolitan area networks, etc.;a display module220for enabling the information generated by the operating system216and other system applications221to be presented visually on the display206;one or more system application module(s)221for handling various aspects of interacting with the electronic device120, including but not limited to:a visual data capture module130for capturing visual data through an input device208such as a camera;a transformation module140for altering the captured visual data in accordance with one or more transformation algorithms, wherein at least one of the one or more transformation algorithms is designed to remove perspective distortion from the visual data;a display module150for preparing the transformed visual for display on the display206associated with the electronic device120;an accessing module224for accessing visual data from the visual data capture module130or from a visual data storage associated with the electronic device120;a detection module226for detecting tilt data from one or more sensors available through the electronic device120;an alteration module228for altering the captured visual data in accordance with the detected tilt data;a reducing module230for reducing the size of one or more portions of the visual data to correct perspective;an enlarging module232for enlarging the size of one or more portions of the visual data to correct perspective distortion of the visual data; andan altered display module234for ensuring the displayed visual data is continuously updated in real time to match any changes in the electronic device120tilt; anda system data module240, for storing data relevant to the electronic device120, including but not limited to:user profile data242for storing profile data related to a user of the electronic device120and the use preferences of that user; andtransformation data132for storing data needed to transform visual data to correct for perspective distortion.

FIG. 3Adepicts a diagram of an example electronic device, in this case a smart phone302. As can be seen inFIG. 3A, the smartphone302has one or more input buttons (304) and one or more ports306(e.g., for a headphone jack).FIG. 3Aalso displays a reference line308that demonstrates the center line of a vertically held smart phone302. Exemplary lines310-1show the approximate viewing area of the smart phone302when held vertical.

FIG. 3Bdepicts a diagram of the example smart phone302fromFIG. 3A. InFIG. 3B, the smart phone302includes the same components, such as one or more input buttons304and one or more ports306, but the tilt angle has been changed. As can be seen, the center of the smartphone302no longer aligns with the reference vertical line308. Instead, the phone has been tilted away from the vertical line by an angle312. This angle312can be detected by the smart phone302. With the tilted orientation, the smart phone302now has a different area of vision310-2.

FIG. 4Adepicts an exemplary user interface for an electronic device120in accordance with some embodiments. As can be seen, the electronic device120is currently displaying live video of a very tall building. The viewing angle312is low and thus the building406on the display404has lines that coverage as they move away from the electronic device120(in this case, near the top).

FIG. 4Bdepicts and exemplary user interface for the electronic device120show inFIG. 4A. In this example, the live video has been perspective corrected. As can be seen, the large building406is now displayed such that all the lines remain vertical and do not converge as they near the top of the display404. As can be seen, the bottom of the building406has been reduced in size408and the upper part of the building406has been increased in size410.

FIG. 5is a flow diagram illustrating a method for correcting the perspective of visual data in real-time in accordance with some embodiments. Each of the operations shown inFIG. 5may correspond to instructions stored in a computer memory or computer-readable storage medium. Optional operations are indicated by dashed lines (e.g., boxes with dashed-line borders). In some embodiments, the method described inFIG. 5is performed by the electronic device (electronic device120inFIG. 1). However, the method described can also be performed by any other suitable configuration of electronic hardware.

In some embodiments, the method is performed at an electronic device (electronic device120inFIG. 1) including one or more processors and memory storing one or more programs for execution by the one or more processors.

In some example embodiments, the electronic device (electronic device120inFIG. 1) accesses (502) visual data recorded (or generated) by a camera associated with the electronic device (electronic device120inFIG. 1). For example, the visual data may be an image, a video, or a live video feed.

In some example embodiments, the electronic device (electronic device120inFIG. 1) then determines whether any new tilt data has been produced by a sensor (504) (e.g., whether the tilt of the electronic device (electronic device120inFIG. 1) has changed).

In accordance with a determination that the tilt of the electronic device (electronic device120inFIG. 1) has changed, the electronic device (electronic device120inFIG. 1) transforms (506) the visual data such that the visual data appears to be even or parallel with the subject, regardless of how the electronic device (electronic device120inFIG. 1) is actually tilted. Thus, if the electronic device (electronic device120inFIG. 1) is tilted to point up towards a top of a tall building, the image or video of the tall building406has a certain perspective, such that the lines of the building406seem to be converging at the farthest away part (e.g. the top) and the farther portions of the buildings appear smaller.

The electronic device (electronic device120inFIG. 1) transforms the visual data by correcting the perspective such that the building406appears as though the live video or image of the building406was taken from a non-tilted position and wherein the electronic device120was within a desirable distance range from the building. In this way, the image or video does not converge and the farther away portions are not smaller than the nearer portions. In some example embodiments, this is accomplished by applying a transform matrix to each pixel in the image or the video feed. In some example embodiments, an affine transform is used.

In some example embodiments, the electronic device (electronic device120inFIG. 1) continues (508) to monitor the sensor (e.g., a gyroscope or an accelerometer) for new or changing tilt data. While continuing to monitor for any change to the tilt, transformed visual data is displayed (510) on the display404of the electronic device (electronic device120inFIG. 1) in real-time. If changes to tilt data are detected, the process of transforming the visual data is updated to correct any perspective distortion that corresponds to the change in the tilt.

FIG. 6Ais a flow diagram illustrating a method for correcting the perspective of visual data in real-time in accordance with some embodiments. Each of the operations shown inFIG. 6Amay correspond to instructions stored in a computer memory or computer-readable storage medium. Optional operations are indicated by dashed lines (e.g., boxes with dashed-line borders). In some embodiments, the method described inFIG. 6Ais performed by the electronic device (electronic device120inFIG. 1). However, the method described can also be performed by any other suitable configuration of electronic hardware.

In some embodiments, the method is performed at an electronic device (electronic device120inFIG. 1) including one or more processors and memory storing one or more programs for execution by the one or more processors.

In some example embodiments, an electronic device (electronic device120inFIG. 1) accesses (602) visual data through a camera associated with an electronic device120. In some example embodiments, this visual data is live and is accessed directly from a camera associated with the electronic device (electronic device120inFIG. 1). In other example embodiments, the visual data is first stored in data associated in a database at the electronic device (electronic device120inFIG. 1) and then accessed by the electronic device (electronic device120inFIG. 1). In other example embodiments, the visual data is stored at a third party system (e.g., system102inFIG. 1) and is accessed over a network110.

In some example embodiments, the electronic device (electronic device120inFIG. 1) displays (604) the live visual data on a display404associated with the electronic device (electronic device120inFIG. 1). For example, a camera is capturing live video data and that video data is displayed on a screen of a smart phone302as it is captured (e.g., in real-time).

In some example embodiments, while displaying live visual data on a display404associated with the electronic device (electronic device120inFIG. 1), detecting tilt data from a sensor associated with the electronic device120, wherein tilt data indicates that the electronic device120has tilted from an original angle312to a current angle312(606). In some example embodiments, the sensor is an accelerometer. In some example embodiments, the sensor is a gyroscope.

In some example embodiments, the tilt data describes the motion of the electronic device (electronic device120inFIG. 1) around a particular axis such as the x, y, or z axis or any combination thereof. Thus, regardless of how the user tilts the electronic device (electronic device120inFIG. 1) the sensors of the electronic device (electronic device120inFIG. 1) can measure that change and use it to correct the perspective effects.

In some example embodiments, in response to detecting tilt data from the sensor associated with the electronic device120, the electronic device (electronic device120inFIG. 1) alters (608) the displayed live visual data to correct the perspective of the live video feed. In some example embodiments, altering the displayed live visual data is performed automatically, without any user intervention, in response to detecting tilt data.

In some example embodiments, altering the displayed live visual data is performed in real-time and the displayed visual data is updated in real-time.

In some example embodiments, altering the displayed live visual data includes expanding (610) one or more portions of the displayed live visual data. For example, in some embodiments, a section(s) of an image or video is increased to compensate for the perspective distortion caused by the angle312(or tilt) of the electronic device120. Thus, pixels can be added (or expanded) to correct the perspective distortion. In some example embodiments, new pixels are added by way of interpolation. Interpolation is the process of constructing new data points within the range of a discrete set of known data points. In some example embodiments, altering the displayed live visual data includes the electronic device (electronic device120inFIG. 1) reducing (612) one or more portions of the displayed live visual data. For example, if a particular portion of a video or image is overrepresented due to perspective, the alterations will result in fewer pixels available to display that data. As a result, some of the pixels will be removed and/or combined with other pixels.

In some example embodiments, the electronic device (electronic device120inFIG. 1) receives an angle of tilt from a sensor (e.g., in the form of a floating point number). This angle of tilt can then be used to build a transform matrix. In some example embodiments, the values in the transform matrix are dynamically updated in real-time based on the most recent tilt data. In other example embodiments, one or more of the values in the transform matrix are static.

In some example embodiments, static values within the transformation matrix are called perspective modifiers, perspective exaggerator, a perspective multiplier, perspective optimizer, or any value that serves to ensure that the perspective is appropriate given the distance of the subject, the size of the subject, and the angle312of the camera. In some example embodiments, the perspective optimizers are constant regardless of the specific electronic device (electronic device120inFIG. 1) that they are being used in. Thus, the static values result in transforming the visual data such that the subject of the image or video appearing to be at an appropriate distance from the camera.

Thus the static value (e.g., perspective modifiers, perspective exaggerator, a perspective multiplier, perspective optimizer) allows an image to be transformed in accordance with a threshold distance and size that the incoming image data will be treated as though it is within to ensure the best possible perspective correction.

In some example embodiments, the values stored in the transform matrix are represented by angles312, radians, or other numerical representation.

In some example embodiments, the distance of the object that is being corrected (e.g., a building) needs to be within certain bounds to correct the perspective. In some example embodiments, the alteration of the visual data includes making a subject of a photo appear closer or farther away so that the perspective corrected video/image is aesthetically pleasing.

In some example embodiments, altering the displayed live visual data includes the electronic device (electronic device120inFIG. 1) applying (614) a transform matrix to each (x,y) coordinate position of each pixel of the live visual feed. For example, each pixel has a specific x, y co-ordinate in the image or video feed. Each pixel position is then transformed using the transform matrix (e.g., using a dot product) to get a new (x, y) value for that particular pixel. Then the video feed can be rebuilt with each pixel in the location indicated after the transform matrix.

FIG. 6Bis a flow diagram illustrating a method for correcting the perspective of visual data in real-time in accordance with some embodiments. Each of the operations shown inFIG. 6Bmay correspond to instructions stored in a computer memory or computer-readable storage medium. Optional operations are indicated by dashed lines (e.g., boxes with dashed-line borders). In some embodiments, the method described inFIG. 6Bis performed by the electronic device (electronic device120inFIG. 1). However, the method described can also be performed by any other suitable configuration of electronic hardware.

In some embodiments, the method is performed at an electronic device (electronic device120inFIG. 1) including one or more processors and memory storing one or more programs for execution by the one or more processors.

In some example embodiments, the electronic device (electronic device120inFIG. 1) displays (614) the altered live visual data on the display404associated with the electronic device120. Thus, the displayed live visual data is displayed in real-time in its transformed form. In this way, the user can view, in real-time, the perspective corrected video and/or image and is able to know whether the perspective correction has given the style/appearance of video the user wants.

In some example embodiments, the electronic device (electronic device120inFIG. 1) detects (616) further tilt data and continually alters the displayed visual data in accordance with the detected further tilt data.

Software Architecture

FIG. 7is a block diagram illustrating an architecture of software700, which may be installed on any one or more of the devices ofFIG. 1(e.g., electronic device120).FIG. 7is merely a non-limiting example of a software architecture700that can be used in various computer systems described herein (e.g., computer system seen inFIG. 2), and it will be appreciated that many other architectures may be implemented to facilitate the functionality described herein. The software architecture700may be executing on hardware such as machine800ofFIG. 8that includes processors810, memory830, and I/O components850. In the example architecture ofFIG. 7, the software700may be conceptualized as a stack of layers where each layer may provide particular functionality. For example, the software700may include layers such as an operating system702, libraries704, frameworks706, and applications708. Operationally, the applications708may invoke application programming interface (API) calls710through the software stack and receive messages712in response to the API calls710.

The operating system702may manage hardware resources and provide common services. The operating system702may include, for example, a kernel720, services722, and drivers724. The kernel720may act as an abstraction layer between the hardware and the other software layers. For example, the kernel720may be responsible for memory management, processor management (e.g., scheduling), component management, networking, security settings, and so on. The services722may provide other common services for the other software layers. The drivers724may be responsible for controlling and/or interfacing with the underlying hardware. For instance, the drivers724may include display drivers, camera drivers, Bluetooth® drivers, flash memory drivers, serial communication drivers (e.g., Universal Serial Bus (USB) drivers), Wi-Fi® drivers, audio drivers, power management drivers, and so forth.

The libraries704may provide a low-level common infrastructure that may be utilized by the applications708. The libraries704may include system libraries730(e.g., C standard library) that may provide functions such as memory allocation functions, string manipulation functions, mathematic functions, and the like. In addition, the libraries704may include API libraries732such as media libraries (e.g., libraries to support presentation and manipulation of various media format such as MPREG4, H.264, MP3, AAC, AMR, JPG, PNG), graphics libraries (e.g., an OpenGL framework that may be used to render 2D and 3D in a graphic content on a display), database libraries (e.g., SQLite that may provide various relational database functions), web libraries (e.g., WebKit that may provide web browsing functionality), and the like. The libraries704may also include a wide variety of other libraries734to provide many other APIs to the applications708.

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

The applications708include a home application750, a contacts application752, a browser application754, a book reader application756, a location application758, a media application760, a messaging application762, a game application764, and a broad assortment of other applications708such as third party application766. In a specific example, the third party application766(e.g., an application developed using the Android™ or iOS™ software development kit (SDK) by an entity other than the vendor of the particular platform) may be mobile software running on a mobile operating system such as iOS™, Android™ Windows® Phone, or other mobile operating systems. In this example, the third party application766may invoke the API calls710provided by the mobile operating system702to facilitate functionality described herein.

Example Machine Architecture and Machine-Readable Medium

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

The machine800may include processors810, memory830, and I/O components850, which may be configured to communicate with each other via a bus805. In an example embodiment, the processors810(e.g., a 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, processor815and processor820that may execute instructions825. The term “processor” is intended to include a multi-core processor810that may comprise two or more independent processors810(also referred to as “cores”) that may execute instructions825contemporaneously. AlthoughFIG. 8shows multiple processors810, the machine800may include a single processor810with a single core, a single processor810with multiple cores (e.g., a multi-core process), multiple processors810with a single core, multiple processors810with multiples cores, or any combination thereof.

The memory830may include a main memory835, a static memory840, and a storage unit845accessible to the processors810via the bus805. The storage unit845may include a machine-readable medium847on which are stored the instructions825embodying any one or more of the methodologies or functions described herein. The instructions825may also reside, completely or at least partially, within the main memory835, within the static memory840, within at least one of the processors810(e.g., within the processor810's cache memory), or any suitable combination thereof, during execution thereof by the machine800. Accordingly, the main memory835, static memory840, and the processors810may be considered as machine-readable media847.

The I/O components850may include a wide variety of components to receive input, provide and/or produce output, transmit information, exchange information, capture measurements, and so on. It will be appreciated that the I/O components850may include many other components that are not shown inFIG. 8. In various example embodiments, the I/O components850may include output components852and/or input components854. The output components852may include visual components (e.g., a display404such as a plasma display panel (PDP), a light emitting diode (LED) display, a liquid crystal display (LCD), a projector, or a cathode ray tube (CRT)), acoustic components (e.g., speakers), haptic components (e.g., a vibratory motor), other signal generators, and so forth. The input components854may include alphanumeric input components (e.g., a keyboard, a touch screen configured to receive alphanumeric input, a photo-optical keyboard, or other alphanumeric input components), point based input components (e.g., a mouse, a touchpad, a trackball, a joystick, a motion sensor, and/or other pointing instrument), tactile input components (e.g., a physical button, a touch screen that provide location and force of touches or touch gestures, and/or other tactile input components), audio input components (e.g., a microphone), and the like.

Communication may be implemented using a wide variety of technologies. The I/O components850may include communication components864operable to couple the machine800to a network880and/or devices870via coupling882and coupling872respectively. For example, the communication components864may include a network interface component or other suitable device to interface with the network880. In further examples, communication components864may include wired communication components, wireless communication components, cellular communication components, near field communication (NFC) components, Bluetooth® components (e.g., Bluetooth® Low Energy), Wi-Fi® components, and other communication components to provide communication via other modalities. The devices870may be another machine and/or any of a wide variety of peripheral devices (e.g., a peripheral device coupled via a USB).

Moreover, the communication components864may detect identifiers and/or include components operable to detect identifiers. For example, the communication components864may include radio frequency identification (RFID) tag reader components, NFC smart tag detection components, optical reader components (e.g., an optical sensor to detect one-dimensional bar codes such as Universal Product Code (UPC) bar code, multi-dimensional bar codes such as Quick Response (QR) code, Aztec code, Data Matrix, Dataglyph, MaxiCode, PDF48, Ultra Code, UCC RSS-2D bar code, and other optical codes), acoustic detection components (e.g., microphones to identify tagged audio signals), and so on. In additional, a variety of information may be derived via the communication components864such as location via Internet Protocol (IP) geo-location, location via Wi-Fi® signal triangulation, location via detecting a NFC beacon signal that may indicate a particular location, and so forth.

Transmission Medium

The instructions825may be transmitted and/or received over the network880using a transmission medium via a network interface device (e.g., a network interface component included in the communication components864) and utilizing any one of a number of well-known transfer protocols (e.g., hypertext transfer protocol (HTTP)). Similarly, the instructions825may be transmitted and/or received using a transmission medium via the coupling872(e.g., a peer-to-peer coupling) to devices870. The term “transmission medium” shall be taken to include any intangible medium that is capable of storing, encoding, or carrying instructions825for execution by the machine800, and includes digital or analog communications signals or other intangible medium to facilitate communication of such software.

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

Term Usage