Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Голосовой ассистент оффлайн

IrbisPro Мастер (2345), на голосовании 3 месяца назад
как сделать голосового ассистента на python с использованием tkinter, который работает полностью без интернета?
мой код:
 import tkinter as tk  
from tkinter import Label
from PIL import Image, ImageTk
root = tk.Tk()
root.wm_attributes("-topmost",1)
root.attributes('-fullscreen', True)
root.configure(background='white')
root.title("I am so scary")

root.overrideredirect(True)

root.configure(background='white')

root.wm_attributes("-transparentcolor", "white")

img = ImageTk.PhotoImage(file='files/1.png')
imgLabel = Label(root, image=img, borderwidth=0, bg='white')
imgLabel.place(relx = 0.5, rely = 0.6, anchor = 'center')

label = tk.Label(root, text="привет! какие ваши пожелания?", fg='#41004D')
label.configure(background='white')
label.config(font=("Courier", 25))
label.place(relx = 0.5, rely = 0.3, anchor = 'center')

root.mainloop()
Голосование за лучший ответ
Chat GPT-4 Мудрец (16731) 4 месяца назад
## Голосовой ассистент оффлайн на Python с Tkinter

Вы создали отличный интерфейс для своего голосового помощника! Теперь давайте добавим функциональность для работы оффлайн.

1. Оффлайн распознавание речи:

* SpeechRecognition: Библиотека SpeechRecognition оснащена возможностью использовать оффлайн-модели для распознавания речи. Однако, вам потребуется предварительно скачать и установить эти модели.
* Vosk: Vosk - это мощная библиотека для распознавания речи, поддерживающая работу оффлайн. Она предоставляет готовые модели для русского языка.

2. Обработка речи:

* Natural Language Toolkit (NLTK): NLTK - популярная библиотека для обработки естественного языка. Вы можете использовать её для токенизации, лемматизации, анализа синтаксиса и других задач, необходимых для понимания речи пользователя.

3. Реализация логики:

* Словарь команд: Создайте словарь, где ключами будут команды, а значениями - соответствующие действия.
* Проверка команд: Используйте NLTK, чтобы сравнить введенную пользователем речь с ключами в словаре и выбрать соответствующее действие.
* Выполнение действий: Напишите функции, которые будут реализовывать действия, соответствующие командам (например, воспроизведение звука, запуск приложения, выдача информации).

Пример реализации:

import tkinter as tk
from tkinter import Label
from PIL import Image, ImageTk
import speech_recognition as sr
import vosk
import pyaudio

# Настройки Vosk
model_path = "vosk-model-small-ru-0.22" # Замените на путь к модели Vosk
vosk_recognizer = vosk.KaldiRecognizer(model_path, 16000)

# Функция для распознавания речи
def recognize_speech():
# Инициализация микрофона
r = sr.Recognizer()
with sr.Microphone() as source:
print("Говорите...")
audio_data = r.record(source, duration=5)

try:
# Распознавание речи с помощью Vosk
audio_data = vosk_recognizer.AcceptWaveform(audio_data.get_wav_data())
text = audio_data['text']
print("Распознано:", text)

# Обработка речи
# ...

except sr.UnknownValueError:
print("Не удалось распознать речь")
except sr.RequestError as e:
print("Ошибка сервера:", e)

# ... (Ваш код интерфейса)

# Кнопка для запуска распознавания
button = tk.Button(root, text="Говорить", command=recognize_speech)
button.place(relx=0.5, rely=0.8, anchor="center")

root.mainloop()


Важно:

* Загрузите и установите необходимые библиотеки: pip install speechrecognition vosk pyaudio nltk
* Скачайте модель Vosk для русского языка (ссылка на скачивание: https://alphacephei.com/vosk/models) и укажите её путь в model_path.
* Добавьте логику обработки речи и выполнения действий, соответствующих командам пользователя.

Дополнительные идеи:

* Используйте NLTK для создания более сложного анализа речи и понимания контекста.
* Добавьте возможность обучения модели новым командам.
* Включите систему помощи, чтобы пользователь мог узнать доступные команды.

Пример использования:

1. Пользователь нажимает на кнопку "Говорить".
2. Программа запускает запись речи.
3. После окончания записи, речь распознаётся с помощью Vosk.
4. Распознанный текст обрабатывается NLTK для извлечения команд.
5. Выполняется действие, соответствующее команде.

Создавая оффлайн голосового ассистента, вы получите проект, который работает без постоянного интернет-соединения.
dewian Мыслитель (6722) 4 месяца назад
Извините за путаницу. Ошибка возникла из-за того, что переменная `mic` не была определена в области видимости функции `recognize_speech()`. Внесем соответствующие изменения в код, чтобы исправить эту проблему:

python
import tkinter as tk
import speech_recognition as sr
import pyttsx3

def recognize_speech():
recognizer = sr.Recognizer()
mic = sr.Microphone()

with mic as source:
recognizer.adjust_for_ambient_noise(source)
audio = recognizer.listen(source)

try:
text = recognizer.recognize_google(audio)
text_entry.delete(0, tk.END)
text_entry.insert(0, text)
except sr.UnknownValueError:
text_entry.delete(0, tk.END)
text_entry.insert(0, "Не удалось распознать речь")

def speak_text():
engine = pyttsx3.init()
text = text_entry.get()
engine.say(text)
engine.runAndWait()

# создаем графический интерфейс
root = tk.Tk ()
root.title("Голосовой ассистент")

label = tk.Label(root, text="Голосовой ассистент", font=("Arial", 14))
label.pack()

text_entry = tk.Entry(root, width=50)
text_entry.pack()

recognize_button = tk.Button(root, text="Распознать речь", command=recognize_speech)
recognize_button.pack()

speak_button = tk.Button(root, text="Произнести текст", command=speak_text)
speak_button.pack()

root.mainloop()


С этими изменениями код должен работать корректно и избежать ошибки, связанной с `mic`. Надеюсь, это поможет!
IrbisProМастер (2345) 4 месяца назад
  line 9, in  
with mic as source:
^^^
NameError: name 'mic' is not defined. Did you mean: 'min'?
dewian Мыслитель (6722) IrbisPro, Изменил код, проверяй
- Профи (787) 4 месяца назад
import tkinter as tk
from tkinter import Label
from PIL import Image, ImageTk
import pyttsx3
import speech_recognition as sr

# Инициализация голосового движка
engine = pyttsx3.init()

# Функция для синтеза речи
def speak(text):
engine.say(text)
engine.runAndWait()

# Функция для распознавания речи
def recognize_speech_from_mic():
recognizer = sr.Recognizer()
microphone = sr.Microphone()

with microphone as source:
recognizer.adjust_for_ambient_noise(source)
print("Listening...")
audio = recognizer.listen(source)

try:
print("Recognizing...")
response = recognizer.recognize_sphinx(audio, language="ru-RU")
print(f"User said: {response}")
return response
except sr.UnknownValueError:
print("Sphinx could not understand audio")
return None
except sr.RequestError as e:
print(f"Sphinx error; {e}")
return None

# Функция для обработки команд
def process_command(command):
if "привет" in command:
speak("Привет! Какие у вас пожелания?")
elif "пока" in command:
speak("До свидания!")
root.quit()
else:
speak("Извините, я не понял вашу команду.")

# Функция для запуска распознавания речи
def listen_for_command():
command = recognize_speech_from_mic()
if command:
process_command(command)

# Создание графического интерфейса
root = tk.Tk ()
root.wm_attributes("-topmost", 1)
root.attributes('-fullscreen', True)
root.configure(background='white')
root.title("I am so scary")

root.overrideredirect(True)

root.configure(background='white')

root.wm_attributes("-transparentcolor", "white")

img = ImageTk.PhotoImage(file='files/1.png')
imgLabel = Label(root, image=img, borderwidth=0, bg='white')
imgLabel.place(relx=0.5, rely=0.6, anchor='center')

label = tk.Label(root, text="привет! какие ваши пожелания?", fg='#41004D')
label.configure(background='white')
label.config(font=("Courier", 25))
label.place(relx=0.5, rely=0.3, anchor='center')

# Кнопка для запуска распознавания речи
listen_button = tk.Button(root, text="Слушать", command=listen_for_command)
listen_button.place(relx=0.5, rely=0.9, anchor='center')

root.mainloop()
Похожие вопросы