Розпізнавання мови (Speech recognition)
Розпізнавання мови - перетворення аудіоданих у текст. Використовується для голосового керування, голосового вводу даних, як інтерфейс спілкування з ботами. У статті розглядаються декілька готових інструментів для розробників на Python.
Існують декілька підходів Розпізнавання мови. Можна використовувати сторонні сервіси, або застосувати ресурси власно комп'ютера на якому потрібно виконати аналіз аудіо даних.
Використання сторонніх сервісів для розпізнавання мови
Використовуючи сторонні сервіси, Ви маєте розуміти, що ви будите передавати дані через Інтернет. Якщо витік чутливих даних може негативно вплинути на питання безпеки - цього робити не слід.
У цьому прикладі я використовую бібліотеку SpeechRecognition. За допомогою неї будемо використовувати Google Cloud Speech API.
Встановлюємо SpeechRecognition:
pip install SpeechRecognition
Приклад:
import sys
import signal
import time
import speech_recognition as sr
def signal_handler(sig, frame):
print('You pressed Ctrl+C! Wait please...')
stop_listining()
sys.exit(0)
# initialize the recognizer
r = sr.Recognizer()
r.pause_threshold = 0.1
r.non_speaking_duration = 0.2
def callback(recognizer, audio):
try:
text = recognizer.recognize_google(audio, language='uk-in')
print(text)
except:
print("")
mic = sr.Microphone()
print("Silence please...")
with mic as source:
r.adjust_for_ambient_noise(source, duration=0.5)
stop_listining = r.listen_in_background(mic, callback, phrase_time_limit=10)
signal.signal(signal.SIGINT, signal_handler)
print("Listening...")
while True:
time.sleep(1.0)
Коли скрипт стартує, у мікрофоні має бути тиша. Це потрібно щоб нормально відпрацювала команда adjust_for_ambient_noise.
Детальніше по SpeechRecognition: SpeechRecognition
Розпізнавання мови на локальному комп'ютері
Розпізнавання мови виконується нейронними мережами. Якщо не використовувати сторонні сервіси, доведеться використовувати ресурси локального комп'ютера. Дивно, але не завжди це буде швидше.
Vosk
Встановлюємо необхідні бібліотеки до Python:
pip install pyaudio
pip install vosk
Завантажуємо натреновану модель для потрібної мови: https://alphacephei.com/vosk/models і розпаковуємо її у теку зі скриптом.
Я використовую модель vosk-model-small-uk-v3-small. вона ж вказана у скрипті.
import sys
import signal
import json
import pyaudio
from vosk import Model, KaldiRecognizer
def signal_handler(sig, frame):
print('You pressed Ctrl+C! Wait please...')
sys.exit(0)
model = Model('vosk-model-small-uk-v3-small')
rec = KaldiRecognizer(model, 16000)
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=8000)
stream.start_stream()
def listen():
while True:
data = stream.read(4000, exception_on_overflow=False)
if (rec.AcceptWaveform(data)) and (len(data) > 0):
answer = json.loads(rec.Result())
if answer['text']:
yield answer['text']
signal.signal(signal.SIGINT, signal_handler)
print("Listening...")
for text in listen():
print(text)
Torch
Цей приклад використовує Torch і розпізнає мову з wav-файлу:
import torch
#import zipfile
#import torchaudio
from glob import glob
device = torch.device('cpu') # gpu also works, but our models are fast enough for CPU
model, decoder, utils = torch.hub.load(repo_or_dir='snakers4/silero-models',
model='silero_stt',
language='en', # also available 'de', 'es'
device=device)
(read_batch, split_into_batches,
read_audio, prepare_model_input) = utils # see function signature for details
# download a single file in any format compatible with TorchAudio
torch.hub.download_url_to_file('https://opus-codec.org/static/examples/samples/speech_orig.wav',
dst ='speech_orig.wav', progress=True)
test_files = glob('speech_orig.wav')
batches = split_into_batches(test_files, batch_size=10)
input = prepare_model_input(read_batch(batches[0]),
device=device)
output = model(input)
for example in output:
print(decoder(example.cpu()))
Розпізнавання мови у браузері
Деякі сучасні браузери можуть розпізнавати мову з мікрофона. Детальніше про це можна почитати тут: https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition
Звісно, вони попросять дозвіл для доступу до мікрофона, та що їм заважає це зробити без дозволу 😀
Приклад як це працює: https://mdn.github.io/dom-examples/web-speech-api/speech-color-changer/
Завантажити приклад: https://github.com/mdn/dom-examples/tree/main/web-speech-api/speech-color-changer
Недавні записи
- Text to speech. Українська мова
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
Tags
docker sensors rtc led timer wifi remap sms css websocket mongodb bme280 rfid bluetooth esp8266 nodemcu bkp piezo bmp280 i2c mpu-6050 encoder examples avr brushless ngnix nvic displays bldc java-script pmsm barometer pwm lcd ethernet stm32 raspberry-pi capture usart gpio exti atmega meteo solar smd dma adc eeprom eb-500 flask python ssd1306 uart options flash mpx4115a html gps st-link 3d-printer servo dc-dc foc git books battery hih-4000 watchdog dht11 web tim programmator ssd1331 mpu-9250 usb rs-232 motor max1674 soldering
Архіви