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