Corectarea automată a testelor grilă propusă de Anca -Maria Luncașu Sesiunea: iulie, 2019 Coordonator științific Lect. Dr. Anca Ignat 1 UNIVERSITATEA… [605611]
UNIVERSITATEA “ALEXANDRU IOAN CUZA” DIN IAȘI
FACULTATEA DE INFORMATICĂ
LUCRARE DE LICENȚĂ
Corectarea automată a testelor grilă
propusă de
Anca -Maria Luncașu
Sesiunea: iulie, 2019
Coordonator științific
Lect. Dr. Anca Ignat
1
UNIVERSITATEA “ALEXANDRU IOAN CUZA” DIN IAȘI
FACULTATEA DE INFORMATICĂ
Corectarea automată a
testelor grilă
Anca-Maria Luncașu
Sesiunea : iulie, 2019
Coordonator științific
Lect. Dr. Anca Ignat
2
Avizat,
Îndrumător Lucrare de Licență
Lect. Dr. Anca Ignat
Data ____________ Semnătura
________________
DECLARAȚIE privind originalitatea conținutului lucrării de licență
Subsemntatul(a) Luncașu Anca-Maria, domiciliul în comuna Movilița, județul
Vrancea, născut(ă) la data de 23.03.1995 identificat prin CNP [anonimizat],
absolvent(a) al(a) Universității „Alexandru Ioan Cuza” din Iași, Facultatea de Informatică
specializarea Informatică, promoția 2019, declar pe propria răspundere, cunoscând
consecințele falsului în declarații în sen sul art. 326 din Noul Cod Penal și dispozițiile Legii
Educației Naționale nr. 1/2011 art.143 al. 4 si 5 referitoare la plagiat, că lucrarea de licență
cu titlul: Corectarea automată a testelor grilă elaborată sub îndrumarea dl. / d-na Lect. Dr.
Ignat Anca, pe care urmeaz ă să o susțină în fața comisiei este originală, îmi aparține și îmi
asum conținutul său în întregime.
De asemenea, declar că sunt de acord ca lucrarea mea de licență să fie verificată prin
orice modalitate legală pentru confirmarea originalității, consimți nd inclusiv la
introducerea conținutului său într -o bază de date în acest scop.
Am luat la cunoștință despre faptul că este interzisă comercializarea de lucrări
științifice in vederea facilitării fasificării de către cumpărător a calității de autor al unei
lucrări de licență, de diploma sau de disertație și în acest sens, declar pe proprie
răspundere că lucrarea de față nu a fost copiată ci reprezintă rodul cercetării pe care am
întreprins -o.
Dată azi, ………………………… Semnătură student …………………………
3
DECLARAȚIE DE CONSIMȚĂMÂNT
Prin prezenta declar că sunt de acord ca Lucrarea de licență cu titlul „ Corectarea
automată a testelor grilă ”, codul sursă al programelor și celelalte conținuturi (grafice,
multimedia, date de test etc.) care însoțesc această lucrare s ă fie utilizate în cadrul
Facultății de Informatică.
De asemenea, sunt de acord ca Facultatea de Informatică de la Universitatea
„Alexandru Ioan Cuza” din Iași, să utilizeze, modifice, reproducă și să distribuie în scopuri
necomerciale programele -calculato r, format executabil și sursă, realizate de mine în cadrul
prezentei lucrări de licență.
Iași, data
Absolvent: [anonimizat]
________________________________
(semnătura în original)
4
Contents
Introducere ………………………….. ………………………….. ………………………….. ………………………….. …… 5
Contribuții ………………………….. ………………………….. ………………………….. ………………………….. ……. 6
Capitolul I: Descrierea problemei ………………………….. ………………………….. ………………………….. … 7
Capitolul II: Biblioteca OpenCV ………………………….. ………………………….. ………………………….. …. 8
Capitolul III: Structura aplicației ………………………….. ………………………….. ………………………….. …. 9
III.1 Pre -procesare imagine ………………………….. ………………………….. ………………………….. ……… 9
III.2. Identificarea conturului ………………………….. ………………………….. ………………………….. …. 11
III.3. Transformare geometrică ………………………….. ………………………….. ………………………….. 13
III.4. Verificarea testului ………………………….. ………………………….. ………………………….. ……….. 14
Capitolul IV: Interfața ………………………….. ………………………….. ………………………….. ………………. 18
Concluzii ………………………….. ………………………….. ………………………….. ………………………….. ……. 19
Idei de dezvoltare ………………………….. ………………………….. ………………………….. …………………….. 20
Bibliografie ………………………….. ………………………….. ………………………….. ………………………….. … 21
5
Introducere
În ziua de astăzi totul a devenit automatizat, pentru a ne simplifica activitățile din via ța de
zi cu zi. Tehnologiile apărute ne dau ocazia să descoperim metode de rezo lvare pentru orice
avem nevoie.
OMR (Optical mark recognition – Recunoașterea marcajelor optice ) reprezintă procesul
de captare a datelor marcate de om din forme de documente, cum ar fi sondaje și teste. Ele sunt
utilizate pentru a citi chestionare, hârtie d e examinare cu alegere multiplă. Software -ul OMR este
o aplicație software de calculator care face posibil OMR pe un computer desktop utilizând un
scaner de imagine pentru a procesa sondaje, teste, foi de prezență, liste de verificare și alte
formulare de hârtie simplă tipărite pe o imprimantă laser.
Eu am decis ca în această lucrare să implementez o aplicație simpla pentru corectarea
automata a testelor grilă, care este o variantă accesibilă, față de cele aparute deja.
În Capitolul I este prezentată pe scurt aplicatia.
Capitolul II prezintă biblioteca OpenCV și functiile utilizate în impl ementarea aplicației.
Capitolul III descrie structura si metodele folotite in dezvoltarea aplicației.
Capitolul IV conține câteva informații legate de interfața utilizată.
6
Contr ibuții
Aplicația prezentată în această lucrare este dezvoltată de m ine, folosind biblioteca
OpenCV, care se afla sub incidența unei licențe de tip BSD și poate fi folosită fară restricții.
În aplic ație am identificat variantele posibile de răspuns, cât și cele considerate corecte.
Am creat o interfață simplă, pentru a fi ușor de utilizat.
7
Capitolul I: Descrierea problemei
În această aplicație îmi doresc să realizez corectarea automată a unui test grilă. Testul
conține doar variantele posibile sub forma unor cercuri, iar răspunsurile considerate corecte sunt
marcate prin umplerea cerculețului corespunzator.
Figure 1. Exemplu de test posibil
8
Capitolul II: Biblioteca OpenCV
În procesul de creare al aplicației am utilizat limbajul d e programare Python impreuna cu
biblioteca OpenCV.
Biblioteca OpenCv conține funcții importante pentru vederea computerizată (Computer
vision).
9
Capitolul III: Structura aplicației
În acest capitol voi prezenta modul în car e am implementat aplicația .
III.1 Pre -procesare imagine
Înainte de a aplica funcții și metode asupra unei imagini, este important să efectuăm
cateva proceduri.
10
Inițial vom converti imaginea din BGR (Blue Green Red) în tonuri de gri ( Grayscale) ,
apoi vom aplica filtrul Gaussian. Acest filtru are rolul de a reduce zgomotul dintr -o imagine și de
a o netezi, astf el prevenim informațiile greșite care ar putea apărea. Folosim funcția
cv2.GaussianBlur() .
Figure 2. Imaginea dupa ce am aplicat cele doua funcții
În continuare vom folosi Canny Edge Detection , care este un algoritm de detectare al
margin ilor. Acesta se realizeaza in cinci pasi:
– Reducerea zgomotului – aplicând filtrul Gaussian
– Găsirea intensității gradientului imaginii
– Suprimare non maximă
– Aplicarea pragului dublu pentru a determina marginile posibile
– Urmăriți marginea prin histe rezis (“hysteresis”)
11
OpenCV pune la dispoziție o funcție, cv2.Canny() , care aplică toate cele
menționate mai sus.
Figure 3. Detectarea marginilor ( edge detection )
III.2. Identificarea conturului
Contururile pot fi explicate ca o curbă ce unește toate punctele de -a lungul unei limite,
având aceeasi culoare sau intensitate. Acestea au un rol important în analiza unei forme și
detectarea obiectelor.
12
Înainte de gasi contururi , aplicați detectarea marginilor ( edge detection ) sau thresh hold.
Am aplicat detectarea marginilor pe care am prezentat -o mai sus, apoi funcția
cv2.findContours() .
Contururile detectate sunt stocate ca un vector de puncte ș i optional putem salva și
infor mații despre topologia imaginii. Mod ul de extragere este RETR_EXTERNAL deoarece
acesta selecteaza doar conturu ri aflate in extremitate. Metoda de aproximare folosită este
CHAIN_APPROX_SIMPLE . Aceasta comprimă segmentele orizontale, verticale și diagonale și
lasă numai punctele lor finale.
În final, pentru aproximarea conturului pe care îl căutăm, vom folosi funcția
cv2.approxPolyDP (). Aceast ă funcție este o implementare a algoritmului Douglas -Peucker , care
are ca scop , având in vedere o curbă compusă din segmente de linie, găsirea unei curbe similare
cu mai puține puncte.
Figure 4. Conturul hartiei
13
III.3. Transformare geometrică
Această lucrare propune modelul de transformare de tip top-down , birds -eye-view pentru
a extrage d in imagine schița examenului pe care vrem să -l verificăm.
Funcțiile folosite nu modifică conținutul imaginei, ci defo rmeaza grila de pixeli și această
hartă ajunge la imaginea de destin ație. Pentru fiecare pixel (x,y) al imaginei de destinație,
funcțiile calculează coordonatele pixelului corespunzator în imaginea sursă și copiază valoarea
pixelilor.
Inițial vom o rdona coordonatele pixelilor corespunzători varfurilor conturului pe care l-
am identificat in ord inea acelor de ceasornic . Aceste coordonate corespund colturilor casetei de
încadrare , pe care trebuie sa le asociem in or dinea stânga -sus, dreap ta-sus, dreapt a-jos și stanga –
jos.
Pentru tra nsformarea în perspectivă, avem nevoie de o matrice de transformare 3×3.
Liniile drepte vor rămâne drepte chiar și după transformare. Pentru a găsi aceast ă matrice de
transformare, avem nevoie de cele patru puncte de pe imagine a de intrare corespunzătoare
punctelor de pe ima ginea de ieșire. Dintre aceste patru puncte, trei dintre el e nu ar trebui să fie
coliniare. Apoi , matricea de transformare poate fi găsită folosind funcția
cv2.getPerspectiveTransform (). Apoi aplicăm cv2.warpPerspective () cu această matrice de
transformare 3×3 pentru a obtine imaginea pe care o dorim.
14
Figure 5. . Imaginea după transformare
III.4. Verificarea testului
Vom folosi și aici pre -proce sarea imaginei descrisă la începutul acest ui capitol da r de
această dată vom inlocui algoritmul de detectare Canny Edge cu Thresholding . Dacă valoarea
pixelului este mai mare decât o valoare de prag, îi este atribuită o valoare (poate fi albă), altfel îi
este atribuită o altă valoare (poate fi negru). Funcția utilizată este cv2.threshold () . Primul
argument este i maginea sursă, care ar trebui să fie o imagine în tonuri de gri . Al doilea
argument este valoarea de prag care este utilizată pentru a clasifica valorile pixelilor. Al treilea
argument este valoarea maxVal care reprezintă valoarea care trebuie dată dacă v aloarea pixelului
este mai mare decât (uneori mai mică decât) valoarea pragului. OpenCV oferă diferite stiluri de
prag și este decisă de al patrulea parametru al funcției. Diferite tipuri sunt:
cv2.THRESH_BINARY
15
cv2.THRESH_BINARY_INV
cv2.THRESH_TRUNC
cv2.THRESH_TOZERO
cv2.THRESH_TOZERO_INV
Figure 6. Imaginea dupa ce am aplicat Threshold
În continuare am folosit aceeași funcție pe care am prezentat -o într -un subcapitol
anterior, și anume cv2.findContours ().
Folosind funcția cv2.boundingRect () aflăm coordonatele (x,y) corespunzatoare coltului
sus-stanga, lățimea și înăltimea dreptunghiului corespunzator un ui contur. Astfel având aceste
informatii putem identifica cercurile corespunzătoare răspunsurilor posibile.
16
Figure 7. Identi ficare variante ră spuns posibile
Următorul pas pe care î l urmăm este sortarea. Aceasta se face in funcție de ordonatele x si
y, sau altfel spus de sus în jos și de la stânga la dreapta.
Contururile obținute le imparțim pe linii și verificăm pentru fiecare în parte, comparând
fiecare contur obținut numarul de pixeli diferiți de alb. Folos im funcția cv2.countNonZero( ) , iar
raspunsul considerat marcat este acela ce are cei mai multi pixeli non-zero.
Figure 8. Comparație raspunsuri
17
Pentru a afla dacă ră spunsul este corect , îl comparăm cu cel pe care îl avem in vectorul de
soluții. În cazul in care raspunsul este corect, acesta va fi marcat cu verde. În caz contrar,
raspunsul va fi marcat cu rosu.
Figure 9. Rezultatul final
Se va afișa numarul de răspunsuri corecte in urma verifica rilor, precum se vor indica
răspunsurile co recte, cât și cele gresite.
18
Capitolul IV: Interfața
Interfața este una simplă, implementată folosind biblioteca Tkinter din Python. Aceasta
conține un buton de unde se va încarca imaginea ce conține testul ce se vrea a fi corectat.
Imaginea trebuie să încadreze tot testul pentru a putea fi identificat. În cazul in ca re imaginea nu
va fi compatibilă se va primi o eroare.
19
Concluzii
Prin această lucrare am încercat să dezvolt o aplicție care prezintă corectarea în mod
automat a testelor grilă.
Pe parcurul capitolelor prezentate, am detaliat structura fo losită și modul de funcționare
al aplicației. De asemenea am descris și funcționalități ale bibliotecii OpenCv.
20
Idei de dezvoltare
Pe viitor imi doresc să extind aplicația printr -o nouă metodă de introducere și
recunoaș tere a unui examen grilă, și anume camera web. Aceasta ar îmbunatați timpul oferit de
utilizator , acesta verificând mai multe luc rări în mai puțin ti mp.
O altă îmbunatățire ar fi identificarea numelui studentului/elevului, și introducerea sa
într-o bază de date, împreună cu nota obținută.
21
Bibliografie
1. Adrian Rosebrock , Practical Python and OpenCV: An Introductory, Exam ple Driven
Guide to Image Processing and Computer Vision (2014)
2. https://docs.opencv.org/3.1.0/index.html
3. https://www. pyimagesearch.com/2016/03/21/ordering -coordinates -clockwise -with-
python -and-opencv/
4. https://en.wikipedia.org/wiki/Canny_edge_detector
5. https://ro.wikipedia.org/wiki/OpenCV
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Corectarea automată a testelor grilă propusă de Anca -Maria Luncașu Sesiunea: iulie, 2019 Coordonator științific Lect. Dr. Anca Ignat 1 UNIVERSITATEA… [605611] (ID: 605611)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
