នៅលើទំព័រនេះ
ការដំឡើង
# រូបភាព នៅលើ 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]) | |
|---|---|---|
| ការដំឡើង | មិនត្រូវការ PyTorch | PyTorch (ច្រើន GB ជាមួយ CUDA) |
| ឧបករណ៍ | CPU; CUDA ជាមួយ pip install onnxruntime-gpu | CPU, CUDA, Apple MPS |
| ក្បាលអាន | CTC (លំនាំដើម), CPPD | CTC, CPPD និង SMTR (decoder="gtc" ឬ "auto") |
backend ទាំងពីរផ្តល់ boxes និងអត្ថបទដូចគ្នាបេះបិទ។ anaksor ប្រើ PyTorch បើវាត្រូវបាន install រួច បើមិនដូច្នោះទេ វាប្រើ ONNX Runtime។ អ្នកអាចជ្រើសរើសដោយ backend="torch" ឬ "onnx" (ឬ --backend នៅលើ command line)។ លើ CPU, PyTorch ធ្វើ inference លឿនជាងបន្តិច។
អានទំព័រមួយ
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.pdfocr(...) ទទួលជា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_x | 0.16, 0.10 | គែមដែលបន្ថែមជុំវិញបន្ទាត់ពាក្យនីមួយៗមុនពេលអាន ជាប្រភាគនៃកម្ពស់បន្ទាត់។ តិចពេក នឹងអាចកាត់ជើងអក្សរ។ |
min_rec_score | 0.5 | អប្បរមាប្រសិទ្ធភាព |
try_vertical, try_180 | True, False | សម្រាប់ បង្វិល ៩០ ដឺក្រេ; ឬបញ្ច្រាសរាល់ប្រអប់ពាក្យ |
សម្រាប់ទំព័រមួយ៖ ocr(image, ...)
| ជម្រើស | លំនាំដើម | អ្វីដែលវាធ្វើ |
|---|---|---|
unclip_ratio | 1.5 | ប្រអប់ដែលរកឃើញត្រូវបានពង្រីកប៉ុណ្ណា; តម្លៃធំ អាចភ្ជាប់អត្ថបទច្រើនចូលគ្នា ជាប្រអប់តែមួយ |
box_thresh, thresh | 0.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, --format | text, json, pdf ឬ docx; តាមលំនាំដើម តាមកន្ទុយឈ្មោះឯកសារលទ្ធផល |
--pages, --dpi | ទំព័រ PDF ដែលត្រូវអាន ដូចជា 1-3,7; គុណភាពបង្ហាញ (200) |
--backend, --device | auto, 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 របស់អ្នកត្រូវការប៉ុណ្ណោះ ហើយរកវាតាមលំដាប់នេះ៖
- path ដែលអ្នកផ្តល់ឱ្យ (
det_weights=,rec_weights=ឬ--det-weights); - folder ដែលកំណត់ដោយ
ANAKSOR_WEIGHTS_DIR; - 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/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សូមមើល កំណត់ត្រាការផ្លាស់ប្តូរ និង កូដប្រភពរបស់គេហទំព័រ។