June 24, 2023
pocketsphinx
Без использования Google можно использовать другие библиотеки для распознавания речи на Python, например, PocketSphinx.
Пример кода для распознавания речи в реальном времени и сохранения распознанных слов в массиве numpy:
import pyaudio
import numpy as np
import pocketsphinx as ps
# настройки записи
FORMAT = pyaudio.paInt16 # формат звука
CHANNELS = 1 # количество каналов (моно)
RATE = 16000 # частота дискретизации
CHUNK = 1024 # размер блока записи
# создаем объект PyAudio
audio = pyaudio.PyAudio()
# создаем объект Decoder для распознавания речи
config = ps.Decoder.default_config()
config.set_string('-hmm', '/path/to/model') # путь к модели распознавания речи
config.set_string('-dict', '/path/to/dict') # путь к словарю
decoder = ps.Decoder(config)
# открываем поток для записи звука
stream = audio.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print("Запись началась")
# инициализация переменных для хранения звуковых сегментов
segments = []
current_segment = []
# функция, которая обрабатывает звуковые сегменты
def on_segment(segment):
# преобразуем сегмент в массив numpy с форматом int16
segment = np.array(segment).astype(np.int16)
# добавляем сегмент в список
segments.append(segment)
# распознаем речь
decoder.start_utt()
decoder.process_raw(segment, False, False)
decoder.end_utt()
text = decoder.hyp().hypstr
if text != "":
print(f"Распознанный текст: {text}")
# сохраняем распознанный текст в массив numpy с форматом str
text_str = np.array([text]).astype(np.str)
np.save('recognized_text.npy', text_str)
# читаем данные из потока, пока он не будет остановлен
while True:
data = stream.read(CHUNK)
# конвертируем байты в массив NumPy
# используем dtype=int16 для корректного преобразования
samples = np.frombuffer(data, dtype=np.int16)
# добавляем значения в переменную для текущего сегмента
current_segment.extend(samples)
# если текущий сегмент содержит звук, вызываем on_segment
if np.max(samples) > 500:
on_segment(current_segment)
current_segment = []
# останавливаем поток
записи
stream.stop_stream()
stream.close()
audio.terminate()
'''
В этом примере используется библиотека PocketSphinx
для распознавания речи. Распознанный текст сохраняется
в массиве numpy с помощью функции numpy.save.
Чтобы распознавание работало, нужно загрузить модель
распознавания речи и словарь
'''