Robot - erkännande från röst (5 / 7 steg)
Steg 5: Erkännande från röst
Projekt som hemsökt mitt sinne, jag fann mest intressant är taligenkänning, men inte bara utskrifter till, men att utföra aktiviteter med GPIO i Pi.
Så efter några dagar av tester och prov lyckades jag få en kontinuerlig lyssnande röststyrningssystem för att köra kommandon eller inaktivera som lysdioder ansluten till GPIO. Härifrån kan du göra vad vi förbi fantasin. Vill du veta hur man gör just det i din hallon? Tja, hålla behandlingen!
Materiasl:
- Raspberry Pi
Det första vi gör är installera gratis röstigenkänningsprogram, kallas PocketSphinx.
För att göra detta köra följande kommandon (vissa som kräver höjd). Med detta installera och uppdatera programvaran och ge företräde till ljudkortet eller USB-ingången till när du gör röstigenkänning.
< p > sudo lämplig-få installera rpi-uppdatera < br > sudo lämplig-få installera git-core
sudo rpi-uppdatera < /p >
PocketSphinx:
Vi rekommenderar att du använder de senaste versionerna av programvara
När du installerat kan du köra kommandot för att starta. / pocketsphinx_continuous prova om du känner igen rösten. I händelse av att ett fel inte hittar ljudingång, köra som administratör med sudo.
Nu kommer vi skapa en ordlista med ord som du vill tilldela vissa åtgärder.
Detta hjälper programvara för att utföra tal till text, eftersom du bara har att kontrollera ljud ingång att vi skapar poster i ordlistan.
I mitt fall, skapa en ordlista med några ord som: Green On Red On, Off grön röd Off. Att slå på och av lysdioder. Para skapa ordlistan, skapa en fil med oformaterad text (.txt) med ett ord i varje rad.
Skriv sedan in följande adress (LM-verktyg) och höjer txt-fil.
Det kommer att Visa länkarna för att hämta din ordbok.
Hämta och packa upp tjära i en mapp om du vill köra skript. För de första testerna, gå till mappen ordbok och kör du följande kommando:
< br >< p > sudo pocketsphinx_continuous -lm 9640.lm - dict 9640.dic > capture.txt - samprate 16000/8000/48000 < /p >
Där 9640.lm och det 9640.dic ersättas med antalet ordlistan som du just har skapat.
När du kör kommandot du kan säga orden i ordlistan, och en gång acabéis (Ctrl + C för att stänga) capture.txt kan du läsa filen för att kontrollera om det är korrekt.
Nu vi ansluta lysdioder och börja spela med dem. För att starta, ansluta lysdioder i Pines GPIO17 och marken (jorden) och GPIO1 och marken.
Nu springa den följande befallningen de är aktiva och de är utdata:
< p > eko 17 > /sys/class/gpio/export < /p >< p > eko 1 > /sys/class/gpio/export < /p >< p > echo ut > /sys/class/gpio/gpio17/direction < /p >< p > echo ut > /sys/class/gpio/gpio1/direction < /p >
Vi kan stänga av dem och aktivera dem ändra värdet med följande kommando:
< p > eko 1 > /sys/class/gpio/gpio17/value < /p >< p > eko 0 > /sys/class/gpio/gpio17/value < /p >
Nu, för att börja göra åtgärder baserade på röstkommandon, jag har skrivit några skript i Python, att göra detta. Egenheten att denna kod körs PocketSphinx och lämnar lyssnar för att säga att varje gång ett kommando beskrivs för att automatiskt kontrollera och utföra åtgärden i fråga.
Så kan vi skapa följande filer och kopiera innehåll för att testa. Kom ihåg de ord jag använder skapas i min ordbok. Du kan också se att även om detta sa, Ring ett program kallas även Festival, som är precis tvärtom, en talsyntes om vi vill ha hallon svaret varje gång vi gör en åtgärd.
Archivo read.py:
< p > #! / usr/bin/pythonimport os < /p > import tid
Jag = 0
medan jag! = 1:
INFILE = öppna ('capture.txt', 'r')
för linjeingång infile:
om line.find ("gröna OFF")! = -1:
OS.system ("echo 0 > /sys/class/gpio/gpio17/value")
OS.system ("true > capture.txt")
#os.system ("festival -b"(SayText "Green ledde bort")"")
om line.find ("gröna OK")! = -1:
OS.system ("echo 1 > /sys/class/gpio/gpio17/value")
OS.system ("true > capture.txt")
#os.system ("festival -b"(SayText "Green ledde på")"")
om line.find ("röda OFF")! = -1:
OS.system ("echo 0 > /sys/class/gpio/gpio2/value")
OS.system ("true > capture.txt")
#os.system ("festival -b"(SayText "Red ledde bort")"")
om line.find ("röda OK")! = -1:
OS.system ("echo 1 > /sys/class/gpio/gpio2/value")
OS.system ("true > capture.txt")
#os.system ("festival -b"(SayText "Red ledde på")"")
om line.find("TEST")! = -1:
OS.system ("echo 1 > /sys/class/gpio/gpio2/value")
OS.system ("echo 1 > /sys/class/gpio/gpio17/value")
OS.system ("true > capture.txt")
#os.system ("festival -b"(SayText "Grön och röd led på")"")
om line.find("EXIT")! = -1:
OS.system ("sudo pkill -9 pocketsphinx")
OS.system ("true > capture.txt")
#os.system ("festival -b"(SayText "Hejdå!")"")
Jag = 1
INFILE.Close()
Time.Sleep(2)
Och nu den all.py filen PocketSphinx körs i "bakgrunden".
#! / usr/bin/pythonimport os
import subprocess, tid
OS.system ("rm capture.txt")
#os.system ("./shut.py &")
OS.system ("sudo pocketsphinx_continuous -lm 3906.lm - dict 3906.dic > capture.txt - samprate 16000/8000/48000 &")
OS.system ("./read.py &") < br >
Nu kör vi tillstånd av två program:
< p > chmod + x all.py read.py < /p >
Och vi kan köra all.py för att testa.
Denna "del" av koden i utvecklingen kommer att fortsätta att försöka hitta förbättringar. Jag erbjuder fritt för alla att använda och leka med den.
xcxcxcxcxc