Hem Automation röststyrning - flera rum mikrofon talanalys (4 / 5 steg)
Steg 4: Förbättringar och ändringar
Vi märkte att standard transkription av Sphinx är, enkelt uttryckt, fruktansvärt. Lyckligtvis är det lätt att åtgärda detta genom att skapa en anpassad språkmodell. Detta kan begränsa den möjliga utbud av identifierade ord, vilket resulterar i färre felöversättningar.
Följ instruktionerna i länken ovan för att generera din språkmodell, och hämta skapade filerna till mappen MultiRoomSTT. Nästa, öppna main.py och ge de absoluta sökvägarna till varje fil i variablerna LM_PATH och DICT_PATH. Skriptet använder dessa språk modeller nästa gång det körs. Du bör se en enorm ökning i rätt transkriptioner som anförandet att transkriberas endast använder ord från denna modell.
Hur koden fungerar:
När main.py körs första gången, det ser ut en lista över ljudkällor via skriptet source_discovery.py. Att skriptet körs kommandot terminalen "pacmd lista-källor" och tolkar ut ljudkällor från resultaten, att hålla namn, ID och buss sökvägen för inmatningsenheter bara. Namnet är användbar för mänskliga läsbarhet, och ID är vad vi använder för att identifiera vilken ljudkälla till spela in från.
Fältet Sökväg buss är de mest intressanta - innehåller information om vilken port inmatningsenheten är ansluten till och kan användas som referens för att avgöra vilket rum en given USB-enhet inspelning från. Till exempel, om du vill ta ljud från ditt vardagsrum och du vet donglen är ansluten till USB-navet som är ansluten till datorns port 4-6 port, leta efter "usb-0:4.6:1.0" i bussen väg och du hittar ID på din dongle. Buss sökvägen är beständiga över pluggar/frikopplar och startar om, så du behöver inte fortsätta att försöka slumpmässiga enheternas ID för att hitta den mikrofon du letar.
Efter insamling källinformation, skriptet sedan skapar ett SpeechParser objekt för varje ljudkälla och kör dem i en huvudloop. Klassen SpeechParser abstraherar bort all stökigt GStreamer kod: Ange rörledningen, att motringning egenskaper och länka ljudkälla till PocketSphinx.
När de viktigaste loopen körs kan kommer att rörledningarna lyssna på deras respektive ljudkällor och passera dem genom Sphinx (mer information om det här). När Sphinx är mitt transkribera en sträng av fonem, skickar callbacks genom SpeechParser till funktionen passerade partial_cb med vad den anser det hörde. När mikrofonen identifierar tystnad och Sphinx slutar parsning tal, skickas resultatet genom SpeechParser till final_cb.