大家好,今天主要和大家分享一下,如何使用linux系统上的语音识别项目的操作方法与实现。
第一:语音识别基本简介
AI音箱对传统音箱主要有两大块的技术区别,一块是语音信号的前处理,包括回声消除、波速成型、音源定位、降噪、去混响、自动语音电平控制这块是偏硬件的控制。还有一块是智 能语音交互,包括语音关键词搜索、本地语音识别、声纹识别、语音合成。
写上面的这些是让读者了解一下专业AI音箱方案与开发板实现的语音识别的差别在哪里。
说明语音识别项目的基本操作过程:
1、熟悉百度语音技术账号申请,及简单介绍调用流程。
2、用QT编写示例程序。流程如下,录制音频后,发送调用百度语音识别API接口,识别并返回结果。支持语音控制开发板上的LED控制。
第二:语音识别产品申请账号
语音识别技术产品,有讯飞,百度等厂家,我们可以购买或者免费试用他们的产品。可以 直接到他们的官网上查看,有使用技术文档。下面我们以百度语音识别技术产品为例子。可以 在浏览器输入搜索“百度语音识别”,就可以找到百度 AI 开放平台。
点击进去就可以看到他的技术文档链接位置。如下图。
或者直接打开https://ai.baidu.com/ai-doc/SPEECH/Ek39uxgre就可以跳转到百度AI开放平台》 帮助文档》语音技术页面。如下图。
记住自己的密钥。请自行完成及创建百度帐号,按照百 度帮助文档里的步骤,领取免费额度及创建中文普通话应用,获取密钥!程序里需要用到自己 的密钥。笔者提供的密钥是百度语音识别例程里的,如果开发次数超了可能就不能使用了。程 序中只需要 API Key 与 Secret Key。注意获取 Access Token 时有效期为 30 天,到期后需要在程 序里重新获取新的 token。
第二:百度语音识别流程及示例
在百度 AI 帮助文档里可以看见如下重要信息。
总结:调用流程需要仔细阅读,百度提供了示例 Demo 代码,可以看到里面支持很多种编 程语言编写的 API 请求相关示例 demo 代码。没有直接 C++相关的代码。C 语言是 C++语言的 子集,我们可以直接参考 C 语言编写的例子(请自行查阅及参考百度提供的 C 语言编写的 API 请求相关示例 demo 代码)来编写 Qt 调用语音识别 API。(备注:其他语言编写的例子不在我 们教程范围。)识别的音频格式支持如上,我们可以知道一些重要的信息是支持采样率 16000、 8000 的固定值,16bit 深的单声道,音频长度最长 60 秒。格式支持 wav,恰好正点原子 Linux I.MX6U 开发板系统支持 wav 格式播放及录制。
第三:具体代码实现
asr 是语音识别功能 demo。
1 #ifndef ASR_H 2 #define ASR_H 3 4 #include <QWidget> 5 6 #include <QNetworkAccessManager> 7 #include <QNetworkReply> 8 9 #include <QJsonDocument> 10 #include <QJsonParseError> 11 #include <QJsonObject> 12 #include <QJsonArray> 13 #include <QHostInfo> 14 15 #include <QFile> 16 17 class Asr : public QWidget 18 { 19 Q_OBJECT 20 21 public: 22 Asr(QWidget *parent = nullptr); 23 ~Asr(); 24 25 /* 请求网络 */ 26 void requestNetwork(QString, QByteArray); 27 28 /* 获取识别结果 */ 29 void getTheResult(QString fileName); 30 31 private: 32 /* 存储获取 tokenUrl 地址 */ 33 QString tokenUrl; 34 35 /* 存储 serverapi 地址 */ 36 QString serverApiUrl; 37 38 /* 最终需要访问 token 的地址 */ 39 QString accessToken; 40 41 /* 获取 token 的接口*/ 42 const QString token_org = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials &client_id=%1&client_secret=%2&"; 43 44 /* 填写网页上申请的 appkey 如 g_api_key="g8eBUMSokVB1BHGmgxxxxxx" */ 45 const QString 8888; 46 47 /* 填写网页上申请的 APP SECRET 如 $secretKey="94dc99566550d87f8fa8ece112xxxxx" */ 48 const QString 8888; 49 50 /* 百度服务器 API 接口,发送语音可返回识别结果 */ 51 const QString server_api = "http://vop.baidu.com/server_api?dev_pid=1537&cuid=%1&token=%2"; 52 53 /* 网络管理 */ 54 QNetworkAccessManager *networkAccessManager; 55 56 QString getJsonValue(QByteArray ba, QString key); 57 58 QFile file; 59 60 private slots: 61 62 /* 准备读取响应返回来的数据 */ 63 void readyReadData(); 64 65 /* 响应完成处理 */ 66 void replyFinished(); 67 68 signals: 69 void asrReadyData(QString); 70 71 }; 72 #endif // ASR_H
分析:第 45 行,请填写读者自己在网页上申请的 API Key。以防万一示例中的 API Key 过期不可 用! 第 47 行,请填写读者在网页上申请的 Secret Key。以防万一示例中的 Secret Key 过期不可 用
总结:原理 与原子云 API 接口相似。不过百度语音识别需要通过自己的帐号,指定地址获取访问的 Token 源地址,然后将得到的 Access Token 地址与语音识别服务器地址拼接,发送语音到服务 器,就可以返回识别的结果了。