欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

微信小程序?qū)崿F(xiàn)語(yǔ)音識(shí)別轉(zhuǎn)文字功能及遇到的坑

 更新時(shí)間:2019年08月02日 10:17:19   作者:ycwu314  
這篇文章主要介紹了小程序?qū)崿F(xiàn)語(yǔ)音識(shí)別轉(zhuǎn)文字功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

最近為小程序增加語(yǔ)音識(shí)別轉(zhuǎn)文字的功能,坑路不斷,特此記錄。

微信開(kāi)發(fā)者工具

開(kāi)發(fā)者工具上的錄音文件與移動(dòng)端格式不同,暫時(shí)只可在工具上進(jìn)行播放調(diào)試,無(wú)法直接播放或者在客戶端上播放

debug的時(shí)候發(fā)現(xiàn),工具上錄音的路徑是http://tmp/xxx.mp3,客戶端上錄音是wxfile://xxx.mp3。 忽悠呢,不是格式不同,是映射路徑不同。

其實(shí)做個(gè)兼容也不難,每次提示一行文字,很丑。

采樣率與編碼碼率限制

每種采樣率有對(duì)應(yīng)的編碼碼率范圍有效值,設(shè)置不合法的采樣率或編碼碼率會(huì)導(dǎo)致錄音失敗。詳細(xì)看這個(gè)
https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.start.html

一開(kāi)始沒(méi)有留意,導(dǎo)致錄音不成功。

試過(guò)幾次后,采用這樣的配置,感覺(jué)錄音識(shí)別率和體積之間比較好平衡:

sampleRate: 16000, //采樣率
numberOfChannels: 1, //錄音通道數(shù)
encodeBitRate: 96000, //編碼碼率

單通道基本是必選的。因?yàn)閍sr只支持單通道。frameSize也是可以的,但是要考慮截?cái)鄬?duì)識(shí)別的影響。暫時(shí)沒(méi)有用上。

錄音優(yōu)化

因?yàn)榭赡苷`按,于是對(duì)小于500ms的錄音直接忽略。
另外,松開(kāi)錄音按鍵后,再延遲一點(diǎn)時(shí)間才真正stop錄音。

錄音文件格式

微信錄音文件支持mp3和aac。這2種格式文件都比較小,aac文件體積更小。這對(duì)上傳來(lái)說(shuō)是件好事情,速度更快。
但是對(duì)語(yǔ)音識(shí)別轉(zhuǎn)文字就不友好了。因?yàn)榘俣?、阿里云ASR、訊飛的語(yǔ)音轉(zhuǎn)文字接口都不支持aac和mp3,通常要求是pcm或者wav格式。

如果微信錄音能提供wav格式,那么就不用服務(wù)器做格式轉(zhuǎn)換了,但是wav格式體積是mp3、aac的5到10倍,至少短期是沒(méi)戲了,這也是很多人吐槽的地方。

服務(wù)器轉(zhuǎn)換錄音文件格式

可以用java第三方庫(kù)轉(zhuǎn)換,也可以用Process調(diào)用ffmpeg轉(zhuǎn)換。要注意的是,根據(jù)識(shí)別API的要求來(lái)做轉(zhuǎn)換。比如阿里云asr的要求是:

支持音頻編碼格式:pcm(無(wú)壓縮的pcm文件或wav文件)、opus,16bit采樣位數(shù)的單聲道(mono);
支持音頻采樣率:8000Hz、16000Hz;

java ProcessBuilder要使用數(shù)組傳參

轉(zhuǎn)換音視頻,習(xí)慣用ffmpeg。安裝完ffmpeg之后,用java新建進(jìn)程調(diào)用。

Process = new ProcessBuilder("ffmpeg -i in.mp3 out.wav").start();

一直提示CreateProcess error。 后來(lái)看文檔才發(fā)現(xiàn),要以數(shù)組的形式傳入?yún)?shù)。

Process = new ProcessBuilder("ffmpeg", "-y", "-i", "in.mp3", "out.wav").start();

這樣就啟動(dòng)成功了。

關(guān)于java啟動(dòng)進(jìn)程,不是本文重點(diǎn),以后再寫(xiě)篇文章總結(jié)。

阿里云asr sdk使用問(wèn)題

這個(gè)問(wèn)題困擾了一天時(shí)間,回想起來(lái)真是吐血。
問(wèn)題表現(xiàn)是微信錄制的語(yǔ)音很多都識(shí)別不了。
最初是直接把錄音mp3文件轉(zhuǎn)換為pcm文件,本地能播放,但是用阿里云asr sdk卻識(shí)別不了。 一開(kāi)始以為是文件編碼問(wèn)題。特意查了asr支持的文件格式,用ffprobe檢查,potplayer看屬性,都沒(méi)有看出問(wèn)題。
甚至把啟動(dòng)ffmpeg進(jìn)程轉(zhuǎn)換也改了,用了java的庫(kù)去做,還是不行。
后來(lái)為了方便測(cè)試問(wèn)題,用asr的restful接口測(cè)試錄音文件,都能識(shí)別! 似乎是sdk的問(wèn)題。于是打開(kāi)官方文檔例子對(duì)比。發(fā)現(xiàn)用的是sdk 2.x,老鐵啊你復(fù)制粘貼過(guò)來(lái)的代碼竟然少了!欲哭無(wú)淚。

// TODO 重要提示:這里是用讀取本地文件的形式模擬實(shí)時(shí)獲取語(yǔ)音流并發(fā)送的,因?yàn)閞ead很快,所以這里需要sleep
// TODO 如果是真正的實(shí)時(shí)獲取語(yǔ)音,則無(wú)需sleep, 如果是8k采樣率語(yǔ)音,第二個(gè)參數(shù)改為8000
int deltaSleep = getSleepDelta(len, sampleRate);
Thread.sleep(deltaSleep);

也少了對(duì)sampleRate的設(shè)置。

阿里云asr token過(guò)期

因?yàn)橛玫氖敲赓M(fèi)版asr,沒(méi)有給福報(bào)廠充值,因此token一天失效,導(dǎo)致聯(lián)調(diào)的時(shí)候突然報(bào)錯(cuò)。
最后實(shí)在受不了,寫(xiě)了個(gè)定時(shí)任務(wù)每小時(shí)更新token。
這,就是beggar VIP😎

wx.uploadFile返回值

封裝了一個(gè)接口parseResponse,統(tǒng)一解析查詢結(jié)果(文本、語(yǔ)音)。發(fā)現(xiàn)奇怪的問(wèn)題:

用文本查詢的,可以正常解析結(jié)果用語(yǔ)音查詢的,明明已經(jīng)返回了結(jié)果,卻解析不了!

只能console.log()打印出來(lái)對(duì)比

第一行是wx.request()發(fā)起文本查詢。
第二行是wx.uploadFile()上傳語(yǔ)音文件后直接語(yǔ)音轉(zhuǎn)文字,并且查詢。

wx.request返回值是json對(duì)象。
wx.uploadFile返回值是“字符串”!
wx.uploadFile返回值是“字符串”!
wx.uploadFile返回值是“字符串”!
重要的事情要說(shuō)3遍。盡管Content-Type: "application/json; charset=utf8",但是微信根本不做轉(zhuǎn)換!非常坑爹!

解決:對(duì)wx.uploadFile返回值進(jìn)行JSON.parse(res.data),得到j(luò)son對(duì)象。

更換appid和secret

因?yàn)檎叫〕绦蝽?xiàng)目賬號(hào)一直拖著沒(méi)有申請(qǐng),所以這段時(shí)間用的是我個(gè)人的appid和secret進(jìn)行開(kāi)發(fā)。
等正式賬號(hào)準(zhǔn)備好了,更新了小程序項(xiàng)目的appid,并且發(fā)出內(nèi)部體驗(yàn)包。

此時(shí)已經(jīng)深夜1點(diǎn)半,頭腦有點(diǎn)發(fā)懵。只更新了小程序appid,竟然忘了更新服務(wù)器的appid和secret。。。
于是乎反復(fù)報(bào)錯(cuò)登錄失敗。
過(guò)了一會(huì)才反映過(guò)來(lái),更新服務(wù)器的appi的secret,但是還是用戶。才想起忘了還有storage緩存沒(méi)有清除😂,里面放著自定義的session。這下真機(jī)體驗(yàn)沒(méi)問(wèn)題了。
但是微信開(kāi)發(fā)者工具又是登錄失敗。反復(fù)摸索后發(fā)現(xiàn):更換小程序appid后,清除所有數(shù)據(jù),關(guān)閉開(kāi)發(fā)者工具,重新打開(kāi),這就正常了。應(yīng)該是微信開(kāi)發(fā)者工具的bug。

https://ycwu314.github.io/p/miniapp-speech-to-text-experience/

總結(jié)

以上所述是小編給大家介紹的微信小程序?qū)崿F(xiàn)語(yǔ)音識(shí)別轉(zhuǎn)文字功能及遇到的坑,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

最新評(píng)論