GAEWave0123 gaeinjava 5 加入了applet
2009/12/27 昨天把Sphinx在Eclipse下的整个环境差不多弄好了,之前也把GAE在Eclipse下开发的环境弄好了。今天就开始看Sphinx in details.
2010/1/3 新年快乐,新年初始发生了不少事情,做了个不算小的决定。嗯,应该是正确的。开开心心安安静静的做毕业设计吧。
2010/1/4 新建一个工程,然后把Sphinx的一个demo导入,再修改config.xml中jsgfGrammar的grammarLocation 的 value=”resource:/HelloDigits” 程序就可正常运行,但不知道为什么自己建的一个工程就不行,报gram缺少self-identifier的warning。
2010/1/8 在Eclipse中新建一个工程,对一个wave文件进行识别,输出文本。翻译Sphinx-4白皮书。
2010/1/11 在1/8的指导下构建了GAEWave工程,但有错,明天再来看吧。休息,休息一下。
2010/1/13 javax.sound.sampled GAE不支持,尝试自己构建javax.sound.sampled源代码包
2010/1/14 config.xml的URL在Eclipse下模拟的开发环境下获取成功,cm ( Configuration Manager ) 也初始化成功。但现在有个问题就是在cm.lookup()中,FlatLinguist那里出错,然后出现javax.speech.recognition.GrammarException异常。以前在Java App里面遇到的找不到jsgf fiel: digits.gram 是在PropertySheet.java 中280行ps.getOwner()触发的,现在是在278行cm.getPropertySheet(flattenProp(name))触发的,所以应该不是digits.gram在config.xml中的位置不对造成的。
明天还可以把,config.xml的URL在GAE上显示出来,看是啥样。
2010/1/15 config.xml的URL在真实的GAE上显示还没做。今天解决了昨天的问题,还好,见笔记本。接着的问题是FlastLinguist.allocate的时候,当调用到ModelLoader.java中的readS3BinaryHeader(path, props),path的值是data/means,但根据这个path得到的inputStream是null,然后跑出了异常。明天调查这个问题。
明天看看在Application中path是什么值。
2010/1/17 用StreamDataSource替换AudioFileDataSource成功回避了javas.sound.sampled。但结果有错,明天看bbs上的人怎么回应。
2010/1/19 昨天有了小进步,成功在GAE上实现wave文件的识别。今天跑了那个SpeechCloud的开源工程,知道了他的参数怎么用,但服务器返回有错,先看看他的代码吧。然后Sphinx白皮书在看看。
值得担忧的是,如果没有现成的中文JSGF和Dictionary我就囧了。
2010/1/21 我现在的工作是如何实现Local App和Server App的通信。好像要用到URLConnection, 要快速稳定的通信,还有可能VoIP。但我的瓶颈是在于GAE始终是单线程的,不管是传一个文件过去,还是一个Stream的一部分,都要最后结果出来了,才能去获取新的输入,因为最后的 应用希望系统有即时的反馈,所以也不能说发一大段数据过去在服务器上缓存起来。发了一个邮件给sourceforge上的Spencer要HttpRecoginzer的源代码,先看看他是怎么做的吧。
2010/1/23
在Client和Server之间传一个String成功了,但传wav文件没成功,纠结在几个Stream的转换中.今天有点脾气,可能是因为工作不顺利的原因,原本有的自信和骄傲都没了。没事,静下心来,淡然处之。也有可能只是因为昨天晚上失眠了。我最近思考的问题是,到底什么是我喜欢做的和能做的呢?
用FileOutputStream new 出来的ObjectOutputStream 在服务器抛EOF异常。
不错, 用bayt[] 做中间转化,目前为止所有关于Stream的问题都得到了解决。
成功在localhost 和 localapp之间是实现了wav文件的传递并返回识别结果。Good boy,这至少又是一个10%。
接下来: 1, Firefox插件开发。 2,Sphinx4复杂化。
在网上看见一个叫玻璃盒子的博客,其中有记录它的主人开发Firefox Extension 和Plugin的过程,那人先准备开发Extension后来发现Extension完成不了他想要的功能,于是又看了Plugin的开发,呵呵,我就跟随他的路径吧,希望能少走弯路。
然后我看了他的日志语言,觉得他应该也是一边开发一边做的记录。我也就把这篇工作日志先当做我的工作微博用吧,呵呵。开始吧。先完成Firefox插件开发。Sphinx4的复杂化,估计比较困难,可以一边写文章,一边做。
Decision made. 放弃Firefox插件开发。1,没有录音的任何资料2,servlet通信又是另外的框架,3,这不是重点。
用applet 代替。
2010/1/24 applet也成功运行,对jar进行签名后也能访问本地文件,至少是jar包中的文件,问题是目前IE和Chrome都没有结果反馈,不知道什么原因。Firefox下,目前貌似一切是正常的,不管了,接下来的工作是用applet获取Microphone,得到wave文件。这个工作量还挺大的,也很多细节要考虑,噪音,录音质量,断电判断,多长的录音断成一个wav文件。
2010/1/29 25号,星期一看AVATAR那天,接到周四去面试后,周二,周三,我的毕业设计就暂停了。今天面好回来,继续,晚上解决了一个根本原因是wav file 没找到的问题。有几点疑惑之处得到了解决。1,浏览器一定要重启才会重新load新的applet,经验告诉我Firefox有的时候会抽筋,即使重启也不重新load,甚至有时不光不load applet,连网页也不load。2,我一开始以为是applet的init或start没有执行,后来debug才发现其实是try catch里面出现了异常,就是new file那里,然后后面的代码就不执行了。嗯,暂时用电脑上的绝对路径回避了这个问题,毕竟我并不需要一定要获取jar包里面的文件。接下来就是microphone和Sphinx升级了。
2010/2/4 JMF的dataSource获取不到ByteStream。可能JMF就不能用了。还是研究Sphinx的Microphone类吧。
2010/2/5 Sphinx的Microphone也没搞清楚,后来在网上搜到了一段从Microphone到ByteArrayOutputStream的代码,移植到了我原来的程序,建立了一个可以和Server通信的App,Application0204。Server端还是GAEWave0123。接下来在研究下Sphinx升级识别算法。在回来看客户端怎么个互动。
2010/2/7 重新看了一遍白皮书,Decoder部分没看得懂。Linguist和FrontEnd都看懂了。有一点是肯定的,要想顺利的通过答辩,支持对中文的识别是必须的。这样我就必须去看怎么形成中文的AcousticModel,Dictionary和LanguageModel。去看吧。好像Decoder是和具体的某个语言没有关系的,他只用特征和SearchGraph。训练部分就是在Linguist中完成的吧。如何训练中文的,这些都可以写到我的论文当中。
2010/2/8 刚下的中文声学模型并不仅在Eclipse中打不开,用其他的文本编辑器打开也是乱码。
2010/2/10 今天开始学SphinxTrain,他要自己编译Train的程序,Cygwin的configure和编译环境搞了我很长时间,一方面是网速奇慢,后来还好找到了一个中国的景象。一方面是不熟悉这套东西。嗯,继续看。然后开始写论文的其它部分了。
2010/2/14 弄了VMWare和Ubuntu来弄SphinxTrain。跟着那个Tutorail做的时候出了错,也看不懂到底出在了什么地方,于是开始搜论坛,看材料。关于Sph,例子中的语音文件时sph格式,根据论坛上的帖子,可以用sox转化成wav,如果我是wav也可以转换成sph。但这是不需要的,可以更改etc/sphinx_train.cfg里面的设置:
$CFG_WAVFILE_EXTENSION = 'wav';
$CFG_WAVFILE_TYPE = 'mswav'; # one of nist, mswav, raw
来使用wav文件。
但我现在始终都没弄清楚wav文件是怎么和dicitionary,language model等联系起来,是怎么使用的。靠transcription.
2010/2/15 各个声学模型中的那些什么classloader之类的源码都是一样的,只要声学模型不一样就行了,嗯,modularity, good.
2010/2/21 perl中module00的ctl应该是fileids文件。找到了一个调试训练出错的办法,以提示语言去perl代码中去搜索,perl的大意能看懂。
Dictionary中的SIL是干嘛的?怎么用的?
2010/2/21 Windows下的回车和Linux下的回车不一样这件事把我玩弄了一两下,一是莫名的说我多出来空格,一说我莫名的找不到mfc文件。还好训练完成。接下来就看训练出来的声学模型能不能用了。
2010/2/25 要按下载的sphinx中的文档使用acoustic model,网页上的那个不适合我现在的beta3版本。运用了我在家训练好的模型后,没有什么输出,应该问题是出在模型上面。明天再看看。
2010/3/10 下次训练除了按照论坛上给出的建议修改外,别忘了还要提取一遍特征。就此一次了。还有那个mdef还是用model.architectue下的mdef吧。在仔细读读那个How to decode, How to train。还要确认字典等文件的名字和train.cfg文件中的一致。