Niveau
Débutant
Env.
Local (Windows), Local (Linux)
Code
Python
Libs
speech_recognition, pyaudio, wave, sys, os
Sources

Reconnaissance vocale avec Python & Google

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/)
ShellSession
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 :

ShellSession
sudo apt-get install python-pyaudio python3-pyaudio
  • speech_recognition
ShellSession
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 :

Python
r = sr.Recognizer()

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

Python
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:

Python
micro = sr.Microphone(device_index=5)

ou alors vous pourrez utiliser celui par défaut:

Python
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 …

Python
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 :

Python
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"
Python
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

3 Replies to “Reconnaissance vocale avec Python & Google”

  1. Bonjour,
    je découvre votre site, génial !
    je m’intéresse à la fonction « voice to text » et à la lemmatisation du texte. j’ai testé la récupération de la retranscription d’une vidéo youtube, passage à la moulinette SpaCy, c’est ok.
    Mais cette retranscription n’a aucune ponctuation. La tokenisation est donc possible que sur les mots du corpus et pour les phrases sans la ponctuation… ça semble impossible ? (à moins de déterminer arbitrairement qu’une phrase est constituée de x mots)
    Ma question, existe t-il un moyen pour ajouter une ponctuation à partir de la reconnaissance vocale d’un texte.
    merci 😉

    1. Merci pour vos encouragements,
      Si vous aimez, vous pourrez aussi lire mon livre 😉 je suis d’ailleurs en train d’ecrire la seconde édition qui devrait paraitre d’ici quelques mois 😉
      Pour répondre à votre question … pas à connaissance, par contre il serait sans doute intéressant d’utiliser un LLM pour cela.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

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