Tesseract — Klassik va Ishonchli
Nega Tesseract?
100+ til, jumladan o'zbek (lotin va kirill) va rus. Bepul, ochiq kodli, CPU da tez, offline. Confidence (ishonch darajasi) beradi — production quality gate uchun oltin xususiyat. Kamchiliklari ham bor, lekin boshlang'ich nuqta har doim Tesseract: agar u yetarli bo'lsa, murakkabroq narsa kerak emas.
O'rnatish
# Ubuntu / Debian / WSL sudo apt install tesseract-ocr # Til paketlari: rus, o'zbek lotin, o'zbek kirill sudo apt install tesseract-ocr-rus tesseract-ocr-uzb tesseract-ocr-uzb-cyrl # Python wrapper pip install pytesseract pillow
O'rnatilgan tillarni tekshirish:
tesseract --list-langs # eng, osd, rus, uzb, uzb_cyrl
Asosiy ishlatish
import pytesseract from PIL import Image image = Image.open("scanned_page.png") # Bitta til text = pytesseract.image_to_string(image, lang="rus") # Bir nechta til birga — O'zbekiston hujjatlari uchun tipik holat text = pytesseract.image_to_string(image, lang="rus+uzb") print(text)
Muhim nuance: lang="rus+uzb" — Tesseract har so'z uchun ikkala til modelini sinab, yaxshisini oladi. Lekin keraksiz til qo'shmang: har qo'shimcha til biroz sekinlashtiradi va adashish ehtimolini oshiradi. Hujjat faqat ruscha bo'lsa — faqat rus.
PSM — Page Segmentation Mode
Tesseract ga "sahifa qanday tuzilgan" degan maslahat. Noto'g'ri PSM — yomon natijaning eng ko'p uchraydigan sababi (preprocessing dan keyin):
| PSM | Ma'nosi | Qachon ishlatish |
|---|---|---|
| 3 | To'liq avtomatik (default) | Oddiy hujjat sahifasi |
| 4 | Turli o'lchamli bitta ustun | Gazeta ustuni, kvitansiya |
| 6 | Bitta yaxlit matn bloki | Paragraf skrini, kitob sahifasi |
| 7 | Bitta qator | Yozuv, sarlavha, tablichka |
| 8 | Bitta so'z | Captcha, shtamp ichi |
| 11 | Tartibsiz siyrak matn | Sochilgan yozuvlar: forma, ID karta, shtamp. Bir ustunli chek uchun 4 yoki 6 (11-bob, 4-lab) |
| 12 | Siyrak matn + OSD | Aralash yo'nalishli hujjat |
# Kvitansiya: qatorlar tartibsiz, ustun tushunchasi yo'q text = pytesseract.image_to_string(image, lang="rus", config="--psm 11") # Bitta qatorli yozuv text = pytesseract.image_to_string(sign, lang="uzb", config="--psm 7")
Amaliy maslahat: natija g'alati chiqsa (so'zlar aralashib ketgan, ustunlar qo'shilib ketgan) — birinchi navbatda PSM ni o'zgartirib ko'ring: 3 → 6 → 11.
Confidence — ishonch darajasi
image_to_string faqat matn beradi. image_to_data esa har so'z uchun koordinata + confidence (0-100) beradi. Bu production tizimning tayanchi:
data = pytesseract.image_to_data(image, lang="rus+uzb", output_type=pytesseract.Output.DICT) words, confs = [], [] for word, conf in zip(data["text"], data["conf"]): conf = int(float(conf)) # yangi pytesseract "95.2" kabi satr beradi if conf > 0 and word.strip(): # -1 = bo'sh blok, tashlab yuboramiz words.append(word) confs.append(conf) avg_conf = sum(confs) / max(1, len(confs)) low_words = [w for w, c in zip(words, confs) if c < 60] print(f"O'rtacha ishonch: {avg_conf:.0f}%") print(f"Shubhali so'zlar: {low_words[:10]}")
Confidence bilan nima qilamiz (8-bobda batafsil):
avg_conf > 80— natijaga ishonamiz, to'g'ridan-to'g'ri RAG ga60-80— ishlatamiz, lekin metadata ga belgilab qo'yamiz< 60— VLM bilan qayta o'qiymiz yoki manual review ga
Kuchli va zaif tomonlari
| ✅ Kuchli | ❌ Zaif |
|---|---|
| Tez (~1 s/sahifa, CPU) | Qo'lyozmani deyarli o'qiy olmaydi |
| uzb + uzb_cyrl + rus | Jadvalni "oqizib" yuboradi (satr tartibida) |
| So'z darajasida confidence | Murakkab layout da adashadi |
| Bepul, offline, yengil | Past sifatli rasmga sezgir (preprocessing shart!) |
Xulosa
| Tushuncha | Asosiy fikr |
|---|---|
| Default tanlov | Har doim Tesseract dan boshlang — ko'p holatda yetarli |
| Tillar | rus+uzb — lekin faqat keraklisini qo'shing |
| PSM | Natija g'alati bo'lsa — birinchi PSM ni tekshiring (3 → 6 → 11) |
| Confidence | image_to_data — production quality gate ning asosi |
| Chegara | Qo'lyozma va jadval — Tesseract emas, VLM ishi (6-bob) |
Bu bobni bepul o'qidingiz.
Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.