Étape 4: Améliorations et Modifications
Nous avons remarqué que la transcription par défaut faite par Sphinx est, tout simplement, terrible. Heureusement, il est assez facile de résoudre ce problème en créant un modèle linguistique personnalisé. Cela peut restreindre la portée possible des mots identifiés, ce qui entraîne des erreurs de traduction moins.
Suivez les instructions dans le lien ci-dessus pour générer le modèle de votre langue et télécharger les fichiers créés dans le dossier MultiRoomSTT. Ensuite, ouvrez main.py et fournir les chemins absolus pour chaque fichier dans les variables LM_PATH et DICT_PATH. le script utiliser ces modèles de langue, la prochaine fois qu’il est exécuté. Vous devriez voir une augmentation énorme des transcriptions correctes tant que le discours soit transcrit n’utilise que des mots de ce modèle.
Comment le Code fonctionne :
Lorsque main.py exécute d’abord, il recherche une liste de sources audio via le script source_discovery.py. Ce script exécute la commande terminale « pacmd liste-sources » et analyse les sources audio d’après les résultats, en gardant le nom, ID et chemin de bus de périphériques d’entrée. Le nom est utile pour une meilleure lisibilité humaine, et l’ID est ce qui nous permet d’identifier la source audio à enregistrer à partir.
Le champ chemin de bus est le plus intéressant - il contient des informations sur le port sur lequel le périphérique d’entrée est bien branché et peut être référencé afin de déterminer quelle pièce un périphérique USB donné est l’enregistrement de. Par exemple, si vous souhaitez récupérer l’audio de votre salon et vous savez que le dongle est connecté à la voie 6 du concentrateur USB qui est branché sur le port 4 sur votre ordinateur, recherchez « usb-0:4.6:1.0 "dans le bus chemin et vous trouverez l’ID de votre dongle. Voie de bus est persistant à travers les bouchons/débranche et redémarrages, donc il ne faut pas continuer à essayer ID de périphériques au hasard pour trouver le microphone que vous recherchez.
Après avoir recueilli des informations sur la source, le script puis crée un objet SpeechParser pour chaque source audio et eux s’exécute dans une boucle principale. La classe SpeechParser abstracts loin tout le code de GStreamer malpropre : mise en place du pipeline, en définissant les propriétés de rappel et reliant la source audio à PocketSphinx.
Une fois que la boucle principale est en cours d’exécution, les pipelines écoutera sur leurs sources audio respectives et les transmettre par le biais de Sphinx (plus d’infos sur ce ici). Quand Sphinx est au milieu de la transcription d’une chaîne de phonèmes, il envoie des rappels par le biais de SpeechParser à la fonction partial_cb passé avec ce qu’il pense, qu'il a entendu. Lorsque le microphone détecte silence et Sphinx termine l’analyse du discours, le résultat est passé par le biais de SpeechParser à final_cb.