Stap 4: Verbeteringen en wijzigingen
We hebben gemerkt dat de transcriptie van de standaard gedaan door Sphinx is, simpel gezegd, verschrikkelijk. Gelukkig, het is gemakkelijk genoeg om dit te bevestigen door het creëren van een aangepaste taalmodel. Dit kan de mogelijke waaier van geïdentificeerde woorden, wat resulteert in minder verkeerde vertalingen beperken.
Volg de instructies in de bovenstaande link voor het genereren van uw taalmodel en downloaden van de aangemaakte bestanden naar de map MultiRoomSTT. Volgende, open main.py en bieden de absolute paden naar elk bestand in de variabelen LM_PATH en DICT_PATH. het script gebruiken deze taalmodellen de volgende keer dat het wordt uitgevoerd. U ziet dat een enorme toename van de juiste transcripties, zolang de toespraak wordt getranscribeerd alleen gebruikt woorden uit dit model.
Hoe werkt de Code:
Als main.py voor het eerst uitvoert, wordt gezocht naar een lijst van audio bronnen via het source_discovery.py script. Dat script de terminal opdracht "pacmd lijst-bronnen voert" en de audio bronnen van de resultaten analyseert, houden de naam, ID en bus pad invoerapparaten alleen. De naam is handig voor menselijke leesbaarheid, en de ID is wat we gebruiken om te identificeren welke audiobron opnemen te selecteren.
In het veld pad bus is de meest interessante - het bevat informatie over welke poort het invoerapparaat is aangesloten en kan worden verwezen om te bepalen welke kamer is het opnemen van een bepaalde USB-apparaat uit. Bijvoorbeeld, als u wilt grijpen audio vanuit uw woonkamer en u weet dat de dongle is aangesloten op poort 6 van de USB-hub die is aangesloten op poort 4 op uw computer, zoekt u "usb-0:4.6:1.0" in de bus pad en vindt u de ID van uw dongle. Bus pad is persistent over stekkers/Stefani en herstart, zodat u niet hoeft te blijven proberen willekeurig apparaat-id om te zoeken naar de microfoon die u zoekt.
Na het verzamelen van broninformatie, het script vervolgens maakt een SpeechParser-object voor elke audio-bron en loopt ze in een hoofdlus. De SpeechParser klasse abstracts weg alle rommelig GStreamer code: opzetten van de pijpleiding, eigenschappen voor terugbellen instellen en de audio-bron te koppelen aan PocketSphinx.
Zodra de hoofdlus wordt uitgevoerd, zal de pijpleidingen luisteren op hun respectieve audiobronnen en hen te passeren van Sphinx (meer info over dat hier). Wanneer Sphinx is in het midden van de transcriptie van een reeks fonemen, stuurt het callbacks via SpeechParser naar de functie van de overgegaane partial_cb met wat het denkt dat het horen. Wanneer de microfoon stilte detecteert en Sphinx eindigt ontleden van de toespraak, is het resultaat SpeechParser doorgegeven aan final_cb.