<div>Hi,</div>
<div>&nbsp;</div>
<div>I have registered in the GSOC today. I&#39;ll only have time to add the student application tomorrow evening as Tuesday and Wednesday are busy school days. I hope that&#39;s early enough for you to take a look over the application and send back comments on how to refine the app. I&#39;m glad that someone is interested in my solution. Thanks.</div>

<div>&nbsp;</div>
<div>You are definitely right with the sources that trigger the accelerometer. It&#39;s pointless to keep the accelerometer running in the background, not to mention that the algorithm always needs to run and is computationally intensive and would drain the battery quickly. The incoming call is the trigger in this case.</div>

<div>However, we need online recognition because the other two (isolated and connected) work in offline mode - meaning the procedure takes an array of observations of fixed size. Once the trigger has activated the accelerometer, online recognition kicks in and starts recognizing. It eventually stops after the online recognizer has detected an answer or ignore gesture. Online recognition doesn&#39;t require to know when to stop. In the answer gesture, you don&#39;t have the stop trigger.</div>

<div>&nbsp;</div>
<div>Here&#39;s something about the accuracy of my HMMs. I&#39;m using continuous density HMMs because the signal is continuous (+- 3G). I could also use codebooks to quantize the vector but that would give a serious degradation to the recognition accuracy. Now, because my vector is of length 3 (XYZ) I have to use a finite mixture that models the vector against a Gaussian probability density function. I&#39;ve chosen the Trivariate Normal Distribution Function&nbsp;(<a href="http://mathworld.wolfram.com/TrivariateNormalDistribution.html">http://mathworld.wolfram.com/TrivariateNormalDistribution.html</a>).</div>

<div>To ease my work, I&#39;m generating MATLAB files from my c++ program to plot the parameters of the HMM. Because the TriVar has 3 params + 1 result, I can&#39;t even plot it on the screen and had to decompose it in 3 standard normal distribution diagrams.</div>

<div>&nbsp;</div>
<div>HMMs are mainly used in speech recognition with more than 20000 models (words). They&#39;ve proven that they&#39;re great at this job.</div>
<div>However, my current solution is not that great because I haven&#39;t implemented all the &quot;tweaks&quot; that make it that good.</div>
<div>For example, there is the so called &quot;State Tieing&quot; where certain parameters are re-estimated in a consistent way. I&#39;ve designed a HMM so that it has 27 states (3 at the power 3). Each axis can be in a negative, null or positive sub-state. There is really much to discuss here and I don&#39;t think I can in one email :)</div>

<div>Another optimization is &quot;State Duration&quot; meaning that a transition can be made to another state only after the appropriate number of observations have occured in the state.</div>
<div>I&#39;ll have to implement these.</div>
<div>&nbsp;</div>
<div>I&#39;m currently doing testing in small groups. I&#39;ve tested digits 0 - 4 when I&#39;ve seen that 2 and 3 weren&#39;t recognized vey well, 2 was often recognized as 3. 2 is made of half a cycle and one horizontal line, and 3 is made of two half cycles. This can be corrected by manual re-estimating the parameters. The algorithms are not that hard to understand in HMMs. The most important aspect in HMMs is how to compute the parameters and reevaluate them. I can correct 3 by giving the state in which the Wii/Neo is accelerating on +Z (the horizontal line) the probability 0. Therefore, decreasing the probability of model 3 when it encounters that state (straight line). In the end, it&#39;s all about the probabilities of the parameters inside each&nbsp;HMM.</div>

<div>Remember that you shouldn&#39;t train each model (gesture)&nbsp;individually. You want to increase the probability for one gesture and decrease the probability of the same observation sequence for the others.<br><br>I&#39;ll try to write the GSOC app as soon as possible.</div>

<div>&nbsp;</div>
<div>Thanks,</div>
<div>Paul-Valentin Borza</div>
<div>&nbsp;</div>
<div class="gmail_quote">On Mon, Mar 24, 2008 at 10:42 PM, Daniel Willmann &lt;<a href="mailto:daniel@openmoko.org">daniel@openmoko.org</a>&gt; wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Hello,<br>
<div class="Ih2E3d"><br>On Wed, 19 Mar 2008 21:49:59 +0200<br>&quot;Paul-Valentin Borza&quot; &lt;<a href="mailto:paulvalentin@borza.ro">paulvalentin@borza.ro</a>&gt; wrote:<br><br>&gt; My name is Paul-Valentin Borza (<a href="http://www.borza.ro/" target="_blank">http://www.borza.ro</a>) and I'm working<br>
&gt; on my Bachelor of Computer Science Thesis – Motion Gestures: An<br>&gt; approach with continuous density hidden Markov models. I've designed<br>&gt; and implemented in c++ continuous density hidden Markov models for<br>
&gt; the data measured by a 3-Axis ±3G accelerometer (the Nintendo Wii<br>&gt; Remote over Bluetooth).<br>&gt;<br>&gt; There are several alternatives to motion (accelerometer) gestures<br>&gt; like:<br>&gt;<br></div>[...]<br>
<br>it certainly looks like you did your homework already. :-)<br>
<div class="Ih2E3d"><br>&gt; Once the models are created and trained, there are three types of<br>&gt; recognitions:<br>&gt;<br>&gt; Isolated recognition (the user presses a button, makes a gestures,<br>&gt; releases the button and the gesture is recognized) – Viterbi Beam<br>
&gt; Search<br><br></div>This is definitely interesting, could also be triggered through an<br>event other than button press, i.e. incoming call<br>
<div class="Ih2E3d"><br>&gt; Connected recognition (the user presses a button, makes several<br>&gt; gestures, releases the button and those several gestures are<br>&gt; recognized) – 2-Level<br><br></div>Don&#39;t know about the usefulness of this.<br>

<div class="Ih2E3d"><br>&gt; Online recognition (the user just makes a gesture as the<br>&gt; accelerometer is monitored constantly and the gestures are recognized<br>&gt; on the fly) – this is the one that should be used on mobile devices<br>
<br></div>That would be the coolest, but I see several problems, especially<br>falsely detecting gestures while you are moving around and battery<br>lifetime. As long as you monitor for gestures the CPU cannot go into<br>
suspend which will dramatically reduce battery lifetime. Maybe we can<br>achieve almost the same level of seamless recognition by choosing our<br>trigger sources wisely.<br>
<div class="Ih2E3d"><br>&gt; I'll stop here with the theory. If someone needs further<br>&gt; clarification, please ask.<br>&gt;<br>&gt; I believe I have the required skills to build the Accelerometer<br>&gt; Gestures Idea for the Google Summer of Code.<br>
&gt;<br>&gt; Gestures will be an innovation in mobile phones. Just imagine the<br>&gt; scenario where your phone is on the table and it&#39;s ringing... You<br>&gt; pick the phone, see who&#39;s calling and you take your phone to your ear<br>
&gt; to talk (the phone answers the call automatically). The answer mobile<br>&gt; gesture is exactly this: you take your phone to your ear. Remember<br>&gt; that this is an involuntary action that you always perform. Pressing<br>
&gt; the green answer button will no longer be needed.<br><br></div>Really cool!<br>
<div class="Ih2E3d"><br>&gt; It&#39;s almost like the phone is reading you mind!<br>&gt;<br>&gt; Plus, the user can create his/her own custom gestures.<br><br></div>That&#39;s definitely a must.<br>
<div class="Ih2E3d"><br>&gt; I already have a working solution for the Nintendo Wii Remote as<br>&gt; described earlier and it should be easy to port on OpenMoko.<br><br></div>Cool, how accurate is your detection? Could you, say, hold the Wii/Neo<br>
as a pen and &quot;write&quot; stuff which will then be digitized?<br><br>&gt; What do you think?<br><br>By all means please submit your application to GSoC. The earlier you<br>publish your application and timeline the more time we have for giving<br>
feedback in order to refine the application.<br><br>Regards,<br><font color="#888888">Daniel Willmann<br></font></blockquote></div><br>