ການຄວບຄຸມສຽງໃນ PC ແລະ RaspberryPi ດ້ວຍ Whisper

ການຄວບຄຸມສຽງໃນ PC ແລະ raspberry pi

ຄວາມຄິດຂອງໂຄງການແມ່ນ ໃຫ້ຄໍາແນະນໍາສຽງເພື່ອໂຕ້ຕອບກັບ PC ຫຼື Raspberry Pi ຂອງພວກເຮົາໂດຍໃຊ້ຕົວແບບສຽງຫາຂໍ້ຄວາມ Whisper.

ພວກເຮົາຈະໃຫ້ຄໍາສັ່ງທີ່ຈະຖືກຖອດຂໍ້ຄວາມ, ປ່ຽນເປັນຂໍ້ຄວາມ, ດ້ວຍ Whisper ແລະຫຼັງຈາກນັ້ນວິເຄາະເພື່ອປະຕິບັດຄໍາສັ່ງທີ່ເຫມາະສົມ, ເຊິ່ງສາມາດຕັ້ງແຕ່ການດໍາເນີນການໂຄງການທີ່ຈະໃຫ້ແຮງດັນກັບ pins RaspberryPi.

ຂ້ອຍຈະໃຊ້ Raspberry Pi 2 ເກົ່າ, micro USB ແລະຂ້ອຍຈະໃຊ້ຮູບແບບ Voice-to-text ທີ່ປ່ອຍອອກມາເມື່ອບໍ່ດົນມານີ້ໂດຍ OpenAI, Whisper. ໃນຕອນທ້າຍຂອງບົດຄວາມທີ່ທ່ານສາມາດເບິ່ງ ກະຊິບໜ້ອຍໜຶ່ງ.

ໂຄງ​ການ​ທັງ​ຫມົດ​ໃນ​ Python.

ຂ້າ​ພະ​ເຈົ້າ​ປ່ອຍ​ໃຫ້​ທ່ານ​ສາ​ທິດ​ການ​ເຮັດ​ວຽກ​ຂອງ​ວິ​ດີ​ໂອ​ນີ້​, ການ​ຄວບ​ຄຸມ PC ໂດຍ​ສຽງ​.

ສະພາແຫ່ງ

ເພື່ອໃຊ້ມັນກັບ PC, ພວກເຮົາຈະຕ້ອງການໄມໂຄຣໂຟນເທົ່ານັ້ນ.

ຖ້າເຈົ້າຈະຕິດມັນໃສ່ RaspberryPi, ເຈົ້າຈະຕ້ອງມີໄມໂຄຣໂຟນ USB, ເພາະວ່າແຈັກທີ່ມັນມີນັ້ນພຽງແຕ່ເອົາອອກເທົ່ານັ້ນ.

ຕ້ອງການ:

ໃນຖານະເປັນຈຸດປະສົງທົ່ວໄປຂອງເຄື່ອງມືແມ່ນການກໍານົດສຽງ. ຂ້າພະເຈົ້າເຫັນວ່າມັນເປັນປະໂຫຍດຫຼາຍທີ່ຈະປະສົມປະສານມັນເຂົ້າໃນການດໍາເນີນງານຂອງອຸປະກອນອື່ນໆ.

  • Micro USB
  • Raspberry PI ກັບລະບົບປະຕິບັດການ (ຕົວຢ່າງ Raspbian pro)
  • ເອເລັກໂຕຣນິກ (LED, ສາຍໄຟ, ຕົວຕ້ານທານ 480 ohm ແລະ breadboard)

ພວກເຮົາເຊື່ອມຕໍ່ LED ກັບ pin 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

ຂ້ອຍບໍ່ສາມາດທົດສອບມັນໄດ້ເພາະວ່າຂ້ອຍບໍ່ມີ microSD ສໍາລັບ RaspberryPi, ຫຼືລໍາໂພງ 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

ກະຊິບເພື່ອເຮັດວຽກກັບຕົວແບບ

ເວລາ, ເພາະວ່າຂ້ອຍໃຊ້ມັນເພື່ອຄວບຄຸມເວລາທີ່ມັນໃຊ້ເພື່ອປະຕິບັດ script, gpiozero ເຮັດວຽກກັບ pins GPIO ຂອງ Raspberry ແລະ sounddevice, scipy ແລະ wavio ເພື່ອບັນທຶກສຽງ.

ໜ້າ ທີ່

ຂ້າ​ພະ​ເຈົ້າ​ໄດ້​ສ້າງ 4 ຫນ້າ​ທີ່​:

  • ຕົ້ນຕໍ ()
  • ແສງ ()
  • ກະພິບ ()
  • record_audio()

ເປີດ () ພຽງແຕ່ໃຫ້ແຮງດັນກັບ pin 17 ຂອງ raspberry ບ່ອນທີ່ພວກເຮົາໄດ້ເຊື່ອມຕໍ່ໃນກໍລະນີນີ້ LED ເພື່ອທົດສອບ

def encender ():
    LED(17).on()

blink() ຄືກັບ on() ແຕ່ມັນເຮັດໃຫ້ກະພິບ led ໂດຍການເປີດແລະປິດພາຍໃນ loop.

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() ໃນຕອນທ້າຍຂອງ script. ວິທີການນີ້ໃນຕອນເລີ່ມຕົ້ນ, ມັນຈະນໍາເຂົ້າຫ້ອງສະຫມຸດແລະຫຼັງຈາກນັ້ນເຮັດໃຫ້ການເອີ້ນຟັງຊັນ.

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()


  

ຂ້ອຍໃຊ້ມັນເພື່ອປ່ຽນຄຳສັບໃນສຽງໃຫ້ເປັນຕົວພິມນ້ອຍ ແລະເອົາເຄື່ອງໝາຍຈຸດ ແລະເຄື່ອງໝາຍຈຸດອອກ. ແລະດ້ວຍວິທີນີ້, ຫຼີກເວັ້ນການຜິດພາດໃນການປຽບທຽບ

ໃນ​ແຕ່​ລະ​ຖ້າ​ຫາກ​ວ່າ​ເງື່ອນ​ໄຂ​ຂອງ​ການ​ມີ​ຄໍາ​ສັບ​ໃດ​ຫນຶ່ງ​ຂອງ​ພວກ​ເຮົາ​ໄດ້​ຮັບ​ການ​ຄັດ​ເລືອກ​ແມ່ນ​, ມັນ​ເອີ້ນ​ວ່າ​ຫນ້າ​ທີ່​ທີ່​ຈະ​ເຮັດ​ສິ່ງ​ທີ່​ພວກ​ເຮົາ​ຕ້ອງ​ການ​,

ນີ້ແມ່ນບ່ອນທີ່ພວກເຮົາບອກມັນໃຫ້ເປີດໃຊ້ PIN ທີ່ຈະເຮັດໃຫ້ໄຟ LED ຫຼືເຮັດໃຫ້ມັນກະພິບ. ທັງແລ່ນລະຫັດບາງອັນ, ຫຼືປິດຄອມພິວເຕີ.

ທັງຫມົດນີ້ແມ່ນຄວາມຄິດພື້ນຖານ. ຈາກທີ່ນີ້ທ່ານສາມາດພັດທະນາໂຄງການແລະປັບປຸງມັນຕາມທີ່ທ່ານຕ້ອງການ. ແຕ່ລະຄົນສາມາດຊອກຫາການນໍາໃຊ້ທີ່ແຕກຕ່າງກັນສໍາລັບມັນ.

ສິ່ງທີ່ພວກເຮົາສາມາດເຮັດໄດ້ກັບ montage ນີ້

ເຫຼົ່ານີ້ແມ່ນແນວຄວາມຄິດທີ່ມາຫາຂ້າພະເຈົ້າເພື່ອໃຊ້ປະໂຍດຈາກ montage ນີ້. ເມື່ອໂຄງກະດູກຖືກປະກອບອາວຸດ, ພວກເຮົາສາມາດໃຊ້ມັນເພື່ອກະຕຸ້ນທຸກສິ່ງທຸກຢ່າງທີ່ຢູ່ໃນໃຈໂດຍສຽງ, ພວກເຮົາສາມາດເປີດໃຊ້ relay ທີ່ເລີ່ມຕົ້ນ motor ຫຼືພວກເຮົາສາມາດເປີດຕົວ script ທີ່ດໍາເນີນການ script, ອີເມວຫຼືໃດກໍ່ຕາມ.

ກະຊິບແມ່ນຫຍັງ

Whisper ແມ່ນຮູບແບບການຮັບຮູ້ vol, ເຮັດວຽກຢູ່ໃນຫຼາຍພາສາທີ່ມີຈໍານວນພາສາຈໍານວນຫລາຍແລະອະນຸຍາດໃຫ້ແປເປັນພາສາອັງກິດ. ມັນແມ່ນສິ່ງທີ່ພວກເຮົາຮູ້ວ່າເປັນເຄື່ອງມືຂໍ້ຄວາມເປັນສຽງ, ແຕ່ນີ້ແມ່ນ Open Source, ປ່ອຍອອກມາໂດຍທີມງານ OpenAI, ຜູ້ສ້າງ Stable Diffusion.

Leave a comment