Patent Publication Number: US-2022230464-A1

Title: Automatic image capture system based on a determination and verification of a physical object size in a captured image

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     This application is a Continuation Application of U.S. application Ser. No. 16/855,556, filed on Apr. 22, 2020, which is a Continuation Application of U.S. patent Ser. No. 16/435,074, filed on Jun. 7, 2019. The contents of each application are incorporated herein by reference in their entirety. 
    
    
     BACKGROUND 
     Some electronic applications may require user authentication or document verification. For example, a user may be asked to provide a government identification card before being given access to an electronic account. In another example, a user may wish to submit a document for electronic transfer or use, such as a monetary check to be deposited into a bank account. Different entities may allow users to capture images of such documents using a mobile device and submit the images for verification/authentication. However, this may be a cumbersome and error prone process. Conventionally, the mobile device may fail to determine whether a valid document is present in the captured images, or an incorrect image of the document may be transmitted to an external server for processing. The external server may determine whether the document in the captured image is invalid or incorrect and subsequently request a different image of the correct document from the mobile device. In this regard, the back and forth transmission of requests and images of documents between the external server and mobile device may make the process inefficient and slow. 
     SUMMARY 
     Described herein is a method, device, and computer readable medium for automatically capturing images based on a verification of image parameters. In an embodiment, a method for automatically capturing images may include capturing, via a camera of a device, image frames having a first object within a field of view of the camera, in response to receiving instructions from an application executed on the device. Each image frame may be associated with at least one environmental feature. The method may further include processing in real-time, via the application executed on the device, each image frame of the image frames to identify an outline of the first object in each image frame, and receiving, via the application executed on the device, a calculated size of the first object for each of the image frames. The calculated size may be based on the outline of the first object and the environmental feature. The method further includes determining, via the application executed on the device, whether the calculated size of the first object in one or more image frames of the image frames is within a threshold size and automatically extracting, via the application executed on the device, an image of the first object from the one or more image frames, in response to determining that the size of the first object is within the threshold size. 
     In an embodiment, the method may include receiving, via the application executed on the device, a request for an image of a document, and controlling, via the application executed on the device, the operation of the camera of the device to contemporaneously and continuously capture the image frames of an area within the field of view of the camera including the first object, in response to receiving the request for an image of the document. The method may further include determining, via the application executed on the device, an aspect ratio of the first object in each of the image frames, and determining, via the application executed on the device, that the first object corresponds to a given document type based on determining that the size of the first object is within the threshold size and the aspect ratio of the first object corresponds to a specified aspect ratio. The area within the field of view of the camera may include a second object having an aspect ratio corresponding to the specified aspect ratio, and the method may further include determining, via the application executed on the device, that the second object fails to correspond to the given document type based on a calculated size of the second object failing to fall within the threshold size. The captured image of the first object may exclude the second object. 
     In an embodiment, the method may further include comparing, via the application, the calculated size of the first object received for a given image frame of the image frames to the calculated size of the first object received for other image frames of the image frames, determining, via the application executed on the device, a consistency in the calculated sizes of the first object across the one or more image frames of the image frames based on the comparing, and identifying, via the application executed on the device, a final calculated size of the first object based on calculated sizes of the first object across the one or more image frames when the determined consistency meets a given threshold. The method may further include monitoring, via the application executed on the device, movement of an accelerometer of the device while the camera of the device captures the image frames. The determining a consistency further includes determining the consistency based on the movement of the accelerometer. 
     In an embodiment, the method may further include determining, via the application an accuracy of the calculated sizes of the first object determined for each of the image frames based on tilt motion and orientation data of the device for each captured image frame of the image frames. 
     In an embodiment, a device for automatically capturing images may include a memory, an application stored in the memory, a camera, a display, and one or more processors in communication with the camera and the memory. The one or more processors may be configured to execute the application. The application when executed may be configured to capture, using the camera of a device, image frames having an object within a field of view of the camera, in response to receiving instructions from an application executed on the device. Each image frame may be associated with at least one environmental feature. The application may further be configured to process in real-time, each image frame of the image frames to identify an outline of the object in each image frame and receive a calculated size and a calculated aspect ratio of the object for each of the image frames. The calculated size may be based on the outline of the object and the environmental feature. The application when executed may further be configured to determine that the object corresponds to a predetermined document type based on the calculated size of the object in one or more image frames of the image frames being within a threshold size and the aspect ratio of the object corresponding to a predetermined aspect ratio, and extract an image of the object from the one or more image frames, in response to determining that the object corresponds to the predetermined document type. 
     In an embodiment, the device may further include a buffer configured to store data associated with the one or more image frames. In an embodiment, the processing may include converting the image frame into a grayscale image, generating a blurred image based on the grayscale image, detecting a edges in the blurred image, identifying shapes based on the edges, defining bounding rectangles for the shapes, and determining an outline of the object based on the bounding rectangles. In an embodiment, the display of the device renders an image of the object. In an embodiment, the device may further include an accelerometer configured to detect a tilt motion and generate orientation data of the device while the camera element captures the image frames. 
     In an embodiment, a non-transitory computer readable medium stores instructions that, when executed by one or more processors of a device may cause the one or more processors to, capture, via a camera of a device, image frames having an object within a field of view of the camera, in response to receiving instructions from an application executed on the device. Each image frame may be associated with at least one environmental feature. The instructions, when executed by the one or more processors, may further cause the one or more processors to process in real-time, via the application executed on the device, each image frame of the image frames to identify the object in each image frame. The processing may include converting the image frame into a grayscale image, generating a blurred image based on the grayscale image, detecting edges in the blurred image, identifying a shape based on the edges, defining bounding rectangles for the shapes, and determining an outline of the object based on the bounding rectangles. The instructions, when executed by the one or more processors, may further cause the one or more processors to receive, via the application executed on the device, a calculated size of the object for each of the image frames. The calculated size may be based on the outline of the object and the environmental feature. The instructions, when executed by the one or more processors, may further cause the one or more processors to determine, via the application executed on the device, whether the calculated size of the object in one or more image frames of the image frames is within a threshold size, and automatically extract, via the application executed on the device, an image of the from the one or more image frames, in response to determining that the size of the object is within the threshold size. 
     In an embodiment, the instructions, when executed by the one or more processors, may further cause the one or more processors to receive, via the application executed on the device, a request for one or more images of a document, determine, via the application executed on the device, an aspect ratio of the object in each of the image frames, and determine, via the application executed on the device, the object corresponds to a given document type based on determining that the size of the object is within the threshold size and the aspect ratio of the object corresponds to a specified aspect ratio. In an embodiment, the requested one or more images of the document may include a front image of the document and a back image of the document. The document is at least one of a government issued identification card, a health insurance card, an employee identification card, or an identification card issued by a non-government institution. 
     In an embodiment, the instructions, when executed by the one or more processors, may further cause the one or more processors to render, via a display of the device, each of the image frames having the object, and render, via the display of the device, a boundary box overlaid around edges of the object as each of the frames having the object is rendered on the display, in response to determining the outline of the object. The extracting the image of the object may include cropping the object from within the boundary box overlaid around the edges of the object. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       Illustrative embodiments are shown by way of example in the accompanying drawings and should not be considered as a limitation of the present disclosure. The accompanying figures, which are incorporated in and constitute a part of this specification, illustrate one or more embodiments of the disclosure and, together with the description, help to explain embodiments of the present disclosure. In the figures: 
         FIG. 1A  illustrates an example device according to an embodiment; 
         FIG. 1B  is a diagram of an example device positioned for capturing an image according to an embodiment; 
         FIG. 1C  is a diagram of a boundary box around a first object in an image frame according to an embodiment; 
         FIG. 1D  is a block diagram of components an image analysis and processing pipeline according to an embodiment; 
         FIGS. 1E-1I  are diagrams of image frames being processed during various stages of an example image analysis and processing pipeline, according to an embodiment; 
         FIG. 2  is a block diagram of an environment for automatically capturing images according to an embodiment; 
         FIG. 3  is a block diagram of example components of a computing system according to an embodiment; 
         FIG. 4  is a flowchart illustrating a process implemented by a system for automatically capturing images according to an embodiment; 
         FIG. 5  is a flowchart illustrating a process implemented by a system for automatically capturing images according to an embodiment; 
         FIG. 6  is a flowchart illustrating a process implemented by a system for automatically capturing images according to an embodiment; 
         FIG. 7  is a flowchart illustrating a process implemented by a system for automatically capturing images according to an embodiment; and 
         FIG. 8  is a flowchart illustrating a process implemented by a system for automatically capturing images according to an embodiment. 
     
    
    
     DETAILED DESCRIPTION 
     As a non-limiting example, entities such as financial institutions may need to virtually verify an identity of a user, while the user is interfacing with an application associated with the financial institution. The application may be executing on a device operated by the user. The financial institution may request an image and/or copy of an authentic government-issued identification (ID) card (e.g., driving license, passport, military ID, social security card, etc.). In the past, a device may have had difficulty determining whether an object in the image corresponded with an authentic specified document type. For example, conventional algorithms may not differentiate between two rectangular objects of different sizes yet having the same aspect ratio. In this regard, in response to a request for an image of an authentic government-issued ID card, conventional algorithms may allow a device to erroneously capture a rectangular object that may not be an authentic government-issued ID card, because the rectangular object is the same shape as a standard government-issued ID. The device may transmit the image of the rectangular object to an external server to determine its authenticity. In the event the image of the object is considered invalid, the external server would have to instruct the device to capture another image of a valid object corresponding to the government-issued ID card. In such a scenario, a large volume of users may be attempting to interface with the application to virtually verify their identity, such that the back and forth between the device and the external server to process images may cause a network bottleneck. Consequently, this would waste computational resources and network resources, and decrease operational efficiency. Further, repeated authentication failures may frustrate a user attempting to use the application. 
     Described herein are a method, system, and computer readable medium for automatically capturing images. In an embodiment, a device may execute an application on the device. The application may receive a request for capturing an image of a document. In response to receiving a request for capturing an image of a document, the application may control the operation of the camera to contemporaneously and continuously capture image frames of an area within the field of view of a camera of the device. The field of view may include an object and in turn may be included in the captured image frames. Each image frame may be associated with an environmental feature. The application may execute an image analysis and processing pipeline on each of the captured image frames, locally on the device. The application may determine whether the aspect ratio and real-world size of the object in the captured image frames corresponds with a specified threshold size and aspect ratio which corresponds with a given document type, based on the executed image analysis and processing pipeline on each of the captured image frames. In response to determining that the object corresponds to the given document type, the application may automatically extract an image of the object. The extracted image may be displayed on a display of the device. 
     The image analysis and processing pipeline may include identifying and/or tracking the object. Various image parameters such as size, aspect ratio, contrast, glare, distance, and focus may be calculated of the identified and/or tracked object. The image analysis and processing pipeline may process the image frames in real-time to ensure that only an image of an object having the size and aspect ratio corresponding to the requested document is captured. This shortens and simplifies the image capturing process, which conserves computing resources, power resources, and memory resources of the device that would otherwise need to be used in instances where images of an incorrect or invalid document are repeatedly captured. Additionally, this conserves computing resources, power resources, memory resources, and network resources associated with any backend platform that would be otherwise needed to receive and process images that may ultimately be determined to be of incorrect or invalid objects. 
     A system for automatically capturing images described herein provides for automatically determining whether an object in an image corresponds to a specified document type such as a government-issued ID card, based on determining a real-world size and an aspect ratio of the object in an image frame, and automatically extracting an image of the object, in real-time. The embodiments for automatically capturing images described herein may capture and process multiple images in real-time. Embodiments for automatically capturing images may be executed locally on the device so that a number of images (and thus the amount of data) transmitted between the device and a back-end server for processing is greatly reduced. This configuration reduces the need for computational resources and network resources, and increases operational efficiency. 
       FIG. 1A  illustrates an example device  100  according to an embodiment. The device  100  may include a front side  102 . The front side  102  may include a display  104  and a front camera  106 . The device  100  may also include a back side  108  including a back camera  110 . The front and back cameras  106 ,  110  may capture still or moving images. Once the front or back camera  106 ,  110  is made to be operational, the front or back camera  106 ,  110  may contemporaneously and continuously capture image frames of the area within the field of view of the front or back camera  106 ,  110 . The area within the field of view of the front or back camera  106 ,  110  may be rendered on the display  104 . An image may be captured by the front or back camera  106 ,  110 , in response to user input or an automatic capture (auto capture) feature. The captured image may be rendered on the display  104 . 
     In an embodiment, device  100  may execute an application residing on device  100 . The application may be associated with an entity such as a financial institution. Based on a user&#39;s interaction with the application, the entity may request an image of a document. Based on the user&#39;s interaction with the device  100 , the application may receive a request to capture and transmit an image of an object corresponding to the document. In response to receiving the request, the application may control the operation of front or back camera  106 ,  110  to contemporaneously and continuously capture image frames of the area within the field of view of the front or back camera  106 ,  110 , including the object. The application will be described in further detail with respect to  FIG. 2 . 
       FIG. 1B  is a diagram of the device  100  positioned for capturing an image of a first object  120 . In an embodiment, the camera (e.g., back camera  110  as shown in  FIG. 1A ) of the device  100  may be positioned such that a first object  120  and a second object  122  are within the field of view of the camera. The first object  120  may have the same aspect ratio as the second object  122  however may be of a different size. For example, both the first and second object  120 ,  122  may be rectangular in shape, however, the first object  120  may be smaller than the second object  122 . For example, the first object may be a government-issued ID, while the second object may be a notebook on which the government-issued ID is resting. 
     The device  100  may include a user interface configured to render each live image frame of the first and second objects  120 ,  122 , as captured by the camera, on the display  104 . As an example, the camera may be configured to capture image frames in one or more formats (e.g., NV21, YUV 4:2:0, red-green-blue (RGB) bitmap, etc. . . . ). The camera may provide image frames at a particular rate or quantity of image frames per second (e.g., 30 frames per second, 40 frames per second, 50 frames per second, etc.). 
     The device  100  may process each image frame in real-time to identify an outline (e.g., a rectangle) of an object in the image frame that corresponds with a given document type. For example and without limitation, the device  100  may convert each image frame into a grayscale image by normalizing the preview frame to a grayscale byte array. In an embodiment, the device  100  may convert the image frame to a byte array by discarding color channel data in the image frame, and retaining luminance channel data. The device  100  may then blur the grayscale image to reduce noise and facilitate edge detection. The device  100  may then apply a filter to highlight edges in the blurred grayscale image, dilate highlighted pixels, and identify contours of the highlighted pixels. In this example, the device  100  may further detect shapes from the contours, define bounding rectangles of the shapes and perform a filtering process on the bounding rectangles to identify a bounding rectangle that has an aspect ratio and/or size that corresponds to an aspect ratio and/or size of a particular document or particular type of document (e.g., government-issued ID such card such as driver&#39;s license). Based on identifying the bounding rectangle, the user device may determine an outline of the object (i.e., first object  120 ), in the image frame, that corresponds to a given document type. The user device may use both the aspect ratio and the real-world size to confirm that the object actually corresponds to the given document type. The real-world size is used to prevent the device from erroneously identifying another object within the field of view having a similar aspect ratio as the given document type desired. For example, use of the real-world size may allow the device to distinguish a government-issued ID from a flat screen TV showing text and pictures, a notebook, and/or the like. In an embodiment, the device  100  may use an Augmented Reality (AR) platform (e.g., ARCORE developed by Google Inc. of Mountain View, Calif.) to determine the real-world size of any object in each of the image frames. The AR platform may determine a real-world size of the object based on the determined outline of the object. 
     As an example, the AR Platform may determine the real-world size based on motion tracking, environmental understanding, and/or light estimation. For example, the AR platform may determine the position of the first object  120  and/or second object  122  relative to the real-world, using motion tracking. The AR Platform may use concurrent odometry and mapping to determine the position of the device  100  relative to its surroundings. The AR Platform may detect visually distinct features in the image frame which may be referred to as feature points to calculate a change in position of either the device  100  or the first object  120  and/or second object  122 . The AR Platform may use inertial measurements determined by an inertial measurement unit (IMU) of the device  100  and the captured visual information to determine position and orientation (pose) of the camera of the device. 
     Furthermore, the AR Platform may also constantly understand the environment in which the first object  120  and/or second object  122  are disposed. The AR platform may determine feature points and planes. The AR Platform may determine clusters or groups of feature points which lie on a common plane (e.g., horizontal, vertical, or angled surfaces). The AR platform may determine the boundaries of these planes. The AR platform may determine the size and location of the surfaces. The AR Platform may further estimate an environment&#39;s lighting conditions. For example, the AR platform may detect information about the lighting of its environment based on an average intensity and color correction of a given image frame. 
     The AR platform may calculate the real-world size of the first object  120  and/or second object  122  based on determining the position of the first object  120  and/or second object  122 , understanding the environment in which first object  120  and/or second object  122  by determining the sizes and location of the surfaces in the environment, and determining the lighting conditions of the environment. It can be appreciated that the AR platform may determine the real-world size of the first object  120  and/or second object  122  with or without consideration of the aspect ratio. The real-word size of the first object  120  and/or second object  122  may be the dimensions (i.e., height and width) of the first object  120  and/or second object  122 . Alternatively or in addition to, the real-word size may be but is not limited to: area, surface area, circumference, perimeter, volume, and/or the like. 
     The device  100  may receive the calculated real-world size of the object for each image frame. The AR platform will be described in greater detail with respect to  FIG. 2 . In one embodiment, rather than using the AR platform, the real-world size may be calculated using data captured by the camera, such as depth field information. 
     In an embodiment, the device  100  may also determine image parameters other than aspect ratio and real-world size using the image analysis and processing pipeline as described above. For example, the device  100  may determine glare, focus, distance of the object with respect to the camera, contrast, resolution, and/or other image parameters associated with the image frame including an object. 
       FIG. 1C  is a diagram of an outline  124  around the first object  120  in the image frame. In an embodiment, the device  100  may identify a first object  120  and a second object  122  in the image frames. As described above, the display  104  may render each image frame. Additionally, the device  100  may process each image frame to determine an outline of an object within the image frame. 
     In response to the device  100  determining the outline of an object, the device  100  may overlay a boundary box  124  around the edges of the object. In an embodiment, overlaying the boundary box  124  around the edges of the object may also indicate that the device  100  has successfully identified the object to correspond to a given document type, based on the calculated real-world size and aspect ratio of the object. For example, an outline  124  may be a boundary box overlaid around the edges of the first object  120  as rendered on the display  104 . The outline  124  may move as the first object moves within the field of view of the camera or as the device  100  itself moves. The size of the outline  124  may be determined based on the size of the first object  120 . 
     In response to determining that the first object  120  corresponds with a given document type based on the determined real-world size and the aspect ratio of the first object  120 , the device  100  may extract an image of the first object  120 . The device  100  may extract the image of the first object  120 , by cropping the first object  120  from within the outline  124 . 
     As described above, the device  100  may determine the real-world size of any object in each image frame captured. In an embodiment, the calculation of the real-world size of an object may vary based on distance/angle of the camera with respect to the object. The device  100  may identify a real-world size of the object based on the difference in the calculations of one or more image frames being within a specified threshold. For example, in an initial set of image frames captured by the camera of the device  100 , the calculations of the real-world size of the first object  120  may be drastically different from one another. However, in a subsequent set of image frames captured by the camera of the device  100 , the difference between calculations of the real-world size of the first object  120  may be may be within a threshold amount. The device  100  may identify the real-world size of the first object based on the subsequent set of image frames based on the consistency of the calculations of the subsequent image frames. 
     As a non-limiting example, the first object  120  may embodied as a driver&#39;s license and the second object  122  may embodied as a book. The device  120  may determine that the real-world size of the first object  120  falls within threshold size of driving licenses of specific geographic areas (e.g., a specific country or worldwide). The device  120  may determine that the real-world size of the second object  122  does not fall within the threshold size of driving licenses of a specific geographic area. In response to determining that the real-world size of the first object  120  falls within threshold dimensions of driving licenses of specific geographic areas, the device  100  may determine that the first object  120  corresponds with a given document type (i.e., driving license). The device  100  may overlay a boundary box  124  around the edges of the first object  120 . The device  100  may extract an image of the first object  120  by cropping the first object  120  from within the boundary box  124 , such that the first object  120  is extracted from the remainder of the image frame. 
       FIG. 1D  is a block diagram of components in an image analysis and processing pipeline, according to an embodiment. As described above, a device (e.g., device  100  as shown in  FIGS. 1A-1C ) may include a camera  126 . The camera  126  may embodied by the front and back camera of the device (e.g., front and back camera  106  and  110  as shown in  FIG. 1A ). As described above, the camera may capture in real-time, image frames of an object within the field of view of the camera. An AR platform  127  may calculate a real-world size of the object in each captured image frame. The AR platform  127  will be described in further detail with respect to  FIG. 2 . The corresponding image frame (e.g., as an NV21 byte array) may be provided to a frame processor  128 , by the camera  126 . Additionally, the calculated real-world size of the object may be provided to the frame processor  128  by the AR platform  127 . The frame processor  128  may correlate the calculated real-world size of the object to the corresponding image frame. In an embodiment, the real-world size of the object may be calculated using data captured by the camera  126 , such as depth of field information, without the use of the AR platform. The frame processor  128  may copy data of the preview frame and provide the copy to an image processor  130 . In an embodiment, the frame processor  128  may provide the copy of the data only if the auto capture feature/function is enabled. 
     In response to the image processor  130  receiving the copy of the data from the frame processor  128 , the image processor  130  may process the data to generate a grayscale image. The frame analyzer  132  may process and/or analyze the grayscale image by performing various processing operations. For example, the frame analyzer  132  may perform edge detection to detect an object of interest (e.g., an object in the image frame) in the grayscale image. Detecting an object of interest may include filtering all detected objects in the grayscale image based on image parameters such as aspect ratio or size, and tracking a position, a size, and/or rotation of the objects from one frame to the next. In an embodiment, the frame analyzer  132  may perform blurring, filtering, dilation, contour identification, shape detection, bounding rectangle creation, bounding rectangle filtering, calculating contrast values, calculating glare percentage values, calculating distance-related ratio values, calculating focus-related values, and other operations on the grayscale image. 
     The frame analyzer  132  may provide frame analysis results (e.g., outputs) to a feedback helper  134 . The feedback helper  134  may determine whether to provide real-time feedback to the user of the device related to contrast, glare, distance, or other image parameters associated with the image frame. The feedback helper  134  may also determine whether to display a boundary box (e.g., boundary box  124  as shown in  FIG. 1C ) corresponding to the outline of an object of interest. The feedback helper  134  AR platform may determine whether the calculated real-world size of the object of interest, received by the frame processor  128 , is within a specified threshold of the real-world size of a given document type, and/or whether the aspect ratio of the object of interest corresponds to a predetermined aspect ratio of a given document type. The feedback helper  134  may provide instructions to provide feedback to the user of the device or to display a boundary box around the outline of the object of interest, to the image processor listener  136 . The image processor listener  136  may cause the user interface to render feedback to the user of the device and/or the boundary box overlaid around the edges of the object, based on the instructions from the frame analyzer  132 . 
     In an embodiment, the feedback helper  134  may review the frame analysis results for multiple image frames and determine whether the values of image parameters (e.g., relating to glare, distance, focus, real-world size, aspect ratio, etc. . . . ) associated with multiple image frames satisfy thresholds. As an example, in deciding on whether to auto capture an image of an object of interest, the feedback helper  134  may calculate an average of the values of each of the image parameters (e.g., an average of the values associated with glare, an average of the values associated with focus, an average of the values associated with the real-world size, an average of the values associated with the aspect ratio, etc.) across multiple image frames (e.g., n most recent processed image frames). The feedback helper  134  may determine whether the average values of each of the image parameters fall within predetermined threshold values associated with the respective image parameters. In response to determining that all or some of the threshold values of the image parameters were satisfied, the feedback helper  134  may output instructions that trigger the camera to automatically capture an image of the object of interest. The feedback helper  134  may trigger the camera to extract an image of the object of interest from the image frame. 
     In an embodiment, focus may relate to how well edges are defined in the image frame or a quantity of edges detected in an image frame. In an embodiment, a continuous autofocus feature (included on the device) may provide information regarding focus of the camera, which may be used by the image analysis and processing pipeline  123  to determine when to trigger auto capture. For example, a predetermined quantity of the most recent image frames captured by the device may be analyzed to determine whether a properly focused image may be captured by the device, and in turn whether auto capture may be used. 
     In an embodiment, the device may utilize frame analysis results from prior image frames to assist with determining the outline for an object in a current image frame. This reduces a quantity of calculations needed for processing image frames, which optimizes, and increases the overall speed of, the image analysis and processing pipeline  123 . 
       FIGS. 1E-1I  are diagrams of example image frames as being processed during various stages of the image analysis and processing pipeline as described above, according to an embodiment. With reference to  FIG. 1E , an image frame  137  may include an image of the object  120  on a surface  138 . The object  120  may be, for example, a government-issued ID card such as a driving license. The image frame  137  has been converted from a color image to a grayscale image. 
     With reference to  FIG. 1F , the image frame  137  may be blurred to facilitate edge detection. With reference to  FIG. 1G , edges of the objects in the image frame  137  may be detected and identified in the blurred image. With reference to  FIG. 1H , pixels in the image frame  137 , in or proximate to the detected edges, may be dilated to fill in any gaps that might exist between lines. With reference to  FIG. 1I , bounding rectangles may be crated for one or more identified objects in the image frame  137 . 
     In an embodiment, a filtering process may be executed on the bounding rectangles (e.g., based on an aspect ratio and/or a specified threshold size of a government-issued ID card), to determine an outline of an object that corresponds with a specified document type (i.e., government-issued ID card). 
     The image analysis and processing pipeline may determine and identify, in real-time, an object from one or more objects in the image frame that correspond with a specified document type based on the aspect ratio and calculated real-world size of the objects in the image frame. In response to identifying the object that corresponds with the specified document type, an image of the identified object may be captured, such that any objects not corresponding to the specified document type are excluded from the image. In this configuration, the image analysis and processing pipeline accurately identifies the object that corresponds with a specified document type and in turn satisfies a request for an image of a document. This shortens, and simplifies, the image capturing process, which conserves computing resources, power resources, and memory resources of the device that would otherwise need to be expended in cases where images of erroneous objects are automatically captured. Additionally, this conserves computing resources, memory resources, and network resources associated with a backend platform that would be needed to process images of erroneous objects that are automatically captured. 
       FIG. 2  is a block diagram of an example environment  200  in which systems and/or methods described herein may be implemented. The environment  200  may include a device  100 , a backend platform  215 , a cloud computing environment  220 , and a network  230 . The devices of the environment  200  may be connected through wired connections, wireless connections, or a combination of wired and wireless connections. 
     In an example embodiment, one or more portions of the network  230  may be an ad hoc network, an intranet, an extranet, a virtual private network (VPN), a local area network (LAN), a wireless LAN (WLAN), a wide area network (WAN), a wireless wide area network (WWAN), a metropolitan area network (MAN), a portion of the Internet, a portion of the Public Switched Telephone Network (PSTN), a cellular telephone network, a wireless network, a WiFi network, a WiMax network, any other type of network, or a combination of two or more such networks. 
     The device  100  may include one or more devices configured to receive, generate, store, process, and/or provide information associated with images. The device  100  may include a communication and/or computing device, such as a desktop computer, mobile device, smartphone, tablet, subnotebook, laptop, personal digital assistant (PDA), gaming device, device integrated with a vehicle, a wearable communication device (i.e., a smart wristwatch, smart eyeglasses, etc. . . . ) and/or any other suitable computing device. As described above, the device  100  may include a display  104 , a front camera  106 , and a back camera  110 . The device  100  may further include an application  204  including an AR platform  127 , and an accelerometer  206 . The application  204  may implement the image analysis and processing pipeline as described above, locally on the device, to identify and capture an image of an object in an image frame corresponding to a specified document type. 
     The backend platform  215  may include one or more devices configured to receive, generate, store, process, and/or provide information associated with images. The backend platform  215  may include a server or a group of servers. In an embodiment, the backend platform  215  may be hosted in a cloud computing environment  220 . It may be appreciated that the backend platform  215  may not be cloud-based, or may be partially cloud-based. In an embodiment, the backend platform  215  may implement the image analysis and processing pipeline as described above to identify and capture an image of an object in an image frame corresponding to a specified document type. 
     The cloud computing environment  220  includes an environment that delivers computing as a service, whereby shared resources, services, etc. may be provided to the device  100  and/or the backend platform  215 . The cloud computing environment  220  may provide computation, software, data access, storage, and/or other services that do not require end-user knowledge of a physical location and configuration of a system and/or a device that delivers the services. The cloud computing system  220  may include computer resources  222 . 
     Each computing resource  222  includes one or more personal computers, workstations, computers, server devices, or other types of computation and/or communication devices. The computing resource(s)  222  may host the backend platform  215 . The cloud resources may include compute instances executing in the computing resources  222 . The computing resources  222  may communicate with other computing resources  222  via wired connections, wireless connections, or a combination of wired or wireless connections. 
     Computing resources  222  may include a group of cloud resources, such as one or more applications (“APPs”)  222 - 1 , one or more virtual machines (“VMs”)  222 - 2 , virtualized storage (“VS”)  222 - 3 , and one or more hypervisors (“HYPs”)  222 - 4 . 
     Application  222 - 1  may include one or more software applications that may be provided to or accessed by the device  100 . In an embodiment, the application  204  may execute locally on the device  100 . Alternatively, the application  222 - 1  may eliminate a need to install and execute software applications on the device  100 . The application  222 - 1  may include software associated with backend platform  215  and/or any other software configured to be provided across the cloud computing environment  220 . The application  222 - 1  may send/receive information from one or more other applications  222 - 1 , via the virtual machine  222 - 2 . 
     Virtual machine  222 - 2  may include a software implementation of a machine (e.g., a computer) that executes programs like a physical machine. Virtual machine  222 - 2  may be either a system virtual machine or a process virtual machine, depending upon the use and degree of correspondence to any real machine by virtual machine  222 - 2 . A system virtual machine may provide a complete system platform that supports execution of a complete operating system (OS). A process virtual machine may execute a single program and may support a single process. The virtual machine  222 - 2  may execute on behalf of a user (e.g., device  100 ) and/or on behalf of one or more other backend platforms  215 , and may manage infrastructure of cloud computing environment  220 , such as data management, synchronization, or long duration data transfers. 
     Virtualized storage  222 - 3  may include one or more storage systems and/or one or more devices that use virtualization techniques within the storage systems or devices of computing resource  222 . With respect to a storage system, types of virtualizations may include block virtualization and file virtualization. Block virtualization may refer to abstraction (or separation) of logical storage from physical storage so that the storage system may be accessed without regard to physical storage or heterogeneous structure. The separation may permit administrators of the storage system flexibility in how administrators manage storage for end users. File virtualization may eliminate dependencies between data accessed at a file level and location where files are physically store. This may enable optimization of storage use, server consolidation, and/or performance of non-disruptive file migrations. 
     Hypervisor  222 - 4  may provide hardware virtualization techniques that allow multiple operations systems (e.g., guest operating systems”) to execute concurrently on a host computer, such as computing resource  222 . Hypervisor  222 - 4  may present a virtual operating platform to the guest operating systems, and may manage the execution of the guest operating systems multiple instances of a variety of operating systems and may share virtualized hardware resources. 
     In an embodiment, the application  204  may be executed on the device  100 . Based on user input, the application  204  may receive a request to capture an image of a document of a specified type. In response to receiving the request, the application  204  may control the operation of the front or back camera  106 ,  110  to continuously and contemporaneously capture image frames having a first object and second object within a field of view of the front or back camera  106 ,  110 . Each image frame may be associated with at least one environmental feature. The environmental feature may include an angle with respect to the first and/or second object and the front or back camera  106 ,  110 , a distance between the first and/or second object and the front or back camera  106 ,  110 , elements other than the first and second object in the image frame, and/or the like. The display  104  may render each image frame, in real-time. 
     The application  204  may process each image frame to determine whether the first (or second, if multiple objects exist in the frame) object in the image frame corresponds with a document of the specified type. As described above, the application  204  may execute the image analysis and processing pipeline to process each image frame. For example, the image analysis and processing pipeline may convert the image frame into a grayscale image, generate a blurred image based on the grayscale image, detect edges in the blurred image, identify shapes based on the plurality of edges, define bounding rectangles for the shapes, and determine an outline of the first object and/or second object based on the bounding rectangles. In an embodiment, the application  204  may use OpenCV, developed by Intel, Inc. of Santa Clara, Calif. and Willow Garage, Inc. of Menlo Park, Calif., as the edge detection algorithm, for real-time edge detection. 
     The application  204  may execute an augmented reality (AR) platform  127  to calculate a size of the first and/or second object in each image frame, based on the determined outline of the first and/or second object. The AR platform  127  may be embodied by, for example, ARCORE. The AR platform  127  may be configured, for example and without limitation, for motion tracking, environmental understanding, and/or light estimation. 
     Although various features and process flows of the AR platform  127  will be explained below with respect to ARCORE, a person of skill in the art will understand that other virtual reality or AR platforms may instead or additionally be used in similar ways. 
     With respect to motion tracking, and using the example of ARCORE, the AR platform  127  may use odometry and mapping to determine the device&#39;s  100  location with respect to objects around the device  100 . For example, ARCORE identifies feature points in the image frame and uses the feature points to compute a change in location. Feature points may be visually distinct features (i.e., objects, surfaces, colors, etc. . . . ). These feature points may be embodied as environmental elements. Visual information in the image frame may be combined with inertial measurements from the device&#39;s  100  inertial measurement unit (IMU) (e.g., accelerometer  206 ) ARCORE, for example, may determine the position and orientation of the front or back camera  106 ,  110  relative to the objects around the device  100  over time. In an embodiment, ARCORE may define the outline of the first object and/or second object as anchors. Anchors may be used by ARCORE to track the position of the first object and/or second object over time. 
     With respect to environmental understanding, ARCORE may look for clusters of feature points that appear to lie on common horizontal and vertical surfaces. ARCORE identifies these surfaces as planes. ARCORE may determine each plane&#39;s boundary. As an example, the application  204  may determine whether the first or second object is disposed on a flat surface based on the identification of the planes in the image frames by ARCORE. 
     With respect to light estimation, ARCORE may detect information about the lighting in the environment in the image frame and output the average intensity and color correction of the image frames. 
     Thus, ARCORE may calculate a size (i.e., real-world size) of the first and/or second object in each image frame based on the outline of the first object and/or second object and based on determining the position of the first and second objects in the image frames, environmental understanding, and light estimation. As described above, the outline can be used to define anchors by ARCORE to effectively track the first object or second object over different image frames. ARCORE can measure the real-world size of the first object or the second object within the outline (e.g., defined by the anchors) using motion tracking, environmental understanding, and/or light estimation as described above. 
     The application  204  may receive from the AR platform  127  the calculated size of the first and/or second object, which is calculated by the AR platform  127  based on the outline of the first object and the environmental feature. As described above, the environmental features may be the surfaces on which the first or second objects are disposed, the position and orientation of the first and/or second object with respect to the front or back camera  106 ,  110 , the distance of the first and/or second object with respect to the front or back camera  106 ,  110 , and/or the like. The application  204  may also determine an aspect ratio of the first and second object based on the determined outline of the first and second object. 
     In an embodiment, rather than using an AR platform such as AR platform  127 , the application  204  may determine the calculated size of the first and/or second object based on data captured by the front or back camera  106 ,  110 . For example, front or back camera  106 ,  110  may capture depth of field information while capturing each image frame. The application  204  may determine the calculated size of the first and/or second object based on the depth of field information. 
     The application  204  may determine that the first object corresponds to a predetermined document type based on the calculated size of the first object in one or more image frames of the plurality of image frames being within a threshold size, and the aspect ratio of the first object corresponding to a predetermined aspect ratio. The predetermined aspect ratio and threshold size may correspond with the predetermined document type. The application may automatically extract an image of the first object from the one or more image frames, in response to determining that the size of the first object is within the threshold size, and the aspect ratio of the first object corresponding to a predetermined aspect ratio. 
     As another example, the application  204  may determine that the aspect ratio of the second object corresponds with the predetermined aspect ratio, yet fails to correspond to the given document type based on a calculated size of the second object failing to fall within the threshold size. The extracted image of the first object thus would exclude the second object. 
     In an embodiment, the application  204  may compare the calculated size of the first and/or second object, received from the AR platform  127  for a given image frame, to the calculated size of the first and/or second object received for other image frames to determine a consistency in calculated sizes of the first and/or second object across the one or more image frames. The application  204  may identify a final calculated size of the first and/or second object based on calculated sizes of the first object across the one or more image frames when the determined consistency meets a given threshold. For example, in the event that the calculated sizes of the first object across a first set of image frames vary more than a specified threshold, the application may not rely on the calculated sizes from the first set of image frames to determine the final calculated size of the first object. Alternatively, or in addition, in the event that the difference in the calculated sizes of the first object across a second set of image frames are within a specified threshold, the application may use the calculated sizes of the first object in the second set of image frames to determine the final calculated size of the first object. As an example, the application  204  may calculate an average of the calculated sizes in the second set of image frames to determine the final calculated size of the first object. 
     In an embodiment, the application  204  may monitor movement of an accelerometer  206  of the device  100  while the front or back camera  106 ,  110  captures the image frames. The application  204  may determine the consistency of the calculated sizes based on the movement of the accelerometer. In an embodiment, the application  204  may determine an accuracy of the calculated size of the first and/or second object determined for each image frame based on tilt motion and orientation data of the device for each captured image frame of the plurality of image frames. In an embodiment, the device  100  stores data associated with the most recent image frames captured and processed in a temporary buffer. For example, the device  100  may store the data associated with the last 5 image frames. The data may include calculated sizes of objects, feature points in the image frames, coordinate mappings of the image frames, etc. 
     In an embodiment, the application  204  may receive a request for an image of the front and back of the document. In an embodiment, in response to determining that an object corresponds to a given document type, the application  204  may render a boundary box overlaid around the edges of the object. 
     In an embodiment, the image analysis and processing pipeline may also determine values for contrast, glare, distance, and/or focus, of each image frame. The application  204  may determine whether the values for contrast, glare, distance, and/or focus for each image frame meet corresponding threshold values. In the event that one or more values for contrast, glare, distance, and/or focus do not meet the corresponding threshold values, the application  204  may restrict the front or back camera  106 ,  110  from extracting the image of the first object, to ensure that only a high resolution image of the object is captured. 
     As a non-limiting example, the application  204  may be associated with a financial institution. The financial institution may require a user to provide identification to perform certain functions using the application  204 . Financial institutions may need to distinguish between images of user&#39;s identification document which include authentic identification documents rather than fake identification documents, invalid identification documents, an image of an identification document, or irrelevant objects in the image. In an embodiment, the application  204  may automatically capture and transmit an image of the user&#39;s identification document. The document may be at least one of but is not limited to a government-issued identification card, a health insurance card, an employee identification card, or an identification card issued by a non-government institution. The application  204  may recognize that an object in the image corresponds with a user&#39;s identification documentation based on the determined real-world size of the object in the image and the determined aspect ratio of the object in the image. The aspect ratio may correspond to a shape of the object. The application  204  may attempt to verify that both the aspect ratio and real-world size of an object corresponds to a user&#39;s identification document so that objects in the image that are of different shapes but the same real-world size as a user identification card are not recognized as user identification documents. The application  204  may compare the determined real-world size and aspect ratio of the object in the image to known standardized sizes of specific identification documents, such as driver&#39;s licenses, passports, social security cards, and/or the like. Once the application is able to identify the object in the image is a user&#39;s identification document, the application  204  may extract the image of the object and transmit the image to a server for further processing. 
     In an embodiment, the application  204  may receive the real-world size of an object in the image in a format compatible with an expected shape of a user identification document. For example, the application  204  may receive the real-world size of an object in an image in a format of length and width of a rectangular shape. In view of this, the application  204  may not need to determine the aspect ratio of the object in the image as the application  204  can infer the shape of the object in the image from the received real-world size. Therefore, the application  204  may recognize that the object in the image corresponds to a user&#39;s identification document solely based on the determined real-world size of the object in the image. 
       FIG. 3  is a block diagram of example components of device  300 . One or more computer systems  300  may be used, for example, to implement any of the embodiments discussed herein, as well as combinations and sub-combinations thereof. Computer system  300  may include one or more processors (also called central processing units, or CPUs), such as a processor  304 . Processor  304  may be connected to a communication infrastructure or bus  306 . 
     Computer system  300  may also include user input/output device(s)  303 , such as monitors, keyboards, pointing devices, etc., which may communicate with communication infrastructure  306  through user input/output interface(s)  302 . 
     One or more of processors  304  may be a graphics processing unit (GPU). In an embodiment, a GPU may be a processor that is a specialized electronic circuit designed to process mathematically intensive applications. The GPU may have a parallel structure that is efficient for parallel processing of large blocks of data, such as mathematically intensive data common to computer graphics applications, images, videos, etc. 
     Computer system  300  may also include a main or primary memory  308 , such as random access memory (RAM). Main memory  308  may include one or more levels of cache. Main memory  308  may have stored therein control logic (i.e., computer software) and/or data. 
     Computer system  300  may also include one or more secondary storage devices or memory  310 . Secondary memory  310  may include, for example, a hard disk drive  312  and/or a removable storage device or drive  314 . 
     Removable storage drive  314  may interact with a removable storage unit  318 . Removable storage unit  318  may include a computer usable or readable storage device having stored thereon computer software (control logic) and/or data. Removable storage unit  318  may be program cartridge and cartridge interface (such as that found in video game devices), a removable memory chip (such as an EPROM or PROM) and associated socket, a memory stick and USB port, a memory card and associated memory card slot, and/or any other removable storage unit and associated interface. Removable storage drive  314  may read from and/or write to removable storage unit  318 . 
     Secondary memory  310  may include other means, devices, components, instrumentalities or other approaches for allowing computer programs and/or other instructions and/or data to be accessed by computer system  300 . Such means, devices, components, instrumentalities or other approaches may include, for example, a removable storage unit  322  and an interface  320 . Examples of the removable storage unit  322  and the interface  320  may include a program cartridge and cartridge interface (such as that found in video game devices), a removable memory chip (such as an EPROM or PROM) and associated socket, a memory stick and USB port, a memory card and associated memory card slot, and/or any other removable storage unit and associated interface. 
     Computer system  300  may further include a communication or network interface  324 . Communication interface  324  may enable computer system  300  to communicate and interact with any combination of external devices, external networks, external entities, etc. (individually and collectively referenced by reference number  328 ). For example, communication interface  324  may allow computer system  300  to communicate with external or remote devices  328  over communications path  326 , which may be wired and/or wireless (or a combination thereof), and which may include any combination of LANs, WANs, the Internet, etc. Control logic and/or data may be transmitted to and from computer system  300  via communication path  326 . 
     Computer system  300  may also be any of a personal digital assistant (PDA), desktop workstation, laptop or notebook computer, netbook, tablet, smart phone, smart watch or other wearable, appliance, part of the Internet-of-Things, and/or embedded system, to name a few non-limiting examples, or any combination thereof. 
     Computer system  300  may be a client or server, accessing or hosting any applications and/or data through any delivery paradigm, including but not limited to remote or distributed cloud computing solutions; local or on-premises software (“on-premise” cloud-based solutions); “as a service” models (e.g., content as a service (CaaS), digital content as a service (DCaaS), software as a service (SaaS), managed software as a service (MSaaS), platform as a service (PaaS), desktop as a service (DaaS), framework as a service (FaaS), backend as a service (BaaS), mobile backend as a service (MBaaS), infrastructure as a service (IaaS), etc.); and/or a hybrid model including any combination of the foregoing examples or other services or delivery paradigms. 
     Any applicable data structures, file formats, and schemas in computer system  300  may be derived from standards including but not limited to JavaScript Object Notation (JSON), Extensible Markup Language (XML), Yet Another Markup Language (YAML), Extensible Hypertext Markup Language (XHTML), Wireless Markup Language (WML), MessagePack, XML User Interface Language (XUL), or any other functionally similar representations alone or in combination. Alternatively, proprietary data structures, formats or schemas may be used, either exclusively or in combination with known or open standards. 
     In some embodiments, a tangible, non-transitory apparatus or article of manufacture comprising a tangible, non-transitory computer useable or readable medium having control logic (software) stored thereon may also be referred to herein as a computer program product or program storage device. This includes, but is not limited to, computer system  300 , main memory  308 , secondary memory  310 , and removable storage units  318  and  322 , as well as tangible articles of manufacture embodying any combination of the foregoing. Such control logic, when executed by one or more data processing devices (such as computer system  300 ), may cause such data processing devices to operate as described herein. 
       FIG. 4  is a flowchart illustrating a process  400  implemented by a system for automatically capturing images according to an exemplary embodiment. In operation  402 , in response to receiving instructions from an application (e.g., application  204  as shown in  FIG. 2 ) executed on a device (e.g., device  100  as shown in  FIGS. 1A-1C and 2 ), a camera (e.g., front and back camera  106 ,  110  as shown in  FIGS. 1 and 2  and camera  126  as shown in  FIG. 1D ) of the device may capture image frames having an object (e.g., first object and/or second object  120 ,  122  as shown in  FIGS. 1B-1C ) within a field of view of the camera. Each image frame may be associated with at least one environmental feature. In operation  404 , the application executed on the device may process in real-time each image frame to identify an outline of the object in each image frame. In operation  406  the application may receive a calculated size of the object for each of the plurality of image frames, the calculated size based on the outline of the object and the environmental feature. In operation  408 , the application may determine whether the calculated size of the object in one or more image frames is within a threshold size. In operation  410 , the application may extract an image of the object from the one or more image frames, in response to determining that the size of the object is within the threshold size. 
       FIG. 5  is a flowchart illustrating a process  500  implemented by a system for automatically capturing images according to an exemplary embodiment. The process  500  illustrates the steps of processing an image frame to identify an outline of an object in the image frame. In operation  502 , an application (e.g., application  204  as shown in  FIG. 2 ) executing on a device (e.g., device  100  as shown in  FIGS. 1A-1C and 2 ) converts an image frame into a grayscale image. In operation  504 , the application generates a blurred image based on the grayscale image. In operation  506 , the application identifies edges in the blurred image. In operation  508 , the application identifies shapes based on the identified edges. In operation  510 , the application defines rectangles for the identified shapes. In operation  512 , the application determines an outline based on the bounded rectangles. 
       FIG. 6  is a flowchart illustrating a process  600  implemented by a system for automatically capturing images according to an exemplary embodiment. In operation  602 , an application (e.g., application  204  as shown in  FIG. 2 ) executing on a device (e.g., device  100  as shown in  FIGS. 1A-1C and 2 ) may receive a request for an image of a document. In operation  604 , the application may control the operation of a camera (e.g., front and back camera  106 ,  110  as shown in  FIGS. 1 and 2  and camera  126  as shown in  FIG. 1D ) of the device to contemporaneously and continuously capture image frames of an area within the field of view of the camera including an object (e.g., first object and/or second object  120 ,  122  as shown in  FIGS. 1B-1C ), in response to receiving the request for an image of the document. 
       FIG. 7  is a flowchart illustrating a process  700  implemented by a system for automatically capturing images according to an exemplary embodiment. In operation  702 , an application (e.g., application  204  as shown in  FIG. 2 ) executing on a device (e.g., device  100  as shown in  FIGS. 1A-1C and 2 ) may receive a request for an image of a document. In operation  704 , the application may control the operation of a camera (e.g., front and back camera  106 ,  110  as shown in  FIGS. 1 and 2  and camera  126  as shown in  FIG. 1D ) of the device to contemporaneously and continuously capture image frames of an area within the field of view of the camera including an object (e.g., first object and/or second object  120 ,  122  as shown in  FIGS. 1B-1C ), in response to receiving the request for an image of the document. In operation  706 , the application determines an aspect ratio of the object in each of the image frames and receives a value corresponding to the size of the object. In operation  708 , the application determines that the object corresponds to a given document type based on determining that the size of the object is within the threshold size and the aspect ratio of the object corresponds to a specified aspect ratio. 
       FIG. 8  is a flowchart illustrating a process  800  implemented by a system for automatically capturing images according to an exemplary embodiment. In operation  802 , an application (e.g., application  204  as shown in  FIG. 2 ) executing on a device (e.g., device  100  as shown in  FIGS. 1A-1C and 2 ) may compare a calculated size of an object (e.g., first object and/or second object  120 ,  122  as shown in  FIGS. 1B-1C ) received for a given image frame to the calculated sizes of the object received for other image frames. In operation  804 , the application may determine a consistency in the calculated sizes of the object across one or more image frames based on the comparison. In operation  806 , the application may identify a final calculated size of the object based on calculated sizes of the object across the one or more image frames when the determined consistency meets a given threshold. 
     It is to be appreciated that the Detailed Description section, and not the Summary and Abstract sections, is intended to be used to interpret the claims. The Summary and Abstract sections may set forth one or more but not all exemplary embodiments of the present invention as contemplated by the inventor(s), and thus, are not intended to limit the present invention and the appended claims in any way. 
     Embodiments of the present invention have been described above with the aid of functional building blocks illustrating the implementation of specified functions and relationships thereof. The boundaries of these functional building blocks have been arbitrarily defined herein for the convenience of the description. Alternate boundaries may be defined so long as the specified functions and relationships thereof are appropriately performed. 
     The foregoing description of the specific embodiments will so fully reveal the general nature of the invention that others may, by applying knowledge within the skill of the art, readily modify and/or adapt for various applications such specific embodiments, without undue experimentation, without departing from the general concept of the present invention. Therefore, such adaptations and modifications are intended to be within the meaning and range of equivalents of the disclosed embodiments, based on the teaching and guidance presented herein. It is to be understood that the phraseology or terminology herein is for the purpose of description and not of limitation, such that the terminology or phraseology of the present specification is to be interpreted by the skilled artisan in light of the teachings and guidance. 
     The breadth and scope of the present invention should not be limited by any of the above-described exemplary embodiments, but should be defined only in accordance with the following claims and their equivalents.