Abstract:
A character recognition system wherein the flexibility of the recognition task is expanded for orientation independence, position independence, and orientation and position independence. The system also provides a technique for implementing concurrency in the processing to achieve high speed without sacrificing performance. The system is readily implemented on conventional machine vision computing systems.

Description:
BACKGROUND OF THE INVENTION 
     1. Technical Field 
     This invention relates to image analysis systems, and more particularly to automated optical character recognition systems. 
     2. Discussion 
     Over the last few years, applications of machine vision to the areas of automated inspection and manufacturing have been increasing considerably. Among the areas of machine vision most pursued by various industries are: optical character recognition, defect inspection, gauging and, product counting. Of all these applications, optical character recognition (&#34;OCR&#34;) has been of great importance to many industries, such as, pharmaceutical and packaging industries for a variety of reasons. Some of these reasons are: 
     (1) better quality of products, 
     (2) cost effectiveness of products, 
     (3) consistency of product quality, 
     (4) proper documentation of errors and 
     (5) better productivity. 
     In today&#39;s high speed manufacturing processes, it is important to maintain the quality of products without affecting the rate of productivity. Everyday stricter conditions are laid down for better product quality, particularly for the pharmaceutical industry. In this manufacturing environment, it is important to have correct labels and numbering on parts manufactured by an industry. Also, it is increasingly difficult for human inspectors to keep up with the speed of the manufacturing processes. With machine vision application of OCR technology, the speed of a manufacturing process can be maintained without relying on human inspectors. This requires less inspectors and a more cost effective manufacturing. Further, a machine vision system generates results in a consistent way and all errors are automatically documented for future processing. 
     Many different types of OCR equipment have been installed in different types of industrial environments over the past several years. This equipment includes optical sensing devices, such as television (TV) cameras, image processing units, display monitors for training and viewing and, other peripheral devices. The cameras are mounted in a given orientation to view the manufactured parts and then read characters from these parts in a fixed orientation. Also, character recognition on these parts is performed at a fixed location in the manufacturing line. This constrains the manufacturers to place the characters in a given orientation and at a very precise location on the parts. 
     These two constraints may not be achievable in many manufacturing scenarios. One example of such a scenario is the task of reading characters from bottle caps as these bottles come down a manufacturing line. The bottles rotate continuously as they move down this line. Thus the character set printed on the caps, which is to be recognized by the machine vision unit, also rotates continuously down the line. There is no guarantee that the character set will be presented at a fixed orientation in front of the camera. We can also have many situations where a character set is not printed at the same precise location on a part. An example of this would be characters stamped on a part by a stamping machine. Errors in the motion of the stamping machine or non-uniform movement of the part along the line, may cause the characters to be printed at different positions of the part at different times. Thus if the TV camera points to a fixed position on the part, it may not find the entire set of characters on the part even though all the characters are present on the part. 
     In order to overcome most (if not all) of the drawbacks of present OCR technology, it would be desirable to have an image analysis system which is capable of orientation and/or position independent character recognition. 
     SUMMARY OF THE INVENTION 
     Pursuant to the present invention, an image processor is provided which is capable of reading a set of characters independent of its orientation on the part and independent of its position on the part. The method of the present invention first locates the orientation or position of the set of characters and then reads them. In one embodiment, the invention also uses an image processing tool called &#34;gray scale and binary image morphology&#34; to separate the characters from the image and, then perform the recognition task. It also uses an image processing technique called &#34;vector correlation&#34; to recognize the characters separated by the previous methods. Also, in accordance with another embodiment there is presented a method of overlapping the tasks performed by the different processing units in a image processing system. This method of overlapped processing is called &#34;concurrency&#34;. The method of &#34;concurrency&#34; presented herein improves the processing speed of the character recognition methods under both rotation and/or position independence. Consequently, the system and method of the present invention has the following advantages over conventional OCR technology: 
     (1) recognition irrespective of orientation of characters, 
     (2) recognition irrespective of position of characters, 
     (3) very high speed recognition of characters, 
     (4) recognition irrespective of position and orientation of characters, 
     (5) recognition of degraded or poor quality characters, 
     (6) accurate recognition, and 
     (7) recognition of symbols, as well as, characters. 
     A general model of character recognition consists of the following steps: 
     (1) image acquisition with a TV camera, 
     (2) segmentation of the acquired image to extract the character image, 
     (3) processing of the character image by vector correlation technique to extract data pertaining to individual characters, 
     (4) analysis of the vector correlation data to recognize the characters and, 
     (5) display the recognized character data. 
     Starting from the above conventional model of character recognition the invention introduces several steps of processing to include rotation independence, position independence and, rotation and position independence. For rotation independence the invention introduces 3 steps after step (2) i.e. segmentation of the acquired image. These steps are: 
     (1) perform image processing pertaining to orientation independence to extract a blob image, 
     (2) compute the orientation of the character string by computing the orientation of the principal axis of the blob and, 
     (3) rotate the characters about an axis to orient it horizontally across the image for recognition. 
     For position independent character recognition, the recognition is first done on the entire image to locate a given mark or &#34;fiducial&#34;. Character recognition is then performed with respect to this &#34;fiducial&#34; location in the image. For this the invention introduces 3 steps after step (2) above, i.e. segmentation of the acquired image. The steps are: 
     (1) locate a mark or &#34;fiducial&#34; in the entire image, 
     (2) compute the displacement of this mark from its &#34;nominal&#34; position and, 
     (3) move the character image by this displacement to place it at its &#34;nominal&#34; position. 
     From the two methods mentioned above, a system for both position and orientation independent character recognition method is achieved by introducing the following steps after step (2) in the general model above i.e. segmentation of the acquired image. 
     (1) perform image processing pertaining to orientation independence to extract a blob image, 
     (2) compute the orientation of the principal axis of the blob from horizontal. 
     (3) rotate the character image about an axis to orient it horizontally across the image, 
     (4) locate a mark or &#34;fiducial&#34; in the entire image, 
     (5) compute the displacement of the &#34;fiducial&#34; from its &#34;nominal&#34; position, 
     (6) move the character image by this displacement to place it at its &#34;nominal&#34; position. 
     In accordance with another embodiment of the present invention there is presented a system for high speed recognition for both orientation and position independent character recognition methods. This model uses the computational concept of &#34;concurrency&#34;. The image processing system consists of different processors. Each processor is designed to perform a specific type of task. For example, the camera is used to acquire an image. Often there are specialized processing units in the image processing computer to do image processing tasks such as image segmentation and vector correlation mentioned in steps (2) and (3) above (refer to steps (1) through (6) in conventional OCR. The central processing unit (&#34;CPU&#34;) of the image processor is used for computational intensive operations such as the analysis of the recognized characters from the vector correlation data mentioned in step 4 above; of the conventional character recognition tasks. All these tasks can be overlapped with each other for the rotation invariant, position invariant and, the rotation and position invariant character recognition methods to achieve very high recognition speed. This method of overlapping multiple processes is called &#34;concurrency&#34;. By overlapping these different tasks performance is not sacrificed while achieving high speed. This method maximizes the computational ability of the image processing machine. In accordance with this invention rotation and position invariant OCR technology are divided into different tasks, the processors performing these tasks are identified, the processing of these tasks are overlapped in appropriate order, intermediate data is stored and, then correct final results are achieved. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     The various advantages of the present invention will become apparent to one skilled in the art by reading the following specification and drawings which form an integral part of the description of the preferred embodiments and are to be read in conjunction therewith. Identical reference numerals designate like components in the different figures, where: 
     FIG. 1 is a block diagram of the embodiment of a conventional character recognition system; 
     FIG. 2 is a block diagram of a preferred embodiment of the machine vision system hardware used in FIG. 1; 
     FIG. 3 is a flow chart showing the conventional character recognition process with intermediate buffer names; 
     FIG. 4 is a flow chart showing the conventional character recognition process under &#34;concurrency&#34; with intermediate buffer names; 
     FIG. 5 is an explanatory view of a &#34;discrete skeleton&#34; template of a character; 
     FIG. 6 is an explanatory view of a manufacturing line with eight parts on it moving from left to right; 
     FIG. 7 is an explanatory view showing a character image in two orientations; 
     FIG. 8 is a flow chart showing rotation invariant character recognition with intermediate buffer names; 
     FIGS. 9A and 9B are a flow chart showing rotation invariant character recognition under &#34;concurrency&#34; with intermediate buffer names; 
     FIG. 10 is a flow chart showing position independent character recognition process with intermediate buffer names; 
     FIGS. 11A and 11B are a flow chart showing position independent character recognition process under &#34;concurrency&#34; with intermediate buffer names; and 
     FIGS. 12 is a flow chart showing rotation and position independent character recognition with intermediate buffer names. 
     FIGS. 13A and 13B are a flow chart showing a rotation and position independent character recognition process under &#34;concurrency&#34; with intermediate buffer names. 
    
    
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT 
     Referring now to FIG. 1, there is shown a block diagram of a conventional character recognition system 10 in accordance with the prior art. A character set 12 consisting of the numbers &#34;012&#34; is sensed by a TV camera 14. An image processor 16 performs image analysis on the image signal from the TV camera 14 and displays the processed image on a monitor 18. 
     FIG. 2 is a block diagram of a preferred embodiment of the hardware for vision system 20. The system 20 comprises a vision system available from Applied Intelligent Systems Inc. (&#34;AISI&#34;) of Ann Arbor, Mich. In the preferred embodiment, this system 20 is a stand alone gray scale and binary image analysis system available form AISI as model 4000. Other suitable AISI systems include the models 3000, 3500 and 5000. 
     This AISI image processor 20 belongs to the category of massively parallel, single instruction multiple data (&#34;SIMD&#34;), single bit, mesh connected processor. It is general purpose because each individual processing element is a programmable bit-serial processor with its own memory. It is massively parallel because the system 20 system can contain up to 1024 of these general purpose bit-serial processor, which are tightly coupled to each other and which operate in lock step as a one-dimensional SIMD array computer. Also, there are no chips or circuits within the AISI system 20 to perform specific functions. Instead, the general purpose parallel processor, which is programmed using AISI&#39;s &#34;LAYERS&#34; software environment, performs such operations as convolutions, filtering, morphology, feature extraction, and many others. These computers can be used in conjunction with a graphic workstation or a stand-alone unit. 
     The vision system 20 consists of the following five main components: 
     (1) video input/output section (&#34;I/O&#34;) 22 coupled to a camera 24, 
     (2) special-purpose, high speed parallel memory input/output unit 26, 
     (3) SIMD array parallel processor array unit 28 with controller for the parallel processors, 
     (4) general purpose CPU 30 consisting of a Motorola 68000 host processor and peripherals 32, 34 and 
     (5) parallel, image processing memory 36. 
     The five major sub-systems of the AISI vision computers operate together to perform all types of vision processing operations. In general, the operation of the entire system is as follows: 
     (1) Video signals from the camera 24 come into the video I/O section where they are digitized and the resultant bytes are sent to the parallel memory I/O section 26. The image processor 20 is capable of supporting different resolutions of image. The model 5000 generally comes with 384 by 256 pixels image resolution, but can easily be upgraded to 512 by 256 pixels image resolution. Alternatively, there is 384 by 256 pixels image resolution in the model 3000 computers, and there is 512 by 256 or 512 by 512 pixels resolution in models 3500 and 4000. 
     (2) The parallel memory I/O section 26 accumulates a raster scan line and, when complete, stores this line into the parallel memory 36. The I/O part of the computer also gets data in and out of the parallel processing memory 36. The parallel memory I/O section 26 can read an image out of parallel memory, one scan line at a time, and send it to the Video I/O section 22 which will display it on a monitor (CRT) 38. This displayed image can be the original input image or any of the processed results in the parallel memory. 
     (3) The parallel processor array 28 of this system 20 consists of a large number of processing elements and the controller which directs their operation. The parallel array operates on the image stored in parallel memory. The results of the image operations are stored back into parallel memory by the parallel array 28. 
     (4) The host CPU 30 (Motorola 68000) reads the results of the parallel array computations stored in parallel memory 36. These results can be processed further by the CPU 30, if necessary. The CPU 30 can communicate results of commands through its external interfaces if necessary. 
     (5) The parallel processor memory 36 is associated to the parallel processor array 28. This memory is used to store the initial image and any image processed by the parallel processors. There is up to 4 Mega bytes of parallel processor memory or image memory available in model 5000. 
     Many of the above-mentioned operations can take place at the same time. All of the major subsystems operate independently so that, for example, a video image can be input into parallel memory 36, while the parallel processor 28 is processing previously acquired image, while the CPU 30 is communicating with another device, while an image is being displayed in the monitor 38. This simultaneous processing capability of the machine has been extensively used in our character recognition system of the present invention. The computational implementation of this capability is referred to as &#34;concurrency&#34;. 
     It should be noted that the parallel processor controller within the parallel processor unit 28 instructs the processing elements to perform their operations. The controller is, therefore, intimately tied to the operation of the parallel processor in its execution of vision operations. It is also, however, a distinct and separate processor in its own right. It runs programs written in microcode and can perform logical and arithmetic functions. Although its main function is to drive the parallel processor, it can also be programmed to perform other operations when it is not busy feeding instructions to the parallel processor. 
     Many different software functions may be added to the image processing machine 20 to do various arithmetic, gray scale and binary image processing operations. All these operations take advantage of the massively parallel architecture of the machine. The specifics of the operation of the vision system 20 hardware, system software and image analysis function library is well documented in existing AISI system, hardware and software manuals and literature, including the following, which are hereby incorporated by reference: 
     (1) The AIS-5000 Parallel Processor, (1988) IEEE Transactions on Pattern Analysis and Machine Intelligence Vol. 10, No. 3 pages 320-330 May 1988; 
     (2) AISI Hardware Installation and Reference Manual (1989); 
     (3) AISI Software Technical Overview (1989); 
     Out of the many binary and arithmetic software functions available in the hardware, the one of particular importance to the present invention is called &#34;vector correlation&#34;. This function has been discussed in general in the publication referred to in item (1) above. This operation takes maximum advantage of the processor/memory architecture. In brief, this operation can be described as a two-dimensional correlation operation. Given a template for a character and a character image, the template can be correlated to the character image and a correlation image can be obtained. The correlation image contains a residue wherever the template fully correlated with the character image. This process can be done very fast in this massively parallel architecture of the AISI image processor. This operation forms an integral part of our character recognition process. 
     In light of the references mentioned above, further description of the general AISI vision systems, such as system 20, need not be given here. Moreover, those skilled in the art of machine vision systems will be well aware of how to program and how to use most image processes or analysis functions available in a vision system library. Therefore, a detailed explanation of applications programming and machine vision image processing functions need not be given herein. 
     B. CHARACTER RECOGNITION METHOD 
     The conventional character recognition method implemented in the AISI image processors consists of several distinct steps outlined in FIG. 3. The character recognition algorithm runs in the image processor and controls the camera, monitor and all other peripheral devices. The steps in the character recognition method includes: 
     (1) image acquisition with a camera 40; 
     (2) image segmentation in the parallel processor memory 
     (3) vector correlation of the image in parallel processor memory 44: 
     (4) analysis of the vector correlated data to distinguish the recognized characters 46; 
     (5) display of the recognized characters and their images 48. 
     The image acquisition step 40 consists of the CPU 30 of the image processor 20 asking the camera 24 to take a picture. The analog image data is then processed by the digitized in the video I/O 22 to create the digitized image data. Different resolutions of the image are produced based on the type of the hardware and the their configuration. Image resolutions possible are 384 by 256 or 512 by 256 or 512 by 512 pixels. The digitized image resides in the parallel processor image memory 36. 
     The digitized image data is then processed by the parallel processor 28 to create a segmented image of the characters. For this step of image processing, many of the AISI software functions such as the gray scale and binary functions are executed in appropriate order in order to bring out the character image from the rest of the image. One of the functions frequently implemented for image segmentation is called &#34;gray scale image normalization&#34;. This functions normalizes the gray scale image obtained by the image acquisition process and compensates for background lighting. This image is then &#34;thresholded&#34; to create a binary image of the characters. The binary image contains the image of the characters with possible noise. The binary image is then filtered by binary image processing functions, available in the AISI computers, to extract a cleaner image of the characters. This process of extracting and cleaning the character image is being referred to as &#34;image segmentation&#34; for in step (2) of the conventional character recognition process. This step 42 of image processing is done by the parallel processors in the parallel array 28 with memory 36 of the image processor 20. 
     The vector correlation step 44 is also an image processing step executed on the binary character image obtained after step (2), 42. Here the template of the characters are first obtained in the teach phase of the character recognition task. Referring to FIG. 5, a template of a character is a &#34;discrete skeleton&#34; 50 of the individual character to be recognized. The &#34;discrete skeleton&#34; 50 is obtained by first placing a set of dots 52 towards the center of the character image shown in FIG. 5. The vector correlation step correlates these dots representing a character to the entire image. If the dots correlate to a character image, then a residue is obtained in the correlation image. A residue is defined as a collection of pixels at a given location within the character where the &#34;discrete skeleton&#34; template of the character correlates with the character image. If the dots do not belong to the character image, then they do not correlate with it and no residue is obtained in the correlation image. The vector correlation step 44 utilizes the power of the parallel architecture of the AISI image processors and accomplishes the correlation tasks at high speed. This process is also done by the parallel processors in the parallel array 28 using parallel processing memory 36. 
     The analysis step 46 is performed on the correlated image obtained in the vector correlation step 44 (3). The correlated data is analyzed by the CPU 30 to extract the recognized characters. This step is performed by the CPU 30 using CPU memory. The final results are then displayed (step 48) on the monitor 38. 
     The conventional character recognition task done by the five steps mentioned above can be executed sequentially. In this process the total time taken to perform one character recognition task is a sum of the times taken by each one of the five steps. Even though the speed of the recognition process achieved by sequential execution is good for many applications, some other applications demand higher speed and performance criteria. An improved method of character recognition can be achieved by overlapping some or all of the steps mentioned above. In summary, the conventional character recognition consists of five steps which are performed by three separate processing units. The image acquisition step 40 is performed by the camera 24. Steps 42 and 44, consisting of image segmentation and vector correlation, are performed by the parallel processor 28. The analysis step 46 is performed by the CPU 30 and, the display step (5) is performed by the monitor 38. 
     In accordance with the present invention, a method of overlapping the tasks performed by the camera 24, parallel processor 28 and the CPU 30 will be disclosed. This will overlap the acquisition task in step 40, with the parallel processor tasks (segmentation and vector correlation) in steps 42 and 44, with the CPU task (analysis) in step 46. In this model of character recognition the speed of the OCR task is not determined by the sum of the times taken by all the 5 steps, but by the maximum time taken by any one of the five steps. Here all the processors are processing simultaneously. This process of overlapping the processing power of each processor is called &#34;concurrenty&#34;. This yields a faster processing capability and many more parts can be processed without losing performance. 
     The model of the conventional character recognition process shown in FIG. 3 also includes the buffer names for intermediate images. In this, we first take a picture of the characters in an image buffer marked &#34;a&#34; located in parallel memory 36. The image in buffer &#34;a&#34; is then segmented by step 42 to extract a cleaner character image in buffer &#34;x&#34;. The character image in buffer &#34;x&#34; is then vector correlated with the character templates (&#34;discrete skeletons&#34;) to create a correlated image in buffer &#34;w&#34;. The correlated image in buffer &#34;w&#34; is then processed to extract the characters recognized in an array &#34;A&#34;. The array &#34;A&#34; now contains the final results of the recognition task. In order to overlap the different tasks we have to store the intermediate results so that they can be accessed by the subsequent processing units without disturbing the current results. 
     FIG. 4 shows a flow chart 53 of the conventional character recognition task with the buffer names for intermediate images adapted to operate with &#34;concurrency&#34;. Here the camera takes a picture of the characters in a buffer named &#34;f&#34; in step 54. The segmentation step 56 starts only after the first image is taken. The segmentation step 56 takes the character image in buffer &#34;a&#34; and extracts a cleaner character image into buffer &#34;x&#34;. The image in buffer &#34;x&#34; is vector correlated with the character templates to create a correlation image in buffer &#34;w&#34; in step 58. The segmentation and correlation steps occur in the parallel processor memory 36 and are done by the parallel processor array 28. These 2 steps can continue while the camera takes a picture in buffer &#34;f&#34;. Also at the same time the analysis step 60 done by CPU 30 can continue. The CPU 30 takes the data from a buffer &#34;v&#34; and extracts the characters recognized into an array &#34;A&#34;. The analysis step 60 and display step 68 do not begin till two images are acquired. At the end of these steps the data from buffer &#34;f&#34; is transferred to buffer &#34;a&#34;, and the results of buffer &#34;w&#34; are transferred to buffer &#34;v&#34; in step 62. This way each processing unit can process from an input buffer and output it to an output buffer without disturbing the contents and results of any other processing units. 
     The &#34;count&#34; variable shown in FIG. 4 and subsequently FIGS. 9, 11 and 13, represent a counter that counts the parts going through a certain point in the manufacturing line. FIG. 6 shows an example of a manufacturing lien with eight parts on it. The entire character recognition process starts with the &#34;count&#34; variable set to a value of &#34;0&#34;, as shown in the flow chart in FIG. 4. As part 1 arrives under the camera, a triggering device, such as a photoswitch triggers the image processor to start taking a picture of part 1 with the camera 24. When part 1 has been completely processed, the &#34;count&#34; variable is incremented to a value &#34;1&#34;. Next, the image processor waits for part 2 to trigger the photoswitch which in turn triggers the character recognition process. At the end of each OCR task the &#34;count&#34; variable is incremented. Thus, the &#34;count&#34; variable is used to check how many parts have been processed for OCR at any given time. In the &#34;concurrency&#34; model each processor is processing a task that has been handed down to it by another processor in a previous OCR cycle. For example, the parallel processor 28 cannot begin processing an image till the camera 24 has already acquired an image of the previous part in the previous OCR cycle. Similarly the CPU 30 cannot perform the analysis step till the parallel processor 28 has already processed the image of the previous part. Thus, the &#34;count&#34; variable serves as an effective way of separating the data from different parts, as the individual processors continue processing them &#34;concurrently&#34;. 
     The above-mentioned steps of concurrent processing can be better explained by an example of moving parts in a manufacturing line. FIG. 6 shows a camera taking pictures of parts 64 moving down a manufacturing line 66. When part 1 comes under the camera, a triggering device, such as a photoswitch, (not shown) signals the image processor 20 to acquire a picture of the part. The image processor then starts acquiring the picture of part 1 in buffer &#34;f&#34;. Once this picture taking process is done the image processor waits for the next part. The picture data of part 1 is now transferred from buffer &#34;f&#34; to buffer &#34;a&#34;. Next the photoswitch triggers the image processor to take the picture of part 2. Now the camera starts taking the picture of part 2 in buffer &#34;f&#34;. While the camera is doing its job, the picture of the part 1 in buffer &#34;a&#34; is segmented by the parallel processor to extract the character image in buffer &#34;x&#34; in step 56. Next the results of buffer &#34;x&#34; is vector correlated to get the correlated image in buffer &#34;w&#34; in step 58. Once the parallel processor tasks (segmentation and vector correlation) are done and the camera task is done the data is transferred. The correlated image of part 1 in buffer &#34;w&#34; is transferred to buffer &#34;v&#34; and the raw camera image of part 2 in buffer &#34;f&#34; is transferred to buffer &#34;a&#34; in step 62. Next the image processor waits for part 3 to trigger the photoswitch. Once the photoswitch triggers the image processor, the camera starts taking the picture of part 3 in buffer &#34;f&#34; in step 54. While the camera takes the picture of part 3, the parallel processor starts processing the image in buffer &#34;a&#34; of part 2 and outputs the cleaner character image in buffer &#34;x&#34; in step 56. The parallel processor then continues with the vector correlation step 58 to process the image in buffer &#34;x&#34; to output a correlated image in buffer &#34;w&#34;. While the camera takes the picture of part 3 and the parallel processor processes the image of part 2, the CPU picks up the vector correlated results of part 1 in buffer &#34;v&#34; to output the recognized characters in array &#34;A&#34; in step 60. At the end of the camera, parallel processor and the CPU tasks, the intermediate data is transferred in step 62. The picture of part 3 taken in buffer &#34;f&#34; is transferred to buffer &#34;a&#34;. The segmented and vector correlated result of part 2 in buffer &#34;w&#34; is transferred to buffer &#34;v&#34;, and the recognized characters of part 1 in array &#34;A&#34; are displayed in step 68. These steps then continue for all future parts coming down the manufacturing line. 
     The overlapped processing described above utilizes the maximum processing power of the image processor 20, and increases the processing rate of character recognition considerably. This idea of &#34;concurrency&#34; has also been extended and utilized in the rotation and position invariant character recognition methods as described below. It is somewhat more complex in these cases because of the complexity and the order of the processing steps involved. 
     C. ROTATION INVARIANT METHOD 
     FIG. 8 illustrates a flow chart for the rotation invariant character recognition method 70 with intermediate buffer names. This algorithm has three new steps over and above the steps involved in conventional character recognition shown in FIG. 3. The rotation invariant character recognition consists of the following eight steps: 
     (1) acquire an image with the camera 72; 
     (2) segment the image with the parallel processor 74; 
     (3) extract a blob for principal axis computation with the parallel processor 76; 
     (4) extract principal axis parameters from the blob using the CPU 78; 
     (5) rotate the character image 80; 
     (6) vector correlate the character templates in right-side-up and up-side down positions 82; 
     (7) analyze the correlation image using the CPU 84; 
     (8) display the results in the monitor 86. 
     Here we have all the steps of the conventional character recognition with three new steps for rotation independence. These steps (3), (4) and (5) rotate the character image to its &#34;nominal&#34; position. The &#34;nominal&#34; position is the horizontal position of the character string. As explained later, the &#34;nominal&#34; position can either be the right side up or up side down position of the characters. The vector correlation step has also been modified. Here two sets of vector correlations are done --one with the character templates in right side up position and, one with the character templates in up side down positions. The analyze step 84 has also been modified to process two correlation images instead of one. 
     The first step 72 in rotation invariant OCR consists of acquiring an image of the characters. This process is done by the camera unit 24. The acquired image is stored in an image buffer called &#34;a&#34;. The acquired image is then processed by the parallel processor 28 to segment the characters out of the raw camera image. Here the image processing functions available in the AISI image processor are utilized in a given sequence to extract a cleaner image of the characters. Examples of such functions are provided in the conventional character recognition section (Section B). This step is performed by the parallel processor 28 with parallel processing memory 36. 
     The next new step is principal axis image extraction 76. In this step, a blob is extracted from the original image &#34;a&#34; or the processed image &#34;x&#34;, in order to extract the principal axis parameters described below. Here we also use the image processing functions available in the AISI image processor 20. This image processing step 76 extracts a blob representing the orientation of the characters in the image. The blob is stored in an image buffer &#34;y&#34;. Next is the step of principal axis parameter extraction 78. Here the blob image in buffer &#34;y&#34; is processed to extract a principal axis. The principal axis is extracted by computing the eigenvalues and eigenvectors of the blob image. The eigenvector corresponding to the largest eigenvalue is the principal axis direction of the blob. If Xi and Yi are the x- and y-coordinates of the pixels belonging to the principal axis blob image and, there are N such pixels, then the first order moments &#34;(xc, yc)&#34; of the blob image are computed by the following equations: ##EQU1## The 2 by 2 covariance matrix of the blob is: ##EQU2## The largest eigenvalue (&#34;Lmax&#34;) computed from the matrix in equation (3) above is: ##EQU3## The principal axis orientation angle &#34;t&#34; is given by: ##EQU4## where k1, k2 and k3 are shown above. 
     It can be seen from equations (1) and (2) above, that &#34;xc&#34; and &#34;yc&#34; constitute the centroid of the principal axis blob image. In steps above, we computed the centroid of the blob &#34;(xc, yc)&#34; and the orientation angle &#34;t&#34; of the principal axis blob image in buffer &#34;y&#34;. It can be easily seen from equation (5) above that the principal axis angle &#34;t&#34; of the blob is the smallest angle of the blob from horizontal. Thus, for two images 88, 90 shown in FIG. 7, the characters &#34;1 2 3&#34; written within the blob are oriented at angles &#34;t&#34; or &#34;-t&#34; from the horizontal respectively. 
     After the computation of the principal axis parameters &#34;(xc,yc,t)&#34;, is the step of image rotation 80. Here we rotate the processed image in buffer &#34;x&#34; by the smallest angle possible to the horizontal. The rotation is done about the centroid (xc, yc) of the blob image. Thus we rotate the two images in FIG. 7 by angles -t and t respectively. It can be easily seen from FIG. 7, that because of these two rotations, the character string &#34;1 2 3&#34; in the first image of FIG. 7 88 is positioned right side up, whereas, the character string &#34;1 2 3&#34; in the second image 90 is positioned up side down. This step is performed by the parallel processor 28 with the parallel processor memory 36. After rotating image &#34;x&#34; by the parameters (xc, yc, t) the final rotated image is also placed in image buffer &#34;x&#34;. 
     The next step after rotation of the processed image is vector correlation 82. As mentioned above, the rotation step can place the characters in buffer &#34;x&#34; either right side up or up side down. The vector correlation step 82 now has to correlate the templates of the taught characters in both the orientations--right side up or up side down. The two orientations of the templates are correlated to create two correlation images in buffer &#34;w&#34;. The vector correlation step is also performed by the parallel processor in the parallel processing memory. 
     The analysis step 84 in the rotation invariant OCR processor 70 is more complicated than the corresponding step in conventional OCR. Here the two correlated images &#34;w&#34; generated by the vector correlation step 82 are analyzed to create two sets of character strings &#34;A&#34; and &#34;B&#34;. The character array &#34;A&#34; contains the characters recognized by correlating the templates of the taught characters in the right side up positions and, array &#34;B&#34; contains the characters recognized by correlating the character templates in up side down positions. Both arrays &#34;A&#34; and &#34;B&#34; along with images &#34;a&#34;, &#34;x&#34; and &#34;y&#34; are displayed. The correct set of recognized characters from arrays &#34;A&#34; and &#34;B&#34; is determined by a preset criteria. One such criteria can be a defined string of characters that we are trying to recognize. We then match arrays &#34;A&#34; and &#34;B&#34; to this pre-defined character string that we are looking for. The closest match among arrays &#34;A&#34; or &#34;B&#34; is considered as the correct set of recognized characters. All these steps in analysis are done in the CPU 30 with CPU memory. 
     D. CONCURRENCY IN ROTATION INVARIANT OCR 
     FIG. 9 illustrates a flow chart for rotation invariant character recognition with intermediate buffer names under &#34;concurrency&#34;. The &#34;concurrency&#34; model for rotation invariant OCR is much more complex than conventional OCR because of the number of steps involved in the recognition task (8 steps instead of 5 in the conventional OCR method). Also here, different steps are processed by the different processing units but they are not arranged in such an order that they can be easily performed one after another as in the conventional OCR algorithm shown in FIG. 3. In the conventional OCR algorithm the first 4 steps can be easily divided into 3 groups--step (1) is performed by the camera, steps (2) and (3) are performed by the parallel processor and step (4) is performed by the CPU. In the case of rotation invariant OCR the steps cannot be divided into clean groups like that. In this case step (1), i.e. acquisition is performed by the camera, step (2) or segmentation is performed by the parallel processor, step (3) or principal axis blob extraction is performed by the parallel processor, step (4) or principal axis data extraction is performed by the CPU, step (5) or image rotation is performed by the parallel processor, step (6) or vector correlation is performed by the parallel processor, step (7) or analysis is performed by the CPU and, step (8) or display is performed by the monitor. For a single image, the steps have to be performed in a sequence from step (1) to step (8). Because some of these steps are performed by the parallel processor and some by the CPU, the order of processing is mixed up between the different processors and we have to separate out the processing tasks and rearrange the processing order. 
     We shall first group the tasks by the processors that execute them. The camera 24 performs the following task: 
     (1) image acquisition 94. 
     The parallel processor 28 performs the following tasks: 
     (1) image segmentation 96, 
     (2) principal axis blob image extraction 98, 
     (3) image rotation 100, 
     (4) vector correlation with character templates 102. 
     The CPU 30 performs the following tasks: 
     (1) principal axis data extraction 104, 
     (2) analysis of correlation data 106. 
     The Display Monitor 38 performs the following task: (1) display the results 108. If we group the tasks under three different groups as mentioned above, then we have to arrange the intermediate data transfers in such a way that the appropriate task gets the data in the correct sequence. For this we have constructed the flow chart 92 shown in FIG. 9. 
     The rotation invariant algorithm under &#34;concurrency&#34; in FIG. 9 can be better illustrated with the example of parts in a moving line shown in FIG. 6. As part 1 comes under the camera, the photoswitch triggers the AISI image processor 20 to take a picture of this part. The camera 24 then starts taking a picture of part 1 under the camera into an image buffer &#34;f&#34;. When the camera completes this picture taking process, the image processor transfers the image of part 1 in buffer &#34;f&#34; to buffer &#34;a&#34; and, waits for the next part to come under the camera. 
     When the photoswitch triggers the camera for part 2, the camera starts taking a picture of part 2 in buffer &#34;f&#34;. While this picture is being taken, the parallel processor starts segmenting the image of part 1 in buffer &#34;a&#34; into an image buffer &#34;x1&#34;. The parallel processor 28 then processes the image in buffer &#34;x1&#34; to extract a blob for principal axis computation into buffer &#34;y1&#34;. At the end of the camera and image processor tasks, the image of part 2 in buffer &#34;f&#34; is transferred to buffer &#34;a&#34; and the character image of part 1 in buffer &#34;x1&#34; is transferred o buffer &#34;x4&#34; and, the blob image of part 1 in buffer &#34;y1&#34; is transferred to buffer &#34;y2&#34;. 
     Next, when part 3 triggers the photoswitch, the camera 4 starts taking a picture of part 3 in buffer &#34;f&#34;. While the camera takes a picture of part 3, the parallel processor segments the image of part 2 in buffer &#34;a&#34; to extract a cleaner character image in buffer &#34;x1&#34; and, then the parallel processor extracts a blob for principal axis computation in buffer &#34;y1&#34;. Simultaneous to these two tasks, the CPU extracts the principal axis parameters of part 1 from an image stored in buffer &#34;y2&#34;. The parameters computed are &#34;xc1&#34; and &#34;yc1&#34; for x and y centroids of the principal axis blob, and &#34;t1&#34; for the smallest rotation angle. These parameters (xc1,yc1,t1) are stored in CPU memory. At the end of the parallel processor, camera and CPU tasks, image &#34;f&#34; of part 3 is transferred to buffer &#34;a&#34; (step 109). Also the segmented character image of part 1 in buffer &#34;x4&#34; is transferred to buffer &#34;x3&#34;, and the segmented character image of part 2 in buffer &#34;x1&#34; is transferred to buffer &#34;x4&#34;. The extracted blob image of part 2 in buffer &#34;y1&#34; is transferred to buffer &#34;y2&#34; and, the principal axis parameters of part 1 in variables (xc1, yc1, t1) are transferred to variables (xc2, yc2, t2) in CPU memory. 
     Next, part 4 comes under the camera and the photoswitch triggers the camera 24 to start taking a picture of part 4 in buffer &#34;f&#34;. Simultaneously, the parallel processor 28 segments the image of part 3 in buffer &#34;a&#34; to extract a cleaner character image in buffer &#34;x1&#34; and then extracts the principal axis blob from buffer &#34;x1&#34; into buffer &#34;y1&#34;. At the same time, the CPU 30 extracts the principal axis parameters (xc1, yc1, t1) of part 2 in buffer &#34;y2&#34;. The parallel processor 28, at the same time, rotates the image of part 1 in buffer &#34;x3&#34; by the parameters (xc2, yc2, -t2). At the end of all these tasks the following transfers take place. The image of part 4 in buffer &#34;f&#34; is transferred to buffer &#34;a&#34;. The correlated image of part 1 in buffer &#34;x3&#34; is transferred to buffer &#34;x2&#34;. The character image of part 2 in buffer &#34;x4&#34; is transferred to buffer &#34;x3&#34;. The character image of part 3 in buffer &#34;x1&#34; is transferred to buffer &#34;x4&#34;. The principal axis parameters (xc1, yc1, t1) of part 2 are transferred to (xc2, yc2, t2) and the blob image of part 3 in &#34;y1&#34; is transferred to buffer &#34;y2&#34;. 
     When part 5 comes by, the photoswitch triggers the camera 24 to take a picture of part 5 in buffer &#34;f&#34;. Simultaneously, the image of part 4 in buffer &#34;a&#34; is segmented into buffer &#34;x1&#34; and then the principal axis blob for this image is extracted into buffer &#34;y1&#34;. The CPU simultaneously processes the blob image of part 3 in buffer &#34;y2&#34; to extract the principal axis parameters (xc1,yc1,t1). The parallel processor, at the same time, rotates the image of part 2 in buffer &#34;x3&#34; by the parameters (xc2,yc2,-t2). The image of part 1 in buffer &#34;x2&#34; is vector correlated to the character templates, to create a correlated image in buffer &#34;w&#34;. When all these tasks are completed, the following data are transferred. The image of part 5 in buffer &#34;f&#34; is transferred to buffer &#34;a&#34;. The rotated image of part 2 in buffer &#34;x3&#34; is transferred to buffer &#34;x2&#34;. The segmented image of part 3 in buffer &#34;x4&#34; is transferred to buffer &#34;x3&#34; and the segmented image of part 2 in buffer &#34;x1&#34; is transferred to buffer &#34;x4&#34;. The principal axis parameters (xc1,yc1,t1) of part 3 are transferred to (xc2,yc2,t2). The blob image of part 4 in &#34;y1&#34; is transferred to buffer &#34;y2&#34;. Also the correlated character image in buffer &#34;w&#34; is transferred to buffer &#34;v&#34;. 
     Finally part 6 arrives under the camera 24 and, the camera starts taking a picture of part 6 in buffer &#34;f&#34;. Simultaneously, the parallel processor 28 starts segmenting the character image of part 5 in buffer &#34;a&#34; into buffer &#34;x1&#34;. It then extracts the principal axis blob of part 5 into buffer &#34;y1&#34;. At the same time, the CPU 30 extracts the principal axis parameters 28 (xc1, yc1, t1) of part 4 from image &#34;y2&#34;. The parallel processor 28, simultaneously, rotates the image of part 3 in buffer &#34;x3&#34; by parameters (xc2,yc2,-t2). Also the parallel processor does the vector correlation on rotated character image of part 2 in buffer &#34;x2&#34; to extract the correlation image of part 2 into buffer &#34;w&#34;. The CPU also performs the analysis task, simultaneously, on the correlation image &#34;v&#34; of part 1 to create the recognized character arrays &#34;A&#34; and &#34;B&#34;. The two arrays correspond to the right side up and up side down correlation results mentioned before. When all these tasks are done, the intermediate data are transferred and the results are displayed in step 108. 
     It is clear from the above explanation and FIG. 9 that the &#34;concurrency&#34; for the rotation invariant OCR is more complex and utilizes the processing capability of the AISI image processors to their maximum capability. However, the &#34;concurrency&#34;]model adopted her does not interfere with intermediate processing tasks and accomplishes the same final results without wasting any processing power of the image processing machine. This gives us a very fast OCR technology that is also rotation invariant. 
     E. POSITION INVARIANT CHARACTER RECOGNITION 
     The position invariant character recognition method of the present invention adopts the same format as the rotation invariant OCR for both the standard method and the method under &#34;concurrency&#34;. The number of processing steps are same and also the sequence of processing steps. The difference between the two methods are the specific contents of some of the steps described below. Here we need to identify a mark or symbol in the part that forms a reference mark or &#34;fiducial&#34; for our recognition process. We shall first teach this mark and the characters in their nominal position. During run phase, the distance of this mark from its &#34;nominal&#34; position is computed. The image is then shifted to its &#34;nominal&#34; position to do the final recognition task. An illustration of the location invariant OCR method 110 is shown in FIG. 10. The location invariant OCR method consists of the following eight steps: 
     (1) acquire an image 112, 
     (2) segment an image 114, 
     (3) vector correlate the &#34;fiducial&#34; template 116, 
     (4) find the fiducial location and its displacement from its &#34;nominal&#34; position 118, 
     (5) shift the character image to its &#34;nominal&#34;position 120, 
     (6) vector correlate the character templates 122, 
     (7) analyze the correlation image 124, 
     (8) display the final results 126. 
     In more detail, the first step in this method 110 is the image acquisition step. This step is done by the camera 24. The image of the characters under the camera is stored in an image buffer called &#34;a&#34;. The acquired image is then processed by the parallel processor 28 with parallel processor memory 36. This step of image processing is called &#34;image segmentation&#34; and has been described in more detail under conventional OCR method in Section B. The segmentation step extracts the character image from the raw camera image and cleans it up to store it in a buffer called &#34;x&#34;. The segmented image is then correlated to the &#34;fiducial&#34; template to extract a correlated image of the &#34;fiducial&#34; in buffer &#34;y&#34;. The vector correlation is done by the parallel processor 28 with the parallel processor memory. The correlated image &#34;y&#34; is then processed by the CPU 30 to extract a location of the &#34;fiducial&#34;. The displacement &#34;(dx,dy)&#34; in both x and y directions of the &#34;fiducial&#34; shows its distance and direction from the &#34;nominal&#34; position. The &#34;nominal&#34; position is the position where the &#34;fiducial&#34; and the characters in the image were initially taught. During the run phase, the character recognition method has to know the distance of the &#34;fiducial&#34; from its taught or &#34;nominal&#34; position. Next we shift the character image &#34;y&#34; to its &#34;nominal&#34; position by displacing it by (-dx,-dy) in both x and y directions respectively. The displaced image is also stored in buffer &#34;x&#34;. This task is done by the parallel processor in parallel processing memory. The shifted image &#34;x&#34; of the segmented characters is then correlated to the character templates to extract the correlated image of the characters in buffer &#34;w&#34;. The vector correlation is again done by the parallel processor in parallel processing memory. The correlated image of characters in buffer &#34;w&#34; is then analyzed by the CPU to obtain the recognized characters in buffer &#34;A&#34;. The final result in array &#34;A&#34; and images &#34;a&#34;, &#34;x&#34; and &#34;y&#34; are displayed on the monitor 38. 
     F. CONCURRENCY IN POSITION INVARIANT OCR 
     The position invariant OCR method also involves several computational steps. These steps are performed by different processing units. The processing order of these steps are not same as the processing units performing these tasks. Thus, the process of overlapping these steps are as complicated as the rotation invariant OCR under &#34;concurrency&#34;. The eight steps involved in position invariant OCR are mentioned above in connection with FIG. 10. These steps can now be arranged by the processing units performing them. The camera performs the following steps: 
     (1) image acquisition 112. 
     The parallel processor 28 performs the following 4 steps: 
     (1) image segmentation, 
     (2) vector correlation with fiducial template 116, 
     (3) shifting the character image 120, 
     (4) vector correlation with character templates 122. 
     The CPU performs the following tasks: 
     (1) &#34;fiducial&#34; displacement data computation 118, 
     (2) analysis of correlation data 124. 
     The Display Monitor 38 performs the following task: (1) display final results 126. The tasks mentioned above have to be arranged in an appropriate order so that they are performed in the right sequence (i.e. steps 112-126 and the different processing units overlap their tasks. The intermediate data has to be handled appropriately in order to achieve the two goals mentioned above. 
     The position invariant OCR under &#34;concurrency&#34; is illustrated in FIG. 11 by a flow chart 128. The position invariant OCR method will be explained with the example of a moving line shown in FIG. 6. As part 1 comes under the camera, a photoswitch triggers the camera to take a picture of part 1 in buffer &#34;f&#34; (step 129). At the end of the acquisition process, the image of part 1 in buffer &#34;f&#34; is transferred to buffer &#34;a&#34;. 
     When part 2 triggers the camera, the camera starts taking a picture of part 2 in buffer &#34;f&#34;. Simultaneously, the parallel processor starts segmenting the image of part 1 in buffer &#34;a&#34; to extract a segmented character image in buffer &#34;x1&#34;  (step 132). The parallel processor then goes on to correlate the template of the &#34;fiducial&#34; with image &#34;x1&#34; to create a correlated image in buffer &#34;y1&#34; (step 134). When these tasks finish, the image of part 2 in buffer &#34;f&#34; is transferred to buffer &#34;a&#34; and, the segmented image of part 1 in buffer &#34;x1&#34; is transferred to buffer &#34;x2&#34; and the correlated fiducial image in buffer &#34;y1&#34; is transferred to buffer &#34;y2&#34;. 
     Next, part 3 triggers the camera to start taking its picture in buffer &#34;f&#34;. While the camera takes a picture, the parallel processor, segments the image of part 2 in buffer &#34;a&#34; to extract a segmented image of part 2 in buffer &#34;x1&#34;, (step 132). It then correlates the fiducial template to create a correlated image of part 2 in buffer &#34;y1&#34;, (step 134). Simultaneously, the CPU 30 computes the amount of shift &#34;(dx1,dy1)&#34; in x and y directions for part 1 from the correlated fiducial image of part 1 in buffer &#34;y2&#34;. At the end of the camera, parallel processor and the CPU tasks, the image of part 3 in buffer &#34;f&#34; is transferred to buffer &#34;a&#34;. The segmented image of part 1 in buffer &#34;x2&#34; is transferred to buffer &#34;x3&#34;. The segmented image of part 2 in buffer &#34;x1&#34; is transferred to buffer &#34;x2&#34;. The fiducial correlated image of part 2 in buffer &#34;y1&#34; is transferred to buffer &#34;y2&#34;. Also, the shift parameters (dx1,dy1) in CPU memory are transferred to variables (dx2,dy2). 
     As part 4 arrives under the camera, the camera starts taking a picture of part 4 in buffer &#34;f&#34;. The image of part 3 in buffer &#34;a&#34; is segmented by the parallel processor to extract an image in buffer &#34;x1&#34;, (step 132). This image is then vector correlated with the fiducial template to extract a correlated image of part 3 in buffer &#34;y1&#34;, (step 134). Simultaneously, the CPU computes the shift parameters (dx1,dy1) of part 2 in CPU memory, (step 138). Also, at the same time, the parallel processor shifts the segmented image of part 1 in buffer &#34;x1&#34; by (-dx2,-dy2) to place it at its &#34;nominal&#34; position, (step 130). The parallel processor then vector correlates the character templates with the shifted image of part 1 to create a character correlated image of part 1 (step 136). At the end of all these tasks, the image of part 4 in buffer &#34;f&#34;is transferred to buffer &#34;a&#34; (step 146). The segmented image of part 1 in buffer &#34;x3&#34; is moved to buffer &#34;x4&#34;. The segmented image of part 2 in buffer &#34;x2&#34; is moved to buffer &#34;x3&#34;. The segmented image of part 3 in buffer &#34;x1&#34; is moved to buffer &#34;x2&#34;. Also, the fiducial correlated image of part 3 in buffer &#34;y1&#34; is moved to buffer &#34;y2&#34;. The shift parameters (dx1,dy1) of part 2 are moved to variables (dx2,dy2). 
     Next, part 5 triggers the camera to start taking its picture in buffer &#34;f&#34;. Simultaneously, the parallel processor starts segmenting the image of part 4 in buffer &#34;a&#34; to extract a segmented image in buffer &#34;x1&#34;, (step 132). It then vector correlates the fiducial template with &#34;x1&#34; to create a correlated image in buffer &#34;y1&#34;, (step 134). At the same time, the CPU extracts the shift parameters of part 3 in variables (dx1,dy1) from the correlated image in buffer &#34;y2&#34;, (step 138). Simultaneously, the parallel processor shifts the segmented image of part 2 in buffer &#34;x3&#34; by parameters (-dx2,-dy2) to place it at its &#34;nominal&#34; position, (step 130). Also, at the same time, the parallel processor vector correlates the character templates with the segmented image of part 1 in buffer &#34;x4&#34; to create a character correlated image of part 1 in buffer &#34;w&#34;, (step 136). At the end of the all these tasks the data are transferred. The image of part 5 in buffer &#34;f&#34; is transferred to buffer &#34;a&#34; (step 146). The shifted and segmented image of part 2 in buffer &#34;x3&#34;is transferred to buffer &#34;x4&#34;. The segmented image &#34;x2&#34; of part 3 is transferred to buffer &#34;x3&#34;. The segmented image &#34;x1&#34; of part 4 is moved to buffer &#34;x2&#34;. The fiducial correlated image of part 4 in buffer &#34;y1&#34; is moved to buffer &#34;y2&#34;. The shift data (dx1,dy1) of part 3 is moved to (dx2,dy2) in CPU memory. Also the character correlated image w of part 1 is transferred to buffer &#34;v&#34;. 
     When part 6 triggers the camera, the camera starts taking a picture of part 6 into buffer &#34;f&#34;. At the same time, the parallel processor starts segmenting the image of part 5 in buffer &#34;a&#34; to extract a character image of part 5 in buffer &#34;x1&#34;, (step 132). This image is then correlated to the fiducial template to get a fiducial correlated image of part 5 in buffer &#34;y1&#34;, (step 134). Simultaneously, the CPU extracts the shift parameters of part 4 from image &#34;y2&#34; into variables (dx1,dy1), (step 138). The parallel processor then shifts the segmented image of part 3 in buffer &#34;x3&#34; by parameters (-dx2,-dy2) into buffer &#34;x3&#34;, (step 130). Also, the parallel processor vector correlates the character templates to the image of part 2 in buffer &#34;x4&#34; to create a character correlated image in buffer &#34;w&#34;. Simultaneously, the CPU analyzes the character correlated image of part 1 in buffer &#34;v&#34; to extract the recognized characters into array &#34;A&#34;, (step 140). At the end of all these tasks, the data is transferred and the results of part 1 in array &#34;A&#34; are displayed, (step 144). 
     G. ROTATION AND POSITION INVARIANT OCR 
     The rotation invariant OCR and position invariant OCR methods described above are of great importance to many manufacturing environments. In spite of their extensive applicability, there are many occasions where both these methods are required in conjunction to achieve correct final results. For example where characters can appear in any given orientation and position. Here, we have to first rotate the image so that the character lines appear horizontal across the image. We then need to locate a special character or &#34;fiducial&#34; to determine the location of the two strings in the image. We next place two windows on the image to separate out the characters. In this method we need to combine the eight steps (described before) involved in each method appropriately, so that correct final results can be achieved. A flow chart 148 of the combined rotation and position invariant OCR method is shown FIG. 12. This flow chart 148 shows that the combined method of OCR has eleven steps described below: 
     (1) acquire an image with the camera 150, 
     (2) segment the image with the parallel processor 152, 
     (3) extract the principle axis blob image with the parallel processor 154, 
     (4) compute principle axis parameters from the blob in CPU 156, 
     (5) rotate the segmented character image in the parallel processor 158, 
     (6) vector correlate the rotated image with the &#34;fiducial&#34; template in the parallel processor 160, 
     (7) find the &#34;fiducial&#34; location and its displacement from &#34;nominal&#34; position 162, 
     (8) shift the character image to its &#34;nominal&#34;position 164, 
     (9) vector correlate the character templates 166, 
     (10) analyze the correlated image 168, 
     (11) display the final results 170. 
     A detailed description of the individual steps are shown below. 
     FIG. 12 illustrates a flow chart 148 of the individual steps in the rotation and position invariant OCR with intermediate buffer names. The first step is the image acquisition step where, the camera takes a picture of the characters in an image buffer called &#34;a&#34;. This acquired image is then processed by the parallel processor in order to segment the characters out of the raw camera image (step 152). The image processing functions available in the AISI software functions library are used to for this purpose. Examples of some of these functions utilized for this step are provided in Section B of the conventional character recognition method. The final processed image is placed in buffer &#34;x&#34;. Next, the parallel processor is used to extract a blob image from the segmented image &#34;x&#34; or the original camera image &#34;a&#34; (step 154). This blob represents the orientation and position of the characters in the image. Here we also use the image processing functions available in the AISI image processor. The final blob image is place in buffer &#34;y&#34; and the orientation and position parameters of the blob (step 156). The principal axis and its parameters are extracted are &#34;(xc, yc)&#34; for the x and y coordinates of the centroid and &#34;t&#34; for the orientation of the principal axis. After the computation of the principal axis parameters (xc, yc, t), we rotate the segmented character image in buffer &#34;x&#34; by the angle &#34;-t&#34; about the centroid (xc, yc) (step 158). As illustrated in FIG. 7 and explained in Section C, the image of the characters, after rotation can either be oriented right side up or up side down. The final image after rotation is also placed in image buffer &#34;x&#34;. 
     The above steps rotate the character string so that it is oriented horizontally across the image. As mentioned before, the characters can either be oriented right side up or up side down, depending on the amount of rotation in the original segmented image &#34;x&#34;. We next, vector correlate the &#34;fiducial&#34;template with the rotated and segmented character image in buffer &#34;x&#34; (step 160). The &#34;fiducial&#34; template is correlated in both the right side up and up side down positions of the template. We will assume here that the fiducial is chosen such that it is not a symmetric character or symbol is chosen as the &#34;fiducial&#34;such that it does not look the same in its right side up or up side down positions. An example of such a character is &#34;F&#34; or &#34;G&#34; or &#34;Y&#34;. With this choice of the &#34;fiducial&#34; character, the template will only correlate in one direction, i.e. either right side up or up side down. The correlated fiducial image is stored in buffer &#34;z&#34;. After correlating the fiducial template, we extract the location of the fiducial in the image from the fiducial correlated image in buffer &#34;z&#34; (step 162). This process is done in the CPU 30. Once the location of the &#34;fiducial&#34; is determined, its displacement (dx, dy) in x and y directions from the &#34;nominal&#34; position is stored in CPU memory. Next, we shift the segmented and rotated character image memory. Next, we shift the segmented and rotated character image in buffer &#34;x&#34; by the displacement (-dx, -dy) in order to place it back at its &#34;nominal&#34; position (step 164). This shifting process is done by the parallel processor 28 and the final image is stored in buffer &#34;x&#34;. The segmented, rotated and shifted image in buffer &#34;x&#34; is then vector correlated with the character templates in both right side up and up side down positions of the character templates (step (166). The two correlated images are stored in buffer &#34;w&#34;. This correlation step is performed by the parallel processor 28. The next process is the analysis step performed by the CPU 30 on the correlated images in buffer &#34;w&#34; (step 168). The analysis steps extracts the recognized characters for the right side up and up side down correlations in buffer &#34;w&#34; into arrays &#34;A&#34; and &#34;B&#34; respectively. As mentioned in section C (rotation invariant OCR method), a preset criteria, such as a predefined character string is used to determine the final set of recognized characters. The final step 170 is the display of the final results. 
     H. CONCURRENCY UNDER ROTATION AND POSITION INVARIANT OCR 
     FIG. 13 illustrates a flow chart 172 for rotation and position invariant OCR method under &#34;concurrency&#34; with intermediate buffer names. Here the &#34;concurrency&#34; model is even more complex than either the rotation invariant or position invariant methods. In both the rotation and position invariant OCR there is seven levels of &#34;concurrency&#34; for eleven different steps. The eleven steps described before are distributed between four processors: the camera 24, the parallel processors 28 and the CPU 30 and the Display Monitor 38. The distribution of tasks by processors is mentioned below. The camera 24 performs the following task: 
     (1) image acquisition 174. 
     The parallel processor 28 performs the following tasks: 
     (1) image segmentation 178. 
     (2) principal axis blob image extraction 180, 
     (3) vector correlation with &#34;fiducial&#34; template 182, 
     (4) image rotation 176, 
     (5) image shifting 184, 
     (6) vector correlation with character templates 186. 
     The CPU 30 performs the following tasks: 
     (1) principal axis parameter extraction 188, 
     (2) &#34;fiducial&#34; location extraction 190, 
     (3) analysis of character correlation data 192. 
     The Display Monitor 38 performs the following task: (1) display of final results 196. 
     The flow chart 172 in FIG. 13 executes the steps above in the correct sequence and transfers the intermediate data so that the correct final results are obtained. 
     The process of &#34;concurrency&#34; for the combined rotation and position invariant method can be illustrated by the example of a manufacturing line shown in FIG. 5. As part 1 comes under the camera, the camera starts taking a picture of part 1 in buffer &#34;f&#34; (step 174). At the end of this picture taking process, the image data of part 2 under the camera, the camera starts acquiring the picture of part 2 in buffer &#34;f&#34;. Simultaneously, the parallel processor 28 starts segmenting the picture of part 1 in buffer &#34;a&#34; to extract a segmented image of part 1 in buffer &#34;x1&#34; (step 118) and, then continues to extract the principal axis blob of part 1 from the image in buffer &#34;x&#34;into a buffer &#34;y1&#34; (step 180). At the end of these processes, the segmented image of part 1 in buffer &#34;x1&#34; is transferred to buffer &#34;x2&#34; and, the blob image of part 1 in buffer &#34;y1&#34; is move into buffer &#34;y2&#34;. 
     Next, part 3 arrives under the camera. The camera starts taking a picture of part 3 in buffer &#34;f&#34; (step 174). Simultaneously the parallel processor, starts segmenting the image of part 2 in buffer &#34;a&#34; into buffer &#34;x1&#34; (step 178) and, continues to extract the principal axis blob of part 2 into buffer &#34;y1&#34; (step 180). At the same time, the CPU 30 extracts the principal axis parameters (x and y centroid and the orientation angle) of part 1 in buffer &#34;y2&#34; into variables (xc1, yc1, t1) (step 188). At the end of these tasks, the image of part 3 in buffer &#34;f&#34; is transferred to buffer &#34;a&#34; (step 198). The segmented image of part 1 in buffer &#34;x2&#34; is moved into buffer &#34;x3&#34;. The segmented image of part 2 in buffer &#34;x1&#34; is moved into buffer &#34;x2&#34;. The principal axis blob image of part 2 in buffer &#34;y1&#34; is moved into buffer &#34;y2&#34;. The principal axis parameters (xc1, yc1, t1) of part 1 are moved into variables (xc2, yc2, t2). 
     When part 4 arrives under the camera, the camera starts taking a picture of part 4 into buffer &#34;f&#34; (step 174). Simultaneously, the parallel processor segments the image of part 3 in buffer &#34;a&#34; into buffer &#34;x1&#34; and, then extracts the principal axis blob of part 3 into buffer &#34;y1&#34; (step 180). The CPU, at the same time, extracts the principal axis blob parameters (sc1, yc1, t1) from the image of part 2 in buffer &#34;y2&#34; (step 188). The parallel processor then rotates the image of part 1 in buffer &#34;x3&#34; by the parameters (xc2, yc2, -t2) into the same buffer &#34;x3&#34; (step 176). At the end of these tasks, the data are transferred (step 198). The image of part 4 in buffer &#34;f&#34; is vector correlated with the fiducial template and the results--, and after &#34;x4&#34; insert--(step 182) moved into buffer &#34;a&#34;. The rotated image of part 1 in buffer &#34;x3&#34; is moved into buffer &#34;x4&#34;. The segmented image of part 3 in buffer &#34;x1&#34; is moved into buffer &#34;x2&#34; . The principal axis blob image of part 3 in buffer &#34;y1&#34; is moved into buffer &#34;y2&#34;. The rotation parameters (xc1, yc1, t1) of part 2 are moved into variables (xc2, yc2, t2). 
     Next, part 5 arrives under the camera. The camera starts taking a picture of part 5 into buffer &#34;f&#34;. Simultaneously, the parallel processor segments the image of part in buffer &#34;a&#34; into buffer &#34;x1&#34; step 178 and, then extracts the principal axis blob image of part 4 into buffer &#34;y1&#34; (step 180). At the same time, the CPU extracts the principal axis parameters of part 3 from the image &#34;y2&#34; into variables (xc1, yc1, t1) (step 188). The image of part 2 in buffer &#34;x3&#34; is rotated by parameters (xc2, yc2, -t2) into buffer &#34;x3&#34; (step 176). The parallel processor then vector correlates the fiducial template to the image of part 1 in buffer &#34;x4&#34; to produce a fiducial correlation image into buffer &#34;x4&#34; to produce a fiducial correlation image into buffer &#34;z1&#34; (step 182). When all these tasks are done the following data are transferred (step 198): 
     image &#34;f&#34; of part 5 to image &#34;a&#34;, 
     image &#34;x4&#34; of part 1 to image &#34;x5&#34;, 
     image &#34;x3&#34; of part 2 to image &#34;x4&#34;, 
     image &#34;x2&#34; of part 3 to image &#34;x3&#34;, 
     image &#34;x1&#34; of part 4 to image &#34;x2&#34;, 
     image &#34;z1&#34; of part 1 to image &#34;z2&#34;, 
     image &#34;y1&#34; of part 4 to image &#34;y2&#34;, 
     rotation data (xc1, xc2, t2) of part 3 to (xc2, yc2,t2). 
     When part 6 comes under the camera, the camera starts taking a picture of part 6 into buffer &#34;f&#34; (step 174). Simultaneously, the parallel processor extracts the segmented image of part 5 into buffer &#34;x1&#34; (step 178) and, continues to extract the principal axis blob image of part 5 into buffer &#34;y1&#34;(step 180). Simultaneously, the CPU extracts the principal axis parameters (xc2, yc2, -t2) into buffer &#34;x3&#34; by then vector correlates the fiducial template with the image of part 2 in buffer &#34;x4&#34; to extract the fiducial correlated image of part 2 into buffer &#34;z1&#34; (step 182). The CPU, at the same time, extracts the fiducial location parameters (dx1, dy1) of part 1 from the fiducial correlation image of part 1 in buffer &#34;z2&#34; (step 190). At the end of all these tasks the following data are transferred (step 198): 
     image &#34;f&#34; of part 6 to image &#34;a&#34;, 
     image &#34;x5&#34; of part 1 to image &#34;x6&#34;, 
     image &#34;x4&#34; of part 2 to image &#34;x5&#34;, 
     image &#34;x3&#34; of part 3 to image &#34;x4&#34;, 
     image &#34;x2&#34; of part 4 to image &#34;x3&#34;, 
     image &#34;x1&#34; of part 5 to image &#34;x2&#34;, 
     image &#34;z1&#34; of part 2 to image &#34;z2&#34;, 
     image &#34;y1&#34; of part 5 to image &#34;y2&#34;, 
     rotation data (xc1, xc2, t2) of part 4 to (xc2, yc2, t2), 
     shift data (dx1, dy1) of part 1 to (dx2, dy2). 
     Next, part 7 comes by and, the camera starts taking a picture of part 7 in buffer &#34;f&#34; (step 174). The parallel processor, at the same time, segments the picture of part 6 in buffer &#34;a&#34; into buffer &#34;x1&#34; (step 178) and, continues to extract the principal axis blob image of part 6 into buffer &#34;y1&#34; (step 180). Simultaneously, the CPU extracts the principal axis parameters of part 5 from image &#34;y2&#34; into variables (xc1, yc1,t1) (step 188). The parallel processor then rotates the image of (xc2, yc2, t2) (step 176). The parallel processor then vector correlates the fiducial template with the image of part 3 in buffer &#34;x4&#34; to extract a fiducial correlated image of part 3 into buffer &#34;z1&#34; (step 182). The CPU simultaneously, extracts the shift parameters (dx1, dy1) of part 2 from image in buffer &#34;z2&#34;(190). The image of part 1 in buffer &#34;x6&#34; by the parallel processor (step 184). At the end of these tasks the following data are transferred (step 198): 
     image &#34;f&#34; of part 7 to image &#34;a&#34;, 
     image &#34;x6&#34; of part 1 to image &#34;x7&#34;, 
     image &#34;x5&#34; of part 2 to image &#34;x6&#34;, 
     image &#34;x4&#34; of part 3 to image &#34;x5&#34;, 
     image &#34;x3&#34; of part 4 to image &#34;x4&#34;, 
     image &#34;x2&#34; of part 5 to image &#34;x3&#34;, 
     image &#34;x1&#34; of part 6 to image &#34;x2&#34;, 
     image &#34;z1&#34; of part 3 to image &#34;z2&#34;, 
     image &#34;y1&#34; of part 6 to image &#34;y2&#34;, 
     rotation data (xc1, xc2, t2) of part 5 to (xc2, yc2, t2), 
     shift data (dx1, dy1) of part 2 to (dx2, dy2). 
     Next, part 8 comes under the camera. The camera starts taking a picture of part 8 into buffer &#34;f&#34; (step 174). Simultaneously, the parallel processor starts segmenting the image of part 7 into buffer &#34;x1&#34; (step 178) and continues to extract the principal axis blob image of part 7 into buffer &#34;y1&#34;(step 180). At the same time, the CPU starts extracting the principal axis parameters (xc1, yc1, t1) from image &#34;y2&#34; of part 6 (step 188). The parallel processor then rotates the image of part 5 in buffer &#34;x3&#34; by parameters (xc2, yc2, -t2) into buffer &#34;x3&#34; (step 176). The parallel processor then vector correlates the fiducial template with the segmented and rotated image of part 4 in buffer &#34;x4&#34; to create the fiducial correlated image of part 4 in buffer &#34;z1&#34; (step 182). The CPU, at the same time, extracts the shift parameters (dx1, dy1) of part 3 from the fiducial correlated image in buffer &#34;z2&#34; (step 190). The parallel processor then shifts the rotated and segmented image of part 2 in buffer &#34;x6&#34; by shift parameters (-dx2, -dy2) (step 184). The segmented, rotated and shifted image of part 1 in buffer &#34;x7&#34; is then vector correlated to the character templates to create a character correlated image in buffer &#34;w&#34; (step 186). At the end of these tasks the data are transferred as follows (step 198): 
     image &#34;f&#34; of part 8 to image &#34;a&#34;, 
     image &#34;x6&#34; of part 2 to image &#34;x7&#34;, 
     image &#34;x5&#34; of part 3 to image &#34;x6&#34;, 
     image &#34;x4&#34; of part 4 to image &#34;x5&#34;, 
     image &#34;x3&#34; of part 5 to image &#34;x4&#34;, 
     image &#34;x2&#34; of part 6 to image &#34;x3&#34;, 
     image &#34;x1&#34; of part 7 to image &#34;x2&#34;, 
     image &#34;z1&#34; of part 4 to image &#34;z2&#34;, 
     image &#34;y1&#34; of part 7 to image &#34;y2&#34;, 
     image &#34;w&#34; of part 1 to image &#34;v&#34;, 
     rotation data (xc1, xc2, t2) of part 6 to (xc2, yc2, t2), 
     shift data (dx1, dy1) of part 3 to (dx2, dy2). 
     Next, part 9 comes under the camera, and the camera starts taking a picture of part 9 into buffer &#34;f&#34; (step 174). Simultaneously, the parallel processor starts segmenting the image of part 8 in buffer &#34;a&#34; into buffer &#34;x1&#34; (step 178) and, continues to extract the principal axis blob image of part 8 into buffer &#34;y1&#34; (step 180). The CPU, at the same time, extracts the principal axis parameters of part 7 into variables (xc1, yc1, t1) from image &#34;y2&#34; (step 188). The parallel processor then rotates the image of part 6 in buffer &#34;x3&#34; by parameters (xc2, yc2, -t2) into buffer &#34;x3&#34; (step 176). The parallel processor then vector correlates the fiducial template with the image of part 5 in buffer &#34;x4&#34; to extract a fiducial correlated image of part 5 into buffer &#34;z1&#34; (step 182). Simultaneously, the CPU extracts the fiducial location parameters (dx1, dy1) from the fiducial correlated image &#34;z2&#34; of part 4 (step 190). The parallel processor then shifts the rotated image of part 3 in buffer &#34;x6&#34;by parameters (-dx2, - dy2) (step 184). The parallel processor then vector correlates the character templates with the segmented, rotated and shifted image of part 2 in buffer &#34;x7&#34;(step 186). The character correlated image of part 1 in buffer &#34;v&#34; is then analyzed by the CPU to extract the recognized character set &#34;A&#34; and &#34;B&#34; (step 192). The sets &#34;A&#34; and &#34;B&#34;correspond to the right side up and up side down correlations of the character templates. The final set of recognized characters can now be extracted by a preset criteria, such as, matching to a predefined string, as mentioned before. At the end of all these tasks the final results are displayed (step 196) and the data are transferred (step 198). 
     It will be appreciated that the AISI machine vision system is but one example of hardware available to implement the techniques of the present invention, and that other image processing systems, off the shelf, or custom made, may also be employed. Also, it should be noted that the techniques of the present invention may be used for recognition of other image features besides characters including, for example, symbols or visible defects in manufactured parts. From the foregoing it can be seen that the present invention provides an image processing system and method which can perform rotation and/or orientation invariant character recognition with a high degree of accuracy at very high speeds. Those skilled in the art can appreciate that other advantages can be obtained from the use of this invention and that modifications may be made without departing from the true spirit of the invention after studying the specification, drawings and following claims.