Assistente virtuale: come migliorarlo, come cambiare la sua voce, come renderlo piu veloce, e magari come integrare un api key (gia provato non va)

HaDoCk

Utente Iron
10 Agosto 2022
14
5
1
16
Ultima modifica da un moderatore:
questo è il codice dell'assistente virtuale, sfortunatamente è lento e non so come migliorarlo.

Python:
import speech_recognition as sr
import pyttsx3
import datetime
import webbrowser
import requests

# Inizializza il riconoscitore vocale e il motore di sintesi vocale
riconoscitore = sr.Recognizer()
sintesi_vocale = pyttsx3.init()

#variabile per tenere traccia dell'introduzione
introduzione_gia_effettuata = False

# Definisci una funzione per far parlare l'assistente
def parla(testo):
    sintesi_vocale.say(testo)
    sintesi_vocale.runAndWait()

# Definisci una funzione per riconoscere il discorso
def ascolta():
    global introduzione_gia_effettuata
    with sr.Microphone() as sorgente:
        if not introduzione_gia_effettuata:
            parla("Salve signore, sono online, oggi cosa vuole fare, vuole per caso continuare lo sviluppo del sito internet?")
        introduzione_gia_effettuata = True
        riconoscitore.adjust_for_ambient_noise(sorgente)
        audio = riconoscitore.listen(sorgente)
        comando = ""

        try:
            comando = riconoscitore.recognize_google(audio, language="it-IT")
            print("Hai detto: " + comando)
        except sr.UnknownValueError:
            print("Mi dispiace, non ho capito cosa hai detto.")
        except sr.RequestError as e:
            print("Si è verificato un errore nella richiesta: {0}".format(e))

        return comando.lower()
 
    # Funzione per aprire una pagina web
def apri_pagina_web(url):
    try:
        webbrowser.open(url)
    except Exception as e:
        print(f"Si è verificato un errore durante l'apertura di {url}: {str(e)}")

# Ciclo principale del programma
while True:
    comando = ascolta()

    if "cerca su google" in comando or "jarvis cerca su google" in comando:
        parla("cosa vuoi cercare?")
        ricerca = ascolta()
        ricerca = ricerca.replace(" ", "+")
        url = f"https://www.google.com/search?q={ricerca}"
        webbrowser.open(url)

    if "jarvis sei on- line?" in comando or "jarvis è online" in comando or "jei ci sei" in comando or "jarvis ci sei" in comando:
        parla("Sì, ci sono")
    elif"jarvis che ore sono" in comando:
        ora_attuale = datetime.datetime.now().strftime("%H:%M")
        parla("Sono le " + ora_attuale)
    elif"jarvis come va" in comando or "jarvis come stai" in comando:
        parla("Va tutto bene, a te?")
    elif "va tutto bene grazie" in comando or "va tutto bene" in comando:
        parla("Ne sono felice, posso darti una mano")
    elif "per ora no" in comando or "ti faccio sapere" in comando or "no" in comando or "no non ancora" in comando or "forse dopo" in comando:
        parla("Va bene, nel caso io sono qui")
    elif "va bene grazie" in comando or "grazie" in comando:
        parla("Di nulla, sono qui per aiutarti. Alla fine mi hai creato tu.")
    elif"jarvis svegliati" in comando or "jarvis sveglia" in comando or "jarvis papino è tornato" in comando or "jarvis svelgia papino è tornato" in comando or "jarvis papa è tornato" in comando:
        parla("eccomi signore ci sono")
    elif "jarvis spento" in comando or "jarvis ciao" in comando or " jarvis ciao ciao" in comando or "jarvis spegniti" in comando:
        parla("A domani")
        break
    elif"jarvis apri libertà" in comando or "ehi jarvis apri libertà" in comando or "jarvis libertà" in comando:
        try:
            webbrowser.open("https://www.youtube.com/watch?v=SMWLc2nY3N8&pp=ygUSbGliZXJ0YSBsb2NvIGZyYW1l")
        except Exception as e:
            print("Si è verificato un errore durante l'apertura della canzone di davide:", str(e))
    elif"jarvis apri google" in comando or "ehi jarvis apri google" in comando or "jarvis internet" in comando:
        try:
            webbrowser.open("https://www.google.com")
        except Exception as e:
            print("Si è verificato un errore durante l'apertura di Google:", str(e))
    elif"jarvis apri il tuo sosia" in comando or "jarvis apri tuo fratello" in comando or "jarvis apri chat gpt" in comando or "jarvis apri chat gpt" in comando:
        try:
            webbrowser.open("https://chat.openai.com/")
        except Exception as e:
            print("Si è verificato un errore durante l'apertura di ChatGpt:", str(e))
    elif"jarvis apri youtube" in comando or "jarvis avvia youtube" in comando or "jarvis youtube" in comando:
        try:
            webbrowser.open("https://www.youtube.com/")
        except Exception as e:
            print("Si è verificato un errore durante l'apertura di Youtube:", str(e))
    elif"jarvis riproduci della musica" in comando or "jarvis riproduci musica" in comando or "jarvis metti un po di musica" in comando or "jarvis musica" in comando:
        try:
            webbrowser.open("https://open.spotify.com/playlist/3rQJHcUo1KyDXHjH7PNwoq")
        except Exception as e:
            print("Si è verificato un errore durante l'avvio della musica:", str(e))
 
Ciao! Quello che farei io, per iniziare, sarebbe creare due funzioni: una per l'ascolto e la trascrizione dell'audio in testo e la seconda per l'inoltro del comando a chatGPT (in modo da poter chiedere qualsiasi cosa all'assistente). La prima funziona che hai scritto potrebbe anche andare bene, però conviene modificarla per restituire il valore del comando nel try: in questo modo la seconda funzione che andrai a creare (quella per l'inoltro del comando a chatGPT) può utilizzare l'output della prima. Si possono sfruttare le API di OPENAI. Facendo in questo modo, puoi cancellare la parte dove vai ad analizzare il comando vocale con tutti quegli if ed else. L'unica controindicazione è che perdi la possibilità di svolgere operazioni a livello locale, tipo aprire il browser, aprire file ecc. Infatti, una volta ottenuta la risposta testuale da chatGPT, si potrebbe riprodurre con un motore di sintesi vocale. In alternativa, potresti chiedere all'utente se vuole svolgere un'operazione a livello locale oppure chiedere un'informazione generica, chiamando poi, di conseguenza, funzioni diverse. Fammi sapere, è molto interessante come idea. 😉
 
  • Mi piace
Reazioni: HaDoCk
Ciao! Quello che farei io, per iniziare, sarebbe creare due funzioni: una per l'ascolto e la trascrizione dell'audio in testo e la seconda per l'inoltro del comando a chatGPT (in modo da poter chiedere qualsiasi cosa all'assistente). La prima funziona che hai scritto potrebbe anche andare bene, però conviene modificarla per restituire il valore del comando nel try: in questo modo la seconda funzione che andrai a creare (quella per l'inoltro del comando a chatGPT) può utilizzare l'output della prima. Si possono sfruttare le API di OPENAI. Facendo in questo modo, puoi cancellare la parte dove vai ad analizzare il comando vocale con tutti quegli if ed else. L'unica controindicazione è che perdi la possibilità di svolgere operazioni a livello locale, tipo aprire il browser, aprire file ecc. Infatti, una volta ottenuta la risposta testuale da chatGPT, si potrebbe riprodurre con un motore di sintesi vocale. In alternativa, potresti chiedere all'utente se vuole svolgere un'operazione a livello locale oppure chiedere un'informazione generica, chiamando poi, di conseguenza, funzioni diverse. Fammi sapere, è molto interessante come idea. 😉
Ciao!
Innanzitutto grazie per il consiglio e per aver risposto, poi ti dico che ho gia provato ad integrare l'api di chatgpt ma non funziona.
Ho provato anche a cambiare totalmente account e a creare di sonseguenza una nuova api key ma lo stesso non va quindi non so come fare ma indaghero di certo.
Grazie ancora per la risposta, A presto :)
 
  • Mi piace
Reazioni: --- Ra ---
Ciao!
Innanzitutto grazie per il consiglio e per aver risposto, poi ti dico che ho gia provato ad integrare l'api di chatgpt ma non funziona.
Ho provato anche a cambiare totalmente account e a creare di sonseguenza una nuova api key ma lo stesso non va quindi non so come fare ma indaghero di certo.
Grazie ancora per la risposta, A presto :)
Se riesci a postare qual è il problema con l'API sul forum, forse riusciamo a risolverlo insieme, se ti va. Noi siamo a disposizione. 🙃
 
il programma non l'ho scritto io ma l'ho visto da un video su youtube ed ecco quello che mi dice
 

Allegati

  • JOI ASSISTANT.png
    JOI ASSISTANT.png
    71.4 KB · Visualizzazioni: 4
il programma non l'ho scritto io ma l'ho visto da un video su youtube ed ecco quello che mi dice

Il messaggio You exceeded your current quota fa pensare che non hai impostato la api_key del tuo account openai nel file secrets.json oppure che hai già fatto più query di quanto consentito col tuo abbonamento pagato o free. Consulta la pagina di Rate limit per sapere quante query ti spettano in base al tuo account.
 
  • Mi piace
Reazioni: --- Ra ---
Secondo la documentazione di OPENAI, per inoltrare una richiesta all'API occorre seguire questo formato:

Python:
from openai import OpenAI
client = OpenAI()

completion = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "You are a poetic assistant, skilled in explaining complex programming concepts with creative flair."},
    {"role": "user", "content": "Compose a poem that explains the concept of recursion in programming."}
  ]
)

print(completion.choices[0].message)

Ovviamente puoi modificare il contenuto di "content", magari passandogli proprio l'output di un'ipotetica funzione ascolta(), che trascrive la richiesta dell'utente in testo. IMPORTANTE: devi impostare il tuo token come variabile di sistema (OPENAI_API_KEY) per far si che questo codice funzioni!