17

I am running the following code in Python 2.7 with pyAudio installed.

import speech_recognition as sr
r = sr.Recognizer()
with sr.Microphone() as source:                # use the default microphone as the audio source
    audio = r.listen(source)                   # listen for the first phrase and extract it into audio data

try:
    print("You said " + r.recognize(audio))    # recognize speech using Google Speech Recognition
except LookupError:                           # speech is unintelligible
    print("Could not understand audio")

The output gives a blinking pointer. That's it.

NoDataDumpNoContribution
  • 10,591
  • 9
  • 64
  • 104
alloyeduniv
  • 333
  • 1
  • 2
  • 14

16 Answers16

13

The possible reason could be that the recognizer_instance.energy_threshold property is probably set to a value that is too high to start off with. You should decrease this threshold, or call recognizer_instance.adjust_for_ambient_noise(source, duration = 1). You can learn more about it at Speech Recognition

Tushar Gautam
  • 458
  • 6
  • 19
9

I have solved the same problem for me with the following (noise suppression), The "listen" function has problems with environment noise. So the running code is only blinking waiting.

Use this ambient noise suppression/adjustment; r.adjust_for_ambient_noise(source, duration=5)

Referance Tuesday, March 28, 2017 Easy Speech Recognition in Python with PyAudio and Pocketsphinx

cinsdikici
  • 99
  • 1
  • 1
8

try to add

r.adjust_for_ambient_noise(source,duration=1)

where r is recogniser instance, like this

import speech_recognition as sr

r=sr.Recognizer()
print(sr.Microphone.list_microphone_names())
with sr.Microphone() as source:
    r.adjust_for_ambient_noise(source,duration=1)
    # r.energy_threshold()
    print("say anything : ")
    audio= r.listen(source)
    try:
        text = r.recognize_google(audio)
        print(text)
    except:
        print("sorry, could not recognise")
MANISH RAWAT
  • 81
  • 1
  • 2
4

have you tried replacing

    print("You said " + r.recognize(audio))
    except LookupError:                          
    print("Could not understand audio")

with

    text = r.recognize_google(audio)
    print("You said : {}".format(text))
    text = r.recognize_google(audio)
    except:
        print("Sorry could not recognize your voice")

ensure pyaudio.h is installed by running the below command

    sudo apt-get install portaudio19-dev python-pyaudio python3-pyaudio
3

just try;

pip install sounddevice

it works.

RobC
  • 22,977
  • 20
  • 73
  • 80
3

try this code:

r = sr.Recognizer()

with sr.Microphone() as source:
        r.adjust_for_ambient_noise(source=source)
        audio = r.listen(source,timeout=3)
        

    
    data = ''
    try :
        data = r.recognize_google(audio)
        print(data)

    except sr.UnknownValueError:
        print(" Error")
        
    except sr.RequestError as e:
        print("Request Error")

or add timeout and r.adjust_for_ambient_noise(source=source) to your code as above.please can anyone help me with this

Kulidu David
  • 51
  • 2
  • 2
  • 7
2

In addition to Tushar's answer, I suggest trying a nicer external USB microphone. PyAudio can have issues with a simple built-in laptop microphone.

Connor
  • 670
  • 3
  • 9
  • 29
  • I also have built-in mic on my laptop. After adding this code r.adjust_for_ambient_noise(source, duration=5) it worked – ghost21blade Jul 02 '21 at 08:20
2

check the input volume of your microphone. It is by default set to 0 in ubuntu (in my case). Since your program got stuck on the line audio = r.listen(source), which simply means that the microphone is not able to listen to any voice input. Hope this helps.

1

You may have to install these things first:

  1. pip install pyaudio
  2. pip install --upgrade pyaudio
  3. pip install wheel
  4. pip install google-api-python-client
  5. sudo apt-get install flac
  6. pip install monotonic
  7. pip install SpeechRecognition

After that, refer the site (https://realpython.com/python-speech-recognition/) it will clearly explain what you wanted.


Here I am attaching the code I've edited from that site. Since I am new it will not be perfect, but I've tried. This is to check weather the voice input is similar to the text I've given and also it will print what you said.


#!/usr/bin/ python
import time

import speech_recognition as sr


def recognize_speech_from_mic(recognizer, microphone):
    """Transcribe speech from recorded from `microphone`.

    Returns a dictionary with three keys:
    "success": a boolean indicating whether or not the API request was
           successful
    "error":   `None` if no error occured, otherwise a string containing
           an error message if the API could not be reached or
           speech was unrecognizable
    "transcription": `None` if speech could not be transcribed,
           otherwise a string containing the transcribed text
    """
    # check that recognizer and microphone arguments are appropriate type
    if not isinstance(recognizer, sr.Recognizer):
        raise TypeError("`recognizer` must be `Recognizer` instance")

    if not isinstance(microphone, sr.Microphone):
        raise TypeError("`microphone` must be `Microphone` instance")

    # adjust the recognizer sensitivity to ambient noise and record audio
    # from the microphone
    with microphone as source:
        recognizer.adjust_for_ambient_noise(source)
        audio = recognizer.listen(source)

    # set up the response object
    response = {
        "success": True,
        "error": None,
        "transcription": None
    }

    try:
        response["transcription"] =    recognizer.recognize_google(audio)
    except sr.RequestError:
        # API was unreachable or unresponsive
        response["success"] = False
        response["error"] = "API unavailable"
    except sr.UnknownValueError:
        # speech was unintelligible
        response["error"] = "Unable to recognize speech"

    return response


if __name__ == "__main__":

    NUM_GUESSES = 1
    PROMPT_LIMIT = 2
    # create recognizer and mic instances
    recognizer = sr.Recognizer()
    microphone = sr.Microphone()

    word = "hello world"

    time.sleep(3)

    for i in range(NUM_GUESSES):
        for j in range(PROMPT_LIMIT):
            print('Guess {}. Speak!'.format(i+1))
            guess = recognize_speech_from_mic(recognizer, microphone)
            if guess["transcription"]:
                break
            if not guess["success"]:
                break
            print("I didn't catch that")

        # if there was an error, stop the game
        if guess["error"]:
            print("ERROR: {}".format(guess["error"]))
            break

        # show the user the transcription
        print("You said: {}".format(guess["transcription"]))

        # determine if guess is correct and if any attempts remain
        guess_is_correct = guess["transcription"].lower() == word.lower()
        user_has_more_attempts = i < NUM_GUESSES - 1

        if guess_is_correct:
            print("Correct!".format(word))
            break
        elif user_has_more_attempts:
            print("Incorrect. Try again.\n")
        else:
            print("Sorry, output is not similar to '{}'.".format(word))
            break
double-beep
  • 5,031
  • 17
  • 33
  • 41
lashiniDW
  • 11
  • 2
1

MY Problem was : the program is running without any error but its not showing any output

THIS IS THE CODE WITH PROBLEM:

import googletrans
import speech_recognition as sr

recognizer = sr.Recognizer()
translator = googletrans.Translator()

try:
    with sr.Microphone() as source:
        print('Speak Now')
        voice= recognizer.listen(source)
        text= recognizer.recognize_google(voice)
        print(text)

except:
     pass

translated = translator.translate(text, dest='es')
print(translated.text)

To Solve this problem : basically this problem occurs by the background noise or ambient noise SO just add only one line to your code which is : recognizer.adjust_for_ambient_noise(source)#recognizer is on line 4 from above code

######## The improved and Solved problem code: ########

import googletrans
import speech_recognition as sr

recognizer = sr.Recognizer()
translator = googletrans.Translator()

try:
    with sr.Microphone() as source:
        print('Speak Now')
        recognizer.adjust_for_ambient_noise(source)#(Problem Solved)
        voice= recognizer.listen(source)
        text= recognizer.recognize_google(voice)
        print(text)

except:
     pass

translated = translator.translate(text, dest='es')
print(translated.text)
0

Put the Try and Except inside the indentation.

Here is my Working code:-

while True:
    r = sr.Recognizer()
        with sr.Microphone() as source:
            print("Say Something")
            audio=r.listen(source)
        try:    
            print(r.recognize_google(audio),"\n")
        except:
            pass
MikeL
  • 5,385
  • 42
  • 41
0

I guess the problem is with the duration. If you set some duration to the speech recognition engine the problem will be resolved. Try the following code:

import speech_recognition as sr
r = sr.Recognizer()                                                                                   
with sr.Microphone() as source:                                                                      
    speak(sen)
    print("listening...")
    audio = r.record(source,duration=3)
    try:
        str=r.recognize_google(audio)
        print(str)
    except:
        print("some error occurred!")
0

Please set minimum threshold.

After running commend python -m speech_recognition. Set minimum energy threshold which it display.

Setting procedure: press Ctrl then click mouse Recognizer(). Now set energy threshold.

Mamun Or Rashid
  • 845
  • 7
  • 7
0

Try changing the mic index using:

with sr.Microphone(device_index = 0) as source:

To know your mic index use:

print((sr.Microphone.list_microphone_names()))

If this does not work use:

with sr.Microphone(device_index = 0) as source:                # use the default microphone as the audio source
   r.adjust_for_ambient_noise(source, duration = 1)
   audio = r.listen(source)
0

I figured it out! This code worked for me:

import speech_recognition as sr
from googletrans import Translator

def Listen():
    r = sr.Recognizer()

    with sr.Microphone() as source:
        print("Listening...")
        r.pause_threshold = 1
        # listening duration 8 seconds
        audio = r.listen(source,0,8)

    try:
        print("Recognizing...")
        query = r.recognize_google(audio,language="en")
        print(query)
    
    except sr.UnknownValueError:
        print("Google Speech Recognition could not understand audio")
    except sr.RequestError as e:
        print(f"Could not request results from Google Speech Recognition service: {e}")

    query = str(query).lower()
    return query

print(Listen())

Hope this helps!

-1

Install in your python prompt (Anaconda Prompt)

  1. pip install pyaudio
  2. pip install --upgrade pyaudio
  3. pip install wheel
  4. pip install google-api-python-client
  5. pip install monotonic
  6. pip install SpeechRecognition

Code:

import speech_recognition as sr
r = sr.Recognizer()                                                                                   
with sr.Microphone() as source:                                                                      
    print("listening...")
    audio = r.record(source,duration=3)
    try:
        str=r.recognize_google(audio)
        print(str)
    except:
        print("some error occurred!")
Joe Ferndz
  • 8,417
  • 2
  • 13
  • 33