7 просмотров

ИИ с Python — распознавание речи

Искусственный интеллект в разработке игр на Javascript — Tic Tac Toe AI

В этой главе мы узнаем о распознавании речи с использованием ИИ с Python.

Речь является основным средством общения взрослого человека. Основная цель обработки речи — обеспечить взаимодействие между человеком и машиной.

Система обработки речи выполняет в основном три задачи:

  • Первый, распознавание речи, которое позволяет машине улавливать слова, фразы и предложения, которые мы произносим
  • Второй, обработка естественного языка, позволяющая машине понимать, о чем мы говорим, и
  • В третьих, синтез речи, чтобы машина могла говорить.

Эта глава посвящена распознавание речи, процесс понимания слов, произносимых людьми. Помните, что речевые сигналы улавливаются с помощью микрофона и затем должны быть поняты системой.

Создание распознавателя речи

Распознавание речи или автоматическое распознавание речи (ASR) находится в центре внимания таких проектов ИИ, как робототехника. Без ASR невозможно представить когнитивного робота, взаимодействующего с человеком. Однако создать распознаватель речи не так-то просто.

Трудности в разработке системы распознавания речи

Разработка качественной системы распознавания речи — действительно трудная задача. Сложность технологии распознавания речи можно в общих чертах охарактеризовать по ряду параметров, как описано ниже:

  • Размер словарного запаса − Размер словаря влияет на простоту разработки ASR. Рассмотрим следующие размеры словарного запаса для лучшего понимания.
    • Словарь небольшого размера состоит из 2-100 слов, например, как в системе голосового меню.
    • Словарь среднего размера состоит из нескольких сотен или тысяч слов, например, как в задаче поиска в базе данных.
    • Словарный запас большого размера состоит из нескольких десятков тысяч слов, как в обычном диктанте.

    Обратите внимание, что чем больше размер словарного запаса, тем сложнее выполнить распознавание.

    • Если отношение сигнал/шум превышает 30 дБ, это считается высоким диапазоном.
    • Если отношение сигнал/шум находится в пределах от 30 дБ до 10 дБ, это считается средним SNR.
    • Если отношение сигнал/шум меньше 10 дБ, это считается низкочастотным.

    Например, тип фонового шума, такой как стационарный, нечеловеческий шум, фоновая речь и перекрестные помехи других говорящих, также усложняет проблему.

    Несмотря на эти трудности, исследователи много работали над различными аспектами речи, такими как понимание речевого сигнала, говорящего и определение акцентов.

    Вам нужно будет выполнить шаги, указанные ниже, чтобы создать распознаватель речи —

    Визуализация аудиосигналов — чтение из файла и работа с ним

    Это первый шаг в построении системы распознавания речи, поскольку он дает представление о том, как устроен звуковой сигнал. Вот некоторые общие шаги, которые можно выполнить для работы со звуковыми сигналами:

    Запись

    Когда вам нужно прочитать звуковой сигнал из файла, то сначала запишите его с помощью микрофона.

    Выборка

    При записи с микрофона сигналы сохраняются в оцифрованном виде. Но для работы с ними машина нуждается в них в дискретно-числовой форме. Следовательно, мы должны производить выборку на определенной частоте и преобразовывать сигнал в дискретную числовую форму. Выбор высокой частоты для дискретизации означает, что когда люди слушают сигнал, они воспринимают его как непрерывный звуковой сигнал.

    Пример

    В следующем примере показан пошаговый подход к анализу аудиосигнала с использованием Python, который хранится в файле. Частота этого звукового сигнала составляет 44 100 Гц.

    Импортируйте необходимые пакеты, как показано здесь —

    импортировать numpy как np импортировать matplotlib.pyplot как plt из scipy.io импортировать wavfile

    Теперь прочитайте сохраненный аудиофайл. Он вернет два значения: частоту дискретизации и аудиосигнал. Укажите путь к аудиофайлу, где он хранится, как показано здесь —

    Frequency_sampling, audio_signal = wavfile.read("/Users/admin/audio_file.wav")

    Отобразите параметры, такие как частота дискретизации аудиосигнала, тип данных сигнала и его продолжительность, с помощью показанных команд —

    print('nФорма сигнала:', audio_signal.shape) print('Тип данных сигнала:', audio_signal.dtype) print('Длительность сигнала:', round(audio_signal.shape[0] / float(frequency_sampling), 2), 'секунды')

    Этот шаг включает в себя нормализацию сигнала, как показано ниже —

    audio_signal = audio_signal / np.power(2, 15)

    На этом этапе мы извлекаем первые 100 значений из этого сигнала для визуализации.Используйте для этой цели следующие команды —

    audio_signal = audio_signal [:100] time_axis = 1000 * np.arange (0, len (сигнал), 1) / float (частота_выборки)

    Теперь визуализируйте сигнал, используя приведенные ниже команды —

    plt.plot(ось_времени, сигнал, цвет='синий') plt.xlabel('Время (миллисекунды)') plt.ylabel('Амплитуда') plt.title('Входной аудиосигнал') plt.show()

    Вы сможете увидеть выходной график и данные, извлеченные для вышеуказанного аудиосигнала, как показано на изображении здесь.

    Визуализация аудиосигналов

    Форма сигнала: (132300,) Тип данных сигнала: int16 Продолжительность сигнала: 3,0 секунды

    Характеристика аудиосигнала: преобразование в частотную область

    Характеристика аудиосигнала включает преобразование сигнала во временной области в частотную область и понимание его частотных компонентов посредством. Это важный шаг, потому что он дает много информации о сигнале. Вы можете использовать математический инструмент, такой как преобразование Фурье, для выполнения этого преобразования.

    Пример

    В следующем примере показано, шаг за шагом, как охарактеризовать сигнал с помощью Python, который хранится в файле. Обратите внимание, что здесь мы используем математический инструмент преобразования Фурье, чтобы преобразовать его в частотную область.

    Импортируйте необходимые пакеты, как показано здесь —

    импортировать numpy как np импортировать matplotlib.pyplot как plt из scipy.io импортировать wavfile

    Теперь прочитайте сохраненный аудиофайл. Он вернет два значения: частоту дискретизации и звуковой сигнал. Укажите путь к аудиофайлу, где он хранится, как показано в команде здесь —

    Frequency_sampling, audio_signal = wavfile.read("/Users/admin/sample.wav")

    На этом шаге мы отобразим такие параметры, как частота дискретизации аудиосигнала, тип данных сигнала и его продолжительность, используя приведенные ниже команды:

    print('nФорма сигнала:', audio_signal.shape) print('Тип данных сигнала:', audio_signal.dtype) print('Длительность сигнала:', round(audio_signal.shape[0] / float(frequency_sampling), 2), 'секунды')

    На этом этапе нам нужно нормализовать сигнал, как показано в следующей команде —

    audio_signal = audio_signal / np.power(2, 15)

    Этот шаг включает в себя извлечение длины и половины длины сигнала. Используйте для этой цели следующие команды —

    length_signal = len(audio_signal) half_length = np.ceil((length_signal + 1)/2.0).astype(np.int)

    Теперь нам нужно применить математические инструменты для преобразования в частотную область. Здесь мы используем преобразование Фурье.

    signal_frequency = np.fft.fft (аудио_сигнал)

    Теперь выполните нормализацию сигнала в частотной области и возведите его в квадрат —

    частота_сигнала = абс(частота_сигнала[0:половина_длины]) / частота_сигнала_длины_частота_сигнала **= 2

    Затем извлеките длину и половину длины частотно-преобразованного сигнала —

    len_fts = len(частота_сигнала)

    Обратите внимание, что сигнал, преобразованный Фурье, должен быть скорректирован как для четного, так и для нечетного случая.

    если длина_сигнала % 2: частота_сигнала[1:длина_футов] *= 2 иначе: частота_сигнала[1:длина_футов-1] *= 2

    Теперь извлеките мощность в децибалах (дБ) —

    мощность_сигнала = 10 * np.log10 (частота_сигнала)

    Отрегулируйте частоту в кГц для оси X —

    x_axis = np.arange (0, len_half, 1) * (частота_выборки / длина_сигнала) / 1000,0

    Теперь визуализируйте характеристику сигнала следующим образом:

    plt.figure() plt.plot(ось x, signal_power, color='black') plt.xlabel('Частота (кГц)') plt.ylabel('Мощность сигнала (дБ)') plt.show()

    Вы можете наблюдать выходной график приведенного выше кода, как показано на изображении ниже —

    Характеристика аудиосигнала

    Генерация монотонного аудиосигнала

    Два шага, которые вы видели до сих пор, важны для изучения сигналов. Теперь этот шаг будет полезен, если вы хотите сгенерировать аудиосигнал с некоторыми предопределенными параметрами. Обратите внимание, что этот шаг сохранит аудиосигнал в выходной файл.

    Пример

    В следующем примере мы собираемся сгенерировать монотонный сигнал с помощью Python, который будет сохранен в файле. Для этого вам нужно будет предпринять следующие шаги —

    Импортируйте необходимые пакеты, как показано на рисунке —

    импортировать numpy как np импортировать matplotlib.pyplot как plt из scipy.io.wavfile импортировать запись

    Укажите файл, в котором должен быть сохранен выходной файл.

    output_file = 'audio_signal_generated.wav'

    Теперь укажите параметры по вашему выбору, как показано на рисунке —

    duration = 4 # в секундах Frequency_sampling = 44100 # в Гц Frequency_tone = 784 min_val = -4 * np.pi max_val = 4 * np.pi

    На этом этапе мы можем сгенерировать аудиосигнал, как показано на рисунке —

    t = np.linspace(min_val, max_val, продолжительность * частота_выборки) audio_signal = np.sin(2 * np.pi * tone_freq * t)

    Теперь сохраните аудиофайл в выходном файле —

    запись (выходной_файл, частота_выборки, сигнал_масштабированный)

    Извлеките первые 100 значений для нашего графика, как показано на рисунке —

    audio_signal = audio_signal [: 100] time_axis = 1000 * np.arange (0, len (сигнал), 1) / float (sampling_freq)

    Теперь визуализируйте сгенерированный аудиосигнал следующим образом:

    plt.plot(ось_времени, сигнал, цвет='синий') plt.xlabel('Время в миллисекундах') plt.ylabel('Амплитуда') plt.title('Сгенерированный звуковой сигнал') plt.show()

    Вы можете наблюдать за сюжетом, как показано на рисунке, приведенном здесь —

    Генерация монотонного аудиосигнала

    Извлечение признаков из речи

    Это самый важный шаг в создании распознавателя речи, потому что после преобразования речевого сигнала в частотную область мы должны преобразовать его в пригодную для использования форму вектора признаков. Для этой цели мы можем использовать различные методы извлечения признаков, такие как MFCC, PLP, PLP-RASTA и т. д.

    Пример

    В следующем примере мы собираемся извлечь функции из сигнала шаг за шагом, используя Python, используя технику MFCC.

    Импортируйте необходимые пакеты, как показано здесь —

    импортировать numpy как np импортировать matplotlib.pyplot как plt из scipy.io импортировать wavfile из python_speech_features импортировать mfcc, logfbank

    Теперь прочитайте сохраненный аудиофайл. Он вернет два значения — частоту дискретизации и аудиосигнал. Укажите путь к аудиофайлу, где он хранится.

    Frequency_sampling, audio_signal = wavfile.read("/Users/admin/audio_file.wav")

    Обратите внимание, что здесь мы берем первые 15000 образцов для анализа.

    аудио_сигнал = аудио_сигнал[:15000]

    Используйте методы MFCC и выполните следующую команду, чтобы извлечь функции MFCC —

    features_mfcc = mfcc (аудио_сигнал, частота_выборки)

    Теперь распечатайте параметры MFCC, как показано на рисунке —

    print('nMFCC:nКоличество окон =', features_mfcc.shape[0]) print('Длина каждой функции =', features_mfcc.shape[1])

    Теперь нарисуйте и визуализируйте функции MFCC, используя команды, приведенные ниже:

    features_mfcc = features_mfcc.T plt.matshow(features_mfcc) plt.title('MFCC')

    На этом этапе мы работаем с функциями банка фильтров, как показано на рисунке —

    Извлеките функции банка фильтров —

    filterbank_features = logfbank (аудио_сигнал, частота_выборки)

    Теперь распечатайте параметры банка фильтров.

    print('nБанк фильтров:nКоличество окон =', filterbank_features.shape[0]) print('Длина каждой функции =', filterbank_features.shape[1])

    Теперь постройте и визуализируйте функции набора фильтров.

    filterbank_features = filterbank_features.T plt.matshow(filterbank_features) plt.title('Банк фильтров') plt.show()

    В результате описанных выше шагов вы можете наблюдать следующие результаты: Рисунок 1 для MFCC и Рисунок 2 для банка фильтров.

    Извлечение признаков из речи

    Банк фильтров

    Распознавание произнесенных слов

    Распознавание речи означает, что когда люди говорят, машина их понимает. Здесь мы используем Google Speech API на Python, чтобы это произошло. Для этого нам нужно установить следующие пакеты —

    • Пьяудио − Его можно установить с помощью pip установить Pyaudio команда.
    • Распознавание речи − Этот пакет можно установить с помощью pip установить SpeechRecognition.
    • Google-Speech-API − Его можно установить с помощью команды pip установить google-api-python-client.

    Пример

    Обратите внимание на следующий пример, чтобы понять, как распознавать произнесенные слова:

    Импортируйте необходимые пакеты, как показано на рисунке —

    импортировать speech_recognition как sr

    Создайте объект, как показано ниже —

    запись = sr.Recognizer()

    Сейчас Микрофон() модуль будет принимать голос в качестве ввода —

    с sr.Microphone() в качестве источника: record.adjust_for_ambient_noise(source) print("Пожалуйста, скажите что-нибудь:") audio = record.listen(source)

    Теперь Google API будет распознавать голос и выдавать результат.

    try: print("Вы сказали:n" + record.recognize_google(аудио)) кроме Exception as e: print(e)

    Вы можете увидеть следующий вывод —

    Пожалуйста, скажи что-нибудь: ты сказал:

    Например, если вы сказали tutorialspoint.com, то система правильно распознает его следующим образом:

    голоса
    Рейтинг статьи
    Статья в тему:  Как я могу играть против дипстека покерной программы с искусственным интеллектом
Ссылка на основную публикацию
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x