我在过去和百度语音打交道的这些日子,曾遇到过很多问题,比如识别慢、精度差。自身原因和设备原因太多,举步艰难。我觉得一个非音频内行的人很难进一步提升在这一块的性能与质量。

但现在,百度语音正不断地完善,已经推出多种我非常适用的新东西,例如:

上个月刚上线的 百度语音识别极速版

该项能力经我自己特定样本测试,可以提高识别速度约3~9倍,在上侧传送门的测试样例中,最慢的普通版和最快的极速版耗时甚至相差24倍,可见该极速版,可谓是目前普通版的最佳替代方案了!

这次我将为各位带来的百度开发套件的新星啦

远场语音开发套件!

这是一款很不错的产品,就像之前的人脸开发套件一样,他能有效帮助想要落地语音识别的企业和个人开发者们快速开发出属于自己的业务产品。

在本次产品的规格中,有三种配置可选,依次是:

6+1环形麦阵列

4mic线性阵列

3mic三角阵列

他们各有各的应用场景,为了更好地提升各位未来的产品,一定要听我说完他们的优点喔!

6+1环麦阵列

6+1环形阵列由6颗麦克风围绕一圈,中间分布一颗组成,可实现:

360°零死角环绕声场

增强GSC声源定位及波束形成效果

基于非线性消除的AEC技术

推荐用于智能音箱等智能家居产品。

像现在主流的天猫精灵、小米音箱,都是采用的环形6麦阵列喔!

还有像国外的amazon echo 采用了类似解决方案

他可以做到无死角的识别和声源定位喔!这还是值得玩一玩的~

线性4麦阵列

4mic阵列由4颗麦克风横向排列

阵型狭长占用空间小,可适配各种硬件结构设计。

推荐应用于智能电视、平板、以及空调、冰箱等传统白电产品。

三角麦克阵列

3mic阵列是由3颗麦克风三角形方式排列

支持双音区,兼顾主/副驾的语音交互需求

增强GSC声源定位及波束形成效果

基于非线性消除的AEC技术

3mic也支持声源定位喔

本次我所收到的是4mic阵列套件呢。他也是带有声源定位的哦~

废话不多说,开箱开始!

首先这次开发套件的外包装精致小巧,方方正正的外包装有种扑面而来的低调奢华与神秘感,不知道各位有没有看过四驱兄弟呢?

真是侧漏着一股神秘的气息呢!揭开它的面纱,看看里面吧

包装盒内非常简单明了,一张3折页,简单的说明书,开发套件本尊及数据线和电源线。

说明书简单介绍了包装内容清单、开发板的接口示意图、硬件连接指南、测试方式和软件开发环境搭建引导,比较简单。

我们来看一下开发套件本身吧,本套件使用的开发板是来自深圳市百能达电子有限公司和百度联手打造的RK3308开发板,拥有128M的ram和128M的flash。cpu采用的是微芯瑞的rk3308,4核ARM Cortex-A35。

wifi方面仅支持2.4g频段,蓝牙支持到4.0。

在本套件上额外有一片wifi天线,所以wifi质量杠杠的。

麦克风可兼容上方的3种阵列。

数据线是usb-micro,主要用于adb调试。

所配套的是输出为12V2A的电源。

远场语音识别套件之hello world(mac篇)

点亮设备,插上usb线,我们即将进入环境配置阶段。

本篇使用macOS majave 10.14.4做演示。

插入设备前,应当保证自己的系统内具备adb环境。在terminal内确认一下

至于如何安装,可参考百度搜索下的各种adb部署文章~

然后我们第一步首先要帮助开发套件连接到我们的wifi中来。

根据《百度大脑-远场语音开发套件-RK3308开发平台使用说明.pdf》中所提到的wifi配置,可以顺利完成入网。这里我做一遍操作

使用数据线连接设备后,我们可以用

adb devices命令查询到开发套件

随后键入 adb shell,使用命令行调试设备

cd /data/cfg 进入到wifi配置文件的目录下

通过vi命令打开配置文件

默认情况下家用路由器的话,只需要修改ssid(wifi名称)和psk(password key)即可。

若wifi有特殊情况,自行添加

key_mgmt=WPA-PSK // 加密方式

# key_mgmt=NONE // 不加密

修改完成后保存配置

随后输入

wpa_cli reconfigure

wpa_cli reconnect

指令激活重新联网

此时此刻,我们就完成了设备入网了。

语音识别、合成都需要用到网络,所以一定要正确入网喔!

(蓝牙我目前用不到,所以暂时没有继续去配置)

接着我们来尝试启动语音识别的demo程序,来看一看环境是否正常

所有sdk资源及相关文件都在根目录oem文件夹内

根据产品说明书,我们需要先启动 alsa_audio_main_service服务。

启动它之前,我们需要对目录权限进行相关修改赋予权限后进行启动

multi_4_2 指的是使用4阵列板声卡2。&后台启动

然后使用 ps -A检查一下服务是否正确启动在后台中

启动了alsa服务后,我们就可以去前往中启动demo了

样例程序文件位于/oem/BDSpeechSDK/sample目录中, 运行时依赖lib、resources、extern目录中的库及资源文件。

所以我们需要在启动时共享库

关于共享库可以看这里

我们运行指令

cd /oem/BDSpeechSDK/sample/wakeup

LD_LIBRARY_PATH=/oem ./e2e_wp_asr_test

试着喊一下”小度小度,今天天气怎么样”试试?

可以发现,这次套件采用了流式识别喔!附带中间结果的!

并且在3米远的位置,使用悄悄话的方式呼唤小度小度,也能成功唤醒!

可能在英语方面还有待加强吧~

(也许是我的英语太散装了)

关于语音合成

示例程序会将文本“456hello你好今天天气不错”传送给服务器,由服务器生成对应的语音,保存为pcm文件,用户可以进行播放体验。

在终端启动语音合成功能,生成文本“456hello你好今天天气不错”对应的语音。

cd /oem/BDSpeechSDK/sample/tts

LD_LIBRARY_PATH=/oem ./online_test

测试程序暂未提供用户传入合成文本生成语音的功能,用户可以参照样例程序自行开发。

运行结束后,会在当前目录下生成一个xxx.pcm,其中xxx是一个测试时的时间戳.在终端执行如下命令体验语音合成效果

aplay -t raw -c 1 -f S16_LE -r 16000 xxx.pcm

远场语音识别套件之交叉编译SampleCode

经过了近一周的努力,总算能够成功地将sample程序成功的交叉编译出来了。

本篇只针对如何成功交叉编译,解决我遇到的问题而设立的。重点是交叉编译的流程

这边我在mac上利用parallel部署了ubuntu虚拟机。为了重新确认一遍步骤,我重新装了一台机器并重头进行了一遍步骤。并故意重现了我这几天碰到过的错误及解决办法,可能可以帮助到各位。

这边需要以下内容:

rk3308的交叉编译工具链

gcc环境

ubuntu16.04 lts版

下载SDK

将rk3308板子内的oem内BDSpeechSDK目录复制到虚拟机内。可以进行adb pull /oem/BDSpeechSDK指令download下来

随后将sdk放到虚拟机。我这里就直接放在了home根目录

下载交叉工具链

rk3308的编译在标准linux上是编不出来的。我们这里需要用到交叉编译工具链,这是一个特殊的编译器,可以认为是在A平台编译出B平台才能运行的工具包。

然后将交叉编译链也复制到虚拟机里

按要求构建项目工程目录结构

基于目前创建日期为4月23日的quick_start.md中所述

mkdir my_specch_project

cd my_speech_projects

touch Makefile

mkdir src

touch src/main.cpp

创建如下的目录结构:

my_speech_project/

├── Makefile

└── src

└── main.cpp

我们到sample目录下,创建project文件夹并创建src目录,创建指定的文件

编写(copy) sample代码

sample/asr/wakeup/src中的e2e_wp_asr_test.cpp和在quick_start.md中都有相应的demo代码,这里我就直接将wakeup/src中的sample代码拷贝到这里替换main.cpp

这里先不做任何改动,就照搬就行。目前的第一目的是尽快正确交叉编译并成功在板子上跑起来

编写(copy) Makefile代码

makefile可以帮助工程快速连接编译,他能省掉很多功夫。由于本人不是纯正的c++开发工程师,所以这里copy了quick_start.md中的makefile代码

#make src=src/***.cpp

FILE_NAME=$(src)

SYS_ROOT=$(sr)

TARGET=$(basename $(notdir $(FILE_NAME)))

#build

CXX=arm-rockchip-linux-gnueabihf-g++

INCLUDE=-I../../include -I../../include/ASR -I../../include/TTS -I../../extern/include -I../../extern/include/longconnect

CPPFLAGS=-Wall -fopenmp -O2 -fPIC -g -D__LINUX__ -Wl,-rpath=../../lib,--disable-new-dtags,--copy-dt-needed-entries -Wl,-rpath=../../extern/lib,--disable-new-dtags -L../../lib -lBDSpeechSDK -L../../extern/lib -lzlog -llongconnect -lnghttp2 -lcurl -lssl -lcrypto -lz -lAudioEncoder -liconv -lAudioDecoder -lhttpDNS -lbd_alsa_audio_client -lgomp -lrt -ldl -lpthread

ifneq ($(strip $(SYS_ROOT)),)

MY_SYS_ROOT=--sysroot=$(SYS_ROOT)

endif

SRC_PATH=./src

SRC_FILE=$(shell cd $(SRC_PATH)&&echo *.cpp)

SRC=$(foreach n,$(SRC_FILE),$(SRC_PATH)/$(n))

$(TARGET):$(SRC)

$(CXX) -o $(TARGET) ./$(FILE_NAME) $(MY_SYS_ROOT) $(INCLUDE) $(CPPFLAGS)

#clean

LIST_ALL_FILES=$(shell find . -maxdepth 1)

SOURCES=. ./Makefile ./src

RM_FILES=$(filter-out $(SOURCES),$(LIST_ALL_FILES))

clean:

-rm -rf $(RM_FILES)

这里容易出现的第一个问题:

照搬后由于缩进,当你ctrlCV时,极有可能将缩进一起复制过来,所以这里需要将代码缩进都去除,保持整洁。在后面编译时我会演示出现缩进的错误提示,这里我继续保持原有的格式。

尝试编译

在quick_start.md中编译部分,要求我们配置完成后,在Makefile所在的目录执行

export PATH=path-to-cross-compiler-root/host/bin:$PATH

make FILE_NAME=src/main.cpp SYS_ROOT=path-to-cross-compiler-root/host/arm-rockchip-linux-gnueabihf/sysroot

这里 path-to-cross-compiler-root需要替换成我们工具链的根目录/bin即可

/host其实就是我们工具链的根目录

那在我这样的目录环境,等效替换成了

export PATH=/home/parallels/rk3308_arm_tool_chain/bin:$PATH

make FILE_NAME=src/main.cpp SYS_ROOT=/home/parallels/rk3308_arm_tool_chain/arm-rockchip-linux-gnueabihf/sysroot

这里会出现很多问题。如果上方的操作跟我一样,那你也很有可能碰到这些问题!

错误1. Makefile:18

由于特殊缩进导致的makefile编译错误

错误具体提示如下

经过我多次测试,我打了很多空行也会错在第18行这里。后来解决的方法就是将缩进全部去除就可以了!

错误2.undefined reference

消除了上方的缩进后再次进行编译,会出现新的提示:

这个错误是因为缺少alsa的so库导致的。这个错误也被写在了quick_start.md中

如果遇到类似 ld: 找不到 -lbd_alsa_audio_client的错误,请开发者自行从官网下载alsa服务包或自行从开发套件中/ome/目录下提取相关库放到工程下参与链接即可。

这边我们从oem目录中pull一个文件下来。他在/oem目录下,名为libbd_alsa_audio_client.so。将它复制到BDSpeechSDK/lib下,这个目录专门放外部依赖的库文件,这个也放这里吧。

然后再次尝试编译,没有任何错误提示了,编译通过

然后在Makefile的同目录上就可以看到一个main的可执行程序了。这个程序是可以在rk3308的环境下执行的。将它通过adb放到板子里。这里提醒下,tmp目录在断电后会清洗。

(这里省略adb push ./main /tmp的过程)

尝试adb下打开main

我们的main也依赖于alsa的服务,所以在这里直接将alsa设置成开机启动得了。

/oem/Rklunch.sh 这个文件就是rk3308板子开机后会跑的一个执行文件,我们可以把所有需要在开机时启动的东西,都写在这个文件里,这样板子下次就会帮我们自动启动alsa了

这里新增了几行代码,主要是改一下目录权限,然后运行alsa服务

但是这一次还是没有启动的,需要自己手动启动一下alsa。启动方式就是上面5句话。

这里也可以通过reboot指令重启板子,但是tmp刚放进来的main文件就被洗掉了,但可以检验开机启动是否正常,这个自行权衡吧~

启动alsa后我们去启动main

cd /tmp/

LD_LIBRARY_PATH=/oem:/oem/BDSpeechSDK/lib:/oem/BDSpeechSDK/extern/lib ./main

如果看到这个输出,那么我们离成功不远了。但是其中有一句输出影响了整个程序。这不是编译问题!

错误3. dat file invalid

error:5, domain:38, desc:Wakeup: dat file invalid., sn:

这里意思是没成功载入dat文件。

我们看一下代码。在wakeup_config函数中,可以看到它配置dat文件的路径,是../../resources/esis_resource.pkg

只要把这个层级改成绝对路径,或者把路径改短 ./esis_resource.pkg,并把pkg文件拷贝过来即可

然后重新编译,adb push到tmp下,这里省略

记得把dat文件也push到tmp下,如果跟我的改法一样的话

然后再次执行main

可以发现唤醒进入回调激活了引擎加载和启动唤醒。

我们这时候可以尝试使用了.

小度小度,今天上海天气如何?

至此已经完成了demo项目工程的交叉编译工作。

这只是默认sample程序编译出来的效果喔,还有很多隐藏功能带解锁。

这是我7天来的努力成果,如果这篇文章对你有所帮助,请给一个赞吧~

作者:周施乐

远场语音识别套件评测相关推荐

  1. 百度远场语音识别套件-开箱评测

    远场语音识别套件之开箱 很荣幸,在2019年我依旧在百度AI平台下茁壮成长,这次收到了来自百度的测试邀请,我将有机会拿到最新的前沿产品~为各位献上来自前线的战况~ 我在过去和百度语音打交道的这些日子, ...

  2. 远场语音识别错误率降低30%,百度提基于复数CNN网络的新技术

    [12月公开课预告],入群直接获取报名地址 12月11日晚8点直播主题:人工智能消化道病理辅助诊断平台--从方法到落地 12月12日晚8点直播:利用容器技术打造AI公司技术中台 12月17日晚8点直播 ...

  3. 远场语音识别,性能提升 30%,百度怎么做到的?

    导语:彻底端到端 ~ "今天我保守报一个30%以上的性能提升,很保守.未来这个技术会再次大幅刷新人们对远场语音的认知.我自己的判断是,三年以内远场语音技术的识别率将达到近场识别率,因为有了这 ...

  4. 后端根据百度地图真实路径距离_远场语音识别错误率降低30%,百度提基于复数CNN网络的新技术...

    [12月公开课预告],入群直接获取报名地址 12月11日晚8点直播主题:人工智能消化道病理辅助诊断平台--从方法到落地 12月12日晚8点直播:利用容器技术打造AI公司技术中台 12月17日晚8点直播 ...

  5. 远场语音识别面临的瓶颈与挑战

    语音交互正在被视为用户在未来很多场景下的主要流量入口之一.因此,寻求可靠有效的远场语音技术突破变成了当下工业界和学术界的迫切需求.一个经典的语音识别系统包含麦克风信号采集模块.信号处理模块以及语音识别 ...

  6. 长虹新一代人工智能电视Q6A、Q6K发布,搭载远场语音识别

    2018年10月27日,在长虹建业60周年战略转型暨产品发布会上,长虹新一代人工智能电视新品--CHiQ电视Q6A.Q6K首次亮相,引起业界重大关注. 长虹本次推出的CHiQ电视新品Q6A.Q6K系列 ...

  7. 百度对数据的要求很高,智能音箱的难点是远场语音识别

    今年刚入职百度的智能生活事业群组小度硬件平台总经理钱晨首次面对媒体,介绍了百度新近推出的新品小度PLAY的设计理念. 值得注意的是,就在上周百度AI开发者大会上景鲲宣布推出新品小度PLAY后,天猫精灵 ...

  8. HomePod之远场语音识别增强

    本文参考自 Machine Learning Journal:https://machinelearning.apple.com/2018/12/03/optimizing-siri-on-home ...

  9. 傅盛谈AI场景化:猎户星空远场语音识别采用率业内第一

    中新网10月30日电 10月28日,猎豹移动CEO傅盛参加新出海行业峰会,发表题为<后互联网时代 "中国模式"弯道超车>的演讲,回顾了猎豹移动从工具到内容的全球化历程, ...

最新文章

  1. python抓取简单网页_【Python3 爬虫】01_简单页面抓取
  2. 金融产品京东金融2015年战略主攻三大方向:股权众筹、农村金融和校园金融...
  3. PyTorch 实现经典模型6:RCNN (Fast RCNN, Faster RCNN)
  4. Redis进阶-布隆过滤器
  5. Silverlight BUG
  6. mysql 表 地图_报表中的地图怎么做?
  7. 多思计组原理虚拟实验室_先睹为快!汽院实验室组团来亮相_搜狐汽车
  8. CSS3那些不为人知的高级属性
  9. ubuntu之间传文件
  10. Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (1) - 特性概述
  11. win7 path环境变量被覆盖了怎么恢复_系统小技巧:还原Windows10路径环境变量
  12. linux脚本运行出现bc,Linux硬件管理命令---bc
  13. 致远OA任意管理员登陆漏洞分析
  14. 开发QQ桌球瞄准器(1):桌球瞄准器介绍与使用方法
  15. Python系列9——类和对象(3)
  16. QML Label/Text 文本居中显示
  17. 常用单片机模块(一)
  18. 微信公众号创建菜单注意问题
  19. java学习——方法
  20. 2094 找出 3 位偶数

热门文章

  1. 7-27 Codeforces Round #499 (Div. 2)
  2. 【Quartz】解密properties配置文件中的账号密码
  3. [BZOJ4873][六省联考2017]寿司餐厅(最大权闭合子图)
  4. Sikuli -- 创新的图形化编程技术
  5. 如何入行Android开发
  6. Bailian2734 十进制到八进制(POJ NOI0113-45)【进制】
  7. HDU2547 无剑无我【水题】
  8. CCF NOI1021 发放奖金
  9. UVA11292 HDU1902 POJ3646 The Dragon of Loowater【贪心】
  10. 数字敏感与数字的研究