mertbozkurt commited on
Commit
c352470
1 Parent(s): 9fe30ba

First Demo

Browse files
.gitattributes DELETED
@@ -1,34 +0,0 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tflite filter=lfs diff=lfs merge=lfs -text
29
- *.tgz filter=lfs diff=lfs merge=lfs -text
30
- *.wasm filter=lfs diff=lfs merge=lfs -text
31
- *.xz filter=lfs diff=lfs merge=lfs -text
32
- *.zip filter=lfs diff=lfs merge=lfs -text
33
- *.zst filter=lfs diff=lfs merge=lfs -text
34
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app.py ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from screen_add_note import screen_add_main
3
+ from screen_scan import screen_scan_main
4
+ from screen_note import screen_note_main
5
+ from streamlit_option_menu import option_menu
6
+
7
+ def local_css(file_name):
8
+ with open(file_name) as f:
9
+ st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True)
10
+
11
+ local_css("style.css")
12
+
13
+
14
+
15
+ def streamlit_menu(example=3):
16
+
17
+ if example == 3:
18
+ # 2. horizontal menu with custom style
19
+ selected = option_menu(
20
+ menu_title=None, # required
21
+ options=["Optik Okuma", "Yeni Not Girisi", "Not Goruntuleme"], # required
22
+ icons=["house", "book", "envelope"],
23
+ default_index=0, # optional
24
+ orientation="horizontal",
25
+ styles={
26
+ "container": {"padding": "0!important", "background-color": "#b2d8d8"},
27
+ "icon": {"color": "orange", "font-size": "0px"},
28
+ "nav-link": {
29
+ "font-size": "15px",
30
+ "text-align": "left",
31
+ "margin": "0px",
32
+ "--hover-color": "#eee",
33
+ },
34
+ "nav-link-selected": {"background-color": "#008080"},
35
+ },
36
+ )
37
+ return selected
38
+
39
+
40
+
41
+
42
+ def main():
43
+
44
+
45
+ selected = streamlit_menu(example=3)
46
+
47
+ if selected == "Optik Okuma":
48
+ screen_scan_main()
49
+ if selected == "Yeni Not Girisi":
50
+ screen_add_main()
51
+ if selected == "Not Goruntuleme":
52
+ screen_note_main()
53
+
54
+
55
+ if __name__ == "__main__":
56
+ main()
57
+
58
+
59
+
cevapanahtari.txt ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1 a
2
+ 2 c
3
+ 3 a
4
+ 4 b
5
+ 5 d
6
+ 6 e
7
+ 7 d
8
+ 8 d
9
+ 9 e
10
+ 10 d
11
+ 11 d
12
+ 12 b
13
+ 13 b
14
+ 14 c
15
+ 15 a
16
+ 16 a
17
+ 17 d
18
+ 18 e
19
+ 19 a
20
+ 20 b
data ADDED
@@ -0,0 +1 @@
 
 
1
+ Subproject commit ac8c215821138cfcb2bad83a69cb3c1fece7b936
data_func.py ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from huggingface_hub import Repository
3
+ import pandas as pd
4
+
5
+ DATASET_REPO_URL = "https://huggingface.co/datasets/mertbozkurt/school_data"
6
+ DATA_FILENAME = "untitled.csv"
7
+ DATA_FILE = os.path.join("data", DATA_FILENAME)
8
+ HF_TOKEN = "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"
9
+
10
+ def pull_read():
11
+
12
+ repo = Repository(
13
+ local_dir="data", clone_from=DATASET_REPO_URL, use_auth_token=HF_TOKEN
14
+ )
15
+
16
+ with open(DATA_FILE) as csvfile:
17
+ df = pd.read_csv(csvfile)
18
+ df = pd.DataFrame(df)
19
+
20
+ return repo, df
21
+
22
+ def make_new_data(sinif_kodu,ogrenci_no,ders_kodu,notu,yanlislar):
23
+ yeni_satir = {"sinif_kodu": sinif_kodu,
24
+ "ogrenci_no": ogrenci_no,
25
+ "ders_kodu": ders_kodu,
26
+ "notu": notu,
27
+ "yanlis_sorulari": yanlislar}
28
+ new_data = pd.DataFrame([yeni_satir])
29
+ return new_data
30
+
31
+ def update(new_data, repo_df):
32
+ updated_df = pd.concat([repo_df, new_data])
33
+ return updated_df
34
+
35
+ def save_and_push(dataFrame,repo):
36
+ dataFrame.to_csv("data/untitled.csv",index=False)
37
+ commit_url = repo.push_to_hub()
38
+ return commit_url
39
+
40
+ """repo, repo_df = pull_read()
41
+ new_data = make_new_data(12,151718,56,80,"2,3,5")
42
+ updated_df = update(new_data,repo_df)
43
+ save_and_push(updated_df,repo)"""
denemeler/100luk_numarali.jpg ADDED
denemeler/bossikli.jpg ADDED
functions.py ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import cv2
2
+ import numpy as np
3
+ import streamlit as st
4
+
5
+ def rectContour(contours):
6
+ rectCon = []
7
+ max_area = 0
8
+ for i in contours:
9
+ area = cv2.contourArea(i) #alan hesabi
10
+ #piksel alani 50den byukse gecerlidir
11
+ if area > 30:
12
+ peri = cv2.arcLength(i, True)
13
+ approx = cv2.approxPolyDP(i, 0.02 * peri, True) #kac tane koseye sahip oldugu
14
+ if len(approx) == 4: #4 ise dortgendir
15
+ rectCon.append(i)
16
+ rectCon = sorted(rectCon, key=cv2.contourArea,reverse=True) #alanlari hesaplicak ve siralicak ki ona gore alanlari belirleyelim
17
+ #print(len(rectCon))
18
+ return rectCon
19
+
20
+ def getCornerPoints(cont):
21
+ peri = cv2.arcLength(cont, True)
22
+ approx = cv2.approxPolyDP(cont, 0.02 * peri, True) #kose degerleri
23
+ return approx
24
+
25
+
26
+ def reorder(myPoints):
27
+
28
+ myPoints = myPoints.reshape((4, 2)) #fazla koseliyi kaldiralim
29
+ #print(myPoints)
30
+ myPointsNew = np.zeros((4, 1, 2), np.int32)
31
+ add = myPoints.sum(1)
32
+ #print(add)
33
+ #print(np.argmax(add))
34
+ myPointsNew[0] = myPoints[np.argmin(add)] #[0,0]
35
+ myPointsNew[3] =myPoints[np.argmax(add)] #[w,h]
36
+ diff = np.diff(myPoints, axis=1)
37
+ myPointsNew[1] =myPoints[np.argmin(diff)] #[w,0]
38
+ myPointsNew[2] = myPoints[np.argmax(diff)] #[h,0]
39
+
40
+ return myPointsNew
41
+
42
+ #siklari bolmek icin 20 tane soru vertical/ 5 tane isaret alani +1 tane soru sayisi yazan yer
43
+ #6 horizatanl bolmek
44
+ def splitBoxes(img):
45
+ rows = np.vsplit(img,20) #vertical
46
+ boxes=[]
47
+ for r in rows:
48
+ cols= np.hsplit(r,6) #horizantal
49
+ for box in cols:
50
+ boxes.append(box)
51
+ return boxes
52
+
53
+ #ogrenci numarasi alani icin ayni fonksiyonu kullandik
54
+ #yuakrdakisini silip sadece bu da kullanilabilir dogru degerler ile
55
+ #ogrenci numarasi alani 0-9 arasi sayilardan 10 tane isaretleme yeri iceriyor
56
+ #10x10seklinde boleriz
57
+ def split_num(img,vertical, horizantal):
58
+ rows = np.vsplit(img,vertical) #vertical
59
+ boxes=[]
60
+ for r in rows:
61
+ cols= np.hsplit(r,horizantal) #horizantal
62
+ for box in cols:
63
+ boxes.append(box)
64
+ return boxes
65
+
66
+ #yan yana 3 tane birlesik ders alani oldugu icin onlari 3 ayri
67
+ #sekle getiriyor
68
+ def splitColumn(img):
69
+ column = np.hsplit(img,3)
70
+
71
+ return column
72
+
73
+
74
+ #puan hesaplama alani
75
+ #soru sayisi dogru cevaplari ve ogrenci cevaplarini aliyor
76
+ #bunlari karsilastirip yeni bir listeye 1/0 seklinde kodluyor
77
+ #1ler toplanip puan hesaplanmis oluyor
78
+ def grading(answers,num_questions,myAnswers):
79
+ grading=[]
80
+ wrong_ans = []
81
+ for x in range(0,num_questions):
82
+ if answers[x] == myAnswers[x]:
83
+ grading.append(1)
84
+ else:
85
+ grading.append(0)
86
+ wrong_ans.append(x+1)
87
+ score = (sum(grading)/num_questions)*100
88
+ return score ,wrong_ans
89
+
90
+ #piksel degerlerinde kullanici cevaplarini
91
+ #okuyupu index seklinde listeye kaydediyor
92
+ def user_answers(num_questions,myPixelVal):
93
+ myIndex=[]
94
+ for x in range (0,num_questions):
95
+ arr = myPixelVal[x]
96
+ myIndexVal = np.where(arr == np.amax(arr))
97
+ myIndex.append(myIndexVal[0][0])
98
+ return myIndex
99
+
100
+ #student id kismi yukardan asagiya dogru karsilastirma yaparak
101
+ #isretli alan tespit edilecegi icin satir ve sutunlari tekrar duzenlemiz gerekti
102
+ #[[1,2,3],[4,5,6],[7,8,9]] ----> [[1,4,7],[2,5,8],[3,6,9]]
103
+ def id_reorder(myPixelVal):
104
+ duz_liste = []
105
+ for sutun in range(len(myPixelVal[0])):
106
+ for satir in range(len(myPixelVal)):
107
+ duz_liste.append(myPixelVal[satir][sutun])
108
+ yeni_liste = []
109
+ satir = []
110
+ for eleman in duz_liste:
111
+ satir.append(eleman)
112
+ if len(satir) == len(myPixelVal):
113
+ yeni_liste.append(satir)
114
+ satir = []
115
+ return yeni_liste
116
+
117
+ #ogrenci numarasi kisminin piksel degerine gore hangisinin iseretli
118
+ #oldugunun tespiti
119
+ def id_answers(vertical_num,myPixelVal):
120
+ myIndex=[]
121
+ for x in range (0,vertical_num):
122
+ arr = myPixelVal[x]
123
+ myIndexVal = np.where(arr == np.amax(arr))
124
+ myIndex.append(myIndexVal[0][0])
125
+ return myIndex
126
+
127
+ def pixelVal(num_questions,choices,box):
128
+ countR=0 #rows
129
+ countC=0 #column
130
+ myPixelVal = np.zeros((num_questions,choices))
131
+ for image in box:
132
+ totalPixels = cv2.countNonZero(image)
133
+ myPixelVal[countR][countC]= totalPixels
134
+ countC += 1
135
+ if (countC==choices):countC=0;countR +=1
136
+ return myPixelVal
137
+
138
+ #dosyadan cevap anahtarinin okunmasi
139
+ def read_answers(dosya_adi):
140
+ with open(dosya_adi, 'r') as f:
141
+ satirlar = f.readlines()
142
+
143
+ okunan_veriler = []
144
+ for satir in satirlar:
145
+ sutunlar = satir.split()
146
+ okunan_veriler.append(sutunlar[1])
147
+
148
+ return okunan_veriler
149
+
150
+
151
+ #dosyadan okunan cevaplarin numerik hale getirilmesi
152
+ def answers2numbers(answers):
153
+ num_answers = []
154
+ for i in answers:
155
+ if i == "a":
156
+ num_answers.append(1)
157
+ elif i == "b":
158
+ num_answers.append(2)
159
+ elif i == "c":
160
+ num_answers.append(3)
161
+ elif i == "d":
162
+ num_answers.append(4)
163
+ elif i == "e":
164
+ num_answers.append(5)
165
+ else:
166
+ print("Oppss Check Txt file")
167
+ return num_answers
168
+
169
+
170
+ def image_show(images):
171
+ col1, col2, col3 = st.columns(3)
172
+ with col1:
173
+ st.header("0")
174
+ st.image(images[0],width=200)
175
+ with col2:
176
+ st.header("1")
177
+ st.image(images[1],width=200)
178
+ with col3:
179
+ st.header("2")
180
+ st.image(images[2],width=200)
181
+
182
+ col4, col5, col6 = st.columns(3)
183
+
184
+ with col4:
185
+ st.header("3")
186
+ st.image(images[4],width=200)
187
+ with col5:
188
+ st.header("4")
189
+ st.image(images[5],width=200)
190
+ with col6:
191
+ st.header("5")
192
+ st.image(images[6],width=200)
193
+
optic1.py ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import cv2
2
+ import numpy as np
3
+ import functions
4
+
5
+ #fotograf ozellikleri
6
+ heightImg = 300*4
7
+ widthImg = 210*4
8
+ #pathImage = "denemeler/100luk_numarali.jpg"
9
+ questions=20
10
+ choices=6
11
+
12
+
13
+
14
+ def optic1(ans_txt,pathImage, save_images= True):
15
+ #cevap anahtarini dosyadan okuma ve sayiya cevirme
16
+ ans_abc = functions.read_answers(ans_txt)
17
+ ans = functions.answers2numbers(ans_abc)
18
+
19
+ #perspektif islemleri icin cozunurluk
20
+ wrap_h = 18*20
21
+ wrap_v = 18*20
22
+ img = pathImage #eger girdi dogrudan np arrayse
23
+ #fotonun okunmasi ------------------------------------------------------------------------------------------------
24
+ #img = cv2.imread(pathImage)
25
+ img = cv2.resize(img, (widthImg, heightImg)) # RESIZE IMAGE
26
+ imgBiggestContour = img.copy()
27
+ imgFinal = img.copy()
28
+ imgContours = img.copy()
29
+ imgBlank = np.zeros((heightImg,widthImg, 3), np.uint8)
30
+
31
+ #donusumler---------------------------------------------------------------------------------
32
+ imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # CONVERT IMAGE TO GRAY SCALE
33
+ imgBlur = cv2.GaussianBlur(imgGray, (5, 5), 1) # ADD GAUSSIAN BLUR
34
+ imgCanny = cv2.Canny(imgBlur,10,70) # APPLY CANNY
35
+
36
+ #CONTOURS-------------------------------------------------------
37
+ contours, hierarchy = cv2.findContours(imgCanny, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
38
+ cv2.drawContours(imgContours, contours, -1, (0, 255, 0), 10) # DRAW ALL DETECTED CONTOURS
39
+
40
+ #dortgen bulma--------------------------------------------------
41
+ rectCon = functions.rectContour(contours)
42
+ biggestContour = functions.getCornerPoints(rectCon[0])
43
+ secondContour = functions.getCornerPoints(rectCon[1])
44
+ thirdContour = functions.getCornerPoints(rectCon[2])
45
+ fourthContour = functions.getCornerPoints(rectCon[3])
46
+
47
+ #main
48
+ if biggestContour.size != 0 and secondContour.size != 0:
49
+
50
+ cv2.drawContours(imgBiggestContour, biggestContour,-1,(0,255,0),20)
51
+ cv2.drawContours(imgBiggestContour, secondContour,-1,(255,0,0),20) #sondk' kalinlik ortada renk
52
+ cv2.drawContours(imgBiggestContour, thirdContour,-1,(0,0,255),20) #sondk' kalinlik ortada renk
53
+ cv2.drawContours(imgBiggestContour, fourthContour,-1,(0,0,20),20) #sondk' kalinlik ortada renk
54
+
55
+ biggestContour=functions.reorder(biggestContour)
56
+ #cevap siklari icin -************************************************************
57
+ pts1 = np.float32(biggestContour)
58
+ pts2 = np.float32([[0, 0],[wrap_v, 0], [0, wrap_h],[wrap_v, wrap_h]])
59
+ matrix = cv2.getPerspectiveTransform(pts1, pts2)
60
+
61
+ imgWarpColored_1 = cv2.warpPerspective(img, matrix, (wrap_v, wrap_h))
62
+ imgWarpGray_1 = cv2.cvtColor(imgWarpColored_1,cv2.COLOR_BGR2GRAY)
63
+ imgThresh_1 = cv2.threshold(imgWarpGray_1, 170, 255,cv2.THRESH_BINARY_INV )[1]
64
+
65
+ #second buyuk icin perspektif
66
+ secondContour=functions.reorder(secondContour)
67
+ pts1_2 = np.float32(secondContour)
68
+ pts2_2 = np.float32([[0, 0],[wrap_v, 0], [0, wrap_h],[wrap_v, wrap_h]])
69
+ matrix_2 = cv2.getPerspectiveTransform(pts1_2, pts2_2)
70
+ imgWarpColored_2 = cv2.warpPerspective(img, matrix_2, (wrap_v, wrap_h))
71
+ imgWarpGray_2 = cv2.cvtColor(imgWarpColored_2,cv2.COLOR_BGR2GRAY)
72
+ imgThresh_2 = cv2.threshold(imgWarpGray_2, 170, 255,cv2.THRESH_BINARY_INV )[1]
73
+
74
+
75
+ #student id
76
+ bubbles = functions.split_num(imgThresh_2, 10, 10)
77
+ myPixelVal_2 = functions.pixelVal(10,10,bubbles)
78
+ myPixelVal_2 = functions.id_reorder(myPixelVal_2)
79
+ student_id = functions.id_answers(10,myPixelVal_2)
80
+ #print(student_id)
81
+
82
+ #soru kisimi
83
+ column_3 = functions.splitColumn(imgThresh_1)
84
+ boxes_1 = functions.splitBoxes(column_3[0])
85
+ boxes_2 = functions.splitBoxes(column_3[1])
86
+ boxes_3 = functions.splitBoxes(column_3[2])
87
+ myPixelVal = functions.pixelVal(questions,choices,boxes_1)
88
+ myIndex = functions.user_answers(questions,myPixelVal)
89
+ grading, wrong_ans = functions.grading(ans,questions,myIndex)
90
+ student_idFix = ""
91
+ for number in student_id:
92
+
93
+ student_idFix += str(number)
94
+ if save_images:
95
+ for i in range(0,len(resim_listesi)):
96
+ cv2.imwrite(f"images/{student_idFix}___{i}.jpg",resim_listesi[i])
97
+
98
+ resim_listesi = [img,imgGray,imgBlur,imgCanny,imgContours,imgBiggestContour,imgThresh_1,imgThresh_2]
99
+
100
+ return grading, wrong_ans, student_idFix, resim_listesi
101
+
102
+ #sonuc = optic1(ans_txt="cevapanahtari.txt",pathImage= "denemeler/100luk_numarali.jpg")
103
+ #print(sonuc)
requirements.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ streamlit == 1.11.0
2
+ pandas == 1.4.3
3
+ numpy == 1.23.1
4
+ Pillow== 9.2.0
5
+ huggingface_hub
6
+ opencv-python-headless==4.4.0.42
7
+ pickleshare == 0.7.5
8
+ requests == 2.24.0
9
+ scikit-image == 0.19.3
screen_add_note.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import data_func
4
+ from data_func import DATASET_REPO_URL,DATA_FILENAME,DATA_FILE,HF_TOKEN
5
+
6
+ repo, repo_df = data_func.pull_read()
7
+
8
+
9
+ def screen_add_main():
10
+ st.title("Not Giris")
11
+
12
+ # Kullanıcıdan verileri alma
13
+ sinif_kodu = st.text_input("Sınıf Kodu")
14
+ ogrenci_no = st.text_input("Öğrenci No")
15
+ ders_kodu = st.text_input("Ders Kodu")
16
+ notu = st.slider("Notu", 0, 100)
17
+ yanlislar = st.text_input("Yanlış Sorulari (virgul ile ayirin)")
18
+ yanlislar = str(yanlislar)
19
+
20
+ if st.button("Veriyi Yukle"):
21
+ new_data = data_func.make_new_data(sinif_kodu=sinif_kodu,
22
+ ogrenci_no= ogrenci_no,
23
+ ders_kodu= ders_kodu,
24
+ notu=notu,
25
+ yanlislar= yanlislar)
26
+ updated_df = data_func.update(new_data,repo_df)
27
+ data_func.save_and_push(updated_df,repo)
28
+ st.subheader("Girilen Veriler")
29
+ st.write(new_data)
30
+
31
+
32
+ if __name__ == "__main__":
33
+ screen_add_main()
34
+
screen_note.py ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import data_func
4
+ from data_func import DATASET_REPO_URL,DATA_FILENAME,DATA_FILE,HF_TOKEN
5
+
6
+
7
+
8
+
9
+ repo, repo_df = data_func.pull_read()
10
+
11
+ def screen_note_main():
12
+
13
+
14
+ st.subheader("Girilen Veriler")
15
+ st.write(repo_df)
16
+
17
+
18
+ if __name__ == "__main__":
19
+ screen_note_main()
screen_scan.py ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import numpy as np
3
+ import cv2
4
+ from PIL import Image
5
+ import optic1
6
+ from functions import image_show
7
+
8
+
9
+
10
+
11
+ def screen_scan_main():
12
+ st.title("Optik Okuma")
13
+
14
+ image_file = st.file_uploader(
15
+ "Upload image for testing", type=['jpeg', 'png', 'jpg', 'webp'])
16
+ if image_file != None:
17
+ image = Image.open(image_file)
18
+ image = np.array(image.convert('RGB'))
19
+ if st.button("Process"):
20
+ #(ans_txt,pathImage, save_images= True)
21
+ grading, wrong_ans, student_idFix, resim_list =optic1.optic1(ans_txt="cevapanahtari.txt",pathImage=image,save_images=False)
22
+
23
+ image_show(resim_list)
24
+
25
+ st.subheader("Notu:",grading)
26
+ st.subheader("Yanlis Yaptigi sorular:",wrong_ans)
27
+ st.subheader("Ogrenci Numarasi:",student_idFix)
28
+
29
+ #python -m streamlit run app.py
30
+ if __name__ == '__main__':
31
+ screen_scan_main()
style.css ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ section[data-testid="stSidebar"] div.stButton button {
2
+ background-color: rgb(95, 197, 228);
3
+ width: 200px;
4
+ }