image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image

MA

Marco Antonio14/02/2025 11:11
Compartilhe

Python para Dados

  • #Python

# Desvendando Assistentes Virtuais com Python: Tecnologias e Aplicações

image

image

## Introdução

No mundo atual, os assistentes virtuais têm ganhado destaque, oferecendo suporte e interação em diversas áreas da tecnologia. Projetos como 'assistencia_virtual' demonstram o poder das bibliotecas Python para criar sistemas eficientes e amigáveis. Neste artigo, vamos explorar como desenvolver um assistente virtual utilizando Python, abordando suas principais funcionalidades e estruturas de código.

## O que é um Assistente Virtual?

Assistentes virtuais são softwares que interagem com os usuários por meio de voz ou texto, executando tarefas como:

🔹 Busca de informações

🔹 Gerenciamento de agendas

🔹 Controle de dispositivos e muito mais

Exemplos populares incluem Siri, Alexa, Google Assistant e Copilot. Eles utilizam tecnologias avançadas de processamento de linguagem natural (PLN) e reconhecimento de voz para entender e responder aos comandos dos usuários.

## Python e Assistentes Virtuais

Python é uma linguagem extremamente versátil e poderosa, amplamente utilizada no desenvolvimento de assistentes virtuais. Bibliotecas como NLTK, SpaCy e TensorFlow facilitam a construção desses sistemas, oferecendo ferramentas para:

🔹 Processamento de linguagem natural

🔹 Aprendizado de máquina

🔹 Reconhecimento de voz

## Desenvolvimento no Visual Studio Code (VSCode)

O VSCode é um editor de código popular, conhecido por sua flexibilidade e suporte a várias linguagens de programação, incluindo Python. Usar o VSCode pode tornar o desenvolvimento de projetos em Python e machine learning mais eficiente, graças a suas extensões e ferramentas integradas.

## Funcionalidades do Projeto 'assistencia_virtual'

Este projeto é composto por dois scripts principais: 'text-to-speech.py' e 'speech-to-text.py', ambos utilizando bibliotecas de reconhecimento de fala e síntese de voz para interagir com o usuário de maneira eficiente.

### 'text-to-speech.py'

#### Captura de Texto e Conversão para Áudio

🔹 Captura texto digitado pelo usuário.

🔹 Converte o texto para áudio em Português do Brasil ('pt-BR') e Inglês dos Estados Unidos ('en-us').

🔹 Utiliza a biblioteca 'pyttsx3' para a conversão de texto em fala.

#### Interação Contínua com o Usuário

🔹 Permite que o usuário continue gerando novos áudios até que decida sair do sistema digitando "Q".

🔹 Fornece feedback visual e auditivo das ações realizadas.

#### Formatação de Texto

🔹 Utiliza a biblioteca 'colorama' para formatar o texto exibido no terminal com diferentes cores.

#### Exemplo de Código: 'text-to-speech.py'

Aqui está um trecho de código para ilustrar como converter texto em áudio:

import pyttsx3
import os
from googletrans import Translator
from colorama import init, Fore
import pygame
import re
import time
import sys

init()

class Colors:
WHITE = Fore.WHITE
CYAN = Fore.CYAN
RED = Fore.RED
YELLOW = Fore.YELLOW
GREEN = Fore.GREEN
END = Fore.RESET

def text_to_speech(text, voice_id, output_file):
engine = pyttsx3.init()
engine.setProperty('voice', voice_id)
engine.setProperty('rate', 180)
engine.setProperty('volume', 1.0)
engine.save_to_file(text, output_file)
engine.runAndWait()

def speak(text, lang="pt-br"):
engine = pyttsx3.init()
voices = engine.getProperty('voices')
if lang == "pt-br":
  for voice in voices:
    if "Daniel" in voice.name:
      engine.setProperty('voice', voice.id)
      break
elif lang == "en-us":
  for voice in voices:
    if "David" in voice.name:
      engine.setProperty('voice', voice.id)
      break
engine.setProperty('rate', 180)
engine.say(text)
engine.runAndWait()

# Função principal simplificada
def main():
# Exibir mensagem de boas-vindas
print(Colors.WHITE + "Bem-vindo ao Sistema de Assistência Virtual." + Colors.END)
speak("Bem-vindo ao Sistema de Assistência Virtual.", lang="pt-br")
speak("Welcome to the Virtual Assistance System.", lang="en-us")

while True:
  print(Colors.CYAN + "Digite o texto que deseja converter em áudio ou aperte a tecla 'Q' para sair do sistema: " + Colors.END, end='')
  speak("Digite o texto que deseja converter em áudio ou aperte a tecla Q para sair do sistema.", lang="pt-br")
  speak("Enter the text you want to convert to audio or press the Q key to exit the system.", lang="en-us")
  
  text = input().strip()
  if text.upper() == 'Q':
    print(Colors.WHITE + "Finalizando o programa... Até a próxima!" + Colors.END)
    speak("Finalizando o programa... Até a próxima!", lang="pt-br")
    speak("Finishing the program... Until next time!", lang="en-us")
    break
  
  translated_text = Translator().translate(text, src='pt', dest='en').text
  text_to_speech(text, 'Daniel', 'output_br.wav')
  text_to_speech(translated_text, 'David', 'output_en.wav')
  
  # Reproduzir os áudios gerados
  pygame.mixer.init()
  pygame.mixer.music.load('output_br.wav')
  pygame.mixer.music.play()
  while pygame.mixer.music.get_busy():
    continue
  pygame.mixer.music.load('output_en.wav')
  pygame.mixer.music.play()
  while pygame.mixer.music.get_busy():
    continue

if __name__ == "__main__":
main()

### 'speech-to-text.py'

#### Captura de Áudio

🔹 Usa a biblioteca sounddevice para capturar áudio do microfone.

🔹 Converte o áudio capturado para um formato compreensível pelo reconhecedor de fala.

#### Reconhecimento de Fala

🔹 Utiliza a biblioteca speech_recognition para transcrever o áudio capturado para texto.

#### Interação com o Usuário

🔹 Exibe um menu para o usuário com opções de abrir o Google, Wikipedia, YouTube ou sair do programa.

🔹 Utiliza a biblioteca webbrowser para abrir links no navegador.

#### Exemplo de Código: 'speech-to-text.py'

Aqui está um trecho de código para ilustrar como capturar e transcrever áudio:

import sounddevice as sd
import speech_recognition as sr
import pyttsx3
import os
import sys
import time
import webbrowser
from colorama import init, Fore

init()

class Colors:
CYAN = Fore.CYAN
WHITE = Fore.WHITE
YELLOW = Fore.YELLOW
GREEN = Fore.GREEN
RED = Fore.RED
END = Fore.RESET

def get_audio():
samplerate = 44100
duration = 5 # segundos
device_id = 6 # ID do dispositivo de entrada (Microfone)
channels = 1 # Número de canais ajustado para 1
print(Colors.CYAN + "Listening..." + Colors.END)

audio = sd.rec(int(samplerate * duration), samplerate=samplerate, channels=channels, dtype='int16', device_id)
sd.wait() # Espera até a gravação terminar

recognizer = sr.Recognizer()
audio_data = sr.AudioData(audio.tobytes(), samplerate, channels)
try:
  said = recognizer.recognize_google(audio_data, language="pt-BR")
  print(Colors.GREEN + said + Colors.END)
  return said.lower()
except sr.UnknownValueError:
  print(Colors.RED + "Desculpe, não consegui entender." + Colors.END)
  return ""
except sr.RequestError:
  print(Colors.RED + "Desculpe, o serviço não está disponível" + Colors.END)
  return ""

def speak(text, lang="pt-br"):
engine = pyttsx3.init()
voices = engine.getProperty('voices')
if lang == "pt-br":
  for voice in voices:
    if "Daniel" in voice.name:
      engine.setProperty('voice', voice.id)
      break
elif lang == "en-us":
  for voice in voices:
    if "David" in voice.name:
      engine.setProperty('voice', voice.id)
      break
engine.setProperty('rate', 180)
engine.say(text)
engine.runAndWait()

# Função principal simplificada
def main():
print(Colors.WHITE + "Bem-vindo ao Sistema de Assistência Virtual." + Colors.END)
speak("Bem-vindo ao Sistema de Assistência Virtual.", lang="pt-br")
speak("Welcome to the Virtual Assistance System.", lang="en-us")

while True:
  print(Colors.CYAN + "Escolha uma opção:\n1. Google\n2. Wikipedia\n3. YouTube\nQ. Sair" + Colors.END, end='')
  choice = input().strip().lower()

  if choice == '1':
    webbrowser.open("https://www.google.com")
  elif choice == '2':
    webbrowser.open("https://www.wikipedia.org")
  elif choice == '3':
    webbrowser.open("https://www.youtube.com")
  elif choice == 'q':
    print(Colors.WHITE + "Finalizando o programa... Até a próxima!" + Colors.END)
    speak("Até a próxima!", lang="pt-br")
    speak("Until next time!", lang="en-us")
    time.sleep(1)
    clear_terminal()
    sys.exit()

## Explore o Projeto no GitHub

Para mais detalhes e acesso ao código completo, visite o repositório do projeto no GitHub:

![assistencia_virtual](https://github.com/mafigoliv/assistencia_virtual.git)

Compartilhe
Comentários (0)