Speech Recognition for the Propeller: Collaborative Project??
Oldbitcollector (Jeff)
Posts: 8,091
After seeing Chip's demo at UPEW I wanted to take his idea to the next level for
some simple speech recognition for the Propeller.
NOTE: This project is in very early stages! At this point it simply displays the
recorded data and plays it back. It is based on Rayman's Parrot player.
I'm using Propterminal so I can work in my livingroom. (Included in the zip)
You'll need the demoboard with microphone (or equiv) to make this work.
I'm looking to "loosely" match high points in the waveform, for simple
one word commands. The command "LIGHTS" might turn on an LED. [noparse]:)[/noparse]
Posted for comments and suggestions!
OBC
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
New to the Propeller?
Visit the: The Propeller Pages @ Warranty Void.
Post Edited (Oldbitcollector) : 8/26/2009 3:17:26 AM GMT
some simple speech recognition for the Propeller.
NOTE: This project is in very early stages! At this point it simply displays the
recorded data and plays it back. It is based on Rayman's Parrot player.
I'm using Propterminal so I can work in my livingroom. (Included in the zip)
You'll need the demoboard with microphone (or equiv) to make this work.
I'm looking to "loosely" match high points in the waveform, for simple
one word commands. The command "LIGHTS" might turn on an LED. [noparse]:)[/noparse]
Posted for comments and suggestions!
OBC
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
New to the Propeller?
Visit the: The Propeller Pages @ Warranty Void.
Post Edited (Oldbitcollector) : 8/26/2009 3:17:26 AM GMT
Comments
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
--Steve
Propalyzer: Propeller PC Logic Analyzer
http://forums.parallax.com/showthread.php?p=788230
http://www.parallax.com/Portals/0/Downloads/docs/prod/prop/PropDemoDschem.pdf
It's also in the the Propeller IDE Help
Jim
Something like that could be implemented using an FFT. I keep meaning to try it with a dsPIC, it would be quite trivial.
Leon
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Amateur radio callsign: G1HSM
Suzuki SV1000S motorcycle
Post Edited (Leon) : 7/6/2009 6:41:24 AM GMT
I made some attempts to realize a speech recognition system on an Atmega8. I ended up in an early stage of a speech recognition system. I implemented 6 bandpass filters in software an controlled a robot by whistles
Yup, that's the direction I'm heading.. with spin..
As soon as I can narrow the data down a bit, then I will need to
write a loose comparator routine.
I'll post an update when I get a little further into this..
OBC
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
New to the Propeller?
Visit the: The Propeller Pages @ Warranty Void.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Beau Schwabe
IC Layout Engineer
Parallax, Inc.
Post Edited (Beau Schwabe (Parallax)) : 7/6/2009 4:39:45 PM GMT
During my experiments I found an interesting students project in some american universtiy. The used an Atmega32 and made an FFT. Than the save the spectral peak over time for some words and afterwards compared this to some new spoken words.
In my opinion the it is not the right way to use an equally spaced fft. It is better to use some bandpass filters with filter frequencies adjusted to the formant frequencies, This reduces the amount of data to be stored for one word and could give good results.
By the way, here is the video of my sound controlled robot.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
--Steve
Propalyzer: Propeller PC Logic Analyzer
http://forums.parallax.com/showthread.php?p=788230
have you seen: http://www.circuitcellar.com/library/print/0298/stewart91/index.htm
may be interesting in terms of techniques?
Good reading... Thank you!
OBC
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
New to the Propeller?
Visit the: The Propeller Pages @ Warranty Void.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
JMH
Leon
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Amateur radio callsign: G1HSM
Suzuki SV1000S motorcycle
I'm still digesting the material in that article, but you are dead on!
A modification of this appears to be the direction to go...
Can't wait to get caught up on work to dig out my demoboard again!
Here's a direct link to the PDF.
This put Circuit Cellar on my "must subscribe soon" list.
OBC
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
New to the Propeller?
Visit the: The Propeller Pages @ Warranty Void.
In the other "Dr. Jim" thread, I suggested that this might become a community project.
There is just too much that is still over my head, but perhaps if several of us work on this
we can make it work.
I really believe we could pull off single word speech recognition for the Propeller using
a simple demoboard and a connected SD card.
Any takers on collaboration for this project?
OBC
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
New to the Propeller?
Visit the: The Propeller Pages @ Warranty Void.
If you want to try to do some voice recognition on the Prop I can go through my old computer magazines and dig through some of my old computer relics. There were quite a few early Voice recognition boards and I am sure the Propeller today could do a better job. Although I no longer have an S-100 based system I still have one of these boards:
http://www.computerhistory.org/collections/accession/102670945
The software is on a paper tape but I think the docs explained how it worked. There was also the VOXBOX for the TRS-80 which ran on the Model I system. I also know of some code for a 6502 that worked reasonably well for speech recognition. Also, I think there may be an old article from Byte or Circuit Cellar that dealt with speech.
Since I'm not up to speed yet on SPIN programming I don't know how much I could contribute other than research, ideas, and suggestions. I'd be glad to help where I can.
I also remember another product for the IBM PC called "Hearsay" and one version was an ISA card that plugged into the machine. I'm sure the more I dig through my old stuff I will come across more examples too.
Robert
DogP
They have already reduced the sound to simple patterns for display.
@RobotWorkshop:
'Speechlab Speech recognition board that occasionally "guessed" the correct word.' Wow.. LOL.
OBC
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
New to the Propeller?
Visit the: The Propeller Pages @ Warranty Void.
The filtering simply uses a tracking variable, e.g.:
delta := value - track1
track1 += delta >> 2
You control the corner frequency using the scaling factor (delta >> 2), relative to the original sampling frequency.
Jonathan
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
lonesock
Piranha are people too.
..Steve
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
..Steve
Actual statement from an HP tech support chat session:
"do you have an email address to help you send you what i need you to send me to help you"
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Computers are microcontrolled.
Robots are microcontrolled.
I am microcontrolled.
But you·can·call me micro.
If it's not Parallax then don't even bother.
I have changed my avatar so that I will no longer be confused with others who use generic avatars (and I'm more of a Prop head then a BS2 nut, anyway)
Now back to programming!!
Edit: Oops! Forgot to mention that it is based solely off OBC's program. Without it I could not have made this.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Computers are microcontrolled.
Robots are microcontrolled.
I am microcontrolled.
But you·can·call me micro.
If it's not Parallax then don't even bother.
I have changed my avatar so that I will no longer be confused with others who use generic avatars (and I'm more of a Prop head then a BS2 nut, anyway)
(No, I'm not one of them!)
Ok, spill the beans... I'm at work and can't test it yet! How does it work?
BTW, my code was based on Rayman's code..
OBC
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
New to the Propeller?
Visit the: The Propeller Pages @ Warranty Void.
It works by taking your program and replacing the "Play" (although it can be put back in if you want playback, I did that) with a new "CheckRecording" subroutine. It has not only a WAV byte array, but also a "Final" byte array as well. The extra subroutine takes the first part of the "Start" routine from your program and the "Play" subroutine and combines them after the "Record" subroutine call in the "Start" subroutine. It then replaces the playing part of the "Play" routine with a function that checks the sound within a range that is set in the CON block. It reads it byte by byte in decimal mode and then once checked it writes them to temporary VARs. It is doing this in a repeat loop so the temporary VARs get overwritten every time it loops. Anyway it is reading the previous recording and the new recording at the same time, so that is what it is comparing. If it is in the set range (say, "40") then it writes +1 to the globel "sound" VAR. When it is done with this it checks for how consistent it is by guessing how many sound bytes where within range by a value set in the CON block. The value can be 0000 (none right) or 8000 (all right, impossible match) it does the comparison with a "=>" sign so it can be more exact, but not less exact.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Computers are microcontrolled.
Robots are microcontrolled.
I am microcontrolled.
But you·can·call me micro.
If it's not Parallax then don't even bother.
I have changed my avatar so that I will no longer be confused with others who use generic avatars (and I'm more of a Prop head then a BS2 nut, anyway)
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
--Steve
Propeller Tools
So we should add the warning of not using this code for failsafe shutdown of a mechanical device? [noparse]:)[/noparse] [noparse]:)[/noparse] [noparse]:)[/noparse]
OBC
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
New to the Propeller?
Visit the: The Propeller Pages @ Warranty Void.
I should have a YouTube video up soon.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Computers are microcontrolled.
Robots are microcontrolled.
I am microcontrolled.
But you·can·call me micro.
If it's not Parallax then don't even bother.
I have changed my avatar so that I will no longer be confused with others who use generic avatars (and I'm more of a Prop head then a BS2 nut, anyway)
As in:
"Open the Pod Bay doors HAL" ?
LOL
Nice work OBC and Microcontrolled ! This is fun stuff ...
"f e t c h s l i p p e r s J e e v e s "
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔