
Интеллектуальные информационные системы 4 курс Попов / Кольцова АА ЛР7
.docxМинистерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное
учреждение высшего образования
«Сочинский государственный университет»
Кафедра Информационных технологий
ОТЧЁТ
по лабораторной работе № 7
«Разработка модуля генерации и распознавания речи для естественно-языкового интерфейса интеллектуальной системы»
Выполнила: студентка группы 20-ПИ
Кольцова Адриана Андреевна
Дата: 12.11.2023
Проверил: д.т.н. проф. Попов Д.И.
Дата: _______________
Замечания:
______________________________________________________________________________________________________________________________________________________________________________________________________
Сочи 2023
Решение
Этот код представляет собой простого виртуального ассистента, который реагирует на голосовые команды пользователя на русском языке. Давайте разберем, что он делает:
Импортируются необходимые библиотеки:
datetime: для работы с текущим временем и датой.
sys: для взаимодействия с системными функциями.
webbrowser: для открытия веб-страниц в браузере.
pyttsx3: библиотека для синтеза речи (text-to-speech).
speech_recognition (sr): библиотека для распознавания речи.
pyowm: библиотека для работы с OpenWeatherMap API (однако она не используется в данном коде).
Определены функции:
talk(words): инициализирует pyttsx3 и произносит переданный текст.
command(): использует speech_recognition для записи аудио с микрофона и распознавания речи пользователя.
time_to_text(zadanie): преобразует текущее время в текстовый формат на русском языке.
ParseZadanie(zadanie): обрабатывает команды, переданные в функцию. Открывает почту, Steam, запускает игры, отвечает на вопросы о времени, отвечает на вопросы о своем имени, приветствует пользователя и завершает выполнение программы при команде "стоп".
Устанавливается голос для синтеза речи. В данном случае, выбирается голос с именем "Tatyana".
В цикле происходит приветствие и ожидание команды от пользователя. После чего выполняется соответствующее действие на основе распознанной команды, и ассистент задает вопрос, хочет ли пользователь продолжить разговор.
Код программы:
import datetime
import sys
import webbrowser
import pyttsx3
import speech_recognition as sr
import pyowm
def talk(words):
engine = pyttsx3.init()
engine.setProperty('rate', 150)
engine.setProperty('volume', 0.5)
engine.say(words)
engine.runAndWait()
def command():
r = sr.Recognizer()
with sr.Microphone() as source:
print("Говорите!")
talk("Говорите!")
r.pause_threshold = 1
r.adjust_for_ambient_noise(source, duration=1)
audio = r.listen(source)
try:
zadanie = r.recognize_google(audio, language="ru-RU").lower()
print("Вы сказали: " + zadanie)
talk("Вы сказали... " + zadanie)
r.pause_threshold = 1
except sr.UnknownValueError:
talk("Не понимаю Вас!")
zadanie = command()
return zadanie
def time_to_text(zadanie):
dict_hours = {1: 'час', 2: 'часа', 3: 'часа', 4: 'часа', 5: 'часов', 6: 'часов',
7: 'часов', 8: 'часов', 9: 'часов', 10: 'часов', 11: 'часов', 12: 'часов',
13: 'часов', 14: 'часов', 15: 'часов', 16: 'часов', 17: 'часов', 18: 'часов',
19: 'часов', 20: 'часов', 21: 'час', 22: 'часа', 23: 'часа', 0: 'часов'}
dict_minutes = {
'минута': [1, 21, 31, 41, 51],
'минуты': [2, 3, 4, 22, 23, 24, 32, 33, 34, 42, 43, 44, 52, 53, 54],
'минут': [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
25, 26, 27, 28, 29, 30,
35, 36, 37, 38, 39, 40,
45, 46, 47, 48, 49, 50,
55, 56, 57, 58, 59] }
now = datetime.datetime.now()
h = now.hour
m = now.minute
str_time = str(h) + dict_hours[h] + ' ... '
for minutes in dict_minutes:
if m in dict_minutes[minutes]:
str_time += str(m) + ' ' + minutes
break
return str_time
def ParseZadanie(zadanie):
if 'открой почту' in zadanie:
talk('Хорошо, ОТКРЫВАЮ ПОЧТУ!')
URL = 'https://mail.ru'
webbrowser.open(URL)
elif 'открой steam' in zadanie:
talk('Открываю Steam!')
steam_path = r'C:\Program Files (x86)\Steam\Steam.exe'
webbrowser.open(steam_path)
elif 'играть в человека-паука' in zadanie or 'игру человек-паук' in zadanie:
talk('Открываю игру "Человек-паук"!')
spiderman_path = r'C:\Games\MSMR\Spider-Man.exe'
webbrowser.open(spiderman_path)
elif 'играть в сити скайлайн' in zadanie or 'играть в cities skylines' in zadanie or 'игру сити скайлайн' in zadanie or 'игру cities skylines' in zadanie:
talk('Открываю игру "Cities Skylines"!')
cities_path = r'C:\Games\Cities Skylines\Cities.exe'
webbrowser.open(cities_path)
elif ('сколько времени' in zadanie) or ('который час' in zadanie) or ('сколько время' in zadanie):
talk(time_to_text(zadanie))
elif ('как тебя зовут' in zadanie) or ('как твоё имя' in zadanie) or ('кто ты' in zadanie):
talk('Меня зовут Татьяна! А как зовут тебя?')
elif 'привет' in zadanie:
talk('Привет! Как я могу помочь?')
elif 'стоп' in zadanie:
talk('Хорошо, заканчиваем разговор... До встречи!')
sys.exit()
engine = pyttsx3.init()
voices = engine.getProperty('voices')
for voice in voices:
if 'Tatyana' in voice.name:
engine.setProperty('voice', voice.id)
talk('Привет, меня зовут Татьяна! Давай поговорим!')
while True:
ParseZadanie(command())
talk("Поговорим еще ?")
Ассистент реагирует на следующие команды:
"Открой почту" - открывает почтовый сервис по умолчанию (в данном случае, mail.ru).
"Открой Steam" - открывает приложение Steam.
"Играй в Человека-паука" или "Играй в игру Человек-паук" - открывает игру "Человек-паук" (предполагается, что путь к исполняемому файлу указан в переменной spiderman_path).
"Играй в Сити Скайлайнс" или "Играй в игру Сити Скайлайнс" - открывает игру "Cities Skylines" (предполагается, что путь к исполняемому файлу указан в переменной cities_path).
Вопросы о времени: "Сколько времени", "Который час", "Сколько время" - ассистент отвечает текущим временем в текстовом формате на русском языке.
Вопросы о себе: "Как тебя зовут", "Как твоё имя", "Кто ты" - ассистент представляется как "Татьяна" и задает вопрос о имени пользователя.
"Привет" - ассистент приветствует пользователя и спрашивает, как он может помочь.
"Стоп" - завершает выполнение программы.
Р
езультат
выполнения команд:
Вывод: все работает исправно, ошибок в распознавании речи не выявлены (зато выявлены проблемы в произношении слов у автора кода).