Компьютерде үн менен башкаруу жана Whisper менен RaspberryPi

компьютерде жана малина пиде үн башкаруу

Долбоордун идеясы Үндөн текстке 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 &amp;&amp; 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, туруктуу диффузиянын жаратуучулары.

Эгерде сиз биз сыяктуу тынчыбаган адам болсоңуз жана долбоордун оңдоп-түзөөсүнө жана жакшыртуусуна кызматташууну кааласаңыз, кайрымдуулук кыла аласыз. Бардык акча эксперимент жана окуу куралдары үчүн китептерди жана материалдарды сатып алууга кетет

Комментарий калтыруу