[百度AI+讯飞云+socket通信]语音识别控制硬件点亮LED灯
Posted Weasker威斯克
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[百度AI+讯飞云+socket通信]语音识别控制硬件点亮LED灯相关的知识,希望对你有一定的参考价值。
项目流程
一.百度AI语音识别SDK下载与配置。
二.讯飞云语音唤醒SDK下载与配置。
三.使用socket通信传递信息。
四.编写开发板硬件驱动(led)。
五.项目整合。
六.整体思路
开发须知
- 该项目采用的语言为c语言
- 平台为fs4412开发板+ubuntu12
- 项目必备程序下载地址:百度网盘
提取码:ynm7
一、百度AI语音识别SDK下载与配置
1.进入百度AI官网 百度AI官网 ,注册账号,创建应用,领取中文普通话,记住key。
2.进入github链接下载百度AI通用API
3.下载的文件名为speech-demo-master.zip,解压并将下列选中文件删除,只留c和linux_c导入linux中
4.编辑asrmain.c
4.1我们将其放在/home目录下,路径为/home/speech-demo-master/,进入/home/speech-demo-master/res-api-asr/c,执行 vi asrmain.c
- 该程序的作用为:将名为16k.wav语音转换为文字保存在reasult字符数组中。
4.2.在150行左右,找到else并在其中添加进如下代码,该代码的作用为:
- 将本程序语音转换的文字,以去掉 ‘ [" ’ 开头和 ’ "] '结尾和其他杂项,只留下中文文本的形式存储在cmd字符串中
- 在当前目录下创建"cmd.txt"并将cmd字符串的内容写进"cmd.txt"中。
4.3保存并退出asrmain.c,在当前目录下执行 sh build_and_asr.sh,得到asrmain文件。
5.编辑ttsmain.c
5.1进入/home/speech-demo-master/res-api-tts/linux_c,执行 vi ttsmain.c
- 该程序的作用为:将保存在 text字符串的内容转换为音频result.wav。
5.2.在22行左右添加进如下代码,该代码的作用为:
- 将当前目录下"out.txt"文件中的内容读取并存放在text字符串中。
- 该程序将text字符串转换为result.wav音频
注意:以上两个文件中均有选择文件输出格式,如果执行完毕后输出的文件不是.wav,请注意修改
5.3保存并退出asrmain.c,在当前目录下执行 sh build_and_tts.sh,得到ttsmain文件。
二、讯飞云语音唤醒SDK下载与配置
1.进入讯飞云官网,创建应用
2.进入语音唤醒,设置唤醒词,提交。
3.前往SDK下载中心
4.选择平台和AI能力
5.网页自动开始下载sdk。在linux中创建mkdir /home/smart/awaken
路径,将压缩包放进该路径下,并执行unzip Linux_awaken_expxxxx.zip解压。
6. cd /home/awaken/samples/awaken_offline_sample
根据你的linux位数来选择哪一个文件,使用 uname -r
查看。
source xxbit_make.sh
三、使用socket通信传递信息
1、服务端server.c(放在开发板)
将从客户端client.c中接收的信息存进buf_recv后,与字符串cmd匹配,保存data的值,并将data写进led驱动节点(用来开关led灯,暂时不需要),
2.客户端client.c(放在linux)
从"cmd.txt"中读取指令,将指令发送到服务端,服务端处理完后返回整数数据recv_data,将out字符串的第recv_data项写进"out.txt"。
四.编写开发板硬件驱动(led)
根据服务端中写入/dev/led的值来选择led灯的开关。
五、项目整合
1.挂载开发板
-
在linux中安装nfs和tftp服务器。
sudo apt-get install nfs-kernel-server
sudo apt-get install tftp-hpa tftpd-hpa
安装失败的话,详情搜索ubuntu换源 -
在/home/linux下
mkdir tftpboot
把uImage和exynos44120-fs4412.dtb放进tftpboot中。
把rootfs放进/home/linux下存放
(在百度云下载) -
修改相关配置文件
vi /etc/exports
在尾部添加/home/linux/rootfs/ *(rw,sync,no_subtree_check,no_root_squash)
vi /etc/default/tftpd-hpa
set bootcmd tftp 41000000 uImage\\;tftp 42000000 exynos4412-fs4412.dtb\\;bootm 41000000 - 42000000
从tftpboot文件夹中下载uImage和exynos4412-fs4412.dtb到内从中,并从该内存启动。
set bootargs root=/dev/nfs nfsroot=192.168.2.104:/home/linux/rootfs rw console=ttySAC2,115200 ip=192.168.2.10 init=/linuxrc
挂载linux中的rootfs。
set gatewayip 192.168.2.1 /*网关*/ set ipaddr 192.168.2.10 /*开发板ip 同一网段内随便改*/ set netmask 255.255.255.0 /*子网掩码*/ set serverip 192.168.2.104 /*linux的ip*/
最后在uboot中输入
saveenv
保存配置信息。 -
重启(boot)成功挂载
-
加载led驱动
在linux中将led.ko复制到rootfs中,在开发板上输入
insmod led.ko
mknod /dev/led c 253 0
-
将server.c通过交叉编译(arm-linux-gcc server.c)产生的文件server移动到开发板上
./server 192.168.2.10 8888
启动服务器
2.编写shell脚本
在(一-4.3)步骤中,我们生成了asrmain文件,在(一-5.3)步骤中,我们生成了ttsmain文件,在(二-5)步骤中,我们创建了smart路径,并将awaken路径放在smart下。
- 将asrmain文件和ttsmain文件复制进smart下。
- 编辑smart.sh脚本
在smart路径下vi smart.sh
#!/bin/bash
while [ 1 ]
do
export LD_LIBRARY_PATH=$PWD/awaken/libs/x86/
var0=$PWD
var=$var0/awaken/bin
cd $var
./awaken_offline_sample
cd $var0
#aplay ./file.wav
arecord -D "plughw:0,0" -f S16_LE -r 16000 -d 5 -t wav 16k.wav
/*录制音频,保存为16k.wav*/
./asrmain
./client 192.168.2.10 8888
./ttsmain
aplay result.wav
done
3.在smart路径下运行sh smart.sh便可执行整个程序。
整体思路
-
在开发板上
./server 192.168.2.10 8888
开启服务端,准备接收信息。 -
./smart/awaken/bin/awaken_offline_sample
运行语音唤醒程序,对着麦克风说出唤醒词以开启脚本。
-
arecord -D "plughw:0,0" -f S16_LE -r 16000 -d 5 -t wav 16k.wav
录音并保存为16k.wav。
-
./asrmain
运行语音转文字程序,将16k.wav转换为文字并写到"cmd.txt"中。
-
./client 192.168.2.10 8888
开启客户端,读取cmd.txt的内容并将其发送到服务端。
-
服务端接收到客户端发送来的指令后,与其中的cmd字符串进行匹配,匹配后向led驱动节点发送data来控制灯的开关,并向客户端返回一个值。
-
客户端接收到值后,与其中的out字符串进行匹配,并将其写到"out.txt"中。
-
./ttsmain
执行文字转语音程序,将"out.txt"转换为语音文件result.wav。
-
aplay result.wav
播放result.wav,给用户反馈
以上是关于[百度AI+讯飞云+socket通信]语音识别控制硬件点亮LED灯的主要内容,如果未能解决你的问题,请参考以下文章