TransWikia.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!

Ask a Question

Get help from others!

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