Friday, January 7, 2011

Commencing Project River

A few days ago I embarked on a new project, something that's long been a dream of mine.

Project River (as I've dubbed "her" for now), is intended to eventually be a complete AI Smart House system, controlling everything from appliances to music to recording television shows and ordering Chinese food.

However, while that's the end goal, I've decided to take very small baby steps for now. I'm programming her in C++, and every feature I add requires me to learn about a new library or function. Thanks to many hours of reading articles on the Internet, I've already made a little bit of progress.

What River can do so far:
1. Speak text allowed.
2. Respond to vocal commands such as "Turn the music up"
3. Access a SQL database
4. Control Pandora by sending keystroke commands to Windows.

Yup, when I said "baby steps", I meant it! But she's coming along pretty quickly in my eyes, considering that she's already useful. It's very convenient to be able to say "I love this song", and have Project River say "I like this song too", and give the song a "thumbs up" in Pandora.

So far I've found to great communities that I plan on tapping for ideas and knowledge throughout what looks to be a very long development cycle. Project Leaf, while written in Lisp, has a bunch of great ideas built into it, and is home to a number of very smart robotics amateurs. I hope to contribute to their project in the future. The other great resource I've already found useful is Many very smart Artificial Intelligence hobbyists hang out here, and have already given me a handful of great ideas and tools to use.

I intend to make daily or semi-daily updates as to the status of the project.

I realize this blog post is somewhat short compared to most blogs, but alas, I am a man of few words. I figure it's better to start making short blog posts, rather than never make any because the thought of writing a long one stresses me out.

Until next time... Take me out into the black, tell them I'm ain't coming back.


  1. Yes, yes! Excellent work, Garrett! I've been talking to Inderwiesen about this project and am curious about a great many things! How will you control your hardware (Arduino, custom)? What voice control interface are you using? Damn it! I am quite compelled!

  2. Thanks for the interest :-).

    Arduino is currently the top of my list for controlling hardware -- it was brought to my attention a few days ago by another friend. I'm far from being at that point yet, but that is what I plan to use.

    For voice control I am currently using Microsoft Speech API 5.4 (Windows 7 version). I would prefer to switch to Dragon Naturally Speaking, as I believe I would get far more accurate results, but the SDK costs $2000... and that's way out of my price range.

    SAPI 5.4 as the speech api is called, works well, but I feel like it still needs a lot of training to recognize my voice properly. Unfortunately, I can't figure out a way to train the recognition engine except for the built in "Improve the speech recognition" of Windows 7. The downside to that is that there's only 2 set texts, so they only cover a small subset of words... and they are very boring to repeat.

    If anyone knows how to train Windows 7 Speech Recognition using your own texts, please let me know! (Eventually I want to make Project River automatically improve the recognition over time, but that's way down the road for me right now.)