Bar Codes, OCR & ICR
Bar Codes and ICR are both types of data that can be recognized in a commercial OCR system. However, they lie at opposite ends of the image recognition spectrum. Bar codes are considered more reliable than conventional machine printed OCR. As such, they are used in many commercial applications, like UPC codes, and considered very reliable. Of course, this reliability comes as a result of a very constrained alphabet, i.e., straight lines of varying widths.
$20 billion spent by industry on field coding
On the other end of the spectrum is ICR, which is an acronym for Intelligent Character Recognition. ICR is really analogous to OCR except that OCR is for machine printed text while ICR is for handwritten text. While many consider the OCR problem solved, the $20 billion spent by industry on field coding suggests otherwise - namely, that reliable recognition and data extraction is far from solved. On the other hand, general ICR is a very hard problem where there are almost no commercial systems today that run reliably in this environment.
Differences between OCR, ICR, and Bar Code Recognition
Viewed another way, bar code recognition is a more constrained problem than OCR. While OCR seeks to understand all printed characters in a document, bar code recognition seeks to understand only characters that are bar codes, which are lines of varying thickness. ICR is more general than OCR, seeking to recognize hand printed alpha-numeric characters, and certainly machine printed ones.
While ICR is not generally viable as a commercial technology, there are applications where this technology might be viable. If the string to be recognized has to fit a rigid profile, such as a date or social security number, then recognition rates are much higher. ICR recognition rates for strictly numeric data are generally much higher than for mixed alphanumeric data. Also, ICR recognition is much higher when there is data redundancy, as in check deposit slips.