Идея проекта давать голосовые инструкции для взаимодействия через наш ПК или Raspberry Pi с использованием модели Voice-to-text Whisper.
Мы дадим команду, которая будет расшифрована, преобразована в текст с помощью Whisper, а затем проанализирована для выполнения соответствующего заказа, который может быть от выполнения программы до подачи напряжения на контакты RaspberryPi.
Я собираюсь использовать старый Raspberry Pi 2, micro USB и модель преобразования голоса в текст, недавно выпущенную OpenAI. Whisper. В конце статьи вы можете увидеть еще немного шепота.
все запрограммировано в Питон.
Я оставляю вам демонстрацию того, как это работает в этом видео, управление ПК с помощью голоса.
Сборка торта
Чтобы использовать его с ПК, нам понадобится только микрофон.
Если вы собираетесь установить его на RaspberryPi, вам понадобится USB-микрофон, потому что у него есть разъем только для выхода.
Нам нужно:
Поскольку общее назначение инструмента — голосовая идентификация. Я считаю очень полезным интегрировать его в работу других устройств.
- микро-USB
- Raspberry PI с операционной системой (пример Raspbian pro)
- Электроника (светодиод, провода, резистор 480 Ом и макетная плата)
Мы подключаем светодиод к контакту 17, который мы будем активировать и деактивировать для этого опыта.
разработка кода
Он разделен на три части, первая, аудиозапись, для которой я взял код из geeksforgeeks, потому что я не знаю этих книжных магазинов. Во-вторых, преобразование аудио в текст с помощью Whisper и в-третьих, обработка этого текста и ответ в RaspberryPi.
В тестовом примере я буду взаимодействовать только со светодиодом, заставляя его светиться или мигать, но мы могли бы разработать сценарий, чтобы настроить его под наши нужды.
Я знаю, что это Raspberry Pi 2, и он будет намного медленнее, чем Raspberry Pi 4, но для тестирования это нормально.
Прежде чем вы сможете заставить его работать, вам необходимо установить следующее
#Instalar whisper pip install git+https://github.com/openai/whisper.git sudo apt update && sudo apt install ffmpeg #para que funcione la grabación de audio python3 -m pip install sounddevice --user pip install git+https://github.com/WarrenWeckesser/wavio.git #si vas a instalarlo en la raspberry #dar permisos para usar la GPIO sudo apt install python3-gpiozero sudo usermode -aG gpio <username>
весь код
#!/usr/bin/env python3 import whisper import time from gpiozero import LED import sounddevice as sd from scipy.io.wavfile import write import wavio as wv def main (): inicio = time.time() record_audio () model = whisper.load_model("tiny") result = model.transcribe("audio1.wav") words = result["text"].split() for word in words: word = word.replace(',', '').replace('.', '').lower() if word == 'enciende' or 'encender': encender() break if word == 'parpadea' or 'parpadear': parpadear() break fin = time.time() print(fin-inicio) def encender (): LED(17).on() def parpadear (): light = LED(17) while True: light.on() sleep(1) light.off() sleep(1) def record_audio (): # Sampling frequency freq = 44100 # Recording duration duration = 5 # Start recorder with the given values # of duration and sample frequency recording = sd.rec(int(duration * freq), samplerate=freq, channels=2) # Record audio for the given number of seconds sd.wait() # This will convert the NumPy array to an audio # file with the given sampling frequency write("audio0.wav", freq, recording) # Convert the NumPy array to audio file wv.write("audio1.wav", recording, freq, sampwidth=2) main () #dar permisos para usar la GPIO #sudo apt install python3-gpiozero #sudo usermode -aG gpio <username> #Instalar whisper #pip install git+https://github.com/openai/whisper.git #sudo apt update && sudo apt install ffmpeg
Я не смог протестировать это, потому что у меня нет microSD для RaspberryPi или USB-динамика для подключения, но как только я попробовал, я исправил некоторую ошибку, которую легко проскользнуть.
Пошаговое объяснение кода
#!/usr/bin/env python3
Шебанг сообщает устройству, на каком языке мы программировали и какой интерпретатор использовать. Хотя это кажется тривиальным, его невыполнение во многих случаях приводит к ошибкам.
импортированные библиотеки
import whisper import time from gpiozero import LED import sounddevice as sd from scipy.io.wavfile import write import wavio as wv
Шепот для работы с моделью
время, потому что я использую его для контроля времени, необходимого для выполнения скрипта, gpiozero для работы с выводами GPIO Raspberry и звукового устройства, scipy и wavio для записи звука
функции
Я создал 4 функции:
- основной ()
- легкий ()
- мигать ()
- запись аудио()
включить () просто подает напряжение на пин 17 малины куда мы подключили в данном случае светодиод для проверки
def encender (): LED(17).on()
blink() похож на on(), но заставляет светодиод мигать, включая и выключая его в цикле.
def parpadear (): light = LED(17) while True: light.on() sleep(1) light.off() sleep(1)
С помощью record_audio() мы записываем аудиофайл
def record_audio (): # Sampling frequency freq = 44100 # Recording duration duration = 5 # Start recorder with the given values # of duration and sample frequency recording = sd.rec(int(duration * freq), samplerate=freq, channels=2) # Record audio for the given number of seconds sd.wait() # This will convert the NumPy array to an audio # file with the given sampling frequency write("audio0.wav", freq, recording) # Convert the NumPy array to audio file wv.write("audio1.wav", recording, freq, sampwidth=2)
Main — это основная функция, обратите внимание, что единственное, что у нас есть вне функций, — это вызов main() в конце скрипта. Таким образом, при запуске он импортирует библиотеки, а затем вызывает функцию.
def main (): inicio = time.time() record_audio () model = whisper.load_model("tiny") result = model.transcribe("audio1.wav") words = result["text"].split() for word in words: word = word.replace(',', '').replace('.', '').lower() if word == 'enciende' or 'encender': encender() break if word == 'parpadea' or 'parpadear': parpadear() break fin = time.time() print(fin-inicio)
Мы сохраняем время начала выполнения функции, а затем вызываем функцию записи звука, которая запишет нашу инструкцию в файл .wav, .mp3 и т. д., который мы позже преобразуем в текст.
inicio = time.time() record_audio ()
Как только у нас будет звук, будет вызван шепот, и мы укажем ему модель, которую хотим использовать, доступно 5, и мы будем использовать крошечный, хотя он самый неточный, потому что он самый быстрый, и звук будет простым, только 3 или 4 слова.
model = whisper.load_model("tiny") result = model.transcribe("audio1.wav")
При этом звук преобразуется в текст и сохраняется в переменной. Давайте немного изменим его.
Преобразуем результат в список с каждым из слов аудио
words = result["text"].split()
И все готово для взаимодействия с нашим устройством. Теперь нам просто нужно создать условия, которые мы хотим.
Если в аудио есть слово X, сделайте Y. Поскольку у нас есть слова в списке, очень легко добавить условия
for word in words: word = word.replace(',', '').replace('.', '').lower() if word == 'enciende' or 'encender': encender() break if word == 'parpadea' or 'parpadear': parpadear() break
Линия
word = word.replace(',', '').replace('.', '').lower()
Я использую его для преобразования слов в аудио в нижний регистр и удаления запятых и точек. И таким образом избежать ошибок в сравнениях
В каждом if, если выполняется условие наличия любого из выбранных нами слов, вызывается функция, которая будет делать то, что мы хотим,
Здесь мы говорим ему активировать PIN-код, который зажжет светодиод или заставит его мигать. Либо запустите какой-нибудь код, либо выключите компьютер.
Все это основная идея. Отсюда вы можете развивать проект и улучшать его по своему усмотрению. Каждый человек может найти ему свое применение.
Что мы можем сделать с этим монтажом
Это идеи, которые приходят ко мне, чтобы воспользоваться этим монтажом. Как только скелет вооружён, мы можем использовать его для активации всего, что приходит на ум голосом, мы можем активировать реле, которое запускает двигатель, или мы можем запустить скрипт, который выполняет скрипт, электронное письмо или что-то ещё.
Что такое шепот
Whisper — это модель распознавания vol, работает на мультиязычности с большим количеством языков и допускает перевод на английский язык. Это то, что мы знаем как инструмент преобразования текста в голос, но это Open Source, выпущенный командой OpenAI, создателями Stable Diffusion.