1. 前言
隨著物聯(lián)網(wǎng)的發(fā)展,語音識別技術(shù)受到越來越多的關(guān)注,語音識別技術(shù)正積極推動信息通信領(lǐng)域的革命,語音撥號,語音郵件,語音輸入乃至語音操控等以語音識別為基礎(chǔ)的人機(jī)交互日益普及.盡管生物識別方式不斷增多,語音識別方式仍是主流方式.與其他生物識別技術(shù)相比,語音識別技術(shù)不僅具有非接觸,非侵入性,使用方便,不會遺失和忘記,不需記憶等特點(diǎn)。
本篇文章就采用華為云提供的在線語音識別服務(wù)給瀏覽器設(shè)計(jì)一個語音自動搜索的功能,編程語言采用C++,軟件框架采用QT設(shè)計(jì),瀏覽器內(nèi)核采用QWebEngineView,在QT5.7以后,QT里就不支持webkit了,目前自帶的瀏覽器內(nèi)核是QWebEngineView,只能使用MSVC編譯編譯,mingw要使用瀏覽器可以單獨(dú)下載webkit的庫,或者使用COM組件調(diào)用IE瀏覽器,當(dāng)前文章里使用的瀏覽器是QWebEngineView,編譯器采用VS2017,32bit。
語音采集功能使用QT的QAudioInput類來實(shí)現(xiàn),采集聲卡的PCM數(shù)據(jù),保存起來,通過華為云的語音識別HTTP接口完成文字識別,得到文字后再通過瀏覽器進(jìn)行搜索文字相關(guān)內(nèi)容。
實(shí)現(xiàn)效果如下:
點(diǎn)擊界面上的 ”開始語音采集“按鈕,就可以說話,說完點(diǎn)擊停止采集,然后調(diào)用華為云的語音識別接口進(jìn)行語音識別,在下面的顯示框上顯示識別到的文字,然后再完成瀏覽器自動搜索。
2. 創(chuàng)建語音服務(wù)器
2.1 使用語音服務(wù)
登錄華為云官網(wǎng): https://www.huaweicloud.com/
選擇產(chǎn)品-人工智能-語音交互服務(wù)-一句話識別。
短語音識別地址: https://www.huaweicloud.com/product/asr.html
短語音識別是將口述音頻轉(zhuǎn)換為文本,通過API調(diào)用識別不超過一分鐘的不同音頻源發(fā)來的音頻流或音頻文件。適用于語音搜索、人機(jī)交互等語音交互識別場景。 支持免費(fèi)試用。
免費(fèi)試用每日500次。
2.2 HTTP接口使用介紹
文檔地址: https://support.huaweicloud.com/api-sis/sis_03_0094.html
在線調(diào)試接口地址: https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=SIS&api=RecognizeShortAudio
幾個重要的參數(shù):
本地音頻采集的頻率、通道數(shù)都得與參數(shù)匹配。
2.3 接口地址總結(jié)
請求地址: "https://{endpoint}/v1/{project_id}/asr/short-audio"
?
請求數(shù)據(jù):
{
"config": {
"audio_format": "ulaw8k8bit",
"property": "chinese_8k_common",
"add_punc": "yes",
"digit_norm": "yes",
"need_word_info": "yes"
},
"data": "/+MgxAAUeHpMAUkQAANhuRAC..."
}
?
請求頭里要帶: X-Auth-Token 參數(shù)
請求數(shù)據(jù)里的參數(shù)在前面截圖里介紹了,data就是音頻文件的base64編碼數(shù)據(jù)。
請求地址里的endpoint字段、project_id字段、還有X-Auth-Token字段只要是訪問華為云的任何API接口都需要填,獲取方法看這里: https://bbs.huaweicloud.com/blogs/317759 翻到2.3小節(jié)。
識別成功返回的數(shù)據(jù):
{
"trace_id": "567e8537-a89c-13c3-a882-826321939651",
"result": {
"text": "歡迎使用語音云服務(wù)。",
"score": 0.9,
"word_info": [
{
"start_time": 150,
"end_time": 570,
"word": "歡迎"
},
{
"start_time": 570,
"end_time": 990,
"word": "使用"
},
{
"start_time": 990,
"end_time": 1380,
"word": "語音"
},
{
"start_time": 1380,
"end_time": 1590,
"word": "云"
},
{
"start_time": 1590,
"end_time": 2070,
"word": "服務(wù)"
}
]
}
}
其中的text字段就是識別的文本數(shù)據(jù)。
3. 項(xiàng)目代碼示例
下面列出核心的代碼,主要是就是字符串拼接格式,拼接完發(fā)送http請求即可。
3.1 語音轉(zhuǎn)文字請求代碼
//語音轉(zhuǎn)文本
void Widget::audio_to_text(QByteArray data)
{
function_select=0;
?
QString requestUrl;
QNetworkRequest request;
?
//存放文件的BASE64編碼
QString base64_Data;
?
//設(shè)置請求地址
QUrl url;
?
//一句話識別的請求地址
requestUrl = QString("https://sis-ext.%1.myhuaweicloud.com/v1/%2/asr/short-audio")
.arg(SERVER_ID)
.arg(PROJECT_ID);
qDebug()< "requestUrl:"<
3.2 更新token代碼
/*
功能: 獲取token
*/
void Widget::GetToken()
{
//表示獲取token
function_select=3;
?
QString requestUrl;
QNetworkRequest request;
?
//設(shè)置請求地址
QUrl url;
?
//獲取token請求地址
requestUrl = QString("https://iam.%1.myhuaweicloud.com/v3/auth/tokens")
.arg(SERVER_ID);
?
//自己創(chuàng)建的TCP服務(wù)器,測試用
//requestUrl="http://10.0.0.6:8080";
?
//設(shè)置數(shù)據(jù)提交格式
request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json;charset=UTF-8"));
?
//構(gòu)造請求
url.setUrl(requestUrl);
?
request.setUrl(url);
?
QString text =QString("{"auth":{"identity":{"methods":["password"],"password":"
"{"user":{"domain": {"
""name":"%1"},"name": "%2","password": "%3"}}},"
""scope":{"project":{"name":"%4"}}}}")
.arg(MAIN_USER)
.arg(IAM_USER)
.arg(IAM_PASSWORD)
.arg(SERVER_ID);
?
//發(fā)送請求
manager- >post(request, text.toUtf8());
}
3.3 華為云返回的結(jié)果處理
//解析反饋結(jié)果
void Widget::replyFinished(QNetworkReply *reply)
{
QString displayInfo;
int statusCode = reply- >attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
?
//讀取所有數(shù)據(jù)
QByteArray replyData = reply- >readAll();
?
qDebug()< "狀態(tài)碼:"<
審核編輯:湯梓紅
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2909文章
44557瀏覽量
372748 -
AI
+關(guān)注
關(guān)注
87文章
30728瀏覽量
268873 -
語音識別
+關(guān)注
關(guān)注
38文章
1739瀏覽量
112632 -
瀏覽器
+關(guān)注
關(guān)注
1文章
1022瀏覽量
35325 -
華為云
+關(guān)注
關(guān)注
3文章
2445瀏覽量
17406
發(fā)布評論請先 登錄
相關(guān)推薦
評論