AnswerBun.com

como melhorar o tempo no reconhecimento de voz em python 3?

Stack Overflow em Português Asked by Ruan Ferreira on October 27, 2020

Eu estou tentando fazer um programa que escute oque eu digo e responda conforme oque eu falo,mas,quando eu falo ele demora um pouco para reconhecer e responder
eu tenho um código aqui mais ou menos que eu criei,e eu faço ele abrir uma janela
com o pygame.

Para especificar quando eu executo o código no pycharm ele abre uma janela com uma imagem de fundo e no terminal do pycharm ele escreve estou escutando só que quando eu falo ele demora para reconhecer e responder de volta.

O código:

    `import speech_recognition as sr
import pyttsx3
import pygame
pygame.init()

r = sr.Recognizer()
engine = pyttsx3.init()

x = 1280
y = 720
imagem = pygame.image.load("fundo.jpg")
BLUE = (0, 0, 255)
#janela = pygame.display.set_mode((x, y), pygame.FULLSCREEN)
janela = pygame.display.set_mode((1280, 720))

pygame.display.set_caption('I.A')

janela_aberta = True
while janela_aberta == True:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            janela_aberta = False

    janela.blit(imagem, (0, 0))
    pygame.display.update()


    with sr.Microphone() as source:
        print ('fale algo: ')
        audio = r.listen(source)

        try:
            text = r.recognize_google(audio, language='pt-br')
            print('você disse: {}'.format(text))
        except:
            print('Desculpe não escutei sua voz')



    #janela.blit(imagem, (0, 0))


    #pygame.draw.line(janela, BLUE, (60, 60), (120, 60), 4)





    #text1 = r.recognize_google(audio, language='pt-br')

    if text == 'sair':
        janela_aberta = False
    elif text == 'Olá':
        engine.say('Ola,como você está')
        engine.runAndWait()
    elif text == 'bem':
        engine.say('então Esta bom!')
        engine.runAndWait()
    #elif text == 'quit':
        b = False
    elif text == "como você está":
        engine.say('como voçe vai?')
        engine.runAndWait()
    elif text == 'Bom dia':
        engine.say("bom dia")
        engine.runAndWait()



    #pygame.draw.line(janela, BLUE, (60, 60), (120, 60), 4)


    pygame.display.update()


pygame.quit()`

One Answer

Até onde eu sei, a única forma de diminuir o tempo do reconhecimento é tendo uma ótima qualidade de áudio. Você pode melhorar a qualidade do áudio utilizando o método r.adjust_for_ambient_noise que recebe um source(no seu caso o microfone) e a duração.

O que esse método faz é ajustar o Recognizer para o som do ambiente em que você está. Você pode definir o método para ajustar por 1 segundo e colocar ele antes de fazer a captura do áudio para o recognizer sempre adaptar-se ao ambiente, melhorando o áudio e o reconhecimento.

Seu código ficaria assim:

import speech_recognition as sr
import pyttsx3
import pygame
pygame.init()

r = sr.Recognizer()
engine = pyttsx3.init()

x = 1280
y = 720
imagem = pygame.image.load("fundo.jpg")
BLUE = (0, 0, 255)
#janela = pygame.display.set_mode((x, y), pygame.FULLSCREEN)
janela = pygame.display.set_mode((1280, 720))

pygame.display.set_caption('I.A')

janela_aberta = True
while janela_aberta == True:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            janela_aberta = False

    janela.blit(imagem, (0, 0))
    pygame.display.update()


    with sr.Microphone() as source:
        print ('Fale algo: ')

        # Ajusta o recognizer antes de capturar seu microfone.
        r.adjust_for_ambient_noise(source,duration=1)

        # Captura o som do microfone.
        audio = r.listen(source)

        try:
            text = r.recognize_google(audio, language='pt-br')
            print('você disse: {}'.format(text))
        except:
            print('Desculpe não escutei sua voz')


    #janela.blit(imagem, (0, 0))

    #pygame.draw.line(janela, BLUE, (60, 60), (120, 60), 4)

    #text1 = r.recognize_google(audio, language='pt-br')


    if text == 'sair':
        janela_aberta = False

    elif text == 'Olá':
        engine.say('Ola,como você está')
        engine.runAndWait()

    elif text == 'bem':
        engine.say('então Esta bom!')
        engine.runAndWait()

    #elif text == 'quit':
        b = False

    elif text == "como você está":
        engine.say('como voçe vai?')
        engine.runAndWait()

    elif text == 'Bom dia':
        engine.say("bom dia")
        engine.runAndWait()



    #pygame.draw.line(janela, BLUE, (60, 60), (120, 60), 4)

    pygame.display.update()

pygame.quit()

Answered by JeanExtreme002 on October 27, 2020

Add your own answers!

Related Questions

A conta matematica ta dando errado?? C#

1  Asked on December 16, 2021 by zehous

 

Qual utilidade de declarar uma coluna como Char(0)?

1  Asked on December 16, 2021 by user60252

   

Repetir campos de acordo com o numero do dropdown

3  Asked on December 16, 2021 by fabio-henrique

   

Vue router – problema com links dinamicos

0  Asked on December 16, 2021 by gabriel-porcher

       

Existe algo que compare o tipo do objeto?

1  Asked on December 16, 2021 by qattus

     

Angular múltiplos ngif else passando parametro no template

1  Asked on December 14, 2021 by herick

 

Condição de saída no do-while em código C

1  Asked on December 14, 2021 by steeph

       

Para que serve esse ‘in’ em C#?

1  Asked on December 14, 2021 by cypherpotato

     

Sobrecarga de método é polimorfismo?

1  Asked on December 14, 2021 by douglas-da-dias-silva

       

Não estou conseguindo cadastrar o nome de uma pessoas na minha agenda

2  Asked on December 14, 2021 by rafael-marques

     

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP, SolveDir