OCR, GTK şi alte acronime

Iată ce lucruri îmi produc mie bucurii profesionale.

De câteva zile caut un OCR bun (OCR este un nume generic pentru un program căruia îi dai o pagină scanată şi identifică textul scris pe ea, analizând pixelii pentru fiecare literă în parte). Evident, există OCR-uri mai bune şi mai proaste, după câte greşeli fac la recunoaştere. Greşelile pot însemna că OCR-ul recunoaşte un 1 (unu) sau un i (i mic) acolo unde este tipărit un l (l mic), sau că nu înţelege diacriticele româneşti, sau că pierde informaţiile de formatare gen bold/italic/subliniat.

OCR-urile deştepte pot fi antrenate pe un font anume. Adică, dacă documentul scanat are 100 de pagini, stai şi antrenezi OCR-ul pe primele 10-20 de pagini şi îi spui tu „ăsta e un a, ăsta e un b”, literă cu literă. El învaţă modelele şi face mult mai puţine greşeli pentru restul paginilor. Avantajul antrenării e că OCR-ul învaţă să se descurce în special pe fontul şi hârtia pe care e tipărit documentul dat, unde altfel ar face greşeli sistematice (de exemplu, dacă contrastul e prost, h poate fi uşor confundat cu li).

Eu am deja un OCR de Windows, care, ca tot softul de Windows, este o mare cutie neagră. Dacă nu merge perfect, n-ai cum să-l îmbunătăţeşti. Se descurcă binişor pentru limba română, dar are limitări. Aşa că am zis să caut nişte OCR-uri de Linux, să văd în ce stadiu mai sunt. Ultima oară le-am încercat în 2003 şi era jale, practic erau nefolosibile. Acum însă am descoperit Tesseract, un OCR despre care lumea zice că ar fi bun. Şi deci m-am apucat să-l antrenez pe documentul meu. Ocazie cu care am descoperit că Tesseract e al naibii de greu de antrenat. Ca să îl antrenezi pe o pagină, trebuie să creezi un fişier unde îi spui „între pixelii x1 şi x2 şi y1 şi y2 e un dreptunghi care conţine litera m” şi asta pentru fiecare literă din pagina scanată. Tesseract identifică aceste dreptunghiuri, dar de multe ori identifică două litere într-un singur dreptungi (de exemplu m în loc de ni). Pentru a îl corecta, trebuie să editezi un fişier text cu multe numere şi litere. Mi-aş fi dorit o unealtă vizuală unde să văd dreptunghiurile şi să trag de ele sau să le sparg în două cu mouse-ul.

Şi, ca în Linux, dacă nu găseşti un program, îl scrii tu 🙂 Doar că eu, deşi programez sub Linux de 8 ani, habar n-am să fac o aplicaţie cu o interfaţă grafică (butoane, ferestre, meniuri). Aşa că am decis că e momentul să-mi corectez lacuna asta şi m-am apucat să învăţ GTK. GTK este un set de module, disponibile cam pentru orice limbaj de programare, cu care poţi crea foarte uşor aplicaţii grafice. De exemplu, creezi o fereastră principală, un buton, şi specifici ce vrei să se întâmple când utilizatorul apasă pe acel buton. GTK stă la baza multor aplicaţii de Linux, cum ar fi Gimp, Firefox sau Gnome.

Deocamdată sunt la stadiul în care, în vreo 80 de linii de cod, aplicaţia mea ştie să afişeze o imagine şi poţi să defilezi stânga-dreapta-sus-jos prin ea. 🙂 E distractiv să înveţi un limbaj nou, când ai un manual bine scris. Nu ai decât să copiezi bucăţi din exemplele date şi totul pare să meargă. Cu timpul, descoperi că de fapt nu înţelegi de ce codul merge cum merge şi acolo dai de greu. E fascinant cum porneşti la drum cu atitudinea „trebuie să învăţ limbajul ăsta, numai atât cât să-mi pot face treaba cu el” şi descoperi că, de fapt, şi învăţatul în sine e distractiv şi merită să înţelegi în detaliu ce se întâmplă.

Omul face planuri şi Dumnezeu râde

M-am hotărât să închid, de la anu’, unul din cele mai importante capitole din cariera mea: programarea la DEX online. De vreo doi ani, printre picături, am tot făcut pregătiri pentru momentul ăsta (la modul general) şi am încercat să descentralizez diversele componente ale proiectului, care, la început, depindeau toate de mine: moderarea definiţiilor trimise, răspunsul la mesaje, descărcarea unei copii a bazei de date şi altele. Acum de toate astea se ocupă ceilalţi voluntari. Eu unul răspund poate la 10% din emailuri, iar definiţii moderez câte 10-20 din an în Paşti.

Mai e o singură componentă pe care n-am reuşit să o pasez nimănui, şi anume programarea codului în sine. Cred că asta e cea mai mare limitare a proiectului, pentru că oricâte idei am avea pentru dezvoltare, nu are cine să le implementeze. E şi vina mea că n-am căutat activ alţi programatori. Dar am hotărât, chiar şi în condiţiile astea, să încerc şi altceva, pentru că simt că DEX online a ajuns, de bine — de rău, la stadiul în care funcţionalitatea codului e suficient de bună.

Evident, o să rămân prin preajma proiectului, pentru că tot eu sunt şi inginerul de sistem, tot la mine vine primul email când se întâmplă ceva cu site-ul (deşi cei de la Elvsoft fac o treabă nemaipomenită, n-am avut nici un fel de probleme în peste un an de găzduire la ei). Cam tot eu răspund şi la emailuri de natură tehnică, cele la care mă pricep (la cele de natură lingvistică avem de mult voluntari cu mult mai pricepuţi ca mine).

Ce urmează pentru mine? Evident, ceva din domeniul programării, pentru că asta e meseria mea:


Am câteva idei şi mă consider extrem de norocos că am luxul să-mi aleg la care să lucrez. Şi vreau să mă gândesc bine, pentru că plecând de la un proiect cu impactul pe care l-a avut DEX online, mă simt obligat moralmente să încep ceva la fel de util. Şi apropo, dacă aveţi idei, le ascult cu plăcere!

Cel mai ambiţios proiect de pe listă ar fi un site cu muzică sub licenţa GPL. Artiştii pot să-şi publice muzica pe site, cu condiţia să accepte faptul că opera lor poate fi descărcată, ascultată, modificată, remixată şi redistribuită sub aceeaşi licenţă. Utilizatorii pot veni la site, pot să descarce câtă muzică vor fără să plătească nimic. Voluntar, dacă unui utilizator i-a plăcut muzica unui artist, poate să dea click pe un buton ca să-i trimită artistului un dolar, sau doi, sau zece, sau câţi vrea el.

Sunt din ce în ce mai hotărât să încep proiectul ăsta, deşi ar fi extrem de spinos din punct de vedere tehnic, financiar şi legal. Dar am adrenalina necesară, pentru că acum câteva zile am citit ştirea asta. În esenţă, o femeie care a distribuit muzică pe internet (la fel ca alte câteva sute de milioane de oameni) a fost dată în judecată de RIAA, a pierdut procesul şi a fost obligată să plătească $220.000 în daune pentru 26 de melodii distribuite. Şi pagubele nici măcar nu-s către artişti, de ei nici măcar nu ţine nimeni seama, ci către RIAA. Cel mai rău e că acum s-a creat un precedent şi probabil vor urma şi alte procese. Lucrurile merg într-o direcţie complet aberantă: cu cât e mai simplă copierea informaţiei digitale, cu atât mai acerbe sunt restricţiile impuse, doar ca să ne agăţăm de un sistem de copyright care nu a fost gândit pentru opere digitale. Şi deci ăsta ar fi visul meu, să ajut şi eu un pic să îngropăm pacostea de RIAA odată pentru totdeauna, sau măcar să le reamintim ce ar trebui să fie ei într-o lume normală: un intermediar, acolo, o asociaţie de oameni care deţin patru pereţi izolaţi fonic, în nici un caz un mamut care face legea asupra a ce se întâmplă cu muzica după înregistrare şi care ia 70-80-90% din încasările pe un album.

Un alt proiect e legat de tipicul bisericesc. Cântând în strană toţi anii ăştia, am avut ocazia să descopăr complexitatea slujbelor religioase. Nu există două slujbe la fel şi cântările care se aduc depind de foarte multe variabile: există o periodicitate de opt săptâmâni a glasurilor muzicale, există sfântul zilei, există perioade speciale cum ar fi cele patru posturi de peste an, există numărătoarea duminicilor trecute de la Rusalii (care nici măcar nu este consecutivă şi care dictează „tematica” duminicii respective), există data Paştilor, stabilită astronomic… Toate aceste norme, care fac parte din tipic, dictează ce şi când se cântă. De obicei ele se completează una pe cealaltă, dar uneori se suprapun şi există nişte reguli suplimentare. Un exemplu familiar este când Paştele cade de Sfântul Gheorghe (s-a întâmplat de vreo două ori de când mă ştiu) şi atunci toate slujbele pentru Sfântul Gheorghe se amână pentru a doua zi.

Cred că ar fi frumos să existe un site unde să poţi tasta data calendaristică şi să-ţi dea tot ce se cântă în ziua respectivă la biserică. Proiectul e făcubil, deşi aş avea foarte mult de citit din Tipic (care-i o cărţulie de dimensiuni respectabile). Nu ştiu dacă ar fi un site prea folosit, probabil că nu. Dar mie unuia mi-ar folosi, că mi s-a întâmplat foarte des să stau în strană cu două-trei cărţi în faţă şi să nu ştiu de unde să încep 🙂

O a treia idee, care mi-a venit acum vreo două săptămâni şi n-am apucat să o rumeg prea mult, ar fi să-mi bag puţin mâinile în Linux (Fedora, că asta folosesc) şi să văd cât de repede pot să-l fac să booteze. Totul a pornit de la faptul că, de curând, laptopul meu nu mai vrea să facă „suspend”. În mod normal, unui laptop îi închizi capacul şi el se „suspendă”, adică un fel de hibernare care consumă foarte puţin curent şi din care revine în două-trei secunde când îi redeschizi capacul. La mine, suspendarea nu mai merge, ştiu exact de ce şi aştept să repare ATI problema (e ceva cu placa grafică). Dar până atunci, sunt obligat să deschid şi să închid laptopul de la buton. Ocazie cu care am descoperit că durează 1 minut şi 5 secunde să booteze.

Mie asta mi se pare enorm şi inacceptabil. Eu aş vrea să booteze ca HC-ul meu de acum 15 ani, îl bagi în priză şi într-o secundă îl poţi folosi 🙂 Dar serios, mă tot întreb de ce un calculator modern are nevoie de mai mult de o secundă, maxim două ca să pornească. În Linux, principiul e că există multe programe, numite „servicii” care pornesc la bootare. Senzaţia mea e că echipele care scriu fiecare din aceste servicii se gândesc că e ok ca serviciul lor să pornească într-o secundă sau două. Dar când ai 30 de servicii care pornesc, ajungi la timpi de bootare de un minut şi mai bine. Şi mă gândesc că dacă Linux ajunge la stadiul în care apeşi butonul de pornire şi în câteva secunde poţi să foloseşti calculatorul, i-ar convinge pe mulţi să-l încerce.

Mai am vreo două luni în care vreau să aduc nişte ultime îmbunătăţiri la DEX online. Dar, printre picături, încerc să mă hotărăsc ce urmează, şi e al naibii de palpitant.