9
« on: September 27, 2014, 01:17:39 PM »
So I have been working on this idea of having VC know all about the person that it is interacting with. I have setup so that depending on who calls in using Skype to VC, it knows who that person is and then stores that info in a variable which is uses to do other tasks. I also set a command to switch user or basically state this is "so and so" and then it also sets this variable that way as well, in case not using Skype or needing to override it for some reason.
So with VC knowing who it is talking to the following things can happen right away.
1. VC can switch MS Speech Recognition Profile so it uses a trained profile for the person it is talking to for better accuracy.
2. VC can now refer to the person it talks to in a variety of command responses, so it seems more human like. Just by including the variable in your TTS string.
Now to take this to a new level, I started playing with the idea of building a database of knowledge about that person. In this case I started by using a simple Map which has a key and value. So by creating a table for that specific user that VC is talking to, I can have VC know about that person, and pull information about that person as needed in any of my other commands or responses.
For example:
If I say.. "Learn that my favorite color is blue" then VC stores a key called color and a value of blue.
Then later I can ask, "What is my favorite color?" and VC says "blue".
Simple enough. Now I can do this for anything really. Remember my birthday is on "November 29th".
Later, I can setup an automatic checking for current date and maybe have VC say "Happy Birthday Jeff" when it is actually my birthday. If not, I can ask, when is my birthday, and it responds.
But lets take this a step further. Not only can this Map include any type of info pertaining to the user, but now we can look at making this info available to other users should they need to know.
For example, I can have a command that, regardless of the user speaking can be as follow's "What is Jeff's favorite food" and then it checks the map for Jeff and returns the info to that user. Obviously you want to limit which type of data can be done this way, but it makes VC seem much smarter. "When is my wife's birthday", "What is my wife's favorite movie", etc. Maybe if your other user is a child, spouse, etc. you can then learn more about them through VC. Assuming they interact with VC and provide this information. If nothing else, you don't have to remember it all and can ask your smart home the answer.
Now, the final and ultimate level to this idea is basically to let VC create these "memories" on the fly. So if the Map doesn't exist for a person yet, it should be able to create one, then start adding in the information. "Remember my dad's phone number is 1234567890" and then when dad's map doesn't exist, it says "Ok, I will remember" and then it creates a new map called JeffsDadsInfo and a new key called phone number and value of 1234567890. So next time you ask, what is my dad's phone number, it matches dad's to JeffsDadsInfo and phone number to the map key and then returns the number. Then lets say another user "my wife" is talking with VC and asks "What is Jeff's Dad's phone number" and VC knows to check the map for that entry. I can see creating the table name on the fly and linking it back with the command being a bit difficult.
I guess with this information you can also have VC use it when needing for other things like.. For Hue users.. VC can have a response "Would you like me to set the light color to blue? I know its your favorite." Or after a command of "Play some music" VC can say, would you like to listen to "Favorite Song" because it knows this. It could be favorite artist, band, etc. Or it may say "How about some James Brown" assuming you have that as a favorite artist.
Taking this further.. "I'm getting hungry" and lets assume you said you favorite food was pizza. VC says "Hmm. perhaps we should order in some pizza" or maybe if delivery isn't a choice, it could just be "What should I have for dinner?" and VC says "How about pizza?"
I hope you see the point of this is that you make VC aware of your preferences. You can even do this with things like volume level, light level for different rooms, etc. just be having it remember these things and recall them later. Oh.. Remember that I prefer the temperature to be 68 degrees at night. Or remember that I prefer the temperature to be 72 degrees during the day (sorry using Imperial here). All kinds of routines can be created for VC to know you.. Although I can see that being funny if VC checks each user and one has preferred temp to be 68 while the other is 74. Could be thermostat war!
Anyone have any ideas on generating the map names on the fly and having them work with commands later on. OR maybe this means creating new commands to interact with them on the fly as well? Any feedback or suggestions would be appreciated.