LVRA/README.md

81 lines
3.4 KiB
Markdown

# 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
```bash
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:
```csv
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ē.