【评测报告】语音识别远场开发套件
近年来,人工智能话题越来越热,受到了更多人的关注。百度从2010年开始人工智能技术开发,到现在已有8年多的时间,目前百度AI技术专利在中国甚至世界上都是名列前茅。
我大概在18年末开始接触到百度AI社区,通过使用文字识别、图像识别等百度AI技术,逐步感受到了AI技术的强大,同时也感觉到了百度AI技术的进步:AI技术领域范围越来越广泛,识别速度越来越快,识别准确度越来越高。这次,有幸收到百度远场语音开发套件的测评邀请,作为一个非测试专业人员,这里我就自己的百度远场语音开发套件使用过程及在使用过程中遇到的问题和大家分享一下,如有错误,请多多指教。
一、开箱
本次收到的是7mic阵列套件。
整个包装很简洁,就是一个白色的长方形盒子,正上方印着“百度大脑”标识。
打开盒子后,首先映入眼球的是一份“百度语音远场开发套件说明书”,里面介绍了硬件购成、开发资料等信息。
拿出说明书,看到的是一个长方形的盒子,里面放着电源适配器、USB线。
拿出盒子后,便看到了百度远场语音开发板主体了,被白色泡沫保护的很好。
接下来,一起具体看看远场开发板的一些细节:
最后,看看百度远场语音开发套件全家福:
百度大脑远场语音开发套件,基于 RK3308 开发平台打造,提供的麦克风选型适用于智能音箱、智能 家电、车载设备场景,整个开发套件包含麦克风阵列板、开发板、喇叭以及符合声学要求的腔体, 支持声源定位、噪声消除等信号处理算法,5 米内有效拾音,支持远场唤醒、远场识别、语音合成能 力,使语音开发评估更简便、更高效。
RK3308 开发平台,采用 64 位 4 核 ARMCortex-A35 处理器 RK3308 系列,整合了高性能 CODEC(8 通 道 ADC + 2 通道 DAC),直接支持最大 8 通道数字 MIC 阵列+回采,实现高精度声音采集及分析,是 一款集多种功能为一体针对音频类应用的 AI+IoT 开发平台。 丰富的操作系统/服务支持,助力方便快速进行 AIOT 开发和产品应用。
关于百度远场语音开发套件的更多介绍,可以参考这个链接:https://aim.baidu.com/product/b226a947-4660-4e27-83b4-877bf63b8627
二、开发测试
本次测试环境为Ubuntu 16.04 64ibt 虚拟机,开发平台是RK3308。
登陆开发板后,可以进入/oem 目录,里面有开发相关说明以及一些测试示例。
(一)连接设备
1、安置在 adb 环境:sudo apt install adb
snow@snow-machine:~$ sudo apt install adb
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
snapd-login-service xdg-desktop-portal xdg-desktop-portal-gtk
使用'sudo apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
android-libadb android-libbase android-libcutils android-liblog
下列【新】软件包将被安装:
adb android-libadb android-libbase android-libcutils android-liblog
升级了 0 个软件包,新安装了 5 个软件包,要卸载 0 个软件包,有 6 个软件包未被升级。
需要下载 141 kB 的归档。
解压缩后会消耗 428 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 android-liblog amd64 1:6.0.1+r16-3 [16.6 kB]
获取:2 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 android-libbase amd64 1:6.0.1+r16-3 [9,014 B]
获取:3 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 android-libcutils amd64 1:6.0.1+r16-3 [18.7 kB]
获取:4 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 android-libadb amd64 1:6.0.1+r16-3 [53.2 kB]
获取:5 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 adb amd64 1:6.0.1+r16-3 [44.0 kB]
已下载 141 kB,耗时 2秒 (48.3 kB/s)
正在选中未选择的软件包 android-liblog。
(正在读取数据库 ... 系统当前共安装有 215288 个文件和目录。)
正准备解包 .../android-liblog_1%3a6.0.1+r16-3_amd64.deb ...
正在解包 android-liblog (1:6.0.1+r16-3) ...
正在选中未选择的软件包 android-libbase。
正准备解包 .../android-libbase_1%3a6.0.1+r16-3_amd64.deb ...
正在解包 android-libbase (1:6.0.1+r16-3) ...
正在选中未选择的软件包 android-libcutils。
正准备解包 .../android-libcutils_1%3a6.0.1+r16-3_amd64.deb ...
正在解包 android-libcutils (1:6.0.1+r16-3) ...
正在选中未选择的软件包 android-libadb。
正准备解包 .../android-libadb_1%3a6.0.1+r16-3_amd64.deb ...
正在解包 android-libadb (1:6.0.1+r16-3) ...
正在选中未选择的软件包 adb。
正准备解包 .../adb_1%3a6.0.1+r16-3_amd64.deb ...
正在解包 adb (1:6.0.1+r16-3) ...
正在处理用于 libc-bin (2.23-0ubuntu11) 的触发器 ...
正在处理用于 man-db (2.7.5-1) 的触发器 ...
正在设置 android-liblog (1:6.0.1+r16-3) ...
正在设置 android-libbase (1:6.0.1+r16-3) ...
正在设置 android-libcutils (1:6.0.1+r16-3) ...
正在设置 android-libadb (1:6.0.1+r16-3) ...
正在设置 adb (1:6.0.1+r16-3) ...
正在处理用于 libc-bin (2.23-0ubuntu11) 的触发器 ...
2、查看安装结果:adb version
snow@snow-machine:~$ adb version
Android Debug Bridge version 1.0.32
Revision debian
3、查看硬件是否连接:adb devices
snow@snow-machine:~$ adb devices
List of devices attached
e9901a0bf326eb31 device
4、连接硬件:adb shell
snow@snow-machine:~$ adb shell
/ # ls
bin lib mnt root sys usr
data lib32 oem run tmp var
dev linuxrc opt sbin udisk
etc media proc sdcard userdata
(二)WIFI连接
1、进入/data/cfg 进行wifi配置:cd /data/cfg
使用 vi 编辑 wpa_supplicant.conf:vi wpa_supplicant.conf
在设置好 wpa_supplicant.conf 后,可以通过如下命令来重新联网:
wpa_cli reconfigure
wpa_cli reconnect
注意:第一次操作,调用 wpa_cli reconfigure 命令出错:
/userdata/cfg # wpa_cli reconfigure
Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
切换联网命令:wpa_supplicant -B -i wlan0 -c
/userdata/cfg # wpa_supplicant -B -i wlan0 -c
/data/cfg/wpa_supplicant.conf
Successfully initialized wpa_supplicant
/userdata/cfg # wpa_cli reconfigure
Selected interface 'wlan0'
OK
/userdata/cfg # wpa_cli reconnect
Selected interface 'wlan0'
OK
虽然显示操作成功,但是查看网络连接,发现还是未成功连接(可以看到wlan0并未显示IP地址):
/userdata/cfg # ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
p2p0 Link encap:Ethernet HWaddr C6:60:34:AC:2C:AA
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
wlan0 Link encap:Ethernet HWaddr C4:60:34:AC:2C:AA
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:1 errors:0 dropped:0 overruns:0 frame:0
TX packets:1 errors:0 dropped:12 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:8555 (8.3 KiB) TX bytes:7900 (7.7 KiB)
重启系统(如果一次不行,可以进行多次重启),最后成功了(可以看到wlan0显示了分配的IP地址-192.168.1.110):
/userdata/cfg # reboot
/ # ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
p2p0 Link encap:Ethernet HWaddr C6:60:34:AC:2C:AA
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
wlan0 Link encap:Ethernet HWaddr C4:60:34:AC:2C:AA
inet addr:192.168.1.110 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:11 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2234 (2.1 KiB) TX bytes:1481 (1.4 KiB)
(三)运行语音识别示例
进入/oem目录,查看语音能力相关文件: cd oem
/oem # ls
1K.wav libbd_alsa_audio_client.so
BDSpeechSDK libbd_audio_vdev.so
RkLunch.sh lost+found
alsa_audio_main_service readme.txt
config_open_platfrom_rk3308_4_2.lst setup.sh
environment.md version
libbdSPILAudioProc.so
查看文档说明:cat readme.txt
libbdSPILAudioProc.so
md5:29669122675b50bb21f738014dc04fe5
libbd_audio_vdev.so
md5:8184b0a37c4037cc2264fee6518ed8a8
libbd_alsa_audio_client.so
md5:ec46e6c27734a1c684b1ab8fab762fe6
集成和使用说明:
1. push库到设备上
adb push lib/libbdSPILAudioProc.so /data
adb push lib/libbd_audio_vdev.so /data
adb push lib/libbd_alsa_audio_client.so /data
adb push conf/config_open_platfrom_rk3308_4_2.lst /data
adb push setup.sh /data
adb push bin/alsa_audio_main_service /data
adb push bin/alsa_audio_client_sample /data
adb shell sync
2. 创建目录,修改权限
adb shell;cd /data
chmod +x alsa_audio_*
chmod +x setup.sh
3. 运行main service
./setup.sh
./alsa_audio_main_service multi_4_2 &
hw:0,0是对应的录音设备的声卡号和device号,也可以配置asound.conf,使用逻辑pcm设备名
4. 运行app,比如duer_linux, 需要添加/data目录到duer_linux的动态库链接路径中
也可以运行我们的sample程序
./alsa_audio_client_sample
在当前目录下会保存经过信号处理的录音文件dump_pcm.pcm,是双声道,16K,小端,16bit位深音频。
保存原始录音数据的方法:
启动录音前运行:
mkdir -p /data/local/aw.so_profile
touch /data/local/aw.so_profile/dump_switch
touch /data/local/aw.so_profile/dump_switch_wakets
mkdir -p /data/local/aud_rec/
chmod 777 /data/local/aud_rec/
看看配置文件的目录
AUDCAP_DBG_SWICH "/tmp/aw.so_profile/"
AUDCAP_DBG_FLDER "/tmp/aud_rec/"
AUDCAP_DBG_SAVED "/tmp/aud_rec/last/"
在/data/local/aud_rec目录下会保存4路麦克风数据和2路参考数据,一路识别数据,一路唤醒数据。
文件的数据格式都是: 16KHz、小端、16bit、单声道
根据文档,相关文件应该在data目录下,但是实际操作发现,相关文件在oem目录下,故进入oem目录,执行操作:
主要是运行以下四个命令(该命令是修改权限,启动 alsa_audio_main_service服务,根据说明书,使用语音识别功能需要先启动alsa服务):
chmod +x alsa_audio_*
chmod +x setup.sh
./setup.sh
./alsa_audio_main_service multi_4_2 &
执行上述命令后,可使用ps命令检测alsa服务是否正确启动:ps –A|grep alsa
根据说明书,BDSpeechSDK 目录下的sample目录中包含语音识别示例,由于语音识别运行时依赖lib、resources、extern目录中的库及资源文件,所以我们需要在启动时共享库。
关于共享库可以看这里:https://www.cnblogs.com/mylinux/p/4955448.html
进入目录,运行语音识别示例:
cd /oem/BDSpeechSDK/sample/wakeup
LD_LIBRARY_PATH=/oem ./e2e_wp_asr_test
喊“小度小度,今天天气怎么样”的识别结果:
可以发现,本开发套件采用了流式识别,附带中间结果!
(四)语音识别效果测试
通过距离远近,语速快慢,中间是否有隔离物(隔离物为电脑桌,显示屏)等方式,对本开发套件进行了一次粗略的测试:
一米处:
有隔离:“一米一次唤醒测试”
有隔离,语速较快:“一米二次唤醒测试”
有隔离,语速较快:“今天天气怎么样”
无隔离,正常语速:“一米三次唤醒测试”
无隔离,语速较快:“今天天气怎么样”
2米处:(无隔离,正常语速)
“两米一次唤醒测试"
“两米二次唤醒测试”
“天天气比较凉爽”
3米处:(无隔离,正常语速)
“三米一次唤醒测试”
“三米二次唤醒测试”
“听说明天有台风”
5米处:(无隔离,正常语速)
“五米一次唤醒”
“五米二次唤醒”
“台风来了怎么办”
6米处:(无隔离,正常语速)
注:首先需要较大声唤醒小度,唤醒后,可识别正常音量的声音:
“六米一次唤醒”
“六米二次唤醒”
“今天天气好晴朗”
测试结果:
经过上述的语音识别测试,可以发现,本套件在5米内可以达到比较良好的唤醒、识别效果,超过5米后,唤醒、识别效果下降比较明显。
另外,对于一般性的用语,识别相当准确(即使达到6米,也能比较准确的识别),但是对于读音相近的词语(“一米”-“玉米”,“两米”-“杨幂”等),识别准确性就有点差了(也可能跟发音有关)。
发音源跟套件之间是否有隔离物(非完全隔离),对识别的影响不是很大(没有读音的影响大)。
语速不是很快的情况下,一般也能正常识别。
总体而言,对识别结果影响较大的,除了距离外,就是读音相近的词语(发音)了。
(五)蓝牙连接
输入命令 :bt_realtek_start 即可启动蓝牙:
打开电脑的蓝牙,可以发现名为realtek_bt的蓝牙设备,尝试进行配对:
配对成功:
配对成功后,就可以用蓝牙进行音乐播放等操作了。
断开蓝牙连接:
测试发现的问题:
1、初次打开蓝牙播放音频时,声音过大,调整声音后,又发现最大声音音量有的小了。
2、虽然本套件蓝牙可以一次性连接多个蓝牙(我尝试了连接两个蓝牙设备),但是,两个连接成功后,当用一个蓝牙设备播放音乐,然后停止,再用另一个蓝牙设备播放音乐时,发现播放失败,只能用之前的那个蓝牙设备播放音乐。
(六)录音、播放音频测试
查看tmp目录内容:cd tmp
进行录音:arecord -D hw:2,0 -c 8 -r 16000 -f S16_LE /tmp/test.wav
结束录音后,查看目录文件信息:
使用 aplay 命令就可以播放录音文件:aplay test.wav
录音效果还是不错的。
(七)语音合成测试
示例程序会将文本“456hello你好今天天气不错”传送给服务器,由服务器生成对应的语音,保存为pcm文件,用户可以进行播放体验。
进入语音合成示例目录: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
(八)交叉编译
1、下载SDK
将rk3308板子内的oem内的BDSpeechSDK目录复制到虚拟机内。可以进行adb pull /oem/BDSpeechSDK指令download下来,随后将sdk放到虚拟机。
我这里就直接将整个/oem 目录下载放到了“下载”目录。
2、交叉工具链:
链接: https://pan.baidu.com/s/1lEuFlAqfxhAsMQGmFJswTA
提取码: we2t
rk3308的编译在标准linux上是编不出来的。我们这里需要用到交叉编译工具链,这是一个特殊的编译器,可以认为是在A平台编译出B平台才能运行的工具包。
我这里将交叉编译链复制到虚拟机的桌面上了。
3、按要求构建项目工程目录结构
mkdir myProject
cd myProject
touch Makefile
mkdir src
touch src/main.cpp
创建如下的目录结构:
myProject/
├── Makefile
└── src
└── main.cpp
编写(copy) sample代码
目录sample/wakeup/src中的e2e_wp_asr_test.cpp中有相应的demo代码,这里我就直接将wakeup/src中的sample代码拷贝到这里替换main.cpp
这里先不做任何改动,就照搬就行。目前的第一目的是尽快正确交叉编译并成功在板子上跑起来。
编写(copy) Makefile代码
makefile可以帮助工程快速连接编译,它能省掉很多功夫。由于本人不是纯正的c++开发工程师,所以这里copy了 sample/wakeup/ 中的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)
尝试编译:
配置完成后,需要在Makefile所在的目录执行:
export PATH=/home/snow/桌面1/rk3308_arm_tool_chain/bin:$PATH
make FILE_NAME=src/main.cpp SYS_ROOT=/home/snow/桌面1/rk3308_arm_tool_chain/arm-rockchip-linux-gnueabihf/sysroot
上述语句中的 /home/snow/桌面1/rk3308_arm_tool_chain 代表着工具链rk3308_arm_tool_chain的根目录/bin,如果路径填写错误,会出现如下错误:
make: arm-rockchip-linux-gnueabihf-g++:命令未找到
可以进入rk3308_arm_tool_chain 目录 ,使用pwd命令获取rk3308_arm_tool_chain 的路径:
使用正确的路径,重新编译:
export PATH=/home/snow/桌面/rk3308_arm_tool_chain/bin:$PATH
make FILE_NAME=src/main.cpp SYS_ROOT=/home/snow/桌面/rk3308_arm_tool_chain/arm-rockchip-linux-gnueabihf/sysroot
如果出现上述错误,说明缺少alsa的so库,我们可以从oem目录中pull一个文件下来。他在/oem目录下,名为libbd_alsa_audio_client.so。将它复制到BDSpeechSDK/lib下,这个目录专门放外部依赖的库文件,这个也放这里吧。
然后再次尝试编译,没有任何错误提示了,编译通过。
编译成功,发现工程目录下多了一个main文件,这就是我们编译好的可执行程序了。
将main可执行程序复制到/tmp目录(tmp目录在断电后会清空)下:adb push ./main /tmp
运行程序:
LD_LIBRARY_PATH=/oem:/oem/BDSpeechSDK/lib:/oem/BDSpeechSDK/extern/lib ./main
出现错误:
error:5, domain:38, desc:Wakeup: dat file invalid., sn:
这里意思是没成功载入dat文件。
我们看一下代码。在wakeup_config函数中,可以看到它配置dat文件的路径,是../../resources/asr_resource/esis_resource.pkg
只要把这个层级改成绝对路径,或者把路径改短 ./esis_resource.pkg,并把pkg文件拷贝过来即可。
然后重新编译,adb push到tmp下,
还是这个错误,那是因为虽然改了文件路径,但是我们还没有把 esis_resource.pkg 也push到tmp文件夹里,进入 /home/snow/下载/oem/BDSpeechSDK/resources/asr_resource 文件夹,执行 adb push ./esis_resource.pkg /tmp:
再次执行,出现错误:error:-1, domain:10, desc:alsa_audio_client_open failed, sn: ,
因为我们的main也依赖于alsa的服务,所以需要开启alsa服务:
cd /oem
chmod +x alsa_audio_*
chmod +x setup.sh
./setup.sh
./alsa_audio_main_service multi_4_2 &
或者可以将上述语句写入 /oem/Rklunch.sh 文件,这个文件是rk3308板子开机后会跑的一个执行文件,我们可以把所有需要在开机时启动的东西,都写在这个文件里,这样板子下次就会帮我们自动启动alsa了。
执行成功后,再次运行main程序:
cd /tmp
LD_LIBRARY_PATH=/oem:/oem/BDSpeechSDK/lib:/oem/BDSpeechSDK/extern/lib ./main
执行成功。
(九)交叉编译-语音合成
按照上面的方法,我们可以编译一下语音合成示例(可以把合成的文字改为自己喜欢的,我这里就改成了“Hello World,今天时七夕情人节,中国的传统节日!”,有条件的,可以尝试输入文本,再合成语音)。
编译程序:
上述警告可以忽略。
把编译完成的可执行文件下载到开发板并运行:
出现错误,仔细查看源代码,发现main 函数中需要引用配置文件speech_sdk_log.conf,但路径为 ../../resources/speech_sdk_log.conf:
并将speech_sdk_log.conf文件push到/tmp路径下:
重新执行:
LD_LIBRARY_PATH=/oem:/oem/BDSpeechSDK/lib:/oem/BDSpeechSDK/extern/lib ./main
执行成功,可以看到/tmp目录多了一个6832.pcm文件,运行命令 aplay -t raw -c 1 -f S16_LE -r 16000 6832.pcm,执行后,就能播放女生版的语音内容了。
三、产品建议
经过一个星期左右的测试,发现百度远场语音开发套件在唤醒、语音识别方面效果还是比较出色的,整体上也是比较准确的,不过还需要在发音相似的词语方面多加训练,以达到更好的识别效果。
此外,在产品的功能上,经过这段时间的使用,发现还是存在一些不足,这里就个人的使用感受提一些建议:
1、 唤醒词可以自定义
语音控制未来一定会成为家庭的控制中心,一定会是很普遍的存在,这样的话,能够自定义唤醒词就很有必要了,否则,不管去哪里,听到的都是诸如“小度小度”这样的声音,这个画面真的不敢想。。。
2、 提升音质,语音多样化
参考市面上的一些智能语音音箱,发现他们基本都能够用语音进行购物、查询信息、播放音频资源等功能,还有的能够用语音控制家里其他的智能家电。
但是,这些智能语音音箱虽然能够提供较为丰富的内容资源,却基本上有一个共同的弱点:回答的声音一成不变,音质较差,有的甚至连听它回答都是一种折磨。
要知道,在语音交互中,如何回答、回答是否准确对语音交流的影响是很大的。现在大部分厂商都在“回答准确”这个方面下功夫,却忽略了“如何回答”这个因素。两个人交流,如果一个人的声音永远一个调调、没有丝毫的情感波动,这样的交流怎么能长久维持呢?
因此,我觉得可以在语音这方面花点功夫:比如,可以让用户自主选择什么样的声音(男生、女生、童声、女主播、幽默的等种种风格的声音);此外,可以在回答问题的时候,带有一定的情感(就像以前流行的晚间情感电台主播那样),如果回答的内容是正面的、积极的,可以带上一种轻松欢快的语调,如果回答的内容是负面的、消极的,可以带上一种低沉伤感的语调,这样的回答更容易引起用户的共鸣的,也会让用户更加认可。
说穿了,其实可以把智能语音音箱里的“小度”做成一个语音养成系统,让“小度”能够陪伴主人成长,随着主人的不断使用,逐步解锁各种能力(可以选择不同的唤醒词,可以采用不同风格的声音,或者让声音带上更多的情绪等),让“小度”逐渐人性化、个性化,这样才能让更多的人去使用它,得到跟多的人的喜欢。人们喜欢的,肯定是一个能够陪着主人苦、陪着主人笑、偶尔也会调皮捣蛋的古灵精怪的“小度”,而不是一个冷冰冰的机械化声音。
3、 完善语音交互功能
好像近期厂商都倾向于推出带屏幕的智能语音音箱,个人感觉,这个方向好像走偏了。如果想要提供更高质量的语音交互功能,那么应该花更多的精力在搜索结果的个性化匹配方面上。通过不断的练习,让音箱能够更加“理解”用户的话语意思, 给用户提供更加准确的结果,而不是提供一个屏幕,让用户去看屏幕选择。提供屏幕,反而进一步减弱的语音交互能力。再说了,一个5寸、10存的屏幕,放在一个3、4米远的地方,用户真的能够看的清显示的内容吗?屏幕又能显示多少用户真正需要的内容呢?
4、 声音识别
在未来,语音交互肯定是一件很平常的事,那么谁能对智能语音音箱发出命令、智能音箱到底听谁的命令就显得很关键了。就好比今天的手机,不是谁都能任意打开手机使用手机的,只有通过密码、指纹等方式验证的人才能打开手机使用手机。
同一个道理,在语音交互下,肯定需要通过一种方式对发声源进行识别,从而判断是否应该对该声音进行回复。否则的话,任何一个人都能通过唤醒词唤醒智能音箱,而从控制整个智能家电,那是很危险的一件事。
在语音交互中,通过声音识别用户,而从判断是否对该声音进行回复,这个功能是很有必要,也非常重要的。
5、 提供更加丰富的家电控制能力
智能语音音箱,除了能回答用户的问题外,应该还能通过语音交互功能来控制家电。如果能够对家电进行完美的控制,那样语音交互才能真正发挥出它的作用:
可以通过对智能电视的控制,来进行电视、电影的播放,或者将用户的搜索结果显示在智能电视上,这样比自带一个屏幕效果好多了。
通过对摄像头的控制,可以实时进行监测,发现偷窃行为后,立马进行录屏,将偷窃视频上传到报警系统,通知用户,甚至直接进行报警处理。
通过远程控制家里的空调,下班时控制空调开启,这样到家后,就能直接享受到空调的清凉了。
语音交互未来可发挥的空间很大,但是现在的语音交互功能还是比较弱小的,不过相信只要坚持发展,一定能像科幻片里描述的那样,让人人都过上一个舒适安心的生活。
评测非常详细,在ubantu下学习