Reconnaissance vocale avec Python & Google

Partager cet article
+2

Après avoir abordé le texte, l’image et la vidéo il me fallait absolument entamer la gestion de l’audio. Voilà qui se matérialise donc via cet article qui se veut avant tout pratique. L’idée de ce post est donc très simple … comment avec votre ordinateur capturer des informations vocales et les transcrire en texte ?

Vous voulez créer votre propre assistant numérique ? pourquoi pas, voici en tout cas comment le commencer …

Les prérequis

Comme d’habitude, Python est un langage ou plutôt un environnement riche et pour effectuer cette transcription Voix -> Texte nous aurons besoin de quelques librairies:

  • pyAudio (https://pypi.org/project/PyAudio/)
pip install PyAudio

Attention car si comme moi vous êtes sur Ubuntu, l’installation via pip risque de ne pas fonctionner. A la place préférez :

sudo apt-get install python-pyaudio python3-pyaudio
  • speech_recognition
pip install SpeechRecognition

Cette API permet de faire la transcription voix – texte. Pour celà elle peut s’appuyer sur différents moteurs :

Gestion du microphone

Tout d’abord il faut initialiser speech_recognition :

r = sr.Recognizer()

Ensuite on peut lister les microphones disponibles sur l’ordinateur :

sr.Microphone.list_microphone_names()
['HDA Intel HDMI: 0 (hw:0,3)',
 'HDA Intel HDMI: 1 (hw:0,7)',
 'HDA Intel HDMI: 2 (hw:0,8)',
 'HDA Intel HDMI: 3 (hw:0,9)',
 'HDA Intel HDMI: 4 (hw:0,10)',
 'HDA Intel PCH: ALC3232 Analog (hw:1,0)',
 'HDA NVidia: HDMI 0 (hw:2,3)',
 'HDA NVidia: HDMI 1 (hw:2,7)',
 'HDA NVidia: HDMI 2 (hw:2,8)',
 'HDA NVidia: HDMI 3 (hw:2,9)',
 'hdmi',
 'pulse',
 'default']

A ce niveau là il vous faut choisir le bon micro en spécifiant le paramètre device_index comme ci-dessous:

micro = sr.Microphone(device_index=5)

ou alors vous pourrez utiliser celui par défaut:

micro = sr.Microphone()

Premier enregistrement « live »

Faire votre première reconnaissance vocale est extrêmement simple et s’effectue en quelques lignes Python. pour celà on ouvre le canal du micro (ligne 1) et on se met en écoute …

with micro as source:
    print("Speak!")
    audio_data = r.listen(source)
    print("End!")
result = r.recognize_google(audio_data)
print (">", result)

remarquez en ligne 5 l’utilisation de la fonction recognize_google() qui permet au service Google d’analyser votre flux audio et de vous retranscrire le texte. Le résultat doit être si vous avez dit « good morning »:

Speak!
End!
> good morning

Commen ça marche ?

  • Entre l’affichage de Speak! et End! parlez et dites « Good Morning (on verra plus tard comment gérer le français)
  • Une fois End! affiché vous remarquerez que l’exécution attend quelque chose. En fait le programme appelle la fonction Google et attend la retranscription textuelle de la bande audio.

Enregistrement d’un fichier wav

Il peut être pratique d’enregistrer sa voix dans un fichier wav pour la retranscrire plus tard ou en décalé.

Pour celà on va utiliser pyAudio comme ceci :

import pyaudio
import wave

chunk = 1024  # Record in chunks of 1024 samples
sample_format = pyaudio.paInt16  # 16 bits per sample
channels = 2
fs = 44100  # Record at 44100 samples per second
seconds = 10
filename = "output.wav"

p = pyaudio.PyAudio()  # Create an interface to PortAudio

print('Start Recording ...')

stream = p.open(format=sample_format,
                channels=channels,
                rate=fs,
                frames_per_buffer=chunk,
                input=True)

frames = []  # Initialize array to store frames

# Store data in chunks for 3 seconds
for i in range(0, int(fs / chunk * seconds)):
    data = stream.read(chunk)
    frames.append(data)

# Stop and close the stream 
stream.stop_stream()
stream.close()
# Terminate the PortAudio interface
p.terminate()

print('... Finished recording')

# Save the recorded data as a WAV file
wf = wave.open(filename, 'wb')
wf.setnchannels(channels)
wf.setsampwidth(p.get_sample_size(sample_format))
wf.setframerate(fs)
wf.writeframes(b''.join(frames))
wf.close()

Cette portion de code enregistre votre micro pendant 10 secondes et stocke le résultat dans le fichier output.wav

Reconnaissance vocale en Français avec Google

Imaginez que vous ayez enregistré votre voix avec les paroles suivantes : « 

"L'histoire commence un beau matin tout le monde va bien les élèves sont heureux"
r = sr.Recognizer()
with sr.AudioFile(filename) as source:
    audio = r.record(source)
    try:
        data = r.recognize_google(audio, language="fr-FR")
        print(data)
    except:
        print("Please try again")
Histoire commence un beau matin tout le monde va bien les élèves sont heureux

Remarquez en ligne 5 l’utilisation de l’option language= »fr-FR » qui permet d’utiliser un modèle de reconnaissance vocale en français.

Et voilà, nous avons vu dans cet article comment transcrire de la voix en texte avec Python et Google Speech Recognition. Dans un prochain article nous pourrons tout à a fait ajouter par la suite une touche de NLP afin de commencer un assistant vocal simple un peu comme nous l’avions fait pour l’analyse de critiques de cinéma.

Partager cet article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.