တိတ်တိတ်လေးဖြင့် PC နှင့် RaspberryPi တွင် အသံထိန်းချုပ်မှု

PC နှင့် Raspberry pi တွင် အသံထိန်းချုပ်မှု

စီမံကိန်း၏စိတ်ကူးသည် Voice-to-text Whisper မော်ဒယ်ကို အသုံးပြု၍ ကျွန်ုပ်တို့၏ PC သို့မဟုတ် ကျွန်ုပ်တို့၏ Raspberry Pi မှတဆင့် အပြန်အလှန်တုံ့ပြန်ရန် အသံညွှန်ကြားချက်များ ပေးပါ။.

ကျွန်ုပ်တို့သည် ပရိုဂရမ်တစ်ခုကို လုပ်ဆောင်ခြင်းမှ RaspberryPi ပင်များကို ဗို့အားပေးသည့်အထိ ဖြစ်နိုင်သည့် သင့်လျော်သောအမှာစာကို လုပ်ဆောင်ရန် တိတ်တိတ်လေးဖြင့် ခွဲခြမ်းစိတ်ဖြာပြီး စာသားအဖြစ် စာသားအဖြစ်သို့ ကူးပြောင်းကာ စာသားအဖြစ်သို့ ပြောင်းလဲမည့် အမှာစာကို ပေးပါမည်။

ကျွန်ုပ်သည် Raspberry Pi 2၊ micro USB အဟောင်းကို အသုံးပြုမည်ဖြစ်ပြီး OpenAI မှ မကြာသေးမီက ထွက်ရှိထားသော Voice-to-text မော်ဒယ်ကို အသုံးပြုပါမည်။ တီးတိုးစကားပွော. ဆောင်းပါး၏အဆုံးတွင်သင်မြင်နိုင်သည်။ နည်းနည်းတိုးတိုး.

အားလုံးကို အစီအစဉ်ချထားသည်။ Python ကို.

PC ကို အသံဖြင့် ထိန်းချုပ်နည်းကို ဤဗီဒီယိုတွင် သရုပ်ပြထားပါမည်။

ညီလာခံ

၎င်းကို PC နှင့်အသုံးပြုရန်အတွက် မိုက်ခရိုဖုန်းတစ်ခုသာ လိုအပ်ပါမည်။

၎င်းကို RaspberryPi တွင်တပ်ဆင်မည်ဆိုပါက၊ ၎င်းတွင်ပါရှိသော Jack သည် အထွက်အတွက်သာဖြစ်သောကြောင့် USB မိုက်ခရိုဖုန်း လိုအပ်မည်ဖြစ်သည်။

လိုအပ်သည်။

ကိရိယာ၏ ယေဘူယျ ရည်ရွယ်ချက်မှာ အသံ ခွဲခြားခြင်း ဖြစ်သည်။ အခြားစက်များ၏လည်ပတ်မှုတွင် ၎င်းကို ပေါင်းစည်းရန် အလွန်အသုံးဝင်သည်ဟု ကျွန်ုပ်ထင်ပါတယ်။

  • မိုက်ခရို USB
  • လည်ပတ်မှုစနစ်ပါရှိသော Raspberry PI (Raspbian pro ဥပမာ)
  • အီလက်ထရွန်းနစ်ပစ္စည်းများ (LED၊ ဝါယာကြိုးများ၊ 480 ohm ခုခံအားနှင့် ပေါင်မုန့်ပြား)

LED ကို ပင်နံပါတ် 17 သို့ ချိတ်ဆက်ပေးသည်၊ ၎င်းသည် ဤအတွေ့အကြုံအတွက် ကျွန်ုပ်တို့ စတင်အသုံးပြုနိုင်ပြီး ပိတ်သွားမည်ဖြစ်သည်။

ကုဒ်ဖွံ့ဖြိုးတိုးတက်မှု

၎င်းကို အပိုင်းသုံးပိုင်း ပိုင်းခြားထားပြီး ပထမ၊ ကျွန်ုပ်ထံမှ ကုဒ်ယူထားသော အသံဖမ်းခြင်း ဖြစ်သည်။ geeksforgeeksဘာလို့လဲ ဆိုတော့ အဲဒီစာအုပ်ဆိုင်တွေကို မသိဘူး။ ဒုတိယ၊ အသံကို တိတ်တိတ်လေးဖြင့် စာသားသို့ ပြောင်းလဲခြင်းနှင့် တတိယ၊ RaspberryPi တွင် ထိုစာသားနှင့် တုံ့ပြန်မှုကို ကုသခြင်း

စမ်းသပ်မှုနမူနာတွင် ကျွန်ုပ်သည် မီးလင်းရန် သို့မဟုတ် မျက်တောင်ခတ်စေရန် Led နှင့်သာ အပြန်အလှန်ဆက်သွယ်နိုင်သော်လည်း ၎င်းကို ကျွန်ုပ်တို့၏လိုအပ်ချက်နှင့်အညီ ချိန်ညှိရန် script ကို တီထွင်နိုင်ခဲ့ပါသည်။

၎င်းသည် 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>

code အားလုံး

#!/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 စပီကာ မရှိသောကြောင့် ၎င်းကို မစမ်းသပ်နိုင်ခဲ့ပါ၊ သို့သော် ၎င်းကို စမ်းကြည့်သည်နှင့် အလွယ်တကူ ချော်ထွက်လွယ်သည့် error အချို့ကို ပြင်ပေးပါသည်။

Code ၏ အဆင့်ဆင့် ရှင်းလင်းချက်

#!/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

တိတ်တိတ်လေး မော်ဒယ်လုပ်ရတာ

အချိန်၊ ဇာတ်ညွှန်းကိုလုပ်ဆောင်ရန် လိုအပ်သည့်အချိန်ကို ထိန်းချုပ်ရန် အသုံးပြုသောကြောင့်၊ အသံဖမ်းရန် Raspberry ၏ GPIO ပင်များနှင့် sounddevice၊ scipy နှင့် wavio တို့နှင့်အတူ အလုပ်လုပ်ရန် gpiozero

လုပ်ဆောင်ချက်များ

ငါ function 4 ခုဖန်တီးထားပါတယ်

  • အဓိက ()
  • အလင်း()
  • မျက်တောင်ခတ်ရန် ()
  • record_audio()

turn on () သည် ဤကိစ္စတွင်ကျွန်ုပ်တို့ချိတ်ဆက်ထားသော raspberry ၏ pin 17 အား ဗို့အားကိုပေးပါသည်။

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

blink() သည် on() နှင့်တူသော်လည်း ၎င်းသည် loop တစ်ခုအတွင်း အဖွင့်အပိတ်ပြုလုပ်ခြင်းဖြင့် led blink ကိုပြုလုပ်သည်။

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 သည် ပင်မလုပ်ဆောင်ချက်ဖြစ်ပြီး၊ ကျွန်ုပ်တို့၏လုပ်ဆောင်ချက်များအပြင်ဘက်တွင် တစ်ခုတည်းသောအရာမှာ script ၏အဆုံးတွင် 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 စသည်ဖြင့် နောက်ပိုင်းတွင် စာသားအဖြစ်ပြောင်းမည့် ကျွန်ုပ်တို့၏ညွှန်ကြားချက်ကို မှတ်တမ်းတင်မည့် record audio function ကို ခေါ်ပါသည်။

    inicio = time.time()
    record_audio ()

  

အော်ဒီယိုရပြီဆိုတာနဲ့ တိုးတိုးလေးခေါ်ပြီး ကျွန်တော်တို့သုံးချင်တဲ့ မော်ဒယ်ကို ပြောပြမယ်၊ ရနိုင်တဲ့ 5 ခုရှိပြီး သေးသေးလေးပဲ သုံးမယ် ၊ အဲဒါက အမြန်ဆုံးဖြစ်ပြီး အသံက ရိုးရိုးရှင်းရှင်း ဖြစ်နေပေမယ့်၊ စကားလုံး ၃ လုံး သို့မဟုတ် ၄ လုံးသာရှိသည်။

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


  

အော်ဒီယိုရှိ စကားလုံးများကို စာလုံးသေးအဖြစ် ပြောင်းရန်နှင့် ကော်မာများနှင့် အပိုင်းများကို ဖယ်ရှားရန် ၎င်းကို အသုံးပြုပါသည်။ ဤနည်းအားဖြင့် နှိုင်းယှဉ်မှုများတွင် အမှားများကို ရှောင်ရှားပါ။

တစ်ခုစီတွင် ကျွန်ုပ်တို့ရွေးချယ်ထားသော စကားလုံးများ၏ အခြေအနေနှင့် ကိုက်ညီပါက ၎င်းသည် ကျွန်ုပ်တို့အလိုရှိသောအရာကို လုပ်ဆောင်ပေးမည့် function ဟုခေါ်သည်။

LED မီးလင်းမည် သို့မဟုတ် မှိတ်တုတ်မှိတ်တုတ်ဖြစ်စေမည့် ပင်နံပါတ်ကို အသက်သွင်းရန် ၎င်းအား ကျွန်ုပ်တို့ပြောသည့်နေရာတွင်ဖြစ်သည်။ ကုဒ်အချို့ကို ဖွင့်ပါ သို့မဟုတ် ကွန်ပျူတာကို ပိတ်ပါ။

ဤအရာအားလုံးသည် အခြေခံအယူအဆဖြစ်သည်။ ဤနေရာမှ သင်သည် ပရောဂျက်ကို တီထွင်နိုင်ပြီး သင်ဆန္ဒအတိုင်း မြှင့်တင်နိုင်သည်။ လူတစ်ဦးစီသည် ၎င်းအတွက် မတူညီသောအသုံးပြုမှုကို ရှာဖွေနိုင်သည်။

ဤပုံသဏ္ဍန်ဖြင့် ကျွန်ုပ်တို့လုပ်နိုင်သောအရာများ

ဤပုံသဏ္ဍာန်ကို အခွင့်ကောင်းယူရန် ဤအရာများသည် ကျွန်ုပ်ထံသို့ ရောက်ရှိလာသော အတွေးအမြင်များ ဖြစ်ပါသည်။ အရိုးစုကို လက်နက်ကိုင်ဆောင်ပြီးသည်နှင့် ကျွန်ုပ်တို့သည် အသံဖြင့် သတိရလာသမျှကို အသက်သွင်းရန် ၎င်းကို အသုံးပြုနိုင်ပြီး၊ ကျွန်ုပ်တို့သည် မော်တာစတင်သည့် relay ကို အသက်သွင်းနိုင်သည် သို့မဟုတ် script တစ်ခု၊ အီးမေးလ် သို့မဟုတ် မည်သည့်အရာမဆို လုပ်ဆောင်သည့် script ကို စတင်နိုင်သည်။

တိုးတိုးဆိုတာဘာလဲ

Whisper သည် vol recognition model တစ်ခုဖြစ်ပြီး ဘာသာစကားများစွာဖြင့် လုပ်ဆောင်နိုင်ပြီး အင်္ဂလိပ်ဘာသာသို့ ဘာသာပြန်ရန် ခွင့်ပြုသည်။ ၎င်းသည် စာသားမှ အသံတူးလ်တစ်ခုအဖြစ် ကျွန်ုပ်တို့သိထားသော်လည်း ၎င်းမှာ Stable Diffusion ဖန်တီးသူများဖြစ်သည့် OpenAI အဖွဲ့မှ ထုတ်ပြန်သော Open Source ဖြစ်သည်။

မှတ်ချက် Leave