File size: 5,530 Bytes
c352470
 
 
 
 
 
 
 
 
 
 
 
 
e6dc665
c352470
e6dc665
473ad58
 
 
c352470
 
 
 
 
 
 
8debed2
c352470
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e6dc665
cda6f6c
c352470
 
 
 
 
 
e6dc665
cda6f6c
c352470
 
 
 
 
 
e6dc665
c352470
 
e6dc665
 
c352470
 
 
 
 
 
 
86af741
e6dc665
c352470
 
 
 
 
 
 
 
 
 
 
 
 
e6dc665
 
 
473ad58
e6dc665
 
 
 
473ad58
e6dc665
 
 
 
473ad58
e6dc665
 
c352470
 
 
 
 
 
 
 
 
e6dc665
 
473ad58
 
 
c352470
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import cv2
import numpy as np
import functions

#fotograf ozellikleri
heightImg = 300*4
widthImg  = 210*4
#pathImage = "denemeler/100luk_numarali.jpg"
questions=20
choices=6



def optic1(ans_txt1,ans_txt2,ans_txt3,pathImage, save_images= True):
#cevap anahtarini dosyadan okuma ve sayiya cevirme
    
    ans_1 = ans_txt1
    ans_2 = ans_txt2
    ans_3 = ans_txt3

#perspektif islemleri icin cozunurluk
    wrap_h = 18*20
    wrap_v = 18*20
    img = pathImage #eger girdi dogrudan np arrayse
#fotonun okunmasi ------------------------------------------------------------------------------------------------
    #img = cv2.imread(pathImage)
    img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
    img = cv2.resize(img, (widthImg, heightImg)) # RESIZE IMAGE
    imgBiggestContour = img.copy()
    imgFinal = img.copy()
    imgContours = img.copy()
    imgBlank = np.zeros((heightImg,widthImg, 3), np.uint8) 

#donusumler---------------------------------------------------------------------------------
    imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # CONVERT IMAGE TO GRAY SCALE
    imgBlur = cv2.GaussianBlur(imgGray, (5, 5), 1) # ADD GAUSSIAN BLUR
    imgCanny = cv2.Canny(imgBlur,10,70) # APPLY CANNY 

#CONTOURS-------------------------------------------------------
    contours, hierarchy = cv2.findContours(imgCanny, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
    cv2.drawContours(imgContours, contours, -1, (0, 255, 0), 10) # DRAW ALL DETECTED CONTOURS

#dortgen bulma--------------------------------------------------
    rectCon = functions.rectContour(contours) 
    biggestContour = functions.getCornerPoints(rectCon[0])
    secondContour = functions.getCornerPoints(rectCon[1])
    thirdContour = functions.getCornerPoints(rectCon[2])
    #fourthContour = functions.getCornerPoints(rectCon[3])

#main
    if biggestContour.size != 0 and secondContour.size != 0:
    
        cv2.drawContours(imgBiggestContour, biggestContour,-1,(0,255,0),20) 
        cv2.drawContours(imgBiggestContour, secondContour,-1,(255,0,0),20) #sondk' kalinlik ortada renk 
        cv2.drawContours(imgBiggestContour, thirdContour,-1,(0,0,255),20) #sondk' kalinlik ortada renk 
        #cv2.drawContours(imgBiggestContour, fourthContour,-1,(0,0,20),20) #sondk' kalinlik ortada renk 
    
        biggestContour=functions.reorder(biggestContour)   
    #cevap siklari icin -************************************************************
        pts1 = np.float32(biggestContour) 
        pts2 = np.float32([[0, 0],[wrap_v, 0], [0, wrap_h],[wrap_v, wrap_h]]) 
        matrix = cv2.getPerspectiveTransform(pts1, pts2)
    
        imgWarpColored_1 = cv2.warpPerspective(img, matrix, (wrap_v, wrap_h))
        imgWarpGray_1 = cv2.cvtColor(imgWarpColored_1,cv2.COLOR_BGR2GRAY) 
        imgThresh_1 = cv2.threshold(imgWarpGray_1,0,255,cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]  

    #second buyuk icin perspektif 
        secondContour=functions.reorder(secondContour)
        pts1_2 = np.float32(secondContour) 
        pts2_2 = np.float32([[0, 0],[wrap_v, 0], [0, wrap_h],[wrap_v, wrap_h]]) 
        matrix_2 = cv2.getPerspectiveTransform(pts1_2, pts2_2)
        imgWarpColored_2 = cv2.warpPerspective(img, matrix_2, (wrap_v, wrap_h))
        imgWarpGray_2 = cv2.cvtColor(imgWarpColored_2,cv2.COLOR_BGR2GRAY) 
        #imgThresh_2 = cv2.threshold(imgWarpGray_2, 170, 255,cv2.THRESH_BINARY_INV )[1] 
        imgThresh_2 = cv2.threshold(imgWarpGray_2,0,255,cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]  
    
    #student id
        bubbles = functions.split_num(imgThresh_2, 10, 10)
        myPixelVal_2 = functions.pixelVal(10,10,bubbles)
        myPixelVal_2 = functions.id_reorder(myPixelVal_2)
        student_id = functions.id_answers(10,myPixelVal_2)
        #print(student_id)
    
        #soru kisimi
        column_3 = functions.splitColumn(imgThresh_1)
        boxes_1 = functions.splitBoxes(column_3[0])
        boxes_2 = functions.splitBoxes(column_3[1])
        boxes_3 = functions.splitBoxes(column_3[2])
        #boxes_1
        myPixelVal_1 = functions.pixelVal(questions,choices,boxes_1)
        myIndex_1 = functions.user_answers(questions,myPixelVal_1)
        grading_1, wrong_ans_1, empty_1 = functions.grading(ans_1,questions,myIndex_1)
        
        #boxes_2
        myPixelVal_2 = functions.pixelVal(questions,choices,boxes_2)
        myIndex_2 = functions.user_answers(questions,myPixelVal_2)
        grading_2, wrong_ans_2, empty_2 = functions.grading(ans_2,questions,myIndex_2)
        
        #boxes_3        
        myPixelVal_3 = functions.pixelVal(questions,choices,boxes_3)
        myIndex_3 = functions.user_answers(questions,myPixelVal_3)
        grading_3, wrong_ans_3 ,empty_3 = functions.grading(ans_3,questions,myIndex_3)
        
        
        student_idFix = ""
        for number in student_id:
            
            student_idFix += str(number)
        if save_images:
            for i in range(0,len(resim_listesi)):
                cv2.imwrite(f"images/{student_idFix}___{i}.jpg",resim_listesi[i])
        
        resim_listesi = [img,imgGray,imgBlur,imgCanny,imgContours,imgBiggestContour,imgThresh_1,imgThresh_2]
        grading = [grading_1,grading_2,grading_3]
        wrong_ans = [wrong_ans_1,wrong_ans_2,wrong_ans_3]
        empty = [empty_1,empty_2,empty_3]
        myIndexs = [myIndex_1,myIndex_2,myIndex_3]
    return grading, wrong_ans, student_idFix, resim_listesi,empty

#sonuc = optic1(ans_txt="cevapanahtari.txt",pathImage= "denemeler/100luk_numarali.jpg")
#print(sonuc)