This shows you the differences between two versions of the page.
spg:teme:2021:02 [2021/12/17 11:24] anca.morar |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== Tema 1 - Mini OCR ==== | ||
- | * **Responsabili:** Anca Morar, Alexandru Grădinaru | ||
- | * **Lansare:** 17 decembrie 2021 | ||
- | * **Termen de predare:** 23 ianuarie 2022, ora 23:55 | ||
- | * **Regulament:** https://ocw.cs.pub.ro/courses/spg/regulament_general | ||
- | * **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 literelor individuale ș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: | ||
- | |||
- | {{ :spg:teme:2021:imageonline-co-noisedimage.png?300 |}} | ||
- | |||
- | Imaginea șablon cu literele alfabetului este următoarea: | ||
- | |||
- | {{ :spg:teme:2021:sablon.png?300 |}} | ||
- | |||
- | Fișierul text care realizează corespondența între caractere și literele din șablon conține pe fiecare linie următoarele elemente: | ||
- | <code> caracterul x y </code> | ||
- | 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: {{:spg:teme:2021:sablon.txt|}} | ||
- | |||
- | De exemplu, dacă pe prima linie in fișier avem următoarele elemente: | ||
- | <code> A 280 233 </code> | ||
- | î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): | ||
- | |||
- | {{ :spg:teme:2021:sablon_exemplu.png?200 |}} | ||
- | |||
- | 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: | ||
- | * **Aplicarea unui filtru median pentru eliminarea zgomotului din imagine** | ||
- | * Filtrul median constă în ordonarea intensităților pixelilor dintr-o vecinătate a pixelului curent și selectarea intensității de pe poziția din mijloc (de exemplu, dacă alegem o vecinătate 3x3, cu 9 pixeli, se va alege intensitatea de pe poziția a 5-a în vectorul ordonat de intensități). | ||
- | * Filtrul median va fi aplicat pe fiecare canal (R,G,B), independent | ||
- | * Rezultatul filtrului median aplicat pe imaginea de intrare este următorul: | ||
- | |||
- | {{ :spg:teme:2021:merry_median.png?300 |}} | ||
- | |||
- | * **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. În imaginea de mai jos se poate observa rezultatul segmentării: | ||
- | |||
- | {{ :spg:teme:2021:merry_segmented.png?300 |}} | ||
- | |||
- | * **Identificarea dreptunghiurilor încadratoare ale regiunilor de foreground individuale și afișarea acestora** | ||
- | * Se calculeaza minimul și maximul pe x si pe y ale adreselor pixelilor dintr-o regiune | ||
- | * Se afișează dreptunghiurile încadratoare pe imaginea segmentată. În imaginea de mai jos se poate observa rezultatul acestui pas: | ||
- | |||
- | {{ :spg:teme:2021:merry_segmented_-bbox2.png?300 |}} | ||
- | | ||
- | === Bonusuri Posibile === | ||
- | |||
- | * B1 | ||
- | |||
- | |||
- | === 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 === | ||
- | |||
- | <note> | ||
- | 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. | ||
- | </note> |