• Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
un led assistente far accendere vocale per

Assistente vocale per far accendere un led
#1
Buonasera tutti , sono da poco entrato a far parte del mondo di RP e avrei bisogno di una mano. Sto cercando di creare un assistente vocale su pi 3b+ che ascolti quello che dico lo traduca in testo e mi accenda e spenga un led collegato sulla gpio. Vedendo un po su internet ho installato le librerie richieste però quando vado ad eseguire il programma mi tira fuori questi errori Sad Sad Potete darmi una mano? Grazie mille a tutti Smile   Questo è il programma che ho scritto:

import pyttsx3
import RPi.GPIO as GPIO
import time

# Impostare il numero del pin GPIO per il LED
LED_PIN = 17

# Configurare il sistema di sintesi vocale
engine = pyttsx3.init()

# Funzione per accendere il LED
def accendi_led():
GPIO.output(LED_PIN, GPIO.HIGH)
engine.say("Il LED è acceso")
engine.runAndWait()

# Funzione per spegnere il LED
def spegni_led():
GPIO.output(LED_PIN, GPIO.LOW)
engine.say("Il LED è spento")
engine.runAndWait()

# Configurare il GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_PIN, GPIO.OUT)

try:
while True:
comando = input("Inserisci un comando (accendi/spegni/esci): ").lower()

if comando == "accendi":
accendi_led()
elif comando == "spegni":
spegni_led()
elif comando == "esci":
break
else:
engine.say("Comando non valido")
engine.runAndWait()

except KeyboardInterrupt:
pass

finally:
GPIO.cleanup()
engine.stop()


Traceback (most recent call last): File home/pi/- Local/lib/pythons.9/site-packages/pyttsx3/ eng = activeEngines [driverNamel File "fusr/lib/python3.9/weakref.py" Line 134, in getatem o = self.data[key]() KeyError: None -Py", Line 20, in init During handling of the above exception, another exception occurred: Traceback (most recent call last): File M/home/pi/Desktop/file.txt". line 9, in ‹module> engine = pyttsx3.init() File home/pi/local/lib/python3.9/site-packages/pyttsx3/. initi Ipy", line 22, in init eng = Engine(driverName, debug) File home pil. Local/Lib/python3.3/site-packages/pyttsx3/engine.py", line 30, in init self. proxy = driver.DriverProxy(weakref.proxy(self), driverName, debug) File home/pil. Local/Lib/python3.9/site-packages/pyttsx3/driver-py". Line 50, in init self-_module = importlib. import_module (name) File Musr lib/python3.9/importlib/init Line 127, in import module return _bootstrap._god_import (name[level:], package, level) File "«frozen importlib. bootstrap>" , line 1030, in god import FiLe Nefrozen importLib. bootstrapy" line 1007, in find and load File afrozen importlib. bootstrappi File "«frozen importlib. bootstrap»", Line 980, in toad unlocked unlocked Line 680, in load unlocked File "«frozen importlib. bootstrap external>'" , Line 790, in exec module File "«frozen importlib. bootstrap›" , line 228, in call with frames removed File /home/pi/.local/lib/python3.9/site-packages/pyttsx3/drivers/espeak.pl line 9. in <module? fron. import _espeak, toutf8, fromutf8 File home/pi/.local/lib/python3.9/site-packages/pyttsx3/drivers/ espeak.py • Line 18, in smodule dil = cdIl. LoadLibrary('Libespeak.so.1') File Wusr/Lib/python3.9/otypes/ init.py", line 452, in LoadLibrary return self._dlltype (name ) File #/usr/lib/pythons.9/ctypes/ init -py". Line 374, init self._handle = _lopen (self-_name, mode) OSError: Libespeak.so.1: cannot open shared object file: No such file or directory
Risposta
#2
I link di seguito potrebbero esserti di ausilio per quello che intendi fare:
https://www.raspberryitaly.com/raspberry...on-python/.
https://betaingegneria.it/2021/02/01/pyt...di_pyttsx3
Risposta
#3
Buongiorno,
non ho mai usato pyttsx3, ma è una libreria di sintesi vocale. Nel tuo script manca la parte che ascolta quello che dici.
ma ti posso dire che il problema maggiore, in questo tipo di utilizzo, è il microfono. Nel senso che Raspberry Pi non è dotato di microfono di serie, quindi usare l'indirizzo "0" come di solito si fa con librerie di riconoscimento vocale, non funziona. Su raspberry si possono collegare microfoni con USB, bluetooth, GPIO ecc..
Tu che microfono utilizzi, connesso come?

Non so che guida hai seguito, ma usare direttamente RPi.Gpio è un metodo un po' passato (oddio, ChatGPT, avendo imparato dalla rete, lo suggerisce ancora), ma gpiozero è enormemente più semplice e intuitiva per usare i GPIO.

Un paio di anni fa ho sperimentato nel riconoscimento vocale come input e poi nella sintesi vocale come output, con Python.
[(ulr=https://www.raspberryitaly.com/raspberry-pi-ti-ascolta-e-risponde-con-python/]Qui trovi la guida relativa sul blog[/url]
Appena è uscito ChatGPT, ho provato a implementarlo come "motore" da usare tra l'input e l'output, qui la guida.
Anche CarbonaraGPT, il progetto di MikiLinux usa il riconoscimento vocale.

Ti segnalo queste guide perché ti siano di ispirazione, e perché si descrive un po' il fatto che il sottosistema audio, in Linux, sia un po' un casino, in effetti.

Per il riconoscimento vocale io ho usato SpeechRecognition, che può funzionare offline o online, anche se l'italiano limita comunque la scelta, io ho optato per usare il servizio di google online
Seguendo la falsariga della prima guida he ti ho segnalato, farei qualcosa tipo:

Codice:
mport speech_recognition as sp
from time import sleep
from gpiozero import LED

led = LED(17)                                                     #pin GPIO a cui è collegato il LED
#possibili comandi
accendi = ["accendi","attiva","illumina"]
spegni = ["spegni","disattiva",oscura"]
lampeggia = ["lampeggia","aterna","sfavilla"]

clearConsole = lambda: print('\n' * 150)

#definiamo le funzioni
def get_audio():
    r = sp.Recognizer()
    with sp.Microphone(device_index=10) as source:               #il device index del vostro microfono
        clearConsole()                                           #pulisce lo schermo
        print("in ascolto...")
        r.adjust_for_ambient_noise(source,duration=1)
        audio = r.listen(source)
        result = ""
        try:
            result = r.recognize_google(audio,language='it')
        except Exception:
            print("non ho capito")
            sleep (1)                                            #attesa di un secondo
    return result

def speak(text):

#main

while True:                          #ciclo infinito
    text_in = get_audio()            #ascolta una frase traducila con get_audio() e mettila in text_in
    text_in = text_in.lower()        #porta tutto minuscolo
#    text_out = text_in
    if text_in!=None and text_in!="":        
        if text_in in accendi:                      #se riconosce una delle parole chiave di accensione
            led.on                                  #accendi il LED
        if text_in in spegni:                       #se riconosce una delle parole chiave di spegnimento
            led.off                                 #spegni il LED
        if text_in in lampeggia:                    #se riconosce una delle parole chiave di lampeggiamento
            led.blink
Risposta
#4
Ciao Zzed ti ringrazio per la gentile risposta, come microfono sto usando uno collegato via usb. Mi sono inspirato alla guida che avevi fatto usando anche lo script per tirar fuori la lista di dispositivi audio connessi e il loro id. Comunque darò un occhiata a quelle suggerite da te e vi tengo aggiornati. Orami ho iniziato a giocarci e devo arrivare ad una soluzione ^^
Risposta
  


Vai al forum:


Navigazione: 1 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect