التحكم الصوتي على جهاز الكمبيوتر و RaspberryPi مع Whisper

التحكم الصوتي على جهاز الكمبيوتر و Raspberry Pi

فكرة المشروع إعطاء تعليمات صوتية للتفاعل من خلال جهاز الكمبيوتر الخاص بنا أو Raspberry Pi باستخدام نموذج Whisper Voice-to-text.

سنقدم طلبًا سيتم نسخه وتحويله إلى نص باستخدام Whisper ثم تحليله لتنفيذ الأمر المناسب ، والذي يمكن أن يكون من تنفيذ برنامج إلى إعطاء جهد لدبابيس RaspberryPi.

سأستخدم Raspberry Pi 2 القديم ، و micro USB وسأستخدم نموذج تحويل الصوت إلى نص الذي تم إصداره مؤخرًا بواسطة OpenAI ، همس. في نهاية المقال تستطيع أن ترى مزيد من الهمس.

كلها مبرمجة في بايثون.

أترك لكم عرضًا توضيحيًا لكيفية عملها في هذا الفيديو ، والتحكم في جهاز الكمبيوتر عن طريق الصوت.

متزايد

لاستخدامه مع جهاز الكمبيوتر ، سنحتاج فقط إلى ميكروفون.

إذا كنت ستقوم بتثبيته على 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

لم أتمكن من اختباره لأنني لا أملك بطاقة 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

يهمس للعمل مع النموذج

الوقت ، لأنني أستخدمه للتحكم في الوقت الذي يستغرقه تنفيذ النص ، gpiozero للعمل مع دبابيس GPIO في Raspberry وجهاز الصوت ، scipy و wavio لتسجيل الصوت

وظائف

لقد قمت بإنشاء 4 وظائف:

  • رئيسي ()
  • خفيفة ()
  • ليرمش ()
  • تسجيل صوتي()

تشغيل () يعطي جهدًا للدبوس 17 من التوت حيث قمنا بتوصيل الصمام في هذه الحالة للاختبار

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

يشبه blink () تشغيل () ولكنه يجعل وميض LED عن طريق تشغيله وإيقاف تشغيله داخل حلقة.

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 أو يجعله يومض. قم بتشغيل بعض التعليمات البرمجية أو إيقاف تشغيل الكمبيوتر.

كل هذه فكرة أساسية. من هنا يمكنك تطوير المشروع وتحسينه كما تريد. يمكن لكل شخص أن يجد استخدامًا مختلفًا له.

الأشياء التي يمكننا القيام بها مع هذا المونتاج

هذه أفكار أتت إلي للاستفادة من هذا المونتاج. بمجرد أن يتم تسليح الهيكل العظمي ، يمكننا استخدامه لتنشيط كل ما يتبادر إلى الذهن عن طريق الصوت ، ويمكننا تنشيط التتابع الذي يبدأ تشغيل محرك أو يمكننا تشغيل برنامج نصي ينفذ نصًا أو بريدًا إلكترونيًا أو أيًا كان.

ما هو الهمس

Whisper هو نموذج للتعرف على المجلد ، ويعمل بلغات متعددة مع عدد كبير من اللغات ويسمح بالترجمة إلى اللغة الإنجليزية. إنه ما نعرفه كأداة لتحويل النص إلى صوت ، أصدره فريق OpenAI ، مبتكرو Dall-e.

ترك تعليق