Marking inspection

engiAI · TEXT button
Recognition and verification of markings on cables, pipes, tapes, and packaging

The camera is positioned after the printer or laser marker. The engiAI system reads the printed text directly from the video stream: it extracts the text, which passes through the area in segments, compares it to a reference or list, saves each marking in a database, and then transmits the results over the network – to a web browser, in JSON format, and to a TCP controller.

1. The frame in the video where the text appears
2. Example phrase to be printed
3. Analysis The neural network processes each frame individually.
4. Conclusion "Recognized" or "Not Recognized" + database
~10 frames per second
Reading the area on the graphics card (CUDA)
RU + EN
Cyrillic, Latin, numbers, and symbols
0 training
The PaddleOCR model is ready to use immediately
HTTP + TCP
Browser, JSON, controller signal

How it works in practice

engiAI — TEXT: window next to the video
On the left is the video from the camera, and the blue frame indicates the recognition area. On the right is the TEXT window: the extracted area, green frames around the recognized words, and the line "Currently in the area".

The "TEXT" button is located in the top row of the main window "engiAI", next to the EXIT, CAMERA, TRIGGER, GENERAL MODELS, and COUNT buttons. It opens the "TEXT - marking recognition" window. The window can be kept open on top of the video: the area in the frame is visible as long as the window is open or recognition is enabled.

In the header of the window, there are three common elements for all tabs:

  • Text recognition is the main switch. As long as the checkbox is unchecked, text recognition will not function and will not burden the program.
  • ▭ Define the area – click and drag the frame over the video using any mouse button. While the window is open, you can drag the frame and remove it with the right mouse button without clicking. ✖ Clear the area – removes the area.
  • Right-hand side status: WAITING, RECORDING, PAUSE, or ON INPUT SIGNAL. Below this, the information displayed includes (GPU CUDA or processor), the number of frames per second being read, and the number of milliseconds taken for each frame.
Advice. Make the area visible to the camera wider than the visible part of the text and extend it along the direction of movement: the more signs that are in the area at the same time, the more reliable the frame capture will be. The camera should be positioned so that the marking is clearly visible, and the text should be sharp and free of blur.

The "marking" tab: the result and comparison with the sample

engiAI — TEXT: sample phrase
The "marking" tab: the sample phrase, a preview of the area, what is currently in the area, and what is being recorded. Below is a list of completed markings. Green lines indicate "Recognized", red lines indicate "Not recognized", and the parentheses contain the percentage of match with the sample.

This is the operator's working tab. At the top, you'll find the "Compare everything in the area with the sample" mode:

engiAI — TEXT: Markings
The "Sample" field – the phrase that should be printed; "Matching threshold, %" – the percentage at which a marking is considered correct. To the right is the live status.
1
Select the "Compare everything in the area with the sample" option and enter the entire phrase in the "Sample" field, for example, "Энергокомплект UTCAB-PV1-F 6 4 ТУ BY 300528652.036-2014 EAC 2026 Беларусь". Case, spaces, and visually similar Russian and Latin letters (T and T, U and Y, E and E) are not important.
2
Set the Matching threshold, %. 100 means an exact match; 65-80 allows for some inaccuracies in printing and reading.
3
Enable text recognition. If a long phrase doesn't fit entirely within the designated area, the program will capture it frame by frame as it moves through the area.

How the phrase analysis works on the conveyor:

  • The recording starts at the beginning of the phrase. If the recording is started in the middle of a text, the remainder of the text is skipped – the program waits for the next beginning.
  • Each frame is placed in its correct position within the sample, and each letter receives "votes" from all the frames where it is visible. The resulting text is the one that is read most frequently. Random errors in a single frame (e.g., a letter partially cut off or obscured by a glare) are corrected by neighboring frames – the more frames considered, the more "votes" there are, and the more accurate the final result.
  • The result is outputted as soon as the entire phrase has passed through the recognition zone, or if no new characters are detected for a period of time specified in the "Recognition" tab (meaning the conveyor has stopped and the zone is empty). After the result is output, the program waits for the beginning of the next phrase; phrases that follow each other closely are recorded separately.
  • The program determines the direction of movement itself or takes it from the "Source of text" setting.

While the phrase is being processed, on the right side of the screen, you can see that 40 out of 64 characters have been recognized, and in the "Recorded" line, you'll see the percentage of matches and the text that has been identified. After the processing is complete, either "73% - MATCHED" or "73% - NOT MATCHED" is displayed, or either "73% - MATCHED" or "73% - NOT MATCHED" is displayed. This result is also shown prominently on top of the video.

Without the "Compare everything within the sample area" checkbox, the process works sequentially: any marking is written from beginning to end according to the rules of the "Beginning and End" tab, and if necessary, it is compared to a reference list.

Below the list is the control:

  • All markings / Only the latest – how many to display here and send to the browser.
  • Date, time, and marking / Only marking – This specifies what information to send to the browser and save in JSON format.
  • ⚖ Compare — Compare each finished marking with the reference markings.
  • 💾 Save JSON, 📂 Upload JSON (uploaded markings become references), Clear list – removes rows from the screen and from the browser, but they remain in the database.

The "Reference" tab – a list of correct markings

engiAI — TEXT: References
The "Reference" tab: uploaded markings, "Compare with this" checkboxes, similarity threshold, and correction based on the standard.

The reference is needed when there are multiple different markings on the line (different sections, batches, customers), and each one needs to be found in the list.

  • 📂 Load JSON – a list from a file: our JSON, an array of strings, objects with a "text" field, or simply text per line in the marking. Duplicates are removed.
  • ✓ Mark all, ☐ Unmark all, checkmark next to each row – to compare with which references. ✖ Clear reference – to remove the list.
  • Similarity for matching, % – 100 means character-for-character match (excluding spaces and case). Lower values indicate errors in typing or reading.
  • Correct according to the standard, from … % – if the reading matches the reference, the marking is recorded using the standard text (the original reading remains in the log).

The "Beginning and End" tab – where one marking ends

engiAI — TEXT: Start and end
"Beginning and End" section: the text of the beginning and end, a pause after the end, the duration of the blank space, and the overall recording length.

These rules operate in a sequential merging mode (without a template), where the program determines the start and end of the marking:

  • Text Start – The recording begins when this text is read within the zone (e.g., UTCAB). Blank – from any text. If the text appears in a circular pattern, the second appearance of the text start marks the end of the marking. Include text start in marking – leave it in the result.
  • Pause after completion, ms – do not record anything after the marking is finished.
  • End of text – the marking ends when this text is read (e.g., BY or 2026).
  • Time to blank, ms – if there is no text in the area, the marking is complete and saved.
  • Maximum duration, with – for continuous writing without spaces: each interval of this length represents a separate marking. 0 – no limit.

Example: "UTCAB" start, "BY" end – the result will be "UTCAB … BY", and the program will wait for the next "UTCAB". The comparison is case-insensitive, and similar Russian and Latin letters are considered the same.

"Recognition" section: zone, turn, models

engiAI — TEXT: Recognition
"Recognition" section: precise coordinates of the zone, turn, and scaling, thresholds, waiting for new sample signs, conveyor direction, video card, allowed letters and signs, dictionary.
  • Area within the frame, pixels – X, Y, width, and height of the area within the original frame: to precisely define the area without using the mouse.
  • Rotating the text within the zone – This refers to rotating the zone itself so that the text appears straight. The text flows from top to bottom ("90° counter-clockwise") or from bottom to top ("90° clockwise"). You can rotate the video itself on the "Video" tab ("Rotate video").
  • Increasing the size – small text is easier to read if the area is enlarged; "Auto" automatically adjusts the size.
  • Least Confidence, % – lines with the lowest confidence scores are discarded (e.g., blurry areas, letter edges).
  • The shortest marking length, number of characters – shorter results are not saved.
  • Sample: No new characters detected, MS - waiting for result - How long to wait if no new characters are detected (conveyor stopped, zone empty, text unreadable)? Once the result is available, a new analysis begins.
  • Where the text originates – from which side of the zone the new text appears. "Auto" determines this based on the frames, and using the "paste" function is more reliable.
  • Using a graphics card (GPU)— with NVIDIA and CUDA, the reading speed is significantly faster.
  • Letters and Symbols – what can be in the marking: English and Russian words, only English words, or any symbols; numbers and spaces – always, symbols (e.g., period, hyphen, backslash, number) are marked with checkmarks. The model selects a symbol only from the allowed ones – extraneous symbols do not appear, and similar ones are recognized more accurately.
  • Replace words based on a dictionary – the recognized word (3 or more letters, not a number or code), which is similar to a word from the dictionary to at least a specified percentage, is replaced with the correct word. The dictionary contains its own words (one word per line), and, optionally, words from a reference dictionary.

Below, on this tab, you can choose from the following models: "Line Search" (v3 - fast, v5 server - more accurate for graphics cards) and "Text Reading" (Cyrillic, Latin, and numbers; only Latin and numbers; Latin for European languages; precise server model; or two models simultaneously - both read the line, and the more reliable option is chosen). The missing model can be downloaded using the "⬇ Download" button. The "⚖ Compare models in the current zone" button runs the latest zone data through all the options, allowing you to immediately see which model reads your marking most accurately and how many milliseconds it takes.

No training is required for the model. The recognition system is based on PaddleOCR and can read Latin, Cyrillic, and numbers immediately after installation. Configuration involves specifying the region, rotation, and a list of allowed characters.

"Database" section: all markings are stored here.

engiAI — TEXT: Database
"Database" section: the number of markings stored, export to JSON, import of the export as a reference, and cleaning.

Each recognized marking is stored in the program's database, along with the date, time, camera, text, and comparison result – regardless of what is displayed in the on-screen list.

  • 📤 Export the database (JSON) – save all marking data in a file for reporting or transfer to a record-keeping system.
  • 📥 Download the database (marking → reference) – Only the "marking" texts are extracted from the export, and these become the "reference" texts. This verified change can then be used as a model for future changes.
  • 🗑 Clear the database – delete all entries.

The "Network" tab – the result in the browser and in JSON format.

engiAI — TEXT: Network
The "Network" tab: built-in HTTP server, addresses for connecting via all PC network adapters, and a list of API addresses.

Check the box Send data over the network – the engiAI application will launch an HTTP server (default port 8096). Any computer or tablet on the network opens a page with marking, comparison, and reference using a regular browser; no installation is required. The 📋 Copy and 🌐 Open in browser buttons retrieve the address from the list.

AddressWhat is being sent
/page: marking, comparison, reference, JSON
/api/marksmarking – either all or the most recent, with or without a date (as selected in the window)
/api/marks?show=last&format=textthe most recent marking in plain text
/api/lastthe most recent marking
/api/statethe current status and text in the zone
/api/refsreference; POST /api/refs — upload reference (JSON)
/api/exportthe entire marking database

When you first start Windows Firewall, it may ask for permission to allow access for engiAI – grant access to the necessary networks.

The "Input" tab – a screenshot triggered by the controller's signal

engiAI — TEXT: Input
"Input" Tab: TCP server for signal from PLC or sensor – network, port, signal value, response to client, and "Snapshot Now" check.

When the product arrives in front of the camera upon receiving a signal (sensor, PLC, robot), mark Recognize by input signal (TCP). The engiAI system opens the TCP server; each signal triggers a single image capture of the area: the text is recognized, compared, and saved to the database, just as it would be in continuous mode.

  • Network – on which network adapter to expect the signal ("All networks" – on any); you can manually enter the IP address. Port – by default 8097.
  • Signal – what to consider as the command. By default, 1: either the text ("1", "1\r\n") or the byte 0x01.
  • Responding to the client with recognized text – the response includes a string with marking, and when comparing, it includes either OK or NG separated by a tab; NO TEXT – the text was not found, ERROR … – there is no area or frame.
  • 📸 Snapshot now (verification) – This is equivalent to a signal, but triggered from a button. It can be verified without a controller using the TCP-UDP (client) program: address, port, value "1", "Send".

Simultaneous login and continuous recognition: if "Text Recognition" is checked, the program continues to monitor the conveyor, and for each signal, it also takes a snapshot.

Quick setup in 5 minutes

1
Click TEXT, then ▭ Select Area and drag the frame along the text in the video.
2
On the "Recognition" tab, select the orientation to make the text in the preview upright, and use a zoom of ×2–×4 for small fonts and the direction of conveyor movement.
3
On the "marking" tab, select "Compare everything in the area with the sample", enter the phrase and threshold.
4
Enable Text Recognition. Each phrase that is processed will appear in the list as a green ("Recognized") or red ("Not recognized") line.
5
If necessary, enable "Network" for the browser and JSON, and "Input" for the signal from the controller.