Today concludes three weeks of intensive late night
hacking with the computer that I've installed in my car.
When I removed it from the trunk a month ago, its
control interface was a minature VT100 terminal. When
it's installed next week, control will be solely via speech
recognition. In three weeks, I've spent days at a time
pounding my head against the monitor, working
through tough design problems. I've also learnt a ton
about multi-threaded server / client design, data
routing, sockets, lock objects, TCP, and the horrors of
termios :-)
It's a great stage to be at, and I'm really glad that for the
first time, I didn't just come up with losing hacks to get
everything working. Having a solid core architecture to
build this set of computing services on is going to
make expanding it further so much easier!
I've named the project since I wrote last. The system is
named Alice (and recognizes her name when spoken).
The name was chosen partly because it's short, easily
pronounced, and continues the long standing tradition
of 'Alice Bots', a popular set of AI chatbots. Finally, Alice
as in Alice in Wonderland, since I've been chasing
down rabbit holes lately, and finding new worlds within
:-)
The architecture I've built has an EDS (event distribution
server) at its core, to which clients (speech processing
module, MP3 module, LCD control module) connect,
and send and recieve data, which is routed
appropriately between the connected modules, which
then process the data and perform the appropriate I/O.
Arguably the coolest piece of the system is the little
speech processor that I've written. The system relies
on an external application (CMU's Sphinx) to convert the
speech waveform to a text string. The speech
processor takes in the text string, and using a simple
weighted network algorithm, causes the output of the
module (which is passed to the EDS) to become
progressively more accurate over time.
Everything's been written in Python so far, apart from
the speech synthesizer and recognition systems, which
are external (GPLed) applications. I've been
programming in Python for about two years, but it took a
big project like this to really drive home what an
amazingly versatile and capable language it is. The
structure of the language really made it easy to
experiment, make rapid changes, and keep the code
easy to read.
Now to put the system into the car, and drive with it for a
few weeks. It'll be exciting to see how well it works, and
I look forward to posting more regular diary entries with
progress reports.
--- Rupert