This is an old revision of the document!
Tema 1 - Mini OCR
Responsabili: Anca Morar, Alexandru Grădinaru
Lansare: 17 decembrie 2021
Termen de predare: 23 ianuarie 2022, ora 23:55
-
Notă: Orice informație ce nu a fost acoperită în acest document este la latitudinea voastră!
În cadrul acestei teme va trebui să implementați un OCR simplu.
Descrierea aplicației
Aplicația va permite încărcarea unei imagini de intrare, identificarea și afișarea textului din acea imagine. Se va pune la dispoziție de asemenea o imagine șablon cu literele alfabetului și un fișier text care realizează corespondența dintre caractere și literele din imaginea șablon.
Imaginea de intrare este următoarea:
Imaginea șablon cu literele alfabetului este următoarea:
Fișierul text care realizează corespondența între caractere și literele din șablon conține pe fiecare linie următoarele elemente:
caracterul x y
x și y reprezintă adresa pixelului de unde începe dreptunghiul încadrator al caracterului, în imaginea șablon.
Fișierul text poate fi descărcat de aici: sablon.txt
De exemplu, dacă pe prima linie in fișier avem următoarele elemente:
A 280 233
înseamnă că în imaginea șablon, la rezoluția originală (1920 x 1080), imaginea cu caracterul “A” se găsește într-un dreptunghi încadrator care are colțul din stânga-sus la pixelul (280,233):
Textul din imaginea de intrare se va afișa în consolă: MERRY CHRISTMAS AND A HAPPY NEW YEAR !
Pași
Pașii algoritmului de identificare a textului sunt următorii:
Conversia pixelilor imaginii filtrate din spațiul RGB în spațiul HSV (Hue, Saturation, Value)
Segmentarea imaginii utilizând nuanța (Hue) pe post de criteriu de similaritate
Puteti folosi orice metodă de segmentare a imaginii, dar sunteți încurajați să aplicați un algoritm simplu de segmentare prin extindere (region growing):
Se consideră că toți pixelii imaginii sunt nevizitați
Se parcurg (și se bifează ca fiind vizitați) pixelii imaginii de sus în jos și de la stânga la dreapta. Dacă în parcurgerea scan-line se identifică un pixel de foreground (care are nuanța verde), atunci acesta primește un ID neutilizat până atunci, și este inserat într-o coadă, el reprezentând un pixel germen. Urmează o parcurgere în lățime (BFS), în care se procesează elementele din coadă (cât timp aceasta conține elemente). Procesarea unui element din coadă constă din următorii pași:
se identifică toți pixelii vecini nevizitați, care au o nuanță similară, și se introduc în coadă
pixelii vecini se marchează ca fiind nevizitați și primesc același ID al pixelului germen
se scoate din coadă elementul care a fost procesat
Această parcurgere în lățime conduce la identificarea unei regiuni de foreground, a unei litere individuale din imaginea de intrare.
Bonusuri Posibile
Indicații Suplimentare
Tema se poate implementa in orice limbaj sau framework. Dacă folosiți biblioteci ajutătoare (ex, OpenCV), acestea pot fi utilizate numai pentru încărcarea/afișarea imaginii sau pentru operații de citire/scriere pe pixelii imaginii. Nu se pot folosi funcții deja implementate în biblioteci pentru:
implementarea filtrului median
trecerea din spațiul RGB în spațiul HSV
segmentarea imaginii și identificarea regiunilor de foreground (a literelor individuale)
determinarea dreptunghiurilor încadratoare regiunilor (literelor)
compararea pixelilor din dreptunghiurile încadratoare din imaginea de intrare cu informația din șablonul cu alfabetul
Arhivarea proiectului
Arhiva trebuie sa contina toate resursele necesare compilarii si rularii.
Dacă folosiți framework-ul de la laborator, realizați următorii pași:
inainte de a face arhiva asigurati-va ca ati curatat proiectul Visual Studio:
click dreapta pe proiect in Solution Explorer → Clean Solution
si stergeti folderul /build/.vs (daca nu il vedeti, este posibil sa fie ascuns)
SAU stergeti complet folderul /build
in cazul in care arhiva tot depaseste limita de 50MB (nu ar trebui), puteti sa stergeti si folderul /deps sau /assets intrucat se pot adauga la testare. Nu este recomandat sa faceti acest lucru intrucat ingreuneaza mult testarea in cazul in care versiunea curenta a librariilor/resurselor difera de versiunea utilizata la momentul scrierii temei.