In Heroes of Might and Magic: Olden Era, Arena players choose Heroes, abilities, equipment and Creatures before a battle. Many choice cards already print a name beside their illustration. If recognizing the illustration is difficult, why not read the name?
That is the idea behind Experiment B08. It uses optical character recognition (OCR)—software that reads text pixels—then looks the result up in the game’s bilingual reference dictionary. The output is the literal text, an English and Chinese name, and a canonical identity or an unresolved suggestion. It is not a newly trained visual classifier.

Figure 1. A Creature-selection screen. Names and illustrations occupy different rectangles. The program reads each title; the illustration is shown for a person to verify the association.
flowchart LR
A[Known scene and screenshot] --> B[Select fixed title and artwork regions]
B --> C[Read title with local OCR]
C --> D[Normalize spelling and rank prefix]
D --> E[Look up typed names and aliases]
E --> F[Exact unique match or unresolved]
F --> G[Human reviews identity and image validity]
Figure 2. The title chooses the proposed identity. The artwork remains separate evidence. An exact text match does not certify that the artwork is usable.
The original Creature run maps 1,218 of 1,221 titles to dictionary entries. A later five-scene demonstration maps 61 of 64 titles. These are mapping counts, not measured recognition accuracy: the outputs have not received a complete independent human verification.
1. One title, from pixels to a name
Consider this actual card from the demonstration:
| Artwork crop | Title strip read by OCR |
|---|---|
![]() |
| Step | Recorded value |
|---|---|
| Literal OCR | 火 凤 凰 |
| Normalized lookup | 火凤凰 |
| Existing alias match | 火凤凰 |
| Canonical Chinese / English | 烈焰凤凰 / Flaming Phoenix |
| Canonical ID | creature:phoenix_upg |
| Human verification / crop validity | Not verified / not assessed |
The English name is looked up, not translated by a language model. An alias connects the on-screen spelling to an existing entry with its names and artwork. This matters because game versions and local reference data can use different Chinese translations.
Different names for the same entity are aliases. A base creature and its upgrade are different identities, even if the report groups them into the same family. A name resolver must not erase that distinction.
2. What the algorithm knows
This is a deliberately narrow method. The input includes a scene assignment, such as Creature selection, and a configured layout. B08 does not determine the scene itself. A wrong scene assignment can make it read the wrong part of the screenshot.
The evaluated five-scene pilot handles Hero, Main Skill, Subskill, Artifact and Creature choices. A Subskill page supplies four title targets: the parent Main Skill plus three individual Subskills. It does not demonstrate Spell or Attribute OCR, and it does not read battlefield units without visible name titles.
The pipeline does the following:
- Scale fixed title/artwork rectangles from a 1920×1080 layout to a supported 16:9 screenshot. This is a position prior, not text detection over the whole screen.
- For Artifact, read a known button region. An exact recognized redraw label selects the newer layout; otherwise the classic layout is used. An unrecognized button can therefore lead to wrong geometry.
- Enlarge the title three times and read it using the installed Windows Chinese OCR engine. If no exact match is obtained, retry with contrast enhancement.
- Keep the literal OCR string. Separately normalize spaces, punctuation, character width, case and Traditional Chinese forms. For Main Skills, remove only recognized prefix ranks such as 高级 or 进阶.
- Search the expected target type’s canonical names and aliases. Assign a name only for a unique exact normalized match. Conflicting matches, missing text and fuzzy spellings remain unresolved.
For example, 高级秘术 becomes 秘术, an existing alias for 巫术 / Sorcery. A Subskill such as 召唤秘术 is looked up separately; the program must not remove an internal word and accidentally map it to its parent skill.
Fuzzy candidates are useful for a reviewer, but the nearest spelling is not necessarily the correct name. A displayed string-similarity score is also not a calibrated probability of correct identity.
3. What the demonstrations measured
The original Creature-only run covers 407 screenshots from 16 recordings. Its three slots produce 1,221 readings, of which 1,218 map to 138 distinct dictionary identities. Three remain unresolved. Repeated frames mean these are not 1,221 independent trials.
The five-scene pilot chooses four recording names per scene and the temporal-middle available frame in each selected recording. It contains 20 screenshots across four recordings. This sampling does not consult identity labels or OCR success, but these same examples subsequently informed layout and normalization fixes. They are development examples, not a held-out benchmark.
| Scene | Screenshots | Unique exact name/alias matches | Unresolved |
|---|---|---|---|
| Hero | 4 | 10 / 12 | 2 |
| Main Skill | 4 | 12 / 12 | 0 |
| Subskill page, including parent | 4 | 15 / 16 | 1 |
| Artifact | 4 | 12 / 12 | 0 |
| Creature | 4 | 12 / 12 | 0 |
| Total | 20 | 61 / 64 | 3 |
The first color pass maps 59 titles; five contrast retries add two. The three unresolved examples illustrate useful abstention:
- a Hero name is read as
拉·迭沃克, close to the existing拉·达沃克; - another is read as
约翰·药翰森, close to约翰·约翰森; 时间扭曲is readable but absent from the loaded Subskill aliases. A possible relation to时间跃迁 / Time Shiftrequires review, not automatic alias creation.
One title can be readable while a tooltip covers the icon beneath it. A faded image can also retain perfectly legible text. Name recovery and crop validity are independent decisions. Every pilot row therefore retains human_verified = false and crop_validity = NOT_ASSESSED.
4. Helping review without replacing the reviewer
After the demonstrations, an offline adapter was added at the user’s request. The OCR code stays inside B08; core Perception accepts a generic suggestion file and displays its evidence. It does not import B08 as a live runtime dependency.
For an unreviewed crop, the adapter checks that exactly one OCR artwork rectangle of the expected type overlaps its existing box sufficiently. The required intersection-over-union is at least 0.70: shared area divided by combined area. Only then can a unique exact name match become the first suggestion. Existing visual-model alternatives remain available.
| Separate assistance run | Eligible crops | Aligned exact title matches | Changed first suggestions |
|---|---|---|---|
| Original unreviewed pool | 2,928 | 2,497 | 849 |
| Newly ingested corpus | 2,329 | 1,524 | 433 |
These are counts of suggestions, not counts of corrected ground truth. Both runs preserved the 3,239 protected reviewed objects checked by their receipts. The new-corpus run also preserved all 2,329 crop-quality records, changed no boxes and promoted no ground truth.
The new-corpus adapter refuses 678 layout mismatches, rather than attaching a readable title to the wrong existing crop. It also retains visual suggestions for 65 missing-text, 46 unmatched and 16 fuzzy readings. Layout agreement is a major practical bottleneck, not merely OCR spelling.
The associated corpus contains 21 recordings, 4,248 newly extracted frames and 31,887 draft objects. Of those objects, 4,144 are fixed-layout crops and 27,743 are coarse battle/preparation detector candidates. These larger counts do not mean B08 identified every object—or that any of them automatically became training labels.
The generic extractor now retains actual Subskill choices, Spells and Attribute rewards. Those data paths are broader than the evaluated five-scene OCR pilot and the existing icon-review UI. Extraction coverage, OCR coverage and human-review coverage must be reported separately.
5. Do we cover every Creature?
There are three different answers to “is this creature included?”
| Coverage question | Current evidence |
|---|---|
| Is its name in the B08 dictionary? | 148 Creature IDs |
| Can the B04 classifier output its identity? | 141 Creature IDs; catalog examples were consumed |
| Does B04 have verified Creature gameplay supervision? | 17 identities / 28 gameplay crops |
| Is Creature performance measured on B04 Validation or Held-out? | No Creature crops in either |
The seven dictionary identities absent from B04’s output space are Avatar, Red Dragon, Gnat, Fire Larva, Lich Dragon, Obsidian Dragon and Ghoul. This is a comparison of the current local inventories, not a claim that the dictionary covers every future game version.
Having a class in a classifier means it can emit that label. It does not mean the model has learned that class’s battlefield appearance. Likewise, mapping many text titles does not measure visual recognition. The latest B04 results remain explicitly silent about Creature test accuracy.
6. What comes next?
The useful next step is to verify text-suggested Creature identities and retain separate usability decisions. These corrected selection images can seed a visual-recognition experiment. But draft artwork and battlefield sprites differ in pose, scale, animation, occlusion and effects; transfer must be measured on independently reviewed battlefield images.
The grid experiment suggests another future source of candidate regions: a cell and the projected cell above it. That is a proposal heuristic to test, not reliable localization already demonstrated. A grid can be misaligned, a sprite can extend beyond two cells, and a unit may be moving.
For live operation, an unresolved or faded frame could lead to wait and observe again, rather than a forced label or click. That requires a temporal state-and-action loop which is not implemented by this OCR experiment.
Reproducibility: run.py preserves the original Creature study; multiscene.py owns layout selection and title reading; src/multiscene_names.py owns typed lookup; refresh_review_suggestions.py is the offline review adapter; audit_creature_coverage.py compares dictionary, taxonomy and consumed examples. Run directories retain screenshots, title pixels, literal readings, dictionaries, settings and receipts. The evaluated runs are titles-v2-2026-09-03 and non-battle-pilot-v2-2026-09-03; later assistance runs are separate evidence, not replacements.
The central lesson is simple: use text to reduce manual identity work, but do not let readable text silently certify an image or an action.

Comments