Долбоордун идеясы Үндөн текстке Whisper моделин колдонуп, компьютерибиз же Raspberry Pi аркылуу өз ара аракеттенүү үчүн үн көрсөтмөлөрүн бериңиз.
Биз Whisper менен транскрипцияланып, текстке айландырылып, андан кийин программаны аткаруудан RaspberryPi пиндерине чыңалууну берүү үчүн тиешелүү буйрукту аткаруу үчүн талданган буйрук беребиз.
Мен эски Raspberry Pi 2, микро USB колдоном деп жатам жана жакында OpenAI чыгарган Voice-to-Text моделин колдоном, шыбыроо. Макаланын аягында көрө аласыз дагы бир аз шыбыр.
баары программаланган Python.
Мен сизге бул видеодо компьютерди үн менен башкаруунун демонстрациясын калтырамын.
монтаждык
Аны компьютер менен колдонуу үчүн бизге микрофон гана керек болот.
Эгер сиз аны RaspberryPiге орнотконуңуз келсе, анда сизге USB микрофону керек болот, анткени анын уячасы чыгаруу үчүн гана.
Керек:
Куралдын жалпы максаты үн аныктоо болуп саналат. Мен аны башка аппараттардын иштешине интеграциялоону абдан пайдалуу деп эсептейм.
- Микро USB
- Иштөө системасы менен Raspberry PI (Raspbian Pro мисалы)
- Электроника (LED, зымдар, 480 Ом резистор жана нан тактасы)
Биз LEDди 17 пинге туташтырабыз, аны бул тажрыйба үчүн иштетип, өчүрөбүз.
кодду иштеп чыгуу
Ал үч бөлүккө бөлүнөт, биринчиси, мен кодун алган аудио жазуу geeksforgeeks, анткени мен ал китеп дүкөндөрүн билбейм. Экинчиси, Whisper менен аудиону текстке айландыруу жана үчүнчүсү, ал текстти иштетүү жана RaspberryPiде жооп берүү
Сыноо мисалында мен Led менен гана иштешем, аны күйгүзүп же жымыңдап коём, бирок биз аны муктаждыктарыбызга ылайыкташтыруу үчүн сценарийди иштеп чыга алабыз.
Мен бул 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
Мен аны сынай алган жокмун, анткени менде RaspberryPi үчүн microSD же туташа турган USB динамиги жок, бирок мен аны сынап көрөрүм менен катаны оңдойм, ал оңой эле кирип кетет.
Кодду этап-этабы менен түшүндүрүү
#!/usr/bin/env python3
Shebang аппаратка биз кайсы тилде программаланганыбызды жана кайсы котормочуну колдонууну айтып берет. Бул анча маанилүү эместей көрүнгөнү менен, аны койбой коюу көп учурда каталарды жаратат.
импорттук китепканалар
import whisper import time from gpiozero import LED import sounddevice as sd from scipy.io.wavfile import write import wavio as wv
Модель менен иштөө үчүн шыбырап
убакыт, анткени мен аны сценарийди аткарууга кеткен убакытты көзөмөлдөө үчүн колдоном, gpiozero Raspberry жана үн аппаратынын GPIO пиндери менен иштөө үчүн, аудиону жаздыруу үчүн scipy жана wavio
милдеттери
Мен 4 функцияны түздүм:
- негизги ()
- жарык ()
- ирмеп ()
- record_audio()
күйгүзүү () жөн гана малинанын 17 пинине чыңалуу берет, бул учурда биз сыноо үчүн LEDди туташтырдык
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()
Мен аны аудиодогу сөздөрдү кичине тамгага которуп, үтүрлөрдү жана чекиттерди алып салуу үчүн колдоном. Жана ушундай жол менен салыштырууларда каталарды болтурбоо
Ар биринде, эгерде биз тандап алган сөздөрдүн бирине ээ болуу шарты аткарылса, ал биз каалаган нерсени аткара турган функцияны чакырат,
Бул жерде биз ага LEDди күйгүзө турган же жымыңдап турган PIN кодду иштетүүнү айтабыз. Же кандайдыр бир кодду иштетиңиз, же компьютерди өчүрүңүз.
Мунун баары негизги идея. Бул жерден сиз долбоорду иштеп чыгып, аны өзүңүз каалагандай жакшыртсаңыз болот. Ар бир адам аны ар кандай колдонууну таба алат.
Бул монтаж менен эмне кылсак болот
Бул монтажды пайдалануу үчүн мага келген идеялар. Скелет куралдангандан кийин, биз аны үн менен ойго келген нерселердин бардыгын активдештирүү үчүн колдоно алабыз, биз моторду иштеткен реледи жандыра алабыз же скрипт, электрондук почта же башкаларды аткара турган сценарийди ишке киргизе алабыз.
Шыбырап деген эмне
Whisper – бул үн таануу модели, көп тилде иштейт жана англис тилине которууга мүмкүндүк берет. Бул биз тексттен үнгө өтүүчү курал катары билебиз, бирок бул OpenAI командасы тарабынан чыгарылган Open Source, туруктуу диффузиянын жаратуучулары.