forked from isaacjiang/Iseekey
/
functions.py
128 lines (104 loc) · 4.01 KB
/
functions.py
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
124
125
126
127
128
import speech_recognition as sr
import pyaudio
import wave
import threading
from kivy.storage.jsonstore import JsonStore
class SpeechInput(threading.Thread):
def __init__(self, group=None, target=None, name=None,args=(), kwargs=None, verbose=None):
threading.Thread.__init__(self, group=group, target=target, name=name, verbose=verbose)
self.args = args
self.kwargs = kwargs
return
def run(self):
r = sr.Recognizer()
with sr.Microphone() as source:
audio = r.listen(source)
try:
t = r.recognize(audio)
except LookupError:
t = ' '
self.args.ids['input_speech'].text = t
self.args.ids['gsra_start'].text = 'Again'
print t
class PlayAudio(threading.Thread):
CHUNK = 1024
def __init__(self,group=None, target=None, name=None, args=(), kwargs=None, verbose=None):
threading.Thread.__init__(self, group=group, target=target, name=name, verbose=verbose)
self.args = args
self.kwargs = kwargs
filename = self.kwargs['filename']
self.filename = filename
self.wf = wave.open(self.filename, 'rb')
self.player = pyaudio.PyAudio()
self.stream = self.player.open(format = self.player.get_format_from_width(self.wf.getsampwidth()),
channels = self.wf.getnchannels(),
rate = self.wf.getframerate(),
output = True,
stream_callback=self.callback_set_color)
super(PlayAudio, self).__init__()
self._stop = threading.Event()
def callback_set_color(self, in_data, frame_count, time_info, status):
data = self.wf.readframes(frame_count)
descript = JsonStore('data_descript.json')
cwd = str(descript.get(self.kwargs['filename'])['desc'])
self.kwargs['root'].ids['cw_desc'].text = '[color=000000] ' + cwd + '[/color]'
cwd_list = str.split(cwd)
progress = int(round(float(self.wf.tell())/float(self.wf.getnframes()),2)*cwd_list.__len__())
cwd_list.insert(0, '[color=ff3333]')
cwd_list.insert(progress+1, '[/color]')
cwd_markup = ''
for i in range(cwd_list.__len__()):
cwd_markup = cwd_markup + cwd_list[i] + ' '
self.kwargs['root'].ids['cw_desc'].text = cwd_markup
#print progress
if self.Playstate is True:
return (data,pyaudio.paContinue)
else:
return (data,pyaudio.paComplete)
def run(self):
self.Playstate = True
def stop(self):
self.Playstate = False
# stop stream (6)
self.stream.stop_stream()
self.stream.close()
self.wf.close()
# close PyAudio (7)
self.player.terminate()
def playback(self, backtime):
self.stream.stop_stream()
self.wf.setpos(self.wf.tell()-backtime)
self.stream.start_stream()
class Grading():
def get_grade(self,filename, root):
descript = JsonStore('data_descript.json')
cwd = str(descript.get(filename)['desc'])
speech = root.ids['input_speech'].text
cwd_list = str.split(cwd)
speech_list = str.split(speech)
correct = set(cwd_list).intersection(speech_list)
correct_number = len(correct)
if correct_number <= 10:
marks = correct_number * correct_number
else:
marks = correct_number * 10
return marks
import md5
import sys
class PasswordCheck():
# i already made an md5 hash of the password: PASSWORD
password = "319f4d26e3c536b5dd871bb2c52e3178"
def check_password(self):
for key in range(3):
#get the key
p = raw_input("Enter the password >>")
#make an md5 object
mdpass = md5.new(p)
#hexdigest returns a string of the encrypted password
if mdpass.hexdigest() == self.password:
#password correct
return True
else:
print 'wrong password, try again'
print 'you have failed'
return False