StupidBeauty
Read times:1617Posted at:Fri Oct 18 17:57:16 2013
PocketSphinx文档翻译:构建可运行于安卓上的Pocketsphinx,Building Pocketsphinx On Android

PocketSphinx文档翻译: 构建可运行于安卓上的Pocketsphinx,Building Pocketsphinx On Android

☯:这篇教程里面不是完全正确的 ,但是非常有参考价值。部分评论也有参考价值,于是也被翻译了。

我知道,妳们等这个教程等了好久了,现在就为妳们献上。感谢Matthew Cooper写下了这篇文章。此教程中说明的步骤应当能够在任何的GNU/Linux 发行版上正常工作 ,例如Fedora。另外 ,此教程预期的安卓手机系统版本为2.2 及以上。较低版本的安卓系统中 ,其SD卡的路径有点不一样,明白这一点的话同样能够轻松地按照这个教程完成妳的任务

下载并编译pocketsphinx

从这个网址下载以下两个源代码包 http://cmusphinx.sourceforge.net/wiki/download/

sphinxbase-0.8
pocketsphinx-0.8

然后从以下仓库下载PocketSphinxDemo
PocketsphinxAndroidDemo – snapshot

将三个源代码包都解压到某个妳能够在日后找到的地方。有一点要特别注意 pocketsphinx和sphinxbase源代码包都要解压到同一个上级目录中,并且将解压出来的子目录重命名为“sphinxbase”和“pocketsphinx”,目录名中不要带版本号。

打开终端并执行

sudo -i

然后输入妳的密码。这样妳就获得root权限了。

妳稍后将用到swig,所以现在就安装它吧。妳需要安装swig 1.3,目前我们还不支持新版本的swig,例如2.0

apt-get install swig

或者

yum install swig

现在,在命令行切换(cd)到sphinxbase 目录中,运行以下命令


./configure
make
make install

切换到pocketsphinx 目录中,执行:


./configure
make
make install

现在切换到PocketSphinxDemo/jni目录中

打开jni 目录中的Android.mk文件,然后修改SPHINX_PATH(第5行)的值,指向包含有pocketsphinx 和sphinxbase 的上级目录

在命令行中执行以下命令

妳的ndk目录的路径 /ndk-build -B

当然,这里要把 妳的ndk目录的路径 替换成妳电脑上ndk目录的实际路径

Eclipse

现在打开Eclipse,导入PocketSphinxDemo这个项目。

手机

将妳的安卓手机用USB连接,然后在此目录下创建 edu.cmu.pocketsphinx子目录

/mnt/sdcard

妳可以在终端里完成这个操作:

adb shell

在上一步获取到的外壳(shell)中:

mkdir /mnt/sdcard/edu.cmu.pocketsphinx

现在切换进入手机上的edu.cmu.pocketsphinx 目录,并且创建以下的目录结构(☯:注意参考一下 pocketsphinx源代码里的目录关系):


edu.cmu.pocketsphinx
|
----> hmm
| |
| ----> en_US
| |
| ----> hub4wsj_sc_8k
|
----> lm
|
-----> en_US

现在执行quit 以退出adb 外壳。

此时仍然在终端中操作,将电脑上的文件推送到手机上去。
切换到pocketsphinx/model/hmm/en_US/目录然后执行:

adb push ./hub4wsj_sc_8k /mnt/sdcard/edu.cmu.pocketsphinx/hmm/en_US/hub4wsj_sc_8k

切换到pocketsphinx/model/lm/目录然后执行:

adb push ./en_US /mnt/sdcard/edu.cmu.pocketsphinx/lm/en_US

现在打开以下目录中的RecognizerTask.java文件
/src/edu/cmu/pocketsphinx/demo

代码里声明的某些路径在2.2 版本的手机上无效。我们需要修改这些路径,使得它们正常工作。看看下面这段代码。


pocketsphinx.setLogfile("/mnt/sdcard/edu.cmu.pocketsphinx/pocketsphinx.log");
Config c = new Config();
/*
* 在2.2及更高版本的系统中,我们可以使用getExternalFilesDir()或类似的函数
*/
c.setString("-hmm", "/mnt/sdcard/edu.cmu.pocketsphinx/hmm/en_US/hub4wsj_sc_8k");
c.setString("-dict", "/mnt/sdcard/edu.cmu.pocketsphinx/lm/en_US/hub4.5000.dic");
c.setString("-lm", "/mnt/sdcard/edu.cmu.pocketsphinx/lm/en_US/hub4.5000.DMP");
c.setString("-rawlogdir", "/mnt/sdcard/edu.cmu.pocketsphinx"); //只用来储存录音文件

如果妳采用的是不同的模型,则妳需要使用不同的路径,例如对于满语(mandarin)模型就要这样

c.setString("-hmm", "/sdcard/Android/data/edu.cmu.pocketsphinx/hmm/zh/tdt_sc_8k");
c.setString("-dict", "/sdcard/Android/data/edu.cmu.pocketsphinx/lm/zh_TW/mandarin_notone.dic");
c.setString("-lm", "/sdcard/Android/data/edu.cmu.pocketsphinx/lm/zh_TW/gigatdt.5000.DMP");

好了,构建并运行这个项目吧。

评论

  1. 1. Benmael 说:

    啊,感谢这篇教程,它写得狠好,狠简单。当然,它需要读者对于安卓开发有基本的了解!

    我遇到了一些问题,希望妳能帮助我!

    我使用的是:
    MacOS 10.6.7 (预装的SWIG版本是1.3.31)
    NDK: android-ndk-r5b 2011年1月版
    SDK 2.2 API8, 设备模拟器-5554

    之前一直狠顺利,直到我要使用 NDK 来编译原生代码时出现问题。


    在命令行执行:
    妳的ndk目录的路径/ndk-build -B
    当然,将妳的ndk目录的路径 替换成妳的ndk 目录的真实路径
    —–

    在做这一步时,我遇到了错误,它还特别长,所以我只复制开头和结尾的部分:
    ——

    MyMac:PocketSphinxDemo root# /Users/MyMac/Documents/android-ndk-r5b/ndk-build -B
    Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
    Gdbsetup : libs/armeabi/gdb.setup
    Compile thumb : pocketsphinx_jni <= pocketsphinx_wrap.c
    /Users/MyMac/Documents/androidSphinx/PocketSphinxDemo/jni/pocketsphinx_wrap.c: In function 'Java_edu_cmu_pocketsphinx_pocketsphinxJNI_Decoder_1processRaw_1_1SWIG_10':
    /Users/MyMac/Documents/androidSphinx/PocketSphinxDemo/jni/pocketsphinx_wrap.c:1431: warning: assignment discards qualifiers from pointer target type
    Compile arm : sphinxutil <= logmath.c
    Compile thumb : sphinxutil <= bio.c
    Compile thumb : sphinxutil <= bitvec.c
    Compile thumb : sphinxutil <= case.c
    Compile thumb : sphinxutil <= ckd_alloc.c
    Compile thumb : sphinxutil <= cmd_ln.c
    Compile thumb : sphinxutil <= ……
    ….
    ….
    ….
    /Users/MyMac/Documents/androidSphinx//pocketsphinx/src/libpocketsphinx/ms_gauden.c:251: undefined reference to `bio_fread'
    /Users/MyMac/Documents/androidSphinx/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ms_gauden.o):/Users/benamel/Documents/androidSphinx//pocketsphinx/src/libpocketsphinx/ms_gauden.c:279: more undefined references to `bio_fread' follow
    /Users/MyMac/Documents/androidSphinx/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ms_gauden.o): In function `gauden_param_read':
    /Users/MyMac/Documents/androidSphinx//pocketsphinx/src/libpocketsphinx/ms_gauden.c:283: undefined reference to `bio_verify_chksum'
    /Users/MyMac/Documents/androidSphinx/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ms_gauden.o): In function `gauden_dist_precompute':
    /Users/MyMac/Documents/androidSphinx//pocketsphinx/src/libpocketsphinx/ms_gauden.c:344: undefined reference to `logmath_log'
    /Users/MyMac/Documents/androidSphinx//pocketsphinx/src/libpocketsphinx/ms_gauden.c:347: undefined reference to `logmath_ln_to_log'
    collect2: ld returned 1 exit status
    make: *** [/Users/MyMac/Documents/androidSphinx/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx_jni.so] Error 1

    ——-

    我试过在“PocketSphinxDemo/jni/”和“PocketSphinxDemo/”目录(按照http://developer.android.com/sdk/ndk/index.html的说明是可以这样做的)中都执行了"/ndk-build -B”命令。我记得上面那一堆错误信息是在第二个目录中执行时产生的,但是两个目录中产生的错误信息实际上是非常相似的。

    这些信息足够找到原因了吗?

    —————-
    —————-

    在教程的后面部分,我成功地将项目导入了Eclipse,构建了它,并且在模拟器中运行。程序启动动了,但是,当我点击“Record”的时候,程序崩溃了。**我修改了“RecognizerTask.java”中的那些路径,直接访问了我的电脑上解压后的“/pocketsphinx/”目录中的“.dic、.DMP等等”文件,而不是将它们复制/推送到SD卡中去。

    —————-
    —————-
    对于教程中所说的在SD卡上创建目录结构的部分,我认为,它们应当是与解压后的“/pocketsphinx/”目录中的结构类似,所以应当是以下这样的一个结构对吧?

    SDCard—>edu.cmu.pocketsphinx—-> hmm—-> en_US—-> hub4wsj_sc_8k
    SDCard—>edu.cmu.pocketsphinx—-> lm—–> en_US

    再次感谢

    2011年 5月27 @ 下午8:48

  2. 2. admin 说:

    Benmael:

    > /Users/MyMac/Documents/androidSphinx//pocketsphinx/src/libpocketsphinx/ms_gauden.c:347: undefined reference to `logmath_ln_to_log’
    collect2: ld returned 1 exit status

    它在链接到sphinxbase的时候失败了。妳需要检查确认:正确地指定了sphinxbase 的路径;sphinxbase 库存在并且已经编译过了。

    > Regarding the part of creating the folder structure in the SDCard, I think it has to be something similar to the unzipped “/pocketsphinx/” dir structure, so the diagram should be something like this maybe?

    妳怎么安排这个目录结构并不重要。重要的是,妳要在源代码里指定正确的位置。

    2011年 5月30 @ 上午10:52

  3. 3. nguyenhuutinh 说:

    啊。当我先用ndk-build 来编译一个示例项目时,成功地编译了。但是,当我编译pocketsphinx_jni时就遇到了错误

    我不知道原因。
    请帮助

    SharedLibrary : libpocketsphinx_jni.so
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(pocketsphinx.o): In function `ps_reinit’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:224: undefined reference to `logmath_get_base’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:227: undefined reference to `logmath_free’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:228: undefined reference to `logmath_init’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:289: undefined reference to `ptmr_init’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(pocketsphinx.o): In function `ps_free’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:336: undefined reference to `logmath_free’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(pocketsphinx.o): In function `ps_update_lmset’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:409: undefined reference to `ngram_model_free’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(pocketsphinx.o): In function `ps_add_word’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:561: undefined reference to `ngram_model_add_word’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(pocketsphinx.o): In function `ps_start_utt’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:625: undefined reference to `ptmr_reset’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:626: undefined reference to `ptmr_start’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(pocketsphinx.o): In function `ps_end_utt’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:813: undefined reference to `ptmr_stop’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:819: undefined reference to `ptmr_stop’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:829: undefined reference to `ptmr_stop’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:832: undefined reference to `ptmr_stop’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:853: undefined reference to `logmath_exp’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(pocketsphinx.o): In function `ps_get_hyp’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:865: undefined reference to `ptmr_start’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:869: undefined reference to `ptmr_stop’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(pocketsphinx.o): In function `ps_get_hyp_final’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:878: undefined reference to `ptmr_start’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:880: undefined reference to `ptmr_stop’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(pocketsphinx.o): In function `ps_get_prob’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:890: undefined reference to `ptmr_start’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:894: undefined reference to `ptmr_stop’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(pocketsphinx.o): In function `ps_seg_iter’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:903: undefined reference to `ptmr_start’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/pocketsphinx.c:905: undefined reference to `ptmr_stop’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ps_lattice.o): In function `ps_lattice_link’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:80: undefined reference to `__listelem_malloc__’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:81: undefined reference to `__listelem_malloc__’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:82: undefined reference to `__listelem_malloc__’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ps_lattice.o): In function `delete_node’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:150: undefined reference to `__listelem_free__’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:155: undefined reference to `__listelem_free__’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:157: undefined reference to `__listelem_free__’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ps_lattice.o): In function `remove_dangling_links’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:174: undefined reference to `__listelem_free__’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:175: undefined reference to `__listelem_free__’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ps_lattice.o):/home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:188: more undefined references to `__listelem_free__’ follow
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ps_lattice.o): In function `ps_lattice_write’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:250: undefined reference to `logmath_get_base’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ps_lattice.o): In function `ps_lattice_write_htk’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:361: undefined reference to `logmath_log_to_ln’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:361: undefined reference to `logmath_exp’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ps_lattice.o): In function `dag_param_read’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:378: undefined reference to `lineiter_next’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ps_lattice.o): In function `ps_lattice_read’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:429: undefined reference to `logmath_retain’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:434: undefined reference to `logmath_init’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:438: undefined reference to `listelem_alloc_init’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:439: undefined reference to `listelem_alloc_init’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:440: undefined reference to `listelem_alloc_init’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:447: undefined reference to `fopen_compchk’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:451: undefined reference to `lineiter_start’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:462: undefined reference to `lineiter_next’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:473: undefined reference to `logmath_init’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:475: undefined reference to `logmath_get_base’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:503: undefined reference to `lineiter_next’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:537: undefined reference to `__listelem_malloc__’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:578: undefined reference to `lineiter_next’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:586: undefined reference to `lineiter_next’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:596: undefined reference to `lineiter_next’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:614: undefined reference to `lineiter_free’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:615: undefined reference to `fclose_comp’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:637: undefined reference to `logmath_log’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:638: undefined reference to `logmath_log’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:640: undefined reference to `logmath_log’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:649: undefined reference to `lineiter_free’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:650: undefined reference to `fclose_comp’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ps_lattice.o): In function `ps_lattice_init_search’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:669: undefined reference to `logmath_retain’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:673: undefined reference to `listelem_alloc_init’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:674: undefined reference to `listelem_alloc_init’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:675: undefined reference to `listelem_alloc_init’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ps_lattice.o): In function `ps_lattice_free’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:694: undefined reference to `logmath_free’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:695: undefined reference to `listelem_alloc_free’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:696: undefined reference to `listelem_alloc_free’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:697: undefined reference to `listelem_alloc_free’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ps_lattice.o): In function `ps_latnode_prob’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:758: undefined reference to `logmath_get_zero’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ps_lattice.o): In function `ps_lattice_compute_lscr’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:925: undefined reference to `ngram_bg_score’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:936: undefined reference to `ngram_tg_score’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:943: undefined reference to `ngram_tg_score’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:948: undefined reference to `ngram_bg_score’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ps_lattice.o): In function `ps_lattice_link2itor’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:980: undefined reference to `logmath_add’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ps_lattice.o): In function `latlink_list_new’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:1068: undefined reference to `__listelem_malloc__’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ps_lattice.o): In function `ps_lattice_popq’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:1097: undefined reference to `__listelem_free__’
    /home/nguyenhuutinh/Downloads/PocketSphinxDemo/obj/local/armeabi/libpocketsphinx.a(ps_lattice.o): In function `ps_lattice_bestpath’:
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:1257: undefined reference to `logmath_get_zero’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:1271: undefined reference to `ngram_bg_score’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:1299: undefined reference to `ngram_ng_prob’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:1318: undefined reference to `logmath_add’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:1321: undefined reference to `ngram_tg_score’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:1343: undefined reference to `logmath_get_zero’
    /home/nguyenhuutinh/Downloads/sphinx/pocketsphinx/src/libpocketsphinx/ps_lattice.c:1350: undefined reference to `ngram_ng_prob’

    2011年 6月11 @ 下午2:47

  4. 4. Christopher Smith 说:

    遇到未定义的引用(undefined reference)错误时,可以尝试这样解决:

    编辑Android.mk文件。修改第162 行:LOCAL_STATIC_LIBRARIES := sphinxutil sphinxfe sphinxfeat sphinxlm pocketsphinx
    改成:LOCAL_STATIC_LIBRARIES := pocketsphinx sphinxlm sphinxfeat sphinxfe sphinxutil

    2011年 8月11 @ 下午8:20

  5. 5. Volker 说:

    我解决了自己之前遇到的问题了。它与JNI毫无关系。
    我误解了教程中所画的那个目录树的结构了:

    这样写也许会更好:
    cd /mnt/sdcard
    mkdir edu.cmu.pocketsphinx
    cd edu.cmu.pocketsphinx
    mkdir hmm
    mkdir hmm/en_US
    mkdir hmm/en_US/hub4wsj_sc_8k
    mkdir lm
    mkdir lm/en_US

    @ Stewart Boling
    妳好像遇到了类似的问题,因为妳的logcat 记录跟我的完全一样。
    检查一下/mnt/sdcard/edu.cmu.pocketsphinx/pocketsphinx.log中的错误记录。

    晚安!

    2011年 12月6 @ 上午12:44

  6. 6. Rasman 说:

    最近几天都在调试这个问题。

    我看到的现象是,程序启动了,但是马上就退出了。eclipse中最后一条调试信息是“JNI_onLoad”

    让我们把话说远点。通用来讲,NDK的错误处理非常差,所以要想弄清楚是哪里的问题会是狠难的,它会直接崩溃掉(然后就没戏了)。由于pocketsphinx不大可能在这个层面上出问题,所以,应当是别的什么原因。

    问题在于这段话:

    “代码里声明的某些路径在2.2 版本的手机上无效。我们需要修改这些路径,使得它们正常工作。看看下面这段代码。

    pocketsphinx.setLogfile(”/mnt/sdcard/edu.cmu.pocketsphinx/pocketsphinx.log”);
    Config c = new Config();
    /*
    * 在2.2及更高版本的系统中,我们可以使用getExternalFilesDir()或类似的函数
    */
    c.setString(”-hmm”, “/mnt/sdcard/edu.cmu.pocketsphinx/hmm/en_US/hub4wsj_sc_8k”);
    c.setString(”-dict”, “/mnt/sdcard/edu.cmu.pocketsphinx/lm/en_US/hub4.5000.dic”);
    c.setString(”-lm”, “/mnt/sdcard/edu.cmu.pocketsphinx/lm/en_US/hub4.5000.DMP”);
    c.setString(”-rawlogdir”, “/mnt/sdcard/edu.cmu.pocketsphinx”); // Only use it to store the audio

    应该改成,对于2.2及以上版本的系统,将以下代码中的路径改成……

    理想情况下,这个示例程序应当重写,将这些文件直接从资源(res)目录里提取出来,这样就不需要手动将它们推送到手机上了。这将会一帮不熟悉安卓的人带来狠大的方便。

    2012年 2月2 @ 下午10:05

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands

 
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4