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 :
- CMU Sphinx (fonctionne sans connexion)
- Google Speech Recognition (celle que nous utiliserons ici)
- Google Cloud Speech API
- Wit.ai
- Microsoft Bing Voice Recognition
- Houndify API
- IBM Speech to Text
- Snowboy Hotword Detection (fonctionne sans connexion)
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.
Ingénieur en informatique avec plus de 20 ans d’expérience dans la gestion et l’utilisation de données, Benoit CAYLA a mis son expertise au profit de projets très variés tels que l’intégration, la gouvernance, l’analyse, l’IA, la mise en place de MDM ou de solution PIM pour le compte de diverses entreprises spécialisées dans la donnée (dont IBM, Informatica et Tableau). Ces riches expériences l’ont naturellement conduit à intervenir dans des projets de plus grande envergure autour de la gestion et de la valorisation des données, et ce principalement dans des secteurs d’activités tels que l’industrie, la grande distribution, l’assurance et la finance. Également, passionné d’IA (Machine Learning, NLP et Deep Learning), l’auteur a rejoint Blue Prism en 2019 et travaille aujourd’hui en tant qu’expert data/IA et processus. Son sens pédagogique ainsi que son expertise l’ont aussi amené à animer un blog en français (datacorner.fr) ayant pour but de montrer comment comprendre, analyser et utiliser ses données le plus simplement possible.
Comment developper un voicebot de recherche pour site web
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 😉
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.