anaksor-ocr

ឯកសារណែនាំ

ដំឡើង anaksor-ocr អានរូបថត ឯកសារស្កេន និង PDF ហើយ export អ្វីដែលវាអានបាន។

នៅលើទំព័រនេះ
  1. ការដំឡើង
  2. អានទំព័រមួយ
  3. លទ្ធផលដែលទទួលបាន
  4. PDF និង Export
  5. ជម្រើស
  6. CLI
  7. ភាពត្រឹមត្រូវ និងដែនកំណត់
  8. Weights របស់ម៉ូដែល
  9. ម៉ូដែលផ្ទាល់ខ្លួន
  10. ការអភិវឌ្ឍ anaksor

ការដំឡើង

# រូបភាព នៅលើ ONNX Runtime (មិនត្រូវការ PyTorch)
pip install anaksor-ocr
# បន្ថែម PyTorch៖ CUDA, Apple MPS និងក្បាលអាន SMTR
pip install "anaksor-ocr[torch]"
# PyTorch, ការអាន PDF និង export ជា Word
pip install "anaksor-ocr[all]"

ត្រូវការ Python 3.11 ឬថ្មីជាងនេះ។ Weights របស់ម៉ូដែល (ប្រហែល 95 MB) download ទៅ ~/.cache/anaksor នៅពេលអ្នកអានទំព័រដំបូង។

ONNX Runtime (លំនាំដើម)PyTorch ([torch])
ការដំឡើងមិនត្រូវការ PyTorchPyTorch (ច្រើន GB ជាមួយ CUDA)
ឧបករណ៍CPU; CUDA ជាមួយ pip install onnxruntime-gpuCPU, CUDA, Apple MPS
ក្បាលអានCTC (លំនាំដើម), CPPDCTC, CPPD និង SMTR (decoder="gtc" ឬ "auto")

backend ទាំងពីរផ្តល់ boxes និងអត្ថបទដូចគ្នាបេះបិទ។ anaksor ប្រើ PyTorch បើវាត្រូវបាន install រួច បើមិនដូច្នោះទេ វាប្រើ ONNX Runtime។ អ្នកអាចជ្រើសរើសដោយ backend="torch" ឬ "onnx" (ឬ --backend នៅលើ command line)។ លើ CPU, PyTorch ធ្វើ inference លឿនជាងបន្តិច។

អានទំព័រមួយ

Python
import anaksor

# ប្រើ GPU ប្រសិនបើម៉ាសុីនរបស់អ្នកមាន ឬ យើងអាចប្រើ CPU បាន
ocr = anaksor.OCR()
result = ocr("letter.jpg")

print(result["text"])
for line in result["lines"]:
    print(round(line["rec_score"], 2), line["text"])
បន្ទាត់ពាក្យបញ្ជា
# ជាមួយរូបភាព
anaksor letter.jpg
# ជាមួយឯកសារ Word
anaksor letter.jpg -o letter.docx
# ឬ PDF
anaksor contract.pdf -o contract-searchable.pdf

ocr(...) ទទួលជាbytes រូបភាព PIL ឬអារេ NumPy ជា RGB។ រូបភាពត្រូវបានអានជា JPEG, PNG, WEBP, BMP ឬ TIFF។

លទ្ធផលដែលទទួលបាន

អាច បម្លែងលទ្ធផលជាទិន្នន័យសាមញ្ញ JSON ៖ ចង្កោម កថាខណ្ឌ (blocks) ឬ បន្ទាត់នីមួយៗជាមួយទីតាំង និងភាពជឿជាក់។ ឧទាហរណ៍នេះត្រូវបានកាត់ឱ្យខ្លី។

{
  "text": "ព្រះរាជាណាចក្រកម្ពុជា\nជាតិ សាសនា ព្រះមហាក្សត្រ\n\n...",
  "blocks": [{"text": ..., "lines": [0, 1], "box": [[412, 96], ...], "rec_score": 0.981}],
  "lines": [
    {"text": "ជាតិ សាសនា ព្រះមហាក្សត្រ",
     "parts": [...], "box": [...], "quads": [...],
     "rec_score": 0.987, "det_score": 0.93, "block": 0}
  ],
  "width": 1654, "height": 2339
}

PDF និង Export

# លទ្ធផលមួយក្នុងមួយទំព័រ ហើយ export ជា PDF
pages = ocr.read("report.pdf", pages=[1, 2, 3], keep_images=True)

from anaksor import export
open("report-searchable.pdf", "wb").write(export.to_pdf(pages))
open("report.docx", "wb").write(export.to_docx(pages, highlight_low=True))

ជម្រើស

ពេលបង្កើត anaksor.OCR(...)

ជម្រើសលំនាំដើមអ្វីដែលវាធ្វើ
backend"auto""torch" ឬ "onnx"; auto មានន័យថា PyTorch ប្រសិនបើបានដំឡើង
device"auto""cuda", "cuda:1", "mps" (សម្រាប់តែ PyTorch) ឬ "cpu"
pad_y, pad_x0.16, 0.10គែមដែលបន្ថែមជុំវិញបន្ទាត់ពាក្យនីមួយៗមុនពេលអាន ជាប្រភាគនៃកម្ពស់បន្ទាត់។ តិចពេក នឹងអាចកាត់ជើងអក្សរ។
min_rec_score0.5អប្បរមាប្រសិទ្ធភាព
try_vertical, try_180True, Falseសម្រាប់ បង្វិល ៩០ ដឺក្រេ; ឬបញ្ច្រាសរាល់ប្រអប់ពាក្យ

សម្រាប់ទំព័រមួយ៖ ocr(image, ...)

ជម្រើសលំនាំដើមអ្វីដែលវាធ្វើ
unclip_ratio1.5ប្រអប់ដែលរកឃើញត្រូវបានពង្រីកប៉ុណ្ណា; តម្លៃធំ អាចភ្ជាប់អត្ថបទច្រើនចូលគ្នា ជាប្រអប់តែមួយ
box_thresh, thresh0.5, 0.3ភាពជឿជាក់នៃការរកឃើញ៖ ក្នុងមួយប្រអប់ និងក្នុងមួយភីកសែល
scales(1.0,)ការរកបន្ថែម ដូចជា (1.0, 1.6) សម្រាប់អក្សរតូច;

ម៉ូដែលទាំងពីរក៏អាចប្រើដាច់ដោយឡែកបានដែរ៖ anaksor.Detector().detect(image) ផ្តល់ប្រអប់ពាក្យជាបន្ទាត់ ហើយ anaksor.Recognizer().recognize([crop, ...]) អានប្រអប់ពាក្យដែលបានកាត់រួច។

CLI

anaksor scan.pdf --pages 1-3,7 -o scan.docx
# ឯកសារ JSON មួយក្នុងមួយរូបភាព
anaksor photos/*.jpg -o out/ -f json
# download weights ទុកជាមុន
anaksor --fetch-models
ជម្រើសអ្វីដែលវាធ្វើ
-o, --outputឯកសារលទ្ធផល ឬថតសម្រាប់ឯកសារបញ្ចូលច្រើន
-f, --formattext, json, pdf ឬ docx; តាមលំនាំដើម តាមកន្ទុយឈ្មោះឯកសារលទ្ធផល
--pages, --dpiទំព័រ PDF ដែលត្រូវអាន ដូចជា 1-3,7; គុណភាពបង្ហាញ (200)
--backend, --deviceauto, torch, onnx; auto, cpu, cuda, mps
--pad-y, --pad-x, --min-scoreជម្រើសដែលមានឈ្មោះដូចគ្នាខាងលើ
--det-weights, --rec-weightsប្រើ weights ផ្ទាល់ខ្លួន ឬ weights ដែលអ្នកបាន train ផ្ទាល់
--highlight-lowលទ្ធផល Word៖ គូសបញ្ជាក់ទៅលើពាក្យដែលមានទំនុកចិត្តទាប (Low Confidence)

ភាពត្រឹមត្រូវ និងដែនកំណត់

ផ្នែកវាស់លើលទ្ធផល
ការរកបន្ទាត់ (detection) v3រូបថតផ្ទៀងផ្ទាត់ KhmerSTភាពច្បាស់លាស់ (precision) ០.៧៥ ការរកឃើញ (recall) ០.៧៩
ការរកបន្ទាត់ (detection) v3អក្សរអង់គ្លេសលើរូបថត (HierText)ភាពច្បាស់លាស់ (precision) ០.៧៦ ការរកឃើញ (recall) ០.៦៩
ការរកបន្ទាត់ (detection) v3ទំព័រសំយោគ (synthetic)ភាពច្បាស់លាស់ (precision) ០.៩៩៨ ការរកឃើញ (recall) ០.៩៩៨
ការអានអក្សរ (recognition) v4បន្ទាត់ពិត ៣៨៧៨ សម្រាប់ផ្ទៀងផ្ទាត់៖ ខ្មែរ ឡាតាំង និងចម្រុះ (mixed)ត្រឹមត្រូវទាំងស្រុង ៨៦.៧% កំហុសតួអក្សរ ១.៣៨%
ការអានអក្សរ (recognition) v4បន្ទាត់ខ្មែរសុទ្ធ ២៤៩៧ ក្នុងចំណោមនោះត្រឹមត្រូវទាំងស្រុង ៩០.១% កំហុសតួអក្សរ ០.៧៣%

KhmerST ដាក់ label តែលើអត្ថបទមួយចំនួនក្នុងរូបថតនីមួយៗ។ ដូច្នេះ សម្រាប់ detection អត្ថបទដែលគ្មាន label ប៉ុន្តែ detector ផ្សេងរកឃើញ ត្រូវបានរាប់ជា "don't care" ដែលធ្វើឱ្យ precision មើលទៅខ្ពស់ជាងការពិតបន្តិច។

  • អក្សរខ្មែរបោះពុម្ព (printed) ឯកសារ វិក្កយបត្រ និងផ្លាកសញ្ញា អានបានល្អបំផុត។
  • អក្សរអង់គ្លេស និងអក្សរ Latin ផ្សេងទៀតលើរូបថតនៅខ្សោយ៖ detector អាចរំលងវានៅលើផ្លាកសញ្ញា ហើយ recognizer បានឃើញអក្សរអង់គ្លេសពិតៗតិចតួចពេល train។
  • អក្សរសរសេរដៃ (handwriting) និងអក្សរតុបតែង (decorative) នៅខ្សោយ។ សូមពិនិត្យ rec_score នៃបន្ទាត់នីមួយៗ ឬប្រើ --highlight-low សម្រាប់ output Word។

Weights របស់ម៉ូដែល

ម៉ូដែលនីមួយៗមានឯកសារពីរ៖ ONNX graph (.onnx សម្រាប់ ONNX Runtime) និង PyTorch weights (.safetensors)។ anaksor download តែឯកសារដែល backend របស់អ្នកត្រូវការប៉ុណ្ណោះ ហើយរកវាតាមលំដាប់នេះ៖

  1. path ដែលអ្នកផ្តល់ឱ្យ (det_weights=, rec_weights= ឬ --det-weights);
  2. folder ដែលកំណត់ដោយ ANAKSOR_WEIGHTS_DIR;
  3. cache ក្នុង ~/.cache/anaksor (ឬ ANAKSOR_HOME) ដែល download ម្តងពី Hugging Face ហើយ verify ជាមួយ SHA-256 របស់វា។

Weights ទាំងពីរ format មិនអាច run កូដនៅពេល load បានទេ។ សម្រាប់ម៉ាស៊ីនដែលគ្មានអ៊ីនធឺណិត (offline) សូម run anaksor --fetch-models លើម៉ាស៊ីនផ្សេង ហើយ copy ឯកសារពីរសម្រាប់ backend របស់អ្នកទៅក្នុង folder ANAKSOR_WEIGHTS_DIR។

ម៉ូដែលផ្ទាល់ខ្លួន

អ្នកអាច Train ម៉ូដែលដោយខ្លួនឯងបានតាមរយះ config តាមទម្រង់ OpenOCR (ទម្រង់ដែលម៉ូដែលទាំងនេះត្រូវបានបង្ហាត់)។

git clone https://github.com/SokhengDin/anaksor-ocr && cd anaksor-ocr
python tools/spec_from_config.py path/to/svtrv2_cppd_khmer.yml --out specs/
# សម្រាប់ backend engine onnx (ត្រូវការ [export])
python tools/export_onnx.py --rec best.pth --rec-spec specs/rec-svtrv2-cppd-khmer.yml --out onnx/
Python
rec = anaksor.Recognizer("specs/rec-svtrv2-cppd-khmer.yml", weights="best.pth")
ocr = anaksor.OCR(recognizer=rec)

ការអភិវឌ្ឍ anaksor

git clone https://github.com/SokhengDin/anaksor-ocr && cd anaksor-ocr
uv venv && uv pip install torch --index-url https://download.pytorch.org/whl/cpu
uv pip install -e ".[all]" pytest ruff pip-audit onnx onnxscript
# មិនត្រូវការ weights ឬអ៊ីនធឺណិតទេ
pytest

សូមមើល កំណត់ត្រាការផ្លាស់ប្តូរ និង កូដប្រភពរបស់គេហទំព័រ។