The KAGAMI mark КАГАМИ
kagami.bg/academy · lesson · machine-readable viewVERIFIED 2026-10-01 · UPDATED 2026-10-01
IDENTITY
module
GX10-04-214 · EasyOCR: simple OCR with Cyrillic support
series
GX10 (local AI server class: NVIDIA GB10, e.g. ASUS Ascent GX10 / DGX Spark)
level
Beginner
duration
about 1 h
prerequisites
A GB10-class machine with DGX OS (Ubuntu 24.04, Arm64), shell access (local or SSH), Python 3 with venv, internet access for the first model download
trust_label
VERIFIED 2026-10-01 (EasyOCR release, language code, licence and requirements checked against PyPI, the project README, the project source and the PyTorch wheel index) · UPDATED 2026-10-01 · NOT TESTED (no GB10 machine available; the example was not executed anywhere)
versions
EasyOCR 1.7.2 (latest on PyPI, released 2024-09-24, no newer release as of 2026-10-01) · PyTorch aarch64 wheels with CUDA 13.0 (cu130) exist for CPython 3.12, torch 2.9 to 2.14 and torchvision 0.25 to 0.27 on the official wheel index
licence
Apache-2.0 (software); licence of the downloaded model weights not separately verified
language
human view: english edition · bulgarian edition: /academy/gx10/ (same file name)
previous / next
04-213 Tesseract / 04-215 PaddleOCR (classic)
PURPOSE

Run EasyOCR, a PyTorch-based text recognition library with a two-line Python interface, on a GB10-class server. Create a virtual environment, install an aarch64 CUDA build of PyTorch from the official index, install EasyOCR, create one Reader for Bulgarian and English (language codes bg and en), read text from an image and understand the result format (bounding box, text, confidence). Know the limits before choosing it.

KEY CONCEPTS
COMMANDS / PATHS
CHECKLIST
NEXT MODULE

04-215 PaddleOCR classic (04-215_PaddleOCR_Classic.html) · previous: 04-213 Tesseract · GX10 series index · offer: Quick experiment (kagami.bg/stalbata/)

SOURCES
TAGS
gx10nvidia-gb10arm64ocreasyocrcyrillicbulgarianpytorchpython
VERIFIED · 01.10.2026 UPDATED · 01.10.2026

EasyOCR on GX10: Simple Cyrillic OCR

EasyOCR reads text from images with two lines of Python and understands Bulgarian. We run it locally on a server of the NVIDIA GB10 class: your images never leave the machine, and by the end you also know when to choose another tool.

⏱ ~1 h Beginner GX10 OCR · Cyrillic · Python Apache-2.0 licence
EasyOCR · PyTorch (ARM64)🔒 local Model weights (one-time download)🌐 global
🔄
UPDATED · 01.10.2026 — what changed
The lesson was rebuilt against current sources. We checked: the latest EasyOCR release is 1.7.2 (24.09.2024; nothing newer as of 01.10.2026), the Bulgarian language code is bg, the licence is Apache-2.0, and official PyTorch wheels for ARM64 with CUDA exist (cu130). We removed: the claim that the GPU works "automatically with no configuration" on GX10 (not verified — we now show an explicit install and a check), the ratings "strong", "weak" and "significant speed-up" without measurements, internal examples from our own work, the note about other OCR models (it belongs to other lessons) and the example with a photo of a document you cannot reproduce. We added: a virtual environment, installing PyTorch for aarch64, an example with a synthetic image you can run without anyone else's files, an explanation of the result, working offline and an honest list of limits.
⚠️
What we have not run ourselves
We had no GB10-class machine at hand during the check and did not run the example on any other machine either, so the lesson is not tested and carries no "TESTED" label. Especially unchecked: whether this EasyOCR version runs without complaints on the newest PyTorch releases (1.7.2 dates from 2024), whether the cu130 wheels support the GB10 GPU without a warning, and speed and accuracy on Bulgarian text. That is why we give no numbers.

01What you will learn

02Before you start

💡
Why ARM64 matters
The GB10 processor is Arm, not x86. EasyOCR itself is pure Python and installs anywhere, but the PyTorch underneath it must be built for aarch64 and — if you want the GPU — with CUDA. We checked the official PyTorch index: for CPython 3.12 and CUDA 13.0 there are aarch64 wheels (torch 2.9 to 2.14, torchvision 0.25 to 0.27).

03Steps

  1. What EasyOCR does

    According to the project, recognition runs in two stages. First the CRAFT model (Character Region Awareness For Text) finds the regions that contain text — according to its paper it is designed to detect rotated and curved text as well. Then the recognition model (CRNN) reads each region character by character. Everything runs on PyTorch. Over 80 languages are supported; Bulgarian has the code bg, English en. The library's licence is Apache-2.0.

    💡
    Which languages work together
    bg is in the project's Cyrillic group together with Russian (ru), Ukrainian (uk), Belarusian (be), Serbian in Cyrillic (rs_cyrillic) and others. According to the project's documentation, English is compatible with every language and languages with similar characters usually work together — but not every pair is allowed. Start with ['bg','en'].
  2. Check the machine

    bash · on the machine
    uname -m
    python3 --version
    nvidia-smi

    You expect aarch64, Python 3.12 and a table with the GPU. The memory row may say "Memory-Usage: Not Supported" — on GB10 that is normal: the GPU uses the machine's shared memory (confirmed by NVIDIA).

  3. A virtual environment and PyTorch for aarch64

    Why a virtual environment? PyTorch and the EasyOCR dependencies are heavy, and you should not mix their versions with system packages. The environment is deleted with one command without touching the system.

    Why an explicit index? This way you choose the CUDA build for ARM64 yourself instead of hoping pip picks a suitable one. If python3 -m venv complains that the module is missing, install python3-venv with sudo apt install python3-venv.

    bash · on the machine
    python3 -m venv ~/ocr-env
    source ~/ocr-env/bin/activate
    pip install --upgrade pip
    pip install torch torchvision --index-url https://download.pytorch.org/whl/cu130
    python -c "import torch; print(torch.__version__, torch.cuda.is_available())"

    The last line should print the version and True. If it prints False or a warning about the GPU's compute capability, stop: PyTorch will not use the GPU. Then either look for a newer build in the index or carry on with the CPU (see step 7).

    ⚠️
    We have not run this on GB10
    The existence of an aarch64 wheel with CUDA 13.0 is checked in the index, but whether it supports the GB10 GPU without a warning we have not tested. That is why the check above is mandatory.
  4. Install EasyOCR

    PyTorch is already in place, so pip will not replace it. It brings the rest: OpenCV, SciPy, NumPy, Pillow, scikit-image and others.

    bash · inside the virtual environment
    pip install easyocr
    python -c "import easyocr; print('easyocr: OK')"

    You will get version 1.7.2 — the latest to date.

  5. A first read of a synthetic image

    So that you need no one else's files, we create an image with Bulgarian text ourselves. We use the DejaVu Sans font, which has Cyrillic glyphs; check that it exists with fc-list | grep -i dejavu and fix the path on the first line if it differs.

    python · ocr_test.py
    from PIL import Image, ImageDraw, ImageFont
    import easyocr
    
    FONT = "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"
    
    # 1) a synthetic image with Cyrillic text
    img = Image.new("RGB", (900, 220), "white")
    draw = ImageDraw.Draw(img)
    font = ImageFont.truetype(FONT, 56)
    draw.text((30, 20), "Добър ден, Варна", fill="black", font=font)
    draw.text((30, 110), "Фактура № 2026-0417", fill="black", font=font)
    img.save("test.png")
    
    # 2) a Reader for Bulgarian and English — created ONCE
    reader = easyocr.Reader(["bg", "en"])
    
    # 3) read
    result = reader.readtext("test.png")
    for bbox, text, conf in result:
        print(f"{text!r}  confidence={conf:.2f}  box={bbox}")

    Run it with python ocr_test.py. On the first run EasyOCR downloads the model weights into ~/.EasyOCR/model — you need internet and a little patience. Later runs start from the cache.

    The result is a list in which every row is a triple (box, text, confidence). We give no sample output because we have not run the code — you will see what was recognised and how sure the model is.

  6. How to read the result

    • Box (bbox) — four corner points of the region, in pixels. Good for cropping, outlining or ordering.
    • Text — the recognised string.
    • Confidence (confidence) — a number between 0 and 1: how sure the model is. This is a model score, not a measured accuracy; compare it with your own samples before you trust it.

    The source can be a file path, an OpenCV (numpy) array, bytes or the URL of a raw image. If you only need the strings, without boxes:

    python
    texts = reader.readtext("test.png", detail=0)
    print(" ".join(texts))
    
    # only the more confident results
    good = [t for (b, t, c) in reader.readtext("test.png") if c > 0.5]
    ✅
    One Reader per process
    The line easyocr.Reader([...]) loads the models into memory and takes time. Do it once and use the same reader for all images; do not create it inside a loop.
  7. CPU instead of the GPU, working without internet

    By default gpu=True. If the GPU is not enough or PyTorch cannot see it, you switch to the CPU:

    python
    reader = easyocr.Reader(["bg", "en"], gpu=False)

    We have not measured the speed of the two modes on your machine — run the same image in both modes and compare yourself. The library also has a command line (per the project's documentation): easyocr -l bg en -f test.png --detail=1 --gpu=True.

    Without internet: the weights can be downloaded beforehand from the project's model hub and placed by hand in ~/.EasyOCR/model. That way a second machine without network access can use them. The data you read stays with you either way — only the one-time download goes out.

    ⚠️
    The licence of the weights
    The library's licence is Apache-2.0. We have not checked the licence of the downloaded model weights separately — read the project's terms if you will use them in a product.
  8. Strengths and limits

    The project describes EasyOCR as a general OCR that reads both text in scenes (signs, photos) and dense text in documents. What we know, and what we do not:

    TopicWhat is known
    InterfaceTwo lines of Python; also a command line and a Dockerfile in the project's repository.
    LanguagesOver 80, including Bulgarian (bg); languages combine only in allowed groups.
    ResultA box, text and confidence for every region.
    HandwritingNot supported — it is on the project's roadmap as future work.
    Tables and page layoutThe library returns regions with text; it does not reconstruct table structure. For complex documents you will need another tool.
    MaintenanceThe latest release, 1.7.2, is from 24.09.2024; the repository automatically closes issues older than six months. Check compatibility with your PyTorch version.
    Accuracy and speed on Bulgarian⚠️ Not measured by us. Collect 10–20 samples of your own and compare.

    If the text is on a clean, well-lit scan, the classic Tesseract on the CPU may be enough; for tables and complex pages look for a solution with structure — for example PP-StructureV3 from the PaddleOCR lesson.

  9. Personal data — the minimum

    • Read documents with personal data only locally; do not upload them to cloud OCR services without a reason.
    • The results (text and boxes) may contain the same data — protect them like the originals.
    • Do not put real documents into public repositories or examples. Test with synthetic images, as in step 5.

04Check

Quiz

1. What is the language code for Bulgarian in EasyOCR?

2. How do you correctly use a Reader with many images?

3. What does readtext() return by default?

4. How do you force EasyOCR to run on the CPU?

05What's next

06Sources

  1. EasyOCR — repository and README 🌐 global — usage, readtext, detail=0, gpu=False, CRAFT and CRNN, handwriting as future work.
  2. easyocr on PyPI — version 1.7.2 of 24.09.2024, Apache 2.0 licence.
  3. Jaided AI: EasyOCR — table of supported languages (Bulgarian — bg).
  4. EasyOCR: config.py — the Cyrillic language group, the model cache location.
  5. EasyOCR: requirements.txt — dependencies.
  6. PyTorch: CUDA 13.0 wheels · torchvision — aarch64 availability for CPython 3.12.
  7. NVIDIA DGX Spark: hardware · ASUS Ascent GX10: tech specs — GB10 class, Arm, shared memory · known issues — "Memory-Usage: Not Supported" in nvidia-smi.