#python #speech-recognition
#python #распознавание речи
Вопрос:
хорошо, итак, у меня был этот код для запуска распознавания речи и сбора высказывания. затем захотелось проверить это со словом, которое уже сохранено в базе данных.
def recog():
r = sr.Recognizer()
print("Speak Now:")
with sr.Microphone() as source:
audio_data = r.listen(source)
try:
print("recognizing")
recog.result = str(r.recognize_wit(audio_data, key="XDAYDVOGVTRP652K6TAWOWQR73WHJY6S"))
print(recog.result)
return recog.result
except sr.UnknownValueError:
print('Recognition error')
Я использовал этот сегмент кода ниже, чтобы получить слово, с которым нужно сравнивать.
conn = sqlite3.connect('VIT.db')
c = conn.cursor()
post_ac = "select ans from ansc where id=" str(i)
c.execute(post_ac)
conn.commit()
records = c.fetchone()
print(records)
print_c = '' str(records)
conn.close()
Затем я использовал оператор if, чтобы проверить, совпадают ли они
if print_c == recog():
print("Correct")
else:
print("Incorrect")
но этот код всегда дает мне «правильный» ответ. Что я сделал не так и как я могу улучшить свой код? Я довольно новичок в python и tkinter, поэтому прошу прощения за мои ошибки.
p.s: к вашему сведению, данные успешно и корректно извлекаются из базы данных, а также из распознавания. У меня возникли проблемы со сравнением, вот и все.
Комментарии:
1. Каково значение
print_c
и значениеrecog()
?2. Зачем перебирать,
records
хотяrecord
это всего лишь одно значение3. @AaronKeesing
print_c
извлекается из базы данных, там хранится несколько слов. Что касаетсяrecog()
, то оно возвращает распознанные речевые данные.4. @CoolCloud Извините, если это неправильно, но я думаю, что мне пришлось сделать это, чтобы получить его в виде строки, чтобы я мог сравнивать
5. Я имел в виду, каковы фактические значения
print_c
иrecog()
, потому что это поможет указать, почему сравнение строк завершается неудачей.
Ответ №1:
Ваши print
утверждения задом наперед, поэтому на самом деле оно сообщало вам «неверно» для всего. Вы также только слабо сравниваете 2.
# '==' instead of 'in'
if print_c == recog(): # consider 'home' is IN 'homestead', but they aren't the same
print("Incorrect") # shouldn't this be 'Correct'
else:
print("Correct") # ..and this 'Incorrect'?
Ни один из ваших вопросов не имеет ничего общего с tkinter
. Вы можете удалить этот тег.
Комментарии:
1. хорошо, я изменил код, но он по-прежнему дает мне один и тот же ответ для каждого сравнения. Но на этот раз оно «неверно» для всех.
2. @Naveedh ~ верно, это именно то, что я сказал. Я понятия не имею, почему ваши строки не сравниваются, но, по крайней мере, теперь, когда вы заставите это работать, строки будут абсолютно равны, и ваша печать не будет лгать вам.
Ответ №2:
через некоторое время я вроде как понял, что не так, и я изменил код. Все это время он сравнивал
‘строка’
вместо
строка
conn = sqlite3.connect('VIT.db')
c = conn.cursor()
post_ac = "select ans from ansc where id=" str(i)
c.execute(post_ac)
records = c.fetchone()
print_c = str(records[0])
print(print_c)
итак, все, что мне нужно было сделать, это изменить print_c = '' str(records)
на print_c = str(records[0])
, чтобы он правильно сравнивался в операторе if. Спасибо, что кто-либо пытался ответить, и надеюсь, что это поможет всем, кто нуждается.