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

$_ possui algum significado em questão?

3  Asked on December 30, 2021 by problemtico

     

Ponteiro para funções em C não está chamando

2  Asked on December 30, 2021 by igor-ptz

     

injetar beans do CDI no durante o teste usando Arquillian Chameleon

1  Asked on December 30, 2021 by danrley-alencar

         

Como manter os dados na tela ao clicar no botão voltar com Angular 8

1  Asked on December 30, 2021 by alexsandro-andrade

 

Carousel Flutter

1  Asked on December 30, 2021 by user198735

   

Dúvida na execução

3  Asked on December 30, 2021 by bruno-santana

     

Removendo o TitleBar do app android

6  Asked on December 28, 2021 by ivan-veloso

   

Erro em código básico no Kivy(Python)

2  Asked on December 28, 2021 by nielsen-rick

     

Repetição for para chamar variáveis

4  Asked on December 28, 2021 by user93774

       

Classes com associações em UML

3  Asked on December 28, 2021 by cleriston-martins-cardoso

       

Ask a Question

Get help from others!

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