The field guide — a field guide, with eight images read three ways
How OCR differs from vision
exhibit ninety-seven The field guide
Published 2026-10-28 (UTC)
A small (human) team and a fleet of AI agents.
OCR reads the characters in a picture and returns them. A vision model looks at a picture and tells you what is in it. The two get confused, because a vision model can also read, and sometimes reads well. This guide says in plain words what each does, where they overlap and where each fails, then shows it: eight images of our own, each read once by two OCR engines and put to one vision model under two prompts, every output quoted exactly as it came back. It demonstrates the kinds of mistake each reader makes, not how often it makes them.
ask about this page → assistant.strata2signal.com · in beta, still being tested
the short version
OCR, optical character recognition, finds the lines of text in an image and writes out their characters. It returns nothing else, and it cannot make up a word it did not see, though it can misread one. A vision model, more fully a vision-language model, turns the picture into tokens a language model can read, then writes prose about it: the objects, the scene, the style and, if asked, the text. Its answers are fluent and often right, but composed, not copied. On our notice with small print it quoted a footer line that is not on the page, differently under each of two prompts, at temperature 0; on the same page Tesseract dropped the small print and Indra OCR misread it believably. Only the vision model saw the cup in the picture with the cup, and only it called our leafy seadragon a "seahorse". Searching scanned pages wants OCR. Asking what a picture shows wants vision. Anything you will quote or cite wants checking against the page, whichever reader produced it: the vision model invented a line, and Indra OCR turned "3 February" into "2 February".
4,408 words, about 20 minutes to read.
The summary is this page’s own; what was dropped, and why, is in this page’s receipt file.
If you're new here: strata→signal is a small workshop that runs its own machines and writes up what it finds. This page follows our bench of one OCR model, Indra OCR, measured on RuleSage's rulebook pages, which read rulebook pages for RuleSage, our board-game rules helper, under bars frozen before the run. That page is a bench, with a verdict. This one is a field guide, with a demonstration: eight images, one run each, nothing scored.
The three readers, named
- Indra OCR 1.1.2, Datalab's small open OCR model, on a laptop CPU at the settings our bench registered, through the same wrapper and weights.
- Tesseract 5.5.0 with tessdata_best, the long-standing open-source OCR engine with its full-precision English model, on the same laptop CPU at its default page layout analysis.
- gemma4:26b, a Gemma 4 model with 26 billion parameters (a mixture of experts), in its 4-bit Q4_K_M build, served by ollama on our inference server, where it was already loaded and was not changed for this page. It is a vision-language model: it takes a picture and a question together and answers in prose. Each image went to it twice, with the same two prompts every time: read, "Read any text in this image exactly as written. If there is no text, say so."; and describe, "Describe what is in this image." Both ran at temperature 0, the setting that makes a model take its single most likely next token every time, so a repeat of the same request should give the same answer (this demo sent each once); it does not make two different prompts agree, and here they do not. Its thinking mode, in which it writes out reasoning before it answers, was off.
What OCR is and does
OCR, optical character recognition, has three steps and one job. It finds the lines of text in an image, drawing a box around each run of characters; it reads the characters inside each box, turning the pixels into a string; and it outputs the strings in a reading order worked out from where the boxes sit. Some engines, Indra among them, first decide which way up the page is.
Its strength is the exact character. An OCR engine has no idea what a menu or a caption is, so it has no opinion about what the text should say; it reports the glyphs, the drawn shapes of characters, it resolved, and when it is wrong it is wrong one character or one line at a time: a dropped line, a split word, a letter swapped for a look-alike. The first two show; the last can pass for the real thing. Its blind spots are everything that is not text, which it never reports; small print, with too few pixels per character; stylised lettering, far from the fonts it learned on; and rotation, where the lines are not where its detector expects them.
What a vision model is and does
A vision-language model is a language model with an image encoder in front of it. The encoder cuts the picture into patches and turns each into a token, the same unit of input the model uses for words; our page How a Vision Model Sees walks through that bridge. The language model then reads the image tokens and the prompt together and writes an answer, one token at a time, as it writes any answer.
Its strength is everything OCR cannot do: it names the objects in a scene, the medium and the style, the mood, the layout of a page, and it answers questions. Its blind spot is exactness. The answer is generated from what the image tokens suggest and from what the model knows about pictures like this one, so where the image tokens carry little, as they may for a line of 6-pixel type, what the model expects can fill the gap. The result reads like a transcription, has no gaps, and may contain words that are not on the page. It paraphrases, it invents plausible text, and nothing marks which words were seen and which were supplied.
Where they overlap
Vision-language models read text, and on clean text at a normal size they can read it exactly. On this page's menu card and caption, gemma4:26b returned every drawn word, in order, with the right punctuation, and on the script sign it returned every word, where Indra turned the ampersand into a letter and Tesseract broke the lines apart. So "which one reads better?" has no general answer here.
The difference is in the kind of failure. An OCR engine is a reader that cannot make up a word: it returns the characters it resolved, or nothing. A vision model is a describer that can: it returns the text that best fits what it saw and what it expects, and when those disagree, the output is fluent and wrong in the same breath. That is the whole guide in one sentence; the tables show it happening.
The demo: eight images, one run each
The images are ours. Three are plates from our print lab's style bake-off, the same leafy seadragon painted in oil, picture-book and cut-paper styles, each from a prompt that ends "no lettering, no text". Three are pages drawn for this demo in open-licence fonts, with words written for it: a menu card at a normal size; a notice whose last two lines are set at 7 and 6 pixels; a sign in a script face, turned 8 degrees. Two are mixed: the oil plate with a two-line caption across its foot, and a cup drawn from shapes beside one line of text. Everything ran on 2026-10-28 (UTC).
Each table is one image: the header row names the readers, and the row under it holds the image, then each reader's output exactly as it came back, trailing blank lines trimmed, with the drawn words it differs from noted beneath. Select an image for full size; "empty" means no characters came back. Five images are shown and three are described after them. Indra OCR's outputs, in the tables and quoted in the text, are the output of Datalab's model and are shared under that model's own licence, not this page's: see the licences.
A painting with no text
The oil plate. There is nothing to read, and all three readers said so: both OCR engines returned nothing, and the vision model, asked to read, said "There is no text in this image." Asked to describe, it named the medium and the weather correctly and called the animal a seahorse; the subject is a leafy seadragon, prompted as "a seahorse-like fish covered in leaf-shaped golden-green fronds", so it named the nearest common animal. Its last sentence, about resilience, is not in the picture. Neither OCR engine can say a word about any of this: OCR has no way to report a thing, only characters.
A clean menu card
Eight lines of serif type at a normal size, with five prices: the easy case. Tesseract returned every item and dropped every price: 6.50, 4.25, 9.75, 2.90 and 3.80 are nowhere in its output, and the two middle dots became hyphens. Indra read every item and price, each price on its own line under its item; its one slip is a lost space, "14· ask". The vision model, asked to read, returned all 47 drawn words; asked to describe, it reproduced the whole menu, prices included, as a bulleted list, though its "thin black border" is a dark-brown double frame. On clean text, the description is also a transcription.
A notice with small print
A heading, six lines of body text at 22 pixels, then two footer lines at 7 and 6 pixels. Both OCR engines, and the vision model asked to read, got the body text exact; the footer is where the three kinds of failure show at once.
Tesseract dropped both footer lines: its output ends at "unlabelled seed goes to the compost heap.", and the 34 words after it are absent, as our bench found on small print too. Indra read both lines and changed four details: two into something that looks right, "committee desk 45." for "committee desk 4B," and "dated 2 February" for "dated 3 February"; and two into visible garbles, "lostiproperty crate" for "lost-property crate" and "Tuesday eveninge." for "Tuesday evenings."
The vision model, asked to read, got the first footer line right apart from a dropped hyphen, then rewrote the start of the second line: "Queries submitted after 15 Tuesday evening." for "Queries: committee desk 4B, Tuesday evenings." Asked to describe, it invented the same line a second, different way, "Quotes submitted 4/8. Tuesday evening.", and changed a word in the normal-size body, "close the lamp" for "close the tap", which it had read correctly under the other prompt. Same image, same model, temperature 0, two prompts, two different footers, and neither answer marks any doubt.
Why the footer and not the body, this demo did not test. One reading, labelled as such: under the describe prompt the whole 900 by 1200 page, with the prompt, came to 288 input tokens, against 143 for a 512-pixel plate under the same prompt, so a 6-pixel line was a very small share of what it had to read from, and its expectation of what a footer says may have done the rest.
A painting with a caption
The oil plate again, with two lines drawn across its foot: "KELP DRIFTER AT LOW TIDE" and "plate 21 · study in oil". The picture is mostly painting, and Indra's orientation step decided it was upside down: its run record says rotation 180, and its output is the two caption lines read the wrong way up, "110 uj Apris : 12 areid" and "301 MOT IV 83180 d". That is the rotation failure, and OCR nonsense looks like this: visibly nonsense. Tesseract read both lines, with its usual hyphen for the dot. The vision model read both exactly. Asked to describe, it took the caption for the painting's title, still called the animal a seahorse, and lit the scene differently from the uncaptioned plate above: here "a hint of a setting or rising sun peeking through the clouds, casting a warm, golden light", there "a pale sun struggling to break through the overcast". Same painting, a band added.
A cup beside one line
A cup on a saucer with three lines of steam, drawn from plain shapes, and one sentence of serif type beside it. All three readers returned the sentence exactly, and the OCR engines returned nothing else, because there is nothing else they can return. The vision model's description is the only output on this page, from any reader, that mentions the cup. Its "coffee" is an inference from a brown fill; nothing in the image says what the drink is.
The three images not shown
The picture-book and cut-paper plates went as the oil plate did, with one difference: on the picture-book plate Indra returned a single character, "7", from a painting with no writing on it. That is an OCR phantom, the other way an OCR engine can be wrong: not a made-up word, but a mark mistaken for a glyph. The vision model called both plates a seahorse and named the cut-paper style exactly: "A digital, paper-cut style illustration of a seahorse amidst a stormy sea." The script sign, three lines in a flowing face turned 8 degrees, is the stylised-lettering case. Tesseract returned the words in pieces and out of order: "or Moth", "a room est. 1911", "Marrow", "te", "roasted crumpers all day". Indra read all three lines in order and turned the script ampersand into a letter: "Marrow e Moth". The vision model, asked to read, got every word and swapped one character, the middle dot for a bullet: "tea room • est. 1911"; asked to describe, it got the words right and the lettering wrong, calling pale-gold script "white" and finding two faces, "cursive" and "serif", where there is one.
Which to use when
- Searching scanned pages, or anything where the words must be findable later: OCR. It returns the characters it resolved and never composes a sentence, so most of its failures are gaps or garbles you can see; a misread digit is the exception, and here Indra's "2 February" for "3 February" looked right.
- Asking what a picture shows, what style it is in, or anything about an object: vision. OCR returned nothing about a seadragon, a storm, a cut-paper style or a cup.
- Exact numbers, quotations, dates, anything you will cite: never trust a vision model's transcription unchecked. Here it read a menu and a caption perfectly and invented a footer twice, and its output does not say which is which. Run OCR as well and compare, or check the words against the page by eye.
- Small print is hard for all three, and a page that is mostly picture can confuse an OCR engine's orientation step. If the small print or the caption matters, give the reader more pixels: a sharper scan, or a crop of that part alone.
What this cannot say
- How often any of this happens. Eight images, one run each. The page shows the kinds of failure, not their frequency, and licenses no claim about how these readers do in general.
- Anything about other readers or settings. One vision model at temperature 0 with one pair of prompts; two OCR engines at one set of settings each. Indra's upside-down call and the invented footer are what one run produced; a second run, with different settings, could differ.
- Anything about real scans. The pages were drawn clean, by a program, in named fonts; a photograph of a page adds blur, skew and lighting that none of these images has.
- Why the vision model invented the footer, beyond the one labelled reading above; and anything about speed: no timings were recorded, and none are claimed.
The images, the fonts and the licences
Every image is ours. The three plates were painted by FLUX.2 [klein] 4B (Apache 2.0) for our print lab's style bake-off. The five pages were drawn with Pillow 12.1.1 (MIT-CMU licence), with words written for this demo, in fonts under open licences: Liberation Serif and Liberation Sans (SIL Open Font License 1.1), DejaVu Sans and DejaVu Serif (the Bitstream Vera licence, with DejaVu's own changes in the public domain), Noto Sans (SIL Open Font License 1.1) and Z003 (AGPL-3 with the font exception). The full-size images are the files the readers read; the small copies in the tables are reduced from them.
The readers' licences: Indra OCR is Datalab's. Its code is under Apache-2.0; its weights, which we ran unmodified at revision a1283c4b of datalab-to/indra-ocr, are under the "AI PUBS OPEN RAIL-M LICENSE (MODIFIED)", version 0.1 of 2 March 2023 (a copy). That licence applies to the model's output as well, so every Indra OCR output on this page, in the tables and in the text, is shared under it and under no other licence; this page's own licence, CC BY 4.0, does not reach those outputs. They come from our own images, in an evaluation. Datalab has not reviewed or endorsed this page. Tesseract 5.5.0 and tessdata_best are under Apache-2.0. gemma4:26b, a Gemma 4 model, declares the Apache License, Version 2.0, in the model information our server reports; it was served by ollama (MIT License), and its outputs are quoted as the demo produced them. ONNX Runtime 1.31.0 (MIT) ran Indra on the CPU.
Who ran this, and thanks
Thanks to Datalab for Indra OCR, to the Tesseract project, to Google for the Gemma models and to the ollama project. The OCR engines ran on one laptop's CPU, each inside a sandbox with no network access; the vision model ran on our inference server, already loaded, its state read before and after the run and unchanged. A small human team asked the question and will approve this page; a fleet of AI agents made the pages, ran the readers, kept the records and drafted this page under that team's rulings.
Sources
Read 2026-10-28 (UTC) unless dated otherwise.
- Our records: the eight images and their provenance (how each was made, the drawn words, the fonts and their licences), every reader's raw output, the two run records and a diff of each output against the drawn words. No data kit ships, because the records name our machines; the images, prompts and settings on this page are what a repeat needs.
- Indra OCR, measured on RuleSage's rulebook pages, our bench of the same OCR model. https://research.strata2signal.com/indra-ocr-on-rulesage-rulebook-pages/
- Indra OCR, code and README: https://github.com/datalab-to/indra · weights, model card and licence: https://huggingface.co/datalab-to/indra-ocr
- Tesseract 5 and tessdata_best: https://github.com/tesseract-ocr/tesseract · https://github.com/tesseract-ocr/tessdata_best
- ollama (MIT License): https://github.com/ollama/ollama
- gemma4:26b: its licence as the model declares it, the Apache License, Version 2.0, read from our server's model information, 2026-10-28.
Eight images, one run each, 2026-10-28 (UTC): two OCR engines on a laptop CPU, one vision model on our inference server, every output quoted as returned. A demonstration, not a bench.
Corrections and later readings will be added below, each dated (UTC), saying in plain words what they show.