pocketSphinx 在hi3516A上关键词唤醒

(版本为最新在github下载的代码,2017.7)

编译安装sphinxbase

根据README文档,先运行./autogen.sh

问题1:

​ 缺少安装包bison,按照提示,安装bison即可

问题2:

​ 提示cannot find input file:test/unit/test_ad/Makefile.in

​ 去对应文件夹下,有Makefile.am存在,可能是命名的问题,写一个shell脚本复制一下,

#!/bin/bash

for x in test/unit/test_*

do cp $x/Makefile.am $x/Makefile.in; done

​ 同样的错误,同样的解决方案,然后再执行,

​ 提示:now type make to compile the packet

执行make

​ 提示makefile :1:*** missing separator, stop

​ 转到对应文件夹下(具体看输出信息):

​ 找到Make file文件

if USE_LAPACK

maybe_lapack = XXXX

endif

if USE_THREADS

maybe_threads = XXXXX

endif

.....

​ 一般提示missing separator是因为makefile不能将四个空格识别为Tab键,但是有些文本编辑器却这么写,

​ 可以使用cat -v -t -e Makefile查看,’^I‘是Tab键

​ 最终坚决方案如下:

ifenq ($(USE_LAPACK),)

maybe_lapack = XXX

endif

下面的if同样的处理

继续:

没有make all 的规则,去你妈的,这是github上的代码吗?果断去sourceforge去下载,

./autogen.sh

缺少,swig,安装重试,没问题

./configure

make

make check

make install

安装pocketSphinx

如果遇到relink的错误,好好看看readme,确保pocketSphinx依赖的库存在或者查看是否sphinxbase安装正确成功。

同样,按照readme的操作,

autogen.sh

./configure

make clean

make check

sudo make install

在这个过程中,**注意环境变量**,可以在etc/profile中配置如下

export LD_LIBRARY_PATH=/usr/local/lib

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

出现debug相关的报错,直接删除debug相关的代码,虽然有点费时间,但是我在相关代码里不会改,无从下手,然后就没有问题了

安装好后,就可以测试是否成功,

pocketsphinx_continuous -inmic yes

在我电脑上测试时候,会出现open device (/dev/dsp)(no such file or dir)的问题,但是我的麦克风在/dev/snd下,他是通过配置文件读出来的,这里我就跳过了,啦啦啦,测试一下语音文件的好了。

pocketsphinx_continuous -infile

可以运行,也会输出对应的结果,(file.wav的格式为16000采样率,16bit单声道pcm的编码格式)(格式不对会提醒报错)这里使用的是默认的英文的模型,在model/en-us/en-us下

也可以自己训练模型,使用自己的模型用一下的参数

pocketsphinx_continuous -hmm (your hmm dir) -lm (your language model) -dict (your dication) -inmic yes/-infile file.wav

到此为止,基本上在本机可以运行pocketsphinx,下一步就是将其移植到arm开发板上

移植pocketsphinx

先用交叉编译链编译sphinxbase

./autogen.sh(用于创建./configue文件)

./configure (这里需要自定义而不是使用默认的)

--prefix=/your/lib/home (库文件的安装位置,不使用默认目录,是为了避免与pc安装冲突)

--exec-prefix=/your/bin/home (可执行文件的库位置)

--host=x86_64-unknown-linux-gnu (主机类型,先随便写一个,在检查时候如果不对会提示,查找检查的输出信息,有这个)

--target=arm (目标平台)

CC=arm-hisiv400-linux-gcc

CFLAGS="-L/opt/hisi-linux/x86-arm/arm-hisiv400-linux/lib"

CPPFLAGS="-I/opt/hisi-linux/x86-arm/arm-hisiv400-linux/include"

--without-python (因为带上python库跑的时候会有奇奇怪怪的问题,索性屏蔽掉)

//还有其他可以取消依赖的库,具体可以查看./configure --help

make

sudo make install

问题解决:

configure: error:

Could not link test program to Python. Maybe the main Python library has been

installed in some non-standard library path. If so, pass it to configure,

via the LDFLAGS environment variable.

Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"

============================================================================

ERROR!

You probably have to install the development version of the Python package

for your distribution. The exact name of this package varies among them.

解决办法:一般可以通过sudo apt-get install python-dev解决

​ 还有一种办法:sudo apt-get install libatlas-dev

​ 我试了很多类似的pythonXX-dev都不行,只能使用–without-python取消python库的依赖

root:(yourpc name)#这是超级用户,但是有颜色)

​ 然后执行,就没问题了,鬼畜

​ (详细可以查看man sudo)

“sphinx_fe.o : In function dectect sphinx mfc ….” 没有定义_ISO99_sscanf_

遇到这个问题是因为我交叉编译链是arm-hisiv300-linux,v300的是基于uclibc的库,这个库和v400以来的glibc库相比比较精简,所以会少这些东西,换成v400的交叉编译链就好了

同样的步骤,交叉编译pocketsphinx,命令也是一样

这时候就可以去你的目录下寻找你的bin(可执行二进制文件) lib(库) shared(里面有默认的模型,还有其他东东,没有搞清楚) include(调用pocketsphinx时候头文件)

运行pockesphinx

​ 将之前配置的产生lib和bin的文件夹挂载到板子下,

​ 将bin的文件夹路径加入PATH环境变量中

​ 将lib的路径加入LD_LIBRARY_PATH环境变量中

先运行

pocketsphinx_continuous -infile test.wav

由于使用默认的英文模型,而且编译时候使用了--without-python,不能正常识别,会报错

(默认的英文模型是连续模型,所以不行,只能用带ptm的模型)

在官网下载一个带ptm的声学模型https://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/US%20English/

pocketsphinx_continous -hmm /home/XXX/cmusphinx-en-us-ptm-5.2/ -infile test.wav

再次运行,在运行过程中会被系统killed,究其原因,应该是lm太大了,使用系统自带的en-us-phone.lm就可以

pocketsphinx_continous -hmm /home/XXX/en-us-phine.lm -infile test.wav

也可以使用-dict指定对于的字典,这时,应该就可以在hi3516上运行了,然而却不能识别出结果,这里就是语言模型,字典,和声学模型的锅了,垃圾的一匹

按理,hi3516A有64M内存,不应该运行不了,可能是需要配置一下板子的单个程序运行上限,这里只是个人猜测。

可以通过命令行运行识别,也可以通过程序运行

交叉编译语言识别程序:

​ 之前交叉编译得到lib库,include库放在交叉编译链的搜索目录下

​ (执行arm-hisiv400-linux-gcc --print-search-dirs得到具体目录)

arm-hisiv400-linux-gcc hello.c -o hello -I/your/include/dirs -L/your/lib/dirs -lpocketsphinx -lsphinxad -lsphinxbase -lm(注意4个库的顺序哦,不一样也会报错)

​ 含义解释:-I/your/include/dirs 指定头文件搜索路径,应该不用,如果将include的库放在交叉编译链的搜索路径下

​ -L/your/lib/dirs指定库的搜索路径,同上

​ -lpocketsphinx -lsphinxad -lsphinxbase -lm 分别是指定链接 libpocketsphinx.a libsphinxad.a libsphinxbase.a 和 数学库,-lm在很多情况下都需要,应该实现方式和具体芯片ALU有关,所以每一个库实现方式不一样,这个必须有,不然无法链接

训练自带的声学模型,语言模型

声学模型,字典文件,语言模型的关系

声学模型是将语音-》音素的部分,

字典文件是音素到单词的映射关系,

语言模型是通过概率判断音素组合形成单词

这里步骤在这个博客里http://blog.csdn.net/zouxy09/article/details/7942784

这里只讲我的理解和我犯的错

模型后缀

作用描述

your_db.dic

语言字典,从单词到音素 比如HELLO HH AH L OW

your_db.phone

音素集合文件,包含所有的音素,还需要加上SIL静音音素

your_lm.DMP/.bin/.lm

语言模型,在其他地方得到,

your_db.filler

其他噪音,主要列举非语音单词,背景噪音啊什么的

your_train.fileids

训练文件列表,指明训练的语言文件的路径

your_db_train.transcription

训练文本对应文件,hello world (file1)

your_test.fileids

文件格式类似train,用于测试

your_db_test.transcription

文件对应表,用于测试

注意事项:

在your_db_train.transcription文件中,

关于性能方面

用pocketsphinx在hi3516A上运行,使用自己训练的模型,识别4句话,准确率一般,单次识别需要2s左右,

3516A是A9 的核,600M的主频,感觉还是挺费时间的,

具体在程序查点得到,前期加载模块需要0.6s,识别需要1.2s左右,目前在考虑如何运行更加迅速

time ./test可以看到运行时间

pocketsphinx 模型库_pocketSphinx 嵌入式关键词唤醒相关推荐

  1. pocketsphinx 模型库_PocketSphinx声学模型的训练与使用

    声学模型主要用于计算语音特征和每个发音模板之间的似然度.目的是为每个声学单元建立一套模型参数(通过不断地学习和改进得到最优的,也就是概率最大的一组HMM模型参数). 需要训练的情况: 1)需要创建一个 ...

  2. pocketsphinx 模型库_[转] PocketSphinx语音识别系统声学模型的训练与使用

    PocketSphinx语音识别系统声学模型的训练与使用 声学模型主要用于计算语音特征和每个发音模板之间的似然度.目的是为每个声学单元建立一套模型参数(通过不断地学习和改进得到最优的,也就是概率最大的 ...

  3. 嵌入式还有哪些风口值得入?

    大家好,我是写代码的篮球球痴 前两天发了篇文章说到嵌入式薪资的,很多人想知道目前有哪些不错的行业可以加入,这篇文章罗列了很多风口行业. 我相信,半导体芯片会是很重要的方向,但是不管路修得多好,都需要汽 ...

  4. C语言制作的讯飞语音合成、识别、唤醒标准调用接口DLL

    一 .导出函数: LIBRARY "XF_MSC" EXPORTS   addxy @1                //测试用的两数和函数   mystrcat @2      ...

  5. 【语音识别招聘_最新热搜语音识别人才招聘信息】-前程无忧

    学历要求:大专|工作经验:1年|公司性质:民营公司|公司规模:少于50人 职位信息 1.负责语音识别人工智能芯片推广与销售 2.负责客户的开拓.跟进及后期服务 3.负责市场信息的收集反馈及调研规划 4 ...

  6. 一文看懂人工智能语音芯片

    来源:内容来自「九鼎投资」,作者:孟伟.冯卓  ,谢谢. 行业概况 行业简介 人工智能芯片(简称AI芯片)是指含有专门处理人工智能应用中大量计算任务模块的芯片,属于集成电路和人工智能的交叉领域.自20 ...

  7. 达摩院技术创新全景|懂你的语音AI

    过去十年,语音AI从实验室走向应用,语音搜索.交互早已融入日常.本文将带你一览达摩院语音AI技术创新全景,一起感受能听.会说.懂你的语音AI. 当你在家中与智能音箱进行交互对话,当你使用天猫超市或菜鸟 ...

  8. 趋势前沿 | 达摩院语音 AI 最新技术大全

    作者:陈谦.邓憧.付强.高志付.胡凯.罗浩能.纳跃跃.田彪.王雯.鄢志杰.张仕良.张庆林.郑斯奇(以姓氏首字母排序) 过去十年,语音 AI 从实验室走向应用,语音搜索.交互早已融入日常.本文将带你一览 ...

  9. 我用废旧的Android手机做了个机器人

    码个蛋(codeegg) 第 986 次推文 作者:稚晖 链接:https://www.zhihu.com/people/zhi-hui-64-54 做...做成机器人? 比如像这样↓ 图片看不出来效 ...

最新文章

  1. 图片过渡效果一例 使用bitmapData操作
  2. php清空dns缓存文件,dns清空-windows刷新本地DNS缓存的几种方法
  3. Java黑皮书课后题第3章:**3.28(几何:两个矩形)编写一个程序,提示用户输入两个矩形中心的x坐标和y坐标以及矩形的宽度和高度,然后判断第二个矩形是在第一个矩形内,还是和第一个矩形重叠
  4. 【跃迁之路】【428天】程序员高效学习方法论探索系列(实验阶段185-2018.04.09)...
  5. 加投35000瓶原价茅台 天猫双11今晚8点开售
  6. 1.1.0-简介-P2-分布式系统的一些基本概念
  7. 【笔记】LR配置ODBC连接数据库进行参数化(mysql )未完待续
  8. 微服务架构:spring cloud之服务注册和服务发现
  9. iOS 一种连线题效果的实现
  10. 前端关系图谱插件_前端拓扑图插件选型对比
  11. linux(所有版本)下安装有道词典
  12. 实体消歧(链接到实体库)
  13. 选择FPGA,认识“她”。
  14. 机器人学习笔记——机器人概述
  15. 蓝鲸智云-腾讯给广大运维工作者的福利
  16. 训练自己的yolov5样本, 并部署到rv1126 <三>
  17. 【限时干货】数据圈火爆的数据产品文章全集
  18. npcap loopback adapter是什么意思_阜阳为什么叫阜阳,阜阳古时候叫什么,阜阳历史的由来...
  19. 使用React Native 和 微信小程序 编写的一款阅读类app ———《轻松一刻》
  20. 大数据智能交通信号灯 城市道路Easy Go

热门文章

  1. SQL注入靶场:辛巴猫舍
  2. The specified module could not be found的解决办法
  3. Xshell和Xftp官方家庭免费版
  4. qwin10如何删除linux系统,win10双系统安装卸载ubuntu
  5. 数据挖掘机器学习[六]---项目实战金融风控之贷款违约预测
  6. 趋势交易大师php,系统交易的初阶——趋势交易者路在何方?
  7. 区块链的奥卡姆剃刀在哪里?(1)
  8. oracle多维度查询数据
  9. ENSP实验超详细步骤(内涵小实验一个)
  10. 进程管理系统的设计与实现 SDUT 操作系统实训 项目 Java