Graphical code reader that is configured for efficient decoder management

A graphical code reader is disclosed. The graphical code reader includes a processor and memory in electronic communication with the processor. The memory is used for storing a digital image of a graphical code. The graphical code reader also includes a plurality of decoders. Each decoder of the plurality of decoders is cofigured to decode at least one graphical code symbology. The graphical code reader also includes a decoder manager that implements a method. The method involves identifying a most recently successful decoder from the plurality of decoders. The most recently successful decoder decoded a most recently decoded graphical code. The method also involves instructing the most recently successful decoder to process the digital image before instructing any other decoder to process the digital image.

TECHNICAL FIELD

The present invention relates generally to graphical code readers. More specifically, the present invention relates to graphical code readers that are capable of decoding different graphical code symbologies.

BACKGROUND

A machine-readable graphical code (“graphical code”) is a graphical representation of information that consists of multiple graphical code elements having different light reflective or light emissive properties. Examples of different types of graphical codes include bar codes, data matrix codes, MaxiCodes, and so forth. Graphical codes have become widely used in many commercial environments, such as point-of-sale stations in retail stores and supermarkets, inventory and document tracking, and the like.

Devices for identifying or extracting information from graphical codes are generally referred to as graphical code readers. Image-based graphical code readers typically include one or more light sources for illuminating a graphical code. Light is reflected from the graphical code toward the graphical code reader. A lens within the graphical code reader focuses an image of the graphical code onto an image sensor. Pixels within the image sensor are read electronically to provide a two-dimensional array of image data corresponding to the graphical code. A decoder then processes the image data and extracts the information contained in the graphical code.

Graphical codes may be encoded according to a wide variety of different symbologies. A symbology is a protocol for arranging the graphical code elements that make up a particular kind of graphical code. In some symbologies, the same information is contained throughout the height of the code, making such codes vertically redundant. Some examples of such linear or one-dimensional graphical code symbologies are UPC, Code 128, Code 39, Interleaved 2 of 5, Codabar, MSI Plessey, Code 93, etc. Graphical codes that are encoded in accordance with two-dimensional graphical code symbologies are also commonly used. Some examples of two-dimensional graphical code symbologies are GoCode, Maxicode, PDF 417, Data Matrix, Datastrip, etc.

Two-dimensional graphical codes possess several advantages over one-dimensional graphical codes. For example, two-dimensional graphical codes are designed to store considerably more information than one-dimensional graphical codes. In addition, two-dimensional graphical codes are typically smaller than one-dimensional codes. Also, in some cases, two-dimensional graphical codes do not require a high level of print quality in order to be decoded.

Some graphical code readers are capable of decoding different graphical code symbologies. Such graphical code readers typically include multiple decoders, each of which is configured to decode a specific graphical code symbology. In such a graphical code reader, benefits may be realized by improvements in the way that the multiple decoders are managed during various stages of the decoding process.

DETAILED DESCRIPTION

A graphical code reader is disclosed. The graphical code reader includes a processor and memory in electronic communication with the processor. The memory is used for storing a digital image of a graphical code. The graphical code reader also includes a plurality of decoders. Each decoder of the plurality of decoders is configured to decode at least one graphical code symbology. The graphical code reader also includes a decoder manager. The decoder manager implements a method that involves identifying a most recently successful decoder from the plurality of decoders. The most recently successful decoder decoded a most recently decoded graphical code. The method also involves instructing the most recently successful decoder to process the digital image before instructing any other decoder to process the digital image.

If the most recently successful decoder does not decode the graphical code, the method may also involve repeatedly instructing a different decoder from the plurality of decoders to process the digital image until the graphical code is decoded or each of the plurality of decoders has processed the digital image. In some embodiments, the plurality of decoders are selected in order of increasing time since a most recent decode.

In some embodiments, the plurality of decoders include an active set of decoders and an archived set of decoders. In such embodiments, if the most recently successful decoder does not decode the graphical code, the method may involve repeatedly instructing a different decoder from the active set of decoders to process the digital image until the graphical code is decoded or each decoder in the active set of decoders has processed the digital image. If each decoder in the active set of decoders processes the digital image without decoding the graphical code, the method may also involve determining whether a condition has been satisfied for using the archived set of decoders. In some embodiments, the condition is that N most recent digital images captured by the graphical code reader have not been decoded. If the condition has been satisfied, the method may also involve repeatedly instructing a different decoder from the archived set of decoders to process the digital image until the graphical code is decoded or each decoder in the archived set of decoders has processed the digital image. If the condition has not been satisfied, the method may also involve not instructing any decoder in the archived set of decoders to process the digital image.

If a decoder in the active set processes but does not decode the graphical code, the method may also involve determining whether a condition has been satisfied for moving the decoder from the active set of decoders to the archived set of decoders. If the condition has been satisfied, the method may also involve moving the decoder from the active set of decoders to the archived set of decoders. In some embodiments, the condition is that the decoder has not decoded any of N most recent digital images captured by the graphical code reader.

In some embodiments, the method may additionally involve stopping processing of the digital image after a defined time period. The defined time period may correspond to an estimate of high probability decoding time. Alternatively, or in addition, the method may involve, for each decoder that is tried, stopping processing of the digital image by the decoder after a defined time period. The defined time period for a particular decoder may correspond to an estimate of high probability decoding time for that decoder.

A method in a graphical code reader is also disclosed. The method involves identifying a most recently successful decoder from a plurality of decoders. Each decoder of the plurality of decoders is configured to decode at least one graphical code symbology. The most recently successful decoder decoded a most recently decoded graphical code. The method also involves instructing the most recently successful decoder to process a digital image of a graphical code before instructing any other decoder to process the digital image.

Various embodiments of the invention are now described with reference to the Figures, where like reference numbers indicate identical or functionally similar elements. It will be readily understood that the components of the present invention, as generally described and illustrated in the Figures herein, could be arranged and designed in a wide variety of different configurations. Thus, the following more detailed description of several exemplary embodiments of the present invention, as represented in the Figures, is not intended to limit the scope of the invention, as claimed, but is merely representative of the embodiments of the invention.

Those skilled in the art will appreciate that many features of the embodiments disclosed herein may be implemented as computer software, electronic hardware, or combinations of both. To clearly illustrate this interchangeability of hardware and software, various components will be described generally in terms of their functionality. Whether such functionality is implemented as hardware or software depends upon the particular application and design constraints imposed on the overall system. Skilled artisans may implement the described functionality in varying ways for each particular application, but such implementation decisions should not be interpreted as causing a departure from the scope of the present invention.

Where the described functionality is implemented as computer software, those skilled in the art will recognize that such software may include any type of computer instruction or computer executable code located within a memory device and/or transmitted as electronic signals over a system bus or network. Software that implements the functionality associated with components described herein may comprise a single instruction, or many instructions, and may be distributed over several different code segments, among different programs, and across several memory devices.

FIG. 1is a block diagram illustrating an embodiment of a graphical code reader100. Some of the components in the graphical code reader100are functional components that may be implemented using any suitable combination of hardware, software, and/or firmware. In some embodiments, multiple functional components may be implemented by the same physical component.

The graphical code reader100includes one or more digital images102of graphical codes104. The graphical code reader100typically includes several components for capturing the digital images102. Those components are not shown inFIG. 1, but will be discussed below in connection withFIG. 6. The digital images102may be stored in memory within the graphical code reader100.

The graphical code reader100includes a plurality of decoders106. Each decoder106is configured to decode digital images102of graphical codes104that are encoded according to one or more symbologies. For example, the graphical code reader100may include a UPC decoder106that is configured to decode images102of UPC codes104, a PDF 417 decoder106that is designed to decode images102of PDF 417 codes104, a Data Matrix decoder106that is designed to decode images102of Data Matrix codes104, and so forth. The graphical code reader100may include only one-dimensional symbology decoders106, only two-dimensional symbology decoders106, or combinations of one- and two-dimensional symbology decoders.

Some decoders106may be configured to decode more than one symbology. For example, a single decoder106may be configured to decode UPC codes104, EAN codes104, Code128 codes104, etc. (much of the processing is common between the decoding algorithms for these closely related symbologies). Such a “group decoder”106can be treated as a single decoder106or can be treated as two or more decoders106, each decoding a subset of the full group (using flags to specify which symbologies in the group are active).

The graphical code reader100also includes a decoder manager108. In general terms, the decoder manager108manages the different decoders106in the graphical code reader100. For example, when a digital image102has been captured and is ready for processing, the decoder manager108determines which decoder106(or decoders106) will process the image102. Additional details about the configuration and operation of various embodiments of the decoder manager108will be provided below.

In typical operation, the graphical code reader100repeatedly performs the following steps: capturing an image102, processing the image102(edge enhancement, threshold, etc.), decoding the image102, and processing the decoded data. The reader100then captures another image102, and the process repeats indefinitely.FIG. 2is a flow diagram illustrating an embodiment of a method200for decoding an image102that has been captured by the reader100.

The method200begins when the decoder manager108identifies202the decoder106that was used to decode the most recently decoded graphical code104. This decoder106will be referred to from now on as the most recently successful decoder106. The decoder manager108then instructs204the most recently successful decoder106to process the digital image102. When the decoder106has finished processing the digital image102, the decoder manager108determines206whether the most recently successful decoder106decoded the graphical code104in the image102.

If the decoder106successfully decoded the graphical code104, the method200then ends. If the decoder106did not successfully decode the graphical code104, the decoder manager108then determines208whether all of the decoders106have processed the image102. If so, the method200ends.

If there are one or more decoders106that have not processed the image102, the decoder manager108selects210another decoder106to process the digital image102. In some embodiments, the decoders106are selected in order of increasing time since a most recent decode. In other words, the decoder manager108selects210the decoder106that successfully decoded a graphical code104most recently (out of those decoders106that have not yet processed the digital image102). The method200then returns to step206and proceeds as described above. More specifically, in step206it is determined whether the decoder106selected in step210successfully decoded the graphical code104. If so, the method200ends. If not, another decoder106is selected (if one is available), and so on.

In some embodiments, the total time spent decoding (regardless of which decoders106are used) may be used to end the method200. In other words, the reader100may be configured so that processing of the image102stops after a defined time period. This time period may correspond to an estimate of “high probability” decoding time. More specifically, the reader100may be configured to first process the portions of an image102that have the highest probability of including a graphical code104. This is sometimes referred to as processing the “best candidates” before the “worst candidates.” For example, a simplistic best candidate choice would be to start analysis of an image102at the center and work outward, because the operator of the reader100typically attempts to place the code104in the center of the field of view of the image capture component (not shown) of the reader100. Another approach would be to examine the image102at low resolution to locate and rank candidate areas and then examine each candidate area at high resolution. Whatever approach is followed, the processing of the image102may be thought of as including high probability decoding time followed by lower probability decoding time. In some embodiments, the reader100may be configured so that decoding stops after the high probability decoding time has elapsed and before the lower probability decoding time begins. Additional details about such embodiments are provided in U.S. patent application Ser. No. 10/776,449, entitled “Systems And Methods For Concurrent Image Capture And Decoding Of Graphical Codes,” filed Feb. 11, 2004, assigned to the assignee of the present invention and hereby incorporated by reference in its entirety.

In some embodiments, each decoder106in the reader100may be associated with an estimated high probability decoding time. The estimated high probability decoding time may vary among decoders106. The decoder manager108may be configured to stop each decoder106from processing an image102after the estimated high probability decoding time for that particular decoder106has elapsed. This may be done instead of or in addition to stopping all of the decoders106based on a time limit.

FIG. 3is a signal flow diagram illustrating exemplary interaction between an embodiment of the decoder manager308and an embodiment of a decoder306while the method200ofFIG. 2is being performed.FIG. 3shows the interaction between a decoder manager308and a single decoder306. The decoder manager308may have this same type of interaction with multiple decoders306while the method200ofFIG. 2is being performed.

The decoder manager308sends an instruction310to the decoder306to process a digital image102of a graphical code104. The processing instruction310may include a location of the digital image102, or the digital image102itself. When the decoder306finishes processing the digital image102, the decoder306sends decoding result information312to the decoder manager308. The decoding result information312indicates whether the decoder306successfully decoded the graphical code104. If the decoder306successfully decoded the graphical code104, the decoder306outputs the decoded data314.

FIG. 4is a block diagram illustrating another embodiment of a graphical code reader400. As before, the graphical code reader400includes a plurality of decoders406. In the embodiment shown inFIG. 4, the decoders406are separated into two sets416, an active set416aof decoders406and an archived set416bof decoders406. Typically, the most recently successful decoder408is included in the active set416a.

FIG. 5is a flow diagram illustrating an embodiment of a method500that may be performed by the decoder manager408in the graphical code reader400ofFIG. 4. The decoder manager408may perform the method500after a digital image402of a graphical code404has been captured and is ready to be processed.

The method500begins when the decoder manager408identifies502the most recently successful decoder406. The decoder manager408then instructs504the most recently successful decoder406to process the digital image402. When the most recently successful decoder406has finished processing the digital image402, the decoder manager408determines506whether the most recently successful decoder406decoded the graphical code404in the image402. If the most recently successful decoder406decoded the graphical code404, the method500ends.

If the most recently successful decoder406did not decode the graphical code404in the image402, the decoder manager408then attempts to identify508another decoder406in the active set416ato process the digital image402. If the decoder manager408is not able to identify508a decoder406in the active set416athat has not processed the digital image402, the method500skips ahead to step518, which will be discussed below. If the decoder manager408is able to identify508a decoder406in the active set416athat has not processed the digital image402, the decoder manager408instructs510this decoder406to process the digital image402.

After the decoder406has finished processing the digital image402, the decoder manager408determines512whether the decoder406successfully decoded the graphical code404in the image402. If the decoder406successfully decoded the graphical code404, the method500ends. If the decoder406did not successfully decode the graphical code404, the decoder manager408determines514whether a condition has been satisfied for moving the decoder406from the active set416ato the archived set416b. In some embodiments, the condition is that the decoder406has not decoded any of the last N digital images402that have been captured by the graphical code reader400. The value of N may be greater than or equal to one, and is typically greater than one. If the condition has not been satisfied, the method500skips ahead to step518, which will be discussed below. If the condition has been satisfied, the decoder manager408moves516the decoder406from the active set416ato the archived set416b.

The decoder manager408then determines518whether a condition has been satisfied for using the archived decoders406to process the digital image402. In some embodiments, the condition is that the last N digital images402that the graphical code reader400has captured have not been decoded. If the decoder manager408determines518that the condition has not been satisfied, the method500ends without the graphical code404being decoded. If the decoder manager408determines518that the condition has been satisfied, the decoder manager408then attempts520to identify a decoder406in the archived set416bto process the digital image402. If the decoder manager408is not able to identify a decoder406in the archived set416bto process the digital image402, the method500ends without the graphical code404being decoded.

If the decoder manager408is able to identify a decoder406in the archived set416bto process the digital image402, the decoder manager408instructs522this decoder406to process the digital image402. After the decoder406finishes processing the digital image402, the decoder manager408determines524whether the decoder406successfully decoded the graphical code404. If so, the decoder manager408moves526the decoder406from the archived set416bto the active set416aand the method500ends. If the decoder406did not successfully decode the graphical code404, the method500returns to step520and proceeds as described above.

As indicated above, when N nondecodes have occurred (i.e., when the last N images402that the reader400has captured have not been decoded), the decoder manager408may attempt to decode the current image102using at least some of the decoders406in the archived set416b. In some embodiments, the decoder manager408attempts to decode the current image102using M decoders406in the archived set416b, where M is greater than or equal to one.

The order in which the decoders406in the archived set416are used may depend on one or more factors. A first factor that may be considered is how recently the decoders406were used. For example, in some embodiments the decoder406that was used least recently may be tried first. A second factor that may be considered is how recently the decoders406successfully decoded an image402, i.e., how long the decoders406have been in the archived set416b. For example, in some embodiments the decoder406that successfully decoded an image402most recently (i.e., that has been in the archived set416bfor the shortest period of time) may be tried first. Of course, both of these factors may be considered. In some embodiments, the first factor may be weighted more highly than the second factor. Alternatively, in other embodiments, the second factor may be weighted more highly than the first factor. Additional factors may be considered as well.

FIG. 6is a block diagram illustrating physical components in an embodiment of a graphical code reader600. The physical components shown inFIG. 6may be used to implement the functional components described previously. The different components may be located within the same physical structure or in separate physical structures.

The graphical code reader600includes an illumination component678. The illumination component678typically includes a plurality of illumination elements that may be activated to illuminate a graphical code604. The illumination component678is controlled by an illumination controller680, which is in electronic communication with other components in the graphical code reader600via a system bus682.

The graphical code reader600also includes imaging optics684and an image sensor686. The image sensor686includes a plurality of light-sensitive elements. The imaging optics684focus light reflected from the area illuminated by the illumination component678onto the image sensor686. Examples of image sensors686include charge coupled devices (CCDs) and complementary metal-oxide semiconductor (CMOS) sensors. A housing (not shown) is typically also provided for shielding the light-sensitive elements in the image sensor686from ambient light. The image sensor686is in electronic communication with other components in the graphical code reader600via the system bus682.

The graphical code reader600also includes a processor688and memory690. The processor688controls the operation of the graphical code reader600and may be embodied as a microprocessor, a microcontroller, a digital signal processor (DSP) or other device known in the art. The processor688typically performs logical and arithmetic operations based on program instructions stored within the memory690.

As used herein, the term “memory”690is broadly defined as any electronic component capable of storing electronic information, and may be embodied as read only memory (ROM), random access memory (RAM), magnetic disk storage media, optical storage media, flash memory devices in RAM, on-board memory included with the processor688, EPROM memory, EEPROM memory, registers, etc. The memory690typically stores program instructions and other types of data. The program instructions may be executed by the processor688to implement some or all of the methods disclosed herein. The processor688and memory690are in electronic communication with other components in the graphical code reader600via the system bus682.

The graphical code reader600typically also includes one or more programmable logic devices (PLDs)692. The PLDs692may be programmed to carry out logic functions that implement, either partially or completely, some or all of the methods disclosed herein. Examples of different types of PLDs692that may be used include field-programmable gate arrays (FPGAs), logic-cell arrays (LCAs), programmed arrays of logic (PALs), complex programmable-logic devices (CPLDs), and so forth. The PLDs692are in electronic communication with other components in the graphical code reader600via the system bus682. Those skilled in the art will recognize that one or more application-specific integrated circuits (ASICs) may be used in place of or in addition to the PLDs692.

The graphical code reader600typically also includes one or more communication interfaces694for communicating with other electronic devices. The communication interfaces694may be based on wired communication technology, wireless communication technology, or both. Examples of different types of communication interfaces694include a serial port, a parallel port, a Universal Serial Bus (USB), an Ethernet adapter, an IEEE 1394 bus interface, a small computer system interface (SCSI) bus interface, an infrared (IR) communication port, a Bluetooth wireless communication adapter, and so forth. The communication interfaces694are in electronic communication with other components in the graphical code reader600via the system bus682.

The graphical code reader600typically also includes one or more input device controllers696for controlling input devices, such as keys, buttons, etc. The graphical code reader600typically also includes one or more output device controllers698for controlling output devices, such as a display screen. The input device controllers696and output device controllers698are in electronic communication with other components in the graphical code reader600via the system bus682.