[百度AI+讯飞云+socket通信]语音识别控制硬件点亮LED灯

Posted Weasker威斯克

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[百度AI+讯飞云+socket通信]语音识别控制硬件点亮LED灯相关的知识,希望对你有一定的参考价值。

项目流程

一.百度AI语音识别SDK下载与配置。
二.讯飞云语音唤醒SDK下载与配置。
三.使用socket通信传递信息。
四.编写开发板硬件驱动(led)。
五.项目整合。
六.整体思路

开发须知

  1. 该项目采用的语言为c语言
  2. 平台为fs4412开发板+ubuntu12
  3. 项目必备程序下载地址:百度网盘
    提取码: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

  1. 该程序的作用为:将名为16k.wav语音转换为文字保存在reasult字符数组中。


4.2.在150行左右,找到else并在其中添加进如下代码,该代码的作用为:

  1. 将本程序语音转换的文字,以去掉 ‘ [" ’ 开头和 ’ "] '结尾和其他杂项,只留下中文文本的形式存储在cmd字符串中
  2. 在当前目录下创建"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

  1. 该程序的作用为:将保存在 text字符串的内容转换为音频result.wav。

5.2.在22行左右添加进如下代码,该代码的作用为:

  1. 将当前目录下"out.txt"文件中的内容读取并存放在text字符串中。
  2. 该程序将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.挂载开发板

  1. 在linux中安装nfs和tftp服务器。

    sudo apt-get install nfs-kernel-server
    sudo apt-get install tftp-hpa tftpd-hpa
    安装失败的话,详情搜索ubuntu换源

  2. 在/home/linux下 mkdir tftpboot

    uImageexynos44120-fs4412.dtb放进tftpboot中。
    rootfs放进/home/linux下存放
    (在百度云下载)

  3. 修改相关配置文件
    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保存配置信息。

  4. 重启(boot)成功挂载

  5. 加载led驱动
    在linux中将led.ko复制到rootfs中,在开发板上输入
    insmod led.ko
    mknod /dev/led c 253 0

  6. 将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下。

  1. 将asrmain文件和ttsmain文件复制进smart下。

  1. 编辑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便可执行整个程序。

整体思路

  1. 在开发板上./server 192.168.2.10 8888开启服务端,准备接收信息。

  2. ./smart/awaken/bin/awaken_offline_sample

    运行语音唤醒程序,对着麦克风说出唤醒词以开启脚本。

  3. arecord -D "plughw:0,0" -f S16_LE -r 16000 -d 5 -t wav 16k.wav

    录音并保存为16k.wav。

  4. ./asrmain

    运行语音转文字程序,将16k.wav转换为文字并写到"cmd.txt"中。

  5. ./client 192.168.2.10 8888

    开启客户端,读取cmd.txt的内容并将其发送到服务端。

  6. 服务端接收到客户端发送来的指令后,与其中的cmd字符串进行匹配,匹配后向led驱动节点发送data来控制灯的开关,并向客户端返回一个值。

  7. 客户端接收到值后,与其中的out字符串进行匹配,并将其写到"out.txt"中。

  8. ./ttsmain

    执行文字转语音程序,将"out.txt"转换为语音文件result.wav。

  9. aplay result.wav

    播放result.wav,给用户反馈

以上是关于[百度AI+讯飞云+socket通信]语音识别控制硬件点亮LED灯的主要内容,如果未能解决你的问题,请参考以下文章

讯飞云 API 语音听写 python3 调用例程

Unity语音识别(百度AI长语句语音识别&Unity原生短语语音识别)

调用百度语音AI实现语音的识别和合成

如何用python调用百度语音识别

基于百度AI开放平台的人脸识别及语音合成

百度ai 基于node 语音识别 音频文件类型转换