Felixogunwale commited on
Commit
74c95be
1 Parent(s): 94ee2fc

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +210 -0
app.py ADDED
@@ -0,0 +1,210 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from cgitb import reset
2
+ from pdb import Restart
3
+ import tkinter
4
+ import tkinter.messagebox
5
+ from turtle import resetscreen
6
+ import customtkinter
7
+ #sound/audio modules
8
+ from gtts import gTTS
9
+ import gtts
10
+ from playsound import playsound
11
+
12
+ #import the operating system
13
+ import os
14
+
15
+ #other modules
16
+ import argparse
17
+ import numpy
18
+ from textblob import TextBlob
19
+ import extract
20
+ import csv
21
+ from textblob import TextBlob
22
+ from langdetect import detect
23
+ import pycld2 as cld2
24
+
25
+ customtkinter.set_appearance_mode("System") # Modes: "System" (standard), "Dark", "Light"
26
+ customtkinter.set_default_color_theme("blue") # Themes: "blue" (standard), "green", "dark-blue"
27
+
28
+
29
+ class App(customtkinter.CTk):
30
+ def restart(self):
31
+ os.system('python3 gui.py')
32
+ def startup(self):
33
+ os.system('python3 setup.py')
34
+ self.sidebar_button_2 = customtkinter.CTkLabel(self.sidebar_frame, text="succeeded..\ncheck directories")
35
+ self.sidebar_button_2.grid(row=3, column=0, padx=20, pady=10)
36
+
37
+ def __init__(self):
38
+ super().__init__()
39
+
40
+ # configure window
41
+ self.title("Language detection using python")
42
+ self.geometry(f"{1100}x{580}")
43
+
44
+ # configure grid layout (4x4)
45
+ self.grid_columnconfigure(1, weight=1)
46
+ self.grid_columnconfigure((2, 3), weight=0)
47
+ self.grid_rowconfigure((0, 1, 2), weight=1)
48
+
49
+ # create sidebar frame with widgets
50
+ self.sidebar_frame = customtkinter.CTkFrame(self, width=140, corner_radius=0)
51
+ self.sidebar_frame.grid(row=0, column=0, rowspan=4, sticky="nsew")
52
+ self.sidebar_frame.grid_rowconfigure(4, weight=1)
53
+ self.logo_label = customtkinter.CTkLabel(self.sidebar_frame, text="Language Detection", font=customtkinter.CTkFont(size=20, weight="bold"))
54
+ self.logo_label.grid(row=0, column=0, padx=20, pady=(20, 10))
55
+ #self.sidebar_button_1 = customtkinter.CTkButton(self.sidebar_frame, command=self.sidebar_button_event)
56
+ #self.sidebar_button_1.grid(row=1, column=0, padx=20, pady=10)
57
+ self.sidebar_button_2 = customtkinter.CTkButton(self.sidebar_frame, text="Get Started Now", command=self.startup)
58
+ self.sidebar_button_2.grid(row=2, column=0, padx=20, pady=10)
59
+ #self.sidebar_button_3 = customtkinter.CTkButton(self.sidebar_frame, command=self.sidebar_button_event)
60
+ #self.sidebar_button_3.grid(row=3, column=0, padx=20, pady=10)
61
+ self.appearance_mode_label = customtkinter.CTkLabel(self.sidebar_frame, text="Appearance Mode:", anchor="w")
62
+ self.appearance_mode_label.grid(row=5, column=0, padx=20, pady=(10, 0))
63
+ self.appearance_mode_optionemenu = customtkinter.CTkOptionMenu(self.sidebar_frame, values=["Light", "Dark", "System"],
64
+ command=self.change_appearance_mode_event)
65
+ self.appearance_mode_optionemenu.grid(row=6, column=0, padx=20, pady=(10, 10))
66
+ self.scaling_label = customtkinter.CTkLabel(self.sidebar_frame, text="UI Scaling:", anchor="w")
67
+ self.scaling_label.grid(row=7, column=0, padx=20, pady=(10, 0))
68
+ self.scaling_optionemenu = customtkinter.CTkOptionMenu(self.sidebar_frame, values=["80%", "90%", "100%", "110%", "120%"],
69
+ command=self.change_scaling_event)
70
+ self.scaling_optionemenu.grid(row=8, column=0, padx=20, pady=(10, 20))
71
+
72
+ # create main entry and button
73
+ self.entry = customtkinter.CTkEntry(self, placeholder_text="", state='disabled')
74
+ self.entry.grid(row=3, column=1, columnspan=2, padx=(20, 0), pady=(20, 20), sticky="nsew")
75
+
76
+ self.main_button_1 = customtkinter.CTkButton(master=self, text="EXIT", command=exit, fg_color="transparent", border_width=2, text_color=("gray10", "#DCE4EE"))
77
+ self.main_button_1.grid(row=3, column=3, padx=(20, 20), pady=(20, 20), sticky="nsew")
78
+
79
+ # create textbox
80
+ self.textbox = customtkinter.CTkTextbox(self, width=250)
81
+ self.textbox.grid(row=0, column=1, padx=(20, 0), pady=(20, 0), sticky="nsew")
82
+
83
+ # create tabview
84
+ self.tabview = customtkinter.CTkTabview(self, width=250)
85
+ self.tabview.grid(row=0, column=2, padx=(20, 0), pady=(20, 0), sticky="nsew")
86
+ self.tabview.add("Detect Language")
87
+ self.tabview.add("Help")
88
+ self.tabview.add("About Student")
89
+ self.tabview.tab("Detect Language").grid_columnconfigure(0, weight=1) # configure grid of individual tabs
90
+ self.tabview.tab("Help").grid_columnconfigure(0, weight=1)
91
+ self.tabview.tab("About Student").grid_columnconfigure(0, weight=1)
92
+
93
+ #self.optionmenu_1 = customtkinter.CTkOptionMenu(self.tabview.tab("CTkTabview"), dynamic_resizing=False,
94
+ # values=["Value 1", "Value 2", "Value Long Long Long"])
95
+ #self.optionmenu_1.grid(row=0, column=0, padx=20, pady=(20, 10))
96
+ #self.combobox_1 = customtkinter.CTkComboBox(self.tabview.tab("CTkTabview"),
97
+ # values=["Value 1", "Value 2", "Value Long....."])
98
+ #self.combobox_1.grid(row=1, column=0, padx=20, pady=(10, 10))
99
+ self.string_input_button = customtkinter.CTkButton(self.tabview.tab("Detect Language"), text="Start detection",
100
+ command=self.open_input_dialog_event)
101
+ self.string_input_button.grid(row=2, column=0, padx=20, pady=(10, 10))
102
+
103
+ self.label_tab_1 = customtkinter.CTkLabel(self.tabview.tab("Detect Language"), text="To detect a language\nby input, click\nthe button below.")
104
+ self.label_tab_1.grid(row=0, column=0, padx=20, pady=20)
105
+
106
+
107
+ self.label_tab_2 = customtkinter.CTkLabel(self.tabview.tab("Help"), text="Project structure: \n\nThe program gets the text \non the image given, process it with \npytesseract and some other modules \nwritten in the program to get \nthe language type, then \nto get the audio file output \nthe program makes a request\n to google to get \nsynthesis with module gtts. ")
108
+ self.label_tab_2.grid(row=0, column=0, padx=20, pady=20)
109
+ self.label_tab_2 = customtkinter.CTkLabel(self.tabview.tab("About Student"), text="NAME: Ogo-Oluwa Convenant Mobolaji \n\n MATRIC NO: HNDCOM000 \n DEPT: COMPUTER SCI \n SCHOOL: FCAH&PT \n SET: 2022/2023")
110
+ self.label_tab_2.grid(row=0, column=0, padx=20, pady=20)
111
+
112
+ # create display text for language detected
113
+ self.radiobutton_frame = customtkinter.CTkFrame(self)
114
+ self.radiobutton_frame.grid(row=0, column=3, padx=(20, 20), pady=(20, 0), sticky="nsew")
115
+
116
+ #read file language detected output
117
+ with open('processed/text_detected/language_input_type.txt', "r") as f:
118
+ contents = f.read()
119
+
120
+ self.label_tab_2 = customtkinter.CTkLabel(master=self.radiobutton_frame, text="Note: please reload \nthe program to check\n for the text you just\n entered. ")
121
+ self.label_tab_2.grid(row=0, column=2, padx=10, pady=10)
122
+
123
+ self.slider_progressbar_frame = customtkinter.CTkFrame(self, fg_color="transparent")
124
+ self.slider_progressbar_frame.grid(row=1, column=1, columnspan=2, padx=(20, 0), pady=(20, 0), sticky="nsew")
125
+ self.slider_progressbar_frame.grid_columnconfigure(0, weight=1)
126
+ self.slider_progressbar_frame.grid_rowconfigure(4, weight=1)
127
+ #self.seg_button_1 = customtkinter.CTkSegmentedButton(self.slider_progressbar_frame)
128
+ #self.seg_button_1.grid(row=0, column=0, padx=(20, 10), pady=(10, 10), sticky="ew")
129
+ self.progressbar_1 = customtkinter.CTkProgressBar(self.slider_progressbar_frame)
130
+ self.progressbar_1.grid(row=1, column=0, padx=(20, 10), pady=(10, 10), sticky="ew")
131
+ self.progressbar_2 = customtkinter.CTkProgressBar(self.slider_progressbar_frame)
132
+ self.progressbar_2.grid(row=2, column=0, padx=(20, 10), pady=(10, 10), sticky="ew")
133
+
134
+ #self.slider_1 = customtkinter.CTkSlider(self.slider_progressbar_frame, from_=0, to=1, number_of_steps=4)
135
+ #self.slider_1.grid(row=3, column=0, padx=(20, 10), pady=(10, 10), sticky="ew")
136
+
137
+ self.slider_1 = customtkinter.CTkLabel(self.slider_progressbar_frame, text=contents)
138
+ self.slider_1.grid(row=3, column=0, padx=(20, 10), pady=(10, 10), sticky="ew")
139
+
140
+ #button
141
+ self.slider_2 = customtkinter.CTkButton(self.slider_progressbar_frame, text="Reload program", command=lambda:exit(self.restart()))
142
+ self.slider_2.grid(row=4, column=0, padx=(20, 10), pady=(10, 10), sticky="ew")
143
+
144
+ #self.slider_2 = customtkinter.CTkButton(self.slider_progressbar_frame, orientation="vertical")
145
+ #self.slider_2.grid(row=0, column=1, rowspan=5, padx=(10, 10), pady=(10, 10), sticky="ns")
146
+ self.progressbar_3 = customtkinter.CTkProgressBar(self.slider_progressbar_frame, orientation="vertical")
147
+ self.progressbar_3.grid(row=0, column=2, rowspan=5, padx=(10, 20), pady=(10, 10), sticky="ns")
148
+
149
+ # set default values
150
+ self.appearance_mode_optionemenu.set("Dark")
151
+ self.scaling_optionemenu.set("100%")
152
+ #self.optionmenu_1.set("CTkOptionmenu")
153
+ #self.combobox_1.set("CTkComboBox")
154
+ self.slider_1.configure()
155
+ #self.slider_2.configure(command=reset)
156
+ self.progressbar_1.configure(mode="indeterminnate")
157
+ self.progressbar_1.start()
158
+ self.textbox.insert("0.0", "project description\n\n" + "A language detection from an image using python3 and pytesseract.\n\nAIM: The aim of this project is to detect the type of language of text found in an image \n\nHow to run;\n*Place the image to be detected in the project folder directory and click 'get started now'." )
159
+ #self.seg_button_1.configure(values=["CTkSegmentedButton", "Value 2", "Value 3"])
160
+ #self.seg_button_1.set("Value 2")
161
+
162
+ def open_input_dialog_event(self):
163
+ dialog = customtkinter.CTkInputDialog(text="Input your text:", title="Language Detection")
164
+ dialogg = dialog.get_input()
165
+ print("CTkInputDialog:", dialogg)
166
+ #save text in a file
167
+
168
+ with open('processed/text_detected/text_input_detected.txt', 'w', newline="") as file:
169
+ file.write(dialogg)
170
+
171
+ with open('processed/text_detected/text_input_detected.txt', "r") as f:
172
+ contents = f.read()
173
+
174
+ with open('processed/text_detected/language_input_type.txt', 'w', newline="") as file:
175
+ isReliable, textBytesFound, details, vectors = cld2.detect(
176
+ contents, returnVectors=True
177
+ )
178
+ print(vectors)
179
+ file.write("The output of the languages detected in the text entered are as follows;\n " + str(vectors))
180
+
181
+ # read the file the output text detected processed is in and make it an audio file
182
+ with open('processed/text_detected/language_input_type.txt', "r") as f:
183
+ contents = f.read()
184
+
185
+ #save the read file in a variable audio
186
+ audio = contents
187
+
188
+ #get the variable and start to process it for the sound output
189
+ tts = gtts.gTTS(audio)
190
+
191
+ # save the audio file
192
+ tts.save("processed/audio/audio_input_detected.mp3")
193
+
194
+ # play the audio file
195
+ playsound("processed/audio/audio_input_detected.mp3")
196
+
197
+ def change_appearance_mode_event(self, new_appearance_mode: str):
198
+ customtkinter.set_appearance_mode(new_appearance_mode)
199
+
200
+ def change_scaling_event(self, new_scaling: str):
201
+ new_scaling_float = int(new_scaling.replace("%", "")) / 100
202
+ customtkinter.set_widget_scaling(new_scaling_float)
203
+
204
+ def sidebar_button_event(self):
205
+ print("sidebar_button click")
206
+
207
+
208
+ if __name__ == "__main__":
209
+ app = App()
210
+ app.mainloop()