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. Чтобы распознавание работало, нужно загрузить модель распознавания речи и словарь '''