Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
9
Добавлен:
17.12.2023
Размер:
624.92 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное

учреждение высшего образования

«Сочинский государственный университет»

Кафедра Информационных технологий

ОТЧЁТ

по лабораторной работе № 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).

Вопросы о времени: "Сколько времени", "Который час", "Сколько время" - ассистент отвечает текущим временем в текстовом формате на русском языке.

Вопросы о себе: "Как тебя зовут", "Как твоё имя", "Кто ты" - ассистент представляется как "Татьяна" и задает вопрос о имени пользователя.

"Привет" - ассистент приветствует пользователя и спрашивает, как он может помочь.

"Стоп" - завершает выполнение программы.

Р езультат выполнения команд:

Вывод: все работает исправно, ошибок в распознавании речи не выявлены (зато выявлены проблемы в произношении слов у автора кода).