Go to file
Romans Juškevičs 2397988447 Upload files to "/" 2026-09-18 08:53:40 +00:00
README.md Upload files to "/" 2026-09-18 08:51:00 +00:00
alphabet.cpython-314.pyc Upload files to "/" 2026-09-18 08:52:37 +00:00
alphabet.py Upload files to "/" 2026-09-18 08:51:00 +00:00
dataset.cpython-314.pyc Upload files to "/" 2026-09-18 08:52:37 +00:00
dataset.py Upload files to "/" 2026-09-18 08:51:00 +00:00
infer.py Upload files to "/" 2026-09-18 08:51:00 +00:00
model.cpython-314.pyc Upload files to "/" 2026-09-18 08:52:37 +00:00
model.py Upload files to "/" 2026-09-18 08:51:00 +00:00
synthetic_data.cpython-314.pyc Upload files to "/" 2026-09-18 08:52:37 +00:00
synthetic_data.py Upload files to "/" 2026-09-18 08:53:40 +00:00
train.py Upload files to "/" 2026-09-18 08:53:40 +00:00

README.md

Latviešu rokrakstu atpazīšana — sākotnējā versija

Sākotnējā (baseline) implementācija pēc tavas blokshēmas. AI bloks blokshēmā bija uzzīmēts nepareizi — CNN un BiLSTM tur izskatās pēc diviem neatkarīgiem zariem, bet praksē tā strādāt nevar. Reālajā arhitektūrā (CRNN, standarts rokraksta/OCR atpazīšanai) tie ir secīgi posmi + trūkst CTC slāņa, kas savieno tīkla izvadi ar mainīga garuma tekstu:

attēls -> CNN (vizuālās pazīmes, "Līnijas atpazīšana" / "Pareiza novietošana")
       -> BiLSTM x2 (konteksts pa sekvenci, "Vārdu atpazīšana" / "Pieturzīmes" / "Cipari")
       -> Linear + CTC (blokshēmā vispār nebija — bez tā nevar mainīga garuma
          izvadi savienot ar tekstu bez rakstzīmju līmeņa segmentācijas)

CTC arī nozīmē, ka "Teksta zonas atpazīšana????" (ar jautājuma zīmēm blokshēmā — acīmredzot arī tev bija šaubas) lielākoties nav vajadzīga uz ievades puses: var padot veselas rindas attēlu, nevis atsevišķus burtus.

Faili

Fails Blokshēmas daļa
alphabet.py rakstzīmju kopa (ā č ē ģ ī ķ ļ ņ š ū ž u.c.) + CTC kodēšana/dekodēšana
synthetic_data.py "Sintētiskie dati" — ģenerē attēlus no teksta, ar rotāciju/šķības/troksni
dataset.py "Reāli dati" (RealHTRDataset) + sintētiskie (SyntheticHTRDataset)
model.py laboti "AI" — CRNN (CNN -> BiLSTM -> CTC)
train.py apmācības cikls
infer.py "OUTPUT" — attēls -> teksts

Palaišana

pip install -r requirements.txt

# ātrs tests — ģenerē pāris paraugattēlus
python synthetic_data.py

# apmācība tikai uz sintētiskajiem datiem (pagaidu risinājums, kamēr nav reālu skenējumu)
python train.py --steps 2000 --batch-size 32

# kad būs reāli dati (skat. zemāk), pievieno tos apmācībai
python train.py --steps 5000 --real-data data/real_dataset

# secinājums uz viena attēla
python infer.py --checkpoint checkpoints/crnn_step2000.pt --image samples/sample_0.png

Kā pievienot reālus datus

Sagatavo mapi (tas ir blokshēmas "Rokrakstu bāzes sagatavošana" solis):

data/real_dataset/
  labels.csv          # kolonnas: filename,text
  images/
    0001.png
    0002.png

labels.csv piemērs:

filename,text
0001.png,Labdien! Kā jums iet?
0002.png,Rīgā šodien līst.

Kas šobrīd ir vienkāršots / jāuzlabo tālāk

  • Sintētiskie dati izmanto parastu (ne-rokraksta) fontu (DejaVu Sans) ar nelielām deformācijām. Reālam rokrakstam ieteicams iemest fonts/ mapē kursīvu/rokraksta stila .ttf fontu ar latviešu diakritiku atbalstu — ģenerators to automātiski izmantos.
  • Nav vēl datu augmentācijas variāciju pēc reāliem paraugiem (piem., papīra tekstūras, tintes izplūduma) — der pievienot, tiklīdz ir reāli skeni, lai redzētu, kāda veida troksnis tos raksturo.
  • "Cik piemēru?" no blokshēmas — nav fiksēts skaitlis kodā; --steps un --synth-per-epoch kontrolē apjomu, pielāgo pēc vajadzības.
  • Šī vide nespēja lokāli instalēt/palaist pilnu PyTorch (CUDA atkarības prasa vairāk diska vietas nekā šeit pieejams), tāpēc modeļa forward/apmācības kods nav palaists end-to-end šajā sandbox — sintaktiski pārbaudīts un arhitektūra ir standarta, pārbaudīta CRNN+CTC shēma, bet ieteicams pirmo palaišanu izdarīt ar mazu --steps skaitli, lai pārliecinātos, ka viss strādā tavā vidē.