Ubuntu20.04 使用Python实现全过程离线语音识别(包含语音唤醒,语音转文字,指令识别,文字转语音)

人工智能94

因为手头有一个项目,该项目需要在香橙派上实现语音控制,并且带有语音唤醒功能。简单来说,就是通过唤醒词唤醒香橙派,然后说出相关指令,香橙派去执行指令。
但是,在弄香橙派的时候,自带的麦克风不好使了,单独进行麦克风测试的时候是好使的,但是程序跑起来怎么说话都没反应了。买了个USB接口的麦克风,还没到,就先在ubuntu系统上先试试流程,跑通下,到时在香橙派上弄的时候心里也有个数了。
这是这篇记录博客的由来了。开发语言使用的Python,不得不说,使用Python来进行语音识别,是真的方便,第三方库太强大了。基本上是把环境配置好,剩下简单写点流程逻辑代码就完成了。
emmm,对了,为了防止在复现过程中出现一些莫名其妙的bug,每一个环境的配置,还有Python包我都会附上相应的版本号,理论上来说按照流程来走应该是没什么问题,中间的坑我都踩的差不多了。好了,闲话说到这,进入正文。

Ubuntu: 20.04
Python: 3.8

  • 语音唤醒使用的是Snowboy,这个官方已经不维护了,最后一个版本是1.3.0,官方的自定义语音唤醒词训练的网站已经停掉了,不过还有第三方的网站可以用。
  • 语音转文字使用的Speechbrain,这个可以自己训练自己的相关模型,为了提高自己指令识别精度可以这么做。要省事可以使用官方提供预先训练好的模型。
  • 文字转语音使用的Pyttsx3,这个怎么说,用来做demo程序是绝对够用了,但如果想要更好体验,需要解决下音色的问题。

版本号:1.3.0
Snowboy的GitHub地址:

https://github.com/Kitt-AI/snowboy

如果在GitHub上下载压缩包的源码,那么我们需要先进行解压:

tar xvf snowboy-1.3.0.tar.gz

当然,我们也能直接使用git命令进行下载源码:

git clone https://github.com/Kitt-AI/snowboy.git

代码下载完成后,先留着备用,接下来我们配置代码所需要的环境,snowboy需要swig,alsa等等,直接看配置:

sudo apt-get install swig  版本号:4.0.1
sudo apt-get install libatlas-base-dev
sudo apt-get install sox  版本号:14.4.2
sudo apt-get install libasound2-dev

这个里面,sox少了会怎么样,我没测试过,不知道sox会不会对snowboy的编译造成直接影响,起码可以通过 sox -d -d 命令来测试你的麦克风跟外放,执行命令之后,对着麦克风说话,你可以听到自己的声音。
libasound2少了会出问题,这个我一开忘了安装,结果报错了。这个是snowboy的C++编译中下载portaudio这个库的时候会用到,如果执行下载portaudio的操作前没有安装libasound2,会报下面错误: "Fail to open PortAudio stream, error message is "Device unavailable"
还有,需要注意的是,swig的版本号要大于3.10(没记错的话,不然就是3.12

Original: https://blog.csdn.net/qq_44323019/article/details/124808289
Author: @Mrxu
Title: Ubuntu20.04 使用Python实现全过程离线语音识别(包含语音唤醒,语音转文字,指令识别,文字转语音)



相关阅读1

Title: Debian系列操作系统安装CUDA+CUDNN+TensorFlow+Pytorch深度学习环境

Debian系列操作系统安装CUDA+CUDNN+TensorFlow+Pytorch深度学习环境

1. 简介

在实验室中,很多同学出现了设备环境中各式各样的NVIDIA显卡加速环境的问题,在最近笔者也正在做一些项目,但是都不同程度遇到了一些比较棘手的环境问题,所以以这篇文章来说明一下较为合理的环境配置方案。这里笔者选择的操作系统是国产操作系统Deepin,至于其他Debian系列的操作系统,安装过程是类似的。

2. 安装显卡驱动

软件源驱动程序安装方法
这里强烈建议安装操作系统源上的驱动程序,因为每当系统更新的时候,源上的显卡驱动是按照本身发型版本的依赖关系来进行安装的,所以有比较好的兼容性。输入以下的命令就可以查看源上的闭源NVIDIA显卡驱动的版本号是什么样的:

apt-cache madison nvidia-driver

这里会显示出显卡驱动版本号。
Ubuntu20.04 使用Python实现全过程离线语音识别(包含语音唤醒,语音转文字,指令识别,文字转语音)对于上述的深度学习环境,我们选择不必要太新的,一般情况下选择显卡驱动版本在440.x ∼ \sim ∼ 470.x版本较为恰当,有些操作系统(例如Deepin)在安装的时候就会提示是否安装Deepin闭源显卡驱动程序,但是这些预安装显卡驱动程序并不能达到我们的要求,因保证系统的稳定性,一般选择较为老旧的显卡驱动作为操作系统的显卡驱动程序(390.x),这样并不能更好地配置深度学习环境。
下一步则是安装源上的驱动程序(以deepin V20.5为例)

sudo apt install nvidia-driver-bin

对于ubuntu系统可以用以下的命令对源上的程序进行查询处理

ubuntu-drivers device

这样就可以列举出对应的驱动程序,安装对应的驱动程序即可

sudo apt install nvidia-drivers-470

官网下载程序安装方法

另外,当然也可以选择从官网下载对应的驱动程序进行安装。这里需要注意的是,有些电脑设置有secure boot,所以在设置启动文件的时候注意这个的设置。

在安装之前,注意要将nouveau驱动禁用,也就是在文件 /etc/modprob.d/blacklist.conf填写以下的内容禁用nouveau驱动

blacklist nouveau
options nouveau modeset=0

然后生成内核文件,注意对原来的内核文件进行备份处理

sudo cp /boot/initrd.img-XXX /boot/initrd.img-XXX.back
sudo cp /boot/vmlinuz-XXX /boot/vmlinuz-XXX.back
sudo update-initramfs -u

从官网下载好驱动程序之后,在安装驱动之前
首先安装gcc,make等一系列编译环境以及工具。

sudo apt install gcc-7 make

由于编译显卡需要一些内核编译的dev包还有一些headers,所以还需要安装以下的内核源码文件,这具体需要看显卡驱动需要什么样的内核,用以下的命令进行查询即可

apt search kernel
apt search headers

查找到对应的软件源文件之后,进行安装即可。(以Deepin V20.5为例)

sudo apt install linux-headers-5.10.101-amd64-desktop

3. 安装CUDA+CUDNN 环境

为了兼容TensorFlow 和Pytorch环境,通过TensorFlow官网和Pytorch官网查询,我们最终推荐选择以下的两种方案参考:

  • CUDA11.2+CUDNN8.1
  • CUDA10.2+CUDNN7.6.5

当然也可以选择以上两种环境同时安装,但是这里要注意的是,两种环境的安装注意在 /usr/local/cuda/文件夹当中出现的一些软链接错误的一些问题。

两种环境的安装方法是类似的,首先需要安装一些必要的安装包

sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev libgles2-mesa-dev

对于Debian系列的操作系统,可以选择Ubuntu18.04版本的(CUDA10.2+CUDNN7.6.5),以及Ubuntu20.04版本或者是Debian10版本的(CUDA11.2+CUDNN8.1)。为了保持软件的依赖关系稳定性,我们这里建议选择 *.run文件进行安装,下载完成之后,安装的命令如下所示:

  • 对于CUDA10.2版本
sudo bash cuda_XX.XX.XX_XX.XX.XX --toolkit --toolkitpath=/usr/local/cuda-10.2 --librarypath=/usr/local/cuda-10.2 --samples --samplespath=$HOME/

CUDNN选择Linux x86-64版本进行安装。下载完成安装包之后,安装CUDNN7.6.5如下所示

tar -xvf  cudnn-10.2-linux-x64-v7.6.5.32.tgz
sudo mv cuda/include/* /usr/local/cuda-10.2/include/
sudo mv cuda/lib64/* /usr/local/cuda-10.2/lib64/
sudo chmod a+r  /usr/local/cuda-10.2/include/cudnn.h /usr/local/cuda-10.2/lib64/libcudnn*
  • 对于CUDA11.2版本
sudo bash cuda_XX.XX.XX_XX.XX.XX --toolkit --toolkitpath=/usr/local/cuda-10.2 --librarypath=/usr/local/cuda-10.2 --samples --samplespath=$HOME/

CUDNN依然选择Linux x86-64版本进行安装。下载完成安装包之后,安装CUDNN8.1如下所示

tar -xvf   cudnn-11.2-linux-x64-v8.1.1.33.tgz
sudo mv cuda/include/* /usr/local/cuda-10.2/include/
sudo mv cuda/lib64/* /usr/local/cuda-10.2/lib64/
sudo chmod a+r  /usr/local/cuda-10.2/include/cudnn.h /usr/local/cuda-10.2/lib64/libcudnn*

这样就可以将对应的CUDA包安装到 /usr/local/cuda/usr/local/cuda-10.2/usr/local/cuda-11.2文件夹当中,但是安装过程当中注意对cuda链接工具的更新操作,选择适合于自己的开发环境进行安装处理。

4. 安装TensorFlow 和Pytorch环境

首先可以建立一个虚拟环境

conda create -n tensorflowv15 python=3.7
conda create -n pytorchv16 python=3.7
conda create -n tensorflowv2 python=3.7
conda create -n pytorchv19 python=3.7

我们这里建立四个环境对应于不同的环境进行模型的训练,然后安装对应的安装包即可
Tensorflow1.15.0环境

pip install tensorflow-gpu==1.15.0

Tensorflow2.2.0环境

pip install tensorflow==2.2.0

Pytorch 环境

pip install pytorch==1.x

安装TensorFlow环境之后经常会出现以下的一些问题,我们这里以CUDA11.2+CUDNN8.1+Tensorflow2.7.0为例,经常会出现以下的一些库文件无法找到

libcudart.so.11.0,libcublas.so.11,libcublasLt.so.11,libcufft.so.10,libcurand.so.10,libcusolver.so.10,libcusparse.so.11,libcudnn.so.8

在这样的情形下,只需要将对应的文件做一个软链接即可,例如

sudo ln -s libcublas.so.11.4.1.1043 libcublas.so.11

Original: https://blog.csdn.net/Zhang_Pro/article/details/123718319
Author: Mobtgzhang
Title: Debian系列操作系统安装CUDA+CUDNN+TensorFlow+Pytorch深度学习环境

相关阅读2

Title: HarmonyOS之AI能力·语音识别技术

  • 语音识别功能提供面向移动终端的语音识别能力。它基于华为智慧引擎(HUAWEI HiAI Engine)中的语音识别引擎,向开发者提供人工智能应用层 API。该技术可以将语音文件、实时语音数据流转换为汉字序列,准确率达到 90% 以上(本地识别 95%)。
  • 语音识别技术,也称为自动语音识别(Automatic Speech Recognition, ASR),可以基于机器识别和理解,将语音信号转变为文本或命令。
  • 语音识别支持的输入文件格式有 wav 或 pcm。
  • 语音识别当前仅支持对普通话的识别。
  • 语音识别输入时长不能超过 20s。
  • 语音识别采样要求:采样率 16000Hz,单声道。
  • 语音识别引擎的使用必须初始化和释放处理,且调用必须在 UI 的主线程中进行。
  • 多线程调用:HUAWEI HiAI Engine 不支持同一应用使用多线程调用同一接口,这样会使某一线程调用 release 方法后,卸载模型,导致正在运行的另一些线程出错。故多线程执行同一功能达不到并行的效果。但是引擎支持使用多线程调用不同接口,如开启两个线程同时使用文档矫正和 ASR 接口。

  • 支持开发具有语音识别需求的第三方应用,如语音输入法、语音搜索、实时字幕、游戏娱乐、社交聊天、人机交互(如驾驶模式)等场景。

  • 语音输入法:将需要输入的文字,直接用语音的方式输入。即用户说话的时候语音识别引擎返回识别的汉字序列,让输入更加便捷,解放双手。
  • 语音搜索:搜索内容直接以语音的方式输入,可以用于客服系统的关键词搜索,同时转录成文本,让搜索更加高效。
  • 实时字幕:将直播、视频、现场演讲等音频进行实时的字幕转换、降低理解成本,提升用户体验。
  • 驾驶模式:在开车过程中,手握方向盘,无法分神去操作手机来选择音乐、拨打电话。使用语音识别,只要向手机说出命令,例如:听音乐的时候说上一首/下一首进行切歌或调节音量等,即可被手机识别并执行相应操作。

接口功能接口原型接口描述实例化ASR客户端对象Optional createAsrClient(Context context)实例化一个ASR客户端对象,该对象用于调用ASR引擎能力初始化ASR服务void init(AsrIntent intent, AsrListener asrListener)初始化ASR服务。传入回调,用于等待ASR功能接口的调用过程和结果;以及传入初始化参数,初始化ASR引擎开始听取和识别语音void startListening(AsrIntent asrIntent)开始听取和识别语音。如果识别的是音频文件,则读取文件识别。

如果识别PCM语音数据流,则结合writePcm(byte[], int)来识别。在调用此方法前,需要先调用init(AsrIntent, AsrListener)来初始化ASR引擎服务停止识别语音void stopListening()调用此方法,已经获取到的语音会完成识别,未获取到的语音将不再识别。

一般在默认场景下,无需调用此方法去停止识别,因为语音识别会自动地决策语音是否已经完成,然后自动地停止识别。然而,也可以调用此方法来直接在某刻手动地停止识别。

调用此方法前,需要先调用init(AsrIntent, AsrListener)来初始化ASR引擎服务。写入PCM数据流,进行语音识别void writePcm(byte[] bytes, int length)调用此方法,写入PCM语音数据流,并对PCM进行语音识别。

调用此方法前,需要先调用init(AsrIntent, AsrListener)来初始化ASR引擎服务。

在调用startListening(AsrIntent)}之后,将获取的PCM数据通过此方法来下发给ASR引擎处理。

PCM数据流长度存在限制:PCM数据流大小不能超过800KB,另外PCM数据流对应的音频长度不能超过20s。length代表有效长度,当前只支持1280或者640字节取消语音识别void cancel()取消语音识别,已经获取到的语音也不再识别。调用此方法前,需要先调用init(AsrIntent, AsrListener)来初始化ASR引擎服务销毁ASR服务void destroy()取消所有ASR任务,销毁ASR引擎服务。调用此方法后,无法再使用ASR服务。如果需要重新使用ASR服务,需要重新调用createAsrClient(Context)来创建 AsrClient实例

  • AsrListener 接口说明:

包名类名接口原型功能描述ohos.ai.asrAsrListenervoid onInit(PacMap params)ASR引擎初始化结束后,ASR的服务端会调用此回调接口处理初始化结果数据void onBeginningOfSpeech()ASR引擎检测到用户开始说话时,ASR服务端调用此回调接口void onRmsChanged (float rms)ASR引擎检测到音频输入的语音能量变化时,ASR服务端调用此回调接口处理语音能量void onEndOfSpeech()ASR引擎检测到用户说话停止时,调用此回调接口void onIntermediateResults(PacMap intermediateResults)ASR引擎语音识别过程中,当部分识别结果可以获取到时,调用此回调处理中间过程的识别结果void onError(int error)ASR语音识别过程中出现错误时,调用此回调接口void onResults(PacMap results)ASR引擎完成语音识别,调用此回调返回和处理完整的识别结果void onBufferReceived(byte[] buffer)ASR引擎每次接收到新输入的音频流时,会调用此回调接口处理接收到的语音流数据void onEvent(int eventType, PacMap params)ASR引擎检测到某些事件时,调用此接口上报事件给调用者void onEnd()ASR引擎识别结束时,调用此回调接口。但如果识别音频过程中被AsrClient类中的stopListening()或者cancel()方法打断,则不会调用此回调接口void onAudioStart()在音频开始时,ASR引擎服务端调用此回调接口void onAudioEnd()在音频结束时,ASR引擎服务端调用此回调接口

  • AsrListener 中的 onResults(PacMap results) 方法返回结果,结果封装在 json 格式中,需要解析得到。结果说明:

返回结果结果类型结果说明{"result":[{"confidence":0,"ori_word":"你 好 ","pinyin":"NI3 HAO3 ","word":"你好。"}]}Json识别结果{"confidence":xxx}Double识别结果的置信度{ "word":"xxx"}String识别结果的文本内容

  • 示例结果(Json):
    {
        "engine_type":"local_engine",
        "result":[{"confidence":0,"ori_word":"你 好 ","pinyin":"NI3 HAO3 ","word":"你好。"}],
        "result_type":"lvcsr",
        "scenario_type":5
    }
  • AsrError 说明:

常量名取值错误码含义SUCCESS0表示在某个接口被调用成功时,在回调中会返回这个结果码ERROR_AUDIO3表示接口调用时,发生因音频读取导致的错误时,在回调中会返回的结果码ERROR_SERVER4表示接口调用时,ASR引擎服务端发生错误时,在回调中会返回的结果码ERROR_CLIENT5表示接口调用时,调用ASR的客户端发生错误时,在回调中会返回的结果码ERROR_SPEECH_TIMEOUT6表示ASR接口调用时,在设定的时间内没有语音输入时,在回调中会返回的结果码ERROR_NO_MATCH7表示ASR接口调用时,发生ASR的识别结果不匹配定义的json格式时,在回调中会返回的结果码ERROR_RECOGNIZER_BUSY8表示ASR接口调用时,ASR引擎正忙时,在回调中会返回的结果码ERROR_INVALID_PARAMS10表示ASR接口调用时,发生参数输入错误时,在回调中会返回的结果码ERROR_UNKNOWN11表示ASR接口调用时,发生未知错误时,在回调中会返回的结果码ERROR_GET_MODEL_PATH13表示ASR接口调用时,ASR模型路径获取失败时,在回调中会返回的结果码ERROR_RESULT_UNSUPPORTED15表示ASR接口调用时,设备上当前版本的ASR引擎不支持正在被调用的接口时,在回调中会返回的结果码ERROR_MODEL_NOT_MATCH16表示ASR接口调用时,当前设备中预置的ASR引擎应用和ASR模型不匹配时,在回调中会返回的结果码ERROR_INIT_FAIL23表示ASR接口调用时,发生ASR引擎初始化失败的错误时,在回调中会返回的结果码ERROR_NO_ASR30表示当前设备上没有ASR引擎,不支持ASR能力的调用时,在回调中会返回的结果码

    // 提供ASR引擎执行时所需要传入的参数类
    import ohos.ai.asr.AsrIntent;
    // 错误码的定义类
    import ohos.ai.asr.util.AsrError;
    // 加载语音识别Listener
    import ohos.ai.asr.AsrListener;
    // 提供调用ASR引擎服务接口的类
    import ohos.ai.asr.AsrClient;
    // ASR回调结果中的关键字封装类
    import ohos.ai.asr.util.AsrResultKey;
  • 创建一个 AsrClient 对象:context 为应用上下文信息,应为 ohos.aafwk.ability.Ability 或 ohos.aafwk.ability.AbilitySlice 的实例或子类实例:
    AsrClient asrClient = AsrClient.createAsrClient(context).orElse(null);
  • 设置引擎参数:如果希望识别文件,音频文件需满足约束与限制,并设置音频类型为"ASR_SRC_TYPE_FILE";如果希望识别音频流,则设置音频类型为"ASR_SRC_TYPE_PCM":
    AsrIntent initIntent = new AsrIntent();
    initIntent.setAudioSourceType(AsrIntent.AsrAudioSrcType.ASR_SRC_TYPE_PCM);
  • 初始化ASR服务:其中,mMyAsrListener 为实现了 AsrListener 接口的实例对象:
    asrClient.init(initIntent, mMyAsrListener);
  • 开始识别:用户可以不设置参数,使用默认参数:
    AsrIntent asrIntent = new AsrIntent();
    // 设置后置的端点检测(VAD)时间
    asrIntent.setVadEndWaitMs(2000);
    // 设置前置的端点检测(VAD)时间
    asrIntent.setVadFrontWaitMs(4800);
    // 设置语音识别的超时时间
    asrIntent.setTimeoutThresholdMs(20000);
    asrClient.startListening(asrIntent);
    // buffer需要替换为真实的音频数据
    byte[] buffer = new byte[]{0, 1, 0, 10, 1};
    // 对于长度大于1280的音频,需要多次调用writePcm分段传输
    asrClient.writePcm(buffer, 1280);
  • 需要注意的是,startListening 或 writePcm 方法建议放在 mMyAsrListener 中 onInit() 方法内调用,保证初始化引擎成功之后再调用识别接口。如果希望识别音频文件,则不需要调用 writePcm 接口:
    AsrIntent asrIntent = new AsrIntent();
    // 将FilePath修改为正确的地址,且文件路径需要给com.huawei.hiai进程授予可访问权限。
    asrIntent.setFilePath("FilePath");
    asrClient.startListening(asrIntent);
  • 取消或停止识别:
    asrClient.stopListening(); // 停止识别
    asrClient.cancel(); // 取消识别
  • 释放引擎:
    asrClient.destroy();

Original: https://blog.csdn.net/Forever_wj/article/details/118341210
Author: ╰つ栺尖篴夢ゞ
Title: HarmonyOS之AI能力·语音识别技术

相关阅读3

Title: 深度学习环境配置

阿里云镜像:https://mirrors.aliyun.com/pypi/simple/

中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/

豆瓣(douban) :http://pypi.douban.com/simple/

清华大学 :https://pypi.tuna.tsinghua.edu.cn/simple/

中国科学技术大学 :http://pypi.mirrors.ustc.edu.cn/simple/

安装命令后添加(pip命令)

-i https://pypi.tuna.tsinghua.edu.cn/simple some-package

CUDA

查看版本

NVIDIA控制面板---->帮助---->系统信息---->组件---->NVCUDA.DLL

下载CUDA

CUDA GPUs | NVIDIA Developer

Pytorch安装

官方网站历史版本下载(配合国内镜像下载):Previous PyTorch Versions | PyTorch

验证GPU

import torch
torch.cuda.is_available()

TensorFlow安装

版本问题

Windows:https://www.tensorflow.org/install/source_windows

Linux/macOS:https://www.tensorflow.org/install/source#common_installation_problems

Ubuntu20.04 使用Python实现全过程离线语音识别(包含语音唤醒,语音转文字,指令识别,文字转语音)

下载

python2

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade tensorflow      # CPU版本
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade tensorflow-gpu  # GPU版本

python3

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade tensorflow     # CPU版本
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade tensorflow-gpu #  GPU版本

验证

import tensorflow as tf
tf.test.is_gpu_available()

出现的问题

版本问题

[TensorFlow] 运行报错:W tensorflow/stream_executor/platform/default/dso_loader.cc:59]
Could not load dynamic library 'cudart64_110.dll'; dlerror: cudart64_110.dll not found

  1. 下载链接:cudart64_110.dll free download | DLL‑files.com
  2. 将cudart64_110.dll放在文件夹下C:\Windows\System32

其他dll文件:Search result for | DLL‑files.com

TensorBoardX(适用于pytorch)

必须先安装tensorflow!!!

github:https://github.com/lanpa/tensorboardX/

pip install tensorboardX

or build from source:

pip install 'git+https://github.com/lanpa/tensorboardX'

You can optionally install crc32c to speed up.

pip install crc32c

Starting from tensorboardX 2.1, You need to install soundfile for the add_audio() function (200x speedup).

pip install soundfile

Original: https://blog.csdn.net/m0_37830389/article/details/123668868
Author: 冰雹hehehe
Title: 深度学习环境配置