Summary

EntropiaOrme reads the game’s on-screen data with an OCR model to feed its analytics. By benchmarking 28 OCR models against images taken from the game’s UI, OpenOCR SVTRv2-mobile was chosen: an Apache-2.0 model of about 24 MB that runs at about 3.5 ms per image, with 100% effective accuracy for this task. The evaluation dataset, harness, and full per-model results across all the tested hardware are in the public benchmark repository.

Problem statement

Entropia Universe outputs most of the data needed to run analytics to a log file (chat.log). Some values, however, are only present in the game UI; therefore, this article covers a study on using OCR models to parse that data. Here are some examples of the type of data needing to be processed by OCR:

A skill panel from the game UI: each row shows a skill name and its point value.
Agility68
Aim158
Alertness2937
Analysis1
Anatomy7501
Angling1
Animal Lore1
Animal Taming1
Armor Technology101
Artefact Preservation1
Athletics3075
Attachments Technology1
Each panel is split into the cells the model reads: a skill name and its point value, one pair per row.

Methodology

The goal is finding the lightest model that reliably parses the game UI. To measure that tradeoff, 28 models ranging from small recognisers to large vision-language models were selected for testing.

The test set consists of 594 text and numeric images from the game UI with human-verified labels. For text values, the vocabulary is closed, which means that slightly misread names can be fuzzy matched (“Aglity” to “Agility”). Therefore, “effective accuracy” is reported (percentage of correct/recoverable predictions after postprocessing). Each model was also timed per image, with the reported latency measured on an Nvidia A1000 machine.1

Results

Accuracy and latency are plotted together below, with the desirable corner at the top left; the same figures are available as a table.

2 5 10 20 50 100 200 500 40% 50% 60% 70% 80% 90% 100% Latency: ms per image (Nvidia A1000, log scale) Effective accuracy Fast and accurate Lightweight CTC (Paddle / OpenOCR) OnnxTR recognisers MMOCR recognisers Transformer (TrOCR) Pipelines and classic Document / vision-language OpenOCR SVTRv2 100.0% eff. acc 56.9 ms/img (serial) RapidOCR 100.0% eff. acc 34.7 ms/img (serial) Surya 100.0% eff. acc 338.2 ms/img (serial) OnnxTR MASTER 96.8% eff. acc 143.7 ms/img (serial) OnnxTR SAR 96.1% eff. acc 124.7 ms/img (serial) OnnxTR VIPTR 95.8% eff. acc 73.6 ms/img (serial) PP-OCRv5 mobile 95.6% eff. acc 36.5 ms/img (serial) OnnxTR PARSeq 95.5% eff. acc 30.8 ms/img (serial) OnnxTR CRNN mobile 94.6% eff. acc 58.8 ms/img (serial) PP-OCRv5 latin mobile 91.1% eff. acc 33.3 ms/img (serial) PP-OCR 86.7% eff. acc 34.4 ms/img (serial) PP-OCRv5 en mobile 86.7% eff. acc 34.7 ms/img (serial) MMOCR RobustScanner 86.0% eff. acc 113.9 ms/img (serial) Tesseract 84.0% eff. acc 83.7 ms/img (serial) OnnxTR ViTSTR 83.5% eff. acc 15.3 ms/img (serial) PP-OCRv5 server 81.8% eff. acc 93.8 ms/img (serial) EasyOCR 71.0% eff. acc 17.3 ms/img (serial) Florence-2 large 65.0% eff. acc 341.7 ms/img (serial) TrOCR 56.7% eff. acc 123.2 ms/img (serial) TrOCR large printed 55.4% eff. acc 425.9 ms/img (serial) Florence-2 base 46.0% eff. acc 144.5 ms/img (serial) MMOCR SATRN 41.9% eff. acc 460.6 ms/img (serial) SVTRv2 Surya RapidOCR OpenOCR SVTRv2 100.0% eff. acc 3.8 ms/img (batched) RapidOCR 100.0% eff. acc 9.3 ms/img (batched) Surya 100.0% eff. acc 126.9 ms/img (batched) OnnxTR MASTER 96.8% eff. acc 54.3 ms/img (batched) OnnxTR SAR 96.1% eff. acc 10.0 ms/img (batched) OnnxTR VIPTR 95.8% eff. acc 4.9 ms/img (batched) PP-OCRv5 mobile 95.6% eff. acc 9.5 ms/img (batched) OnnxTR PARSeq 95.5% eff. acc 7.9 ms/img (batched) OnnxTR CRNN mobile 94.6% eff. acc 3.3 ms/img (batched) PP-OCRv5 latin mobile 91.1% eff. acc 7.7 ms/img (batched) PP-OCR 86.7% eff. acc 10.3 ms/img (batched) PP-OCRv5 en mobile 86.7% eff. acc 7.7 ms/img (batched) OnnxTR ViTSTR 83.5% eff. acc 5.8 ms/img (batched) PP-OCRv5 server 81.8% eff. acc 18.6 ms/img (batched) SVTRv2 Surya RapidOCR
Effective accuracy (y axis) against per-image latency (x axis). Four models out of chart: GOT-OCR2 (8,380 ms), Nougat (7.1%), Donut (0%) and MMOCR ABINet (34.5%).
#ModelFamilyEff. acc.Latency (ms/img)
BatchedSerial
1openocr_svtrv2Lightweight CTC100.0%3.856.9
2rapidocrLightweight CTC100.0%9.334.7
3suryaPipeline / classic100.0%126.9338.2
4onnxtr_masterOnnxTR96.8%54.3143.7
5onnxtr_sarOnnxTR96.1%10.0124.7
6onnxtr_viptrOnnxTR95.8%4.973.6
7ppocrv5_mobileLightweight CTC95.6%9.536.5
8onnxtr_parseqOnnxTR95.5%7.930.8
9onnxtr_crnn_mobileOnnxTR94.6%3.358.8
10ppocrv5_latin_mobileLightweight CTC91.1%7.733.3
11ppocrLightweight CTC86.7%10.334.4
12ppocrv5_en_mobileLightweight CTC86.7%7.734.7
13mmocr_robustscannerMMOCR86.0%n/a113.9
14tesseractPipeline / classic84.0%n/a83.7
15onnxtr_vitstrOnnxTR83.5%5.815.3
16ppocrv5_serverLightweight CTC81.8%18.693.8
17easyocrPipeline / classic71.0%n/a17.3
18florence2_largeDocument / VLM65.0%n/a341.7
19trocrTransformer56.7%n/a123.2
20trocr_large_printedTransformer55.4%n/a425.9
21got_ocr2Document / VLM51.5%n/a8,380
22florence2_baseDocument / VLM46.0%n/a144.5
23mmocr_satrnMMOCR41.9%n/a460.6
24mmocr_abinetMMOCR34.5%n/a72.8
25nougatDocument / VLM7.1%n/a1,234
26donut controlDocument / VLM0.0%n/a1,014
dots_ocrDocument / VLMOOMn/an/a
kosmos25Document / VLMOOMn/an/a
Effective accuracy over 594 images and per-image latency on the Nvidia A1000, serial and batched, ranked by accuracy. Batched latency is shown only for the models that were run batched (n/a otherwise). 26 of 28 models scored; dots_ocr and kosmos25 ran out of memory on the 4 GB card. donut is carried as a control.

The primary finding is lightweight models being both the fastest and most accurate, therefore not being a compromise for this simple task. The heavier models bought neither accuracy nor speed, where the dominant failure mode is domain mismatch. Model size was not a predictor of accuracy on this clean, small-text task.

Two models are viable to bundle: OpenOCR SVTRv2 and RapidOCR, both at 100% effective accuracy under an Apache-2.0 licence. Surya, the third at 100%, is CUDA-only. With accuracy settled between the remaining two, the choice becomes a latency question, measured across every configuration.

ConfigurationSVTRv2RapidOCR
CPU (7500F), serial12.9 ms8.9 ms
CPU (7500F), batched11.2 ms7.0 ms
DirectML (RX 6750 XT), serial15.9 msn/a
DirectML (RX 6750 XT), batched3.5 msn/a
CUDA (A1000), serial56.9 ms34.7 ms
CUDA (A1000), batched3.8 ms9.3 ms
Latency in ms per image, both at 100% effective accuracy; lower is better. RapidOCR has no DirectML path, so on that machine it runs on the CPU (about 6.8 ms serial, 7.1 ms batched). The bundled configuration is highlighted.

When processing images serially, RapidOCR on the CPU is the quicker of the two. When batched, OpenOCR SVTRv2 on the GPU reads about 286 cells per second against RapidOCR’s 142, roughly twice the throughput.

Conclusion

EntropiaOrme reads a panel’s cells in a batch, and batched on the GPU OpenOCR SVTRv2 is the fastest option at about 3.5 ms per image. Further, Entropia Universe is a CPU-bound game, which makes running the OCR model on GPU more desirable so as not to starve the game. Therefore, OpenOCR SVTRv2 is the one EntropiaOrme bundles.

Footnotes

  1. Testing hardware was limited to two machines: a Windows machine with a Ryzen 5 7500F CPU and an AMD GPU (RX 6750 XT, DirectML), and a Linux machine with an Nvidia GPU (A1000, CUDA). Refer to the benchmark repository for full results across all configurations.