微信公众号页面 语音搜索功能 大概流程

微信公众号页面 语音搜索 大概流程 - vue

文档地址:
微信开放文档:
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#6
关于安卓手机调用wx.translateVoice 失败问题

1、引入链接
<script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
2、html部分按钮
<button id="talk" style="width:100px; height:30px; background:blue; color:#fff;">语音搜索</button>
3、重头戏
3.1 微信配置

简单说明:
1、微信配置需要的参数,在文档里面有详细说明,不赘述,文档地址在文章最开头;
2、这些配置的参数,是由后台做好通过接口返回给我的,我自己尝试过,水平问题,没有模拟出来;
3、我们这边的实现思路是,通过刷新页面把jsapi_ticket值存在cookie里,前端直接去取后台存在cookie里的值,再把取到的值传到下一个接口,去取config的配置信息,然后把取到的配置信息保存起来备用;
4、因为配置信息是要在调微信方法之前就要配好的,所以我选择在一进页面的时候,就先把配置信息获取到。

$.ajax("post","XXX/XXX",params,function(res){
	const configs = res.Data;
	wx.config({
	   debug: false,
	    appId: configs.appId, // 必填,公众号的唯一标识
	    timestamp: configs.timestamp, // 必填,生成签名的时间戳
	    nonceStr: configs.nonceStr, // 必填,生成签名的随机串
	    signature: configs.signature, // 必填,签名
	    jsApiList: [
	        "startRecord",
	        "stopRecord",
	        "onVoiceRecordEnd",
	        "translateVoice"
	    ] // 必填,需要使用的JS接口列表
	});
	wx.error(function(res) {
        alert(JSON.stringify(res+"config信息验证失败会执行error函数,如签名过期导致验证失败"));
    });
})
3.2 开始调用

简单说明:
1、这只是个大脉络,可以实现功能,但是具体细节需要根据项目需求完善;
2、比如 touchstart 和 touchend 之间的时间差判断 ,如果时间差过短,证明是个无效的录入,就不调用stopRecord 和 translateVoice 接口;
3、如果需求不是这种 touchstart 和 touchend 的交互,那么在调用的时候需要注意startRecord和stopRecord 的先后顺序。

wx.ready(function() {
    let localId;
    //开始录音
    document.getElementById("talk").addEventListener("touchstart", function(e) {
       e.preventDefault();
        //开始录音
        wx.startRecord();
    });
    //停止录音接口
    document.getElementById("talk").addEventListener("touchend", function(e) {
       e.preventDefault();//阻止浏览器默认行为
       //停止录音接口
       wx.stopRecord({
           success: function(res) {
               alert(res.localId+"---本地录音的localId");
               localId = res.localId;
               wx.translateVoice({
                   localId: localId, // 需要识别的音频的本地Id,由录音相关接口获得
                   isShowProgressTips: 1, // 默认为1,显示进度提示
                   success: function(res) {
                       alert("成功了");
                       result = res.translateResult;
                       //去掉最后一个句号
                       result = result.substring( 0, result.length - 1 );
                       alert("语音说了啥,手动停止----" + result);
                   },
                   fail: function(res){
                       alert("为什么识别失败了呀:"+JSON.stringify(res));
                   },
                   complete: function(res){
                       alert("语音识别转换接口执行完的回调函数:"+JSON.stringify(res));
                   }
               });
           }
       });
   });
    //监听录音自动停止接口
    wx.onVoiceRecordEnd({
        //录音时间超过一分钟没有停止的时候会执行 complete 回调
        complete: function(res) {
            localId = res.localId;
            wx.translateVoice({
                localId: localId, // 需要识别的音频的本地Id,由录音相关接口获得
                isShowProgressTips: 1, // 默认为1,显示进度提示
                success: function(res) {
                    alert("自动停止的识别成功了么");
                    // alert(res.translateResult);
                    result = res.translateResult;
                    //去掉最后一个句号
                    result = result.substring(0, result.length - 1);
                    alert("语音说了啥-自动停止:" + result);
                }
            });
        }
    });
});
3、虽然不重但是还挺重要的戏

关于安卓手机调用wx.translateVoice 失败问题

我在做的过程中也遇到了这个问题,在微信开发者工具里面模拟的时候,没有报错,一切正常,在手机端,每次走到 识别ing 这一步 就 没有然后了,调试都没法调试。
解决方案如文章所说:
微信公众号后台–接口权限——功能服务——设备功能权限开启

以上,over;

### 集成DeepSpeech至微信公众号进行语音处理 为了将DeepSpeech集成到微信公众号并用于语音处理,需先完成微信公众号开发者平台的相关配置以及获取必要的API密钥[^1]。具体来说,在微信公众平台开发者后台登录后,访问"开发"->"基本配置"页面,并在"接口权限"模块中启用"语音识别"功能。 #### 获取必要组件与环境准备 确保已安装Python运行环境,因为DeepSpeech主要支持Python调用。接着下载或克隆DeepSpeech官方仓库,依据官方文档指示编译或直接使用预构建版本。对于Windows用户而言,推荐采用Anaconda来管理依赖项和创建虚拟环境。 #### 实现语音接收与转换逻辑 当接收到用户的语音消息时,应将其保存为音频文件以便后续处理。考虑到微信端提供的语音是以amr格式编码的,而DeepSpeech期望的是wav格式输入,因此需要额外一步将amr转码为pcm/wav格式: ```bash ffmpeg -i input.amr output.wav ``` 之后加载训练好的模型实例化`Model()`对象,并传入待解析的声音片段路径作为参数执行推理任务得到文本结果。 ```python import deepspeech from scipy.io import wavfile model_file_path = 'deepspeech-0.9.3-models.pbmm' beam_width = 500 model = deepspeech.Model(model_file_path, beam_width) audio_filename = "output.wav" fs, audio = wavfile.read(audio_filename) inference = model.stt(audio) print(f"The transcription is: {inference}") ``` 最后把上述过程封装成函数形式方便重复利用,同时注意错误捕捉机制以增强程序健壮性。 #### 完整的消息监听器设计 结合微信服务器推送过来的数据包结构特点,编写专门负责监听新到来的信息流的服务端脚本。每当检测到有新的语音条目到达即触发前述定义的方法来进行实时翻译工作并将最终产出的文字版回复给原作者。 ```python def handle_voice_message(msg_xml): try: # 解析XML数据提取出media_id等内容... media_id = msg_xml.find('MediaId').text # 调用微信素材管理接口拉取临时素材链接... file_url = f"https://api.weixin.qq.com/cgi-bin/media/get?access_token={ACCESS_TOKEN}&media_id={media_id}" response = requests.get(file_url) with open("temp.amr", "wb") as temp_amr: temp_amr.write(response.content) # 执行AMR-WAV转换操作... subprocess.run(['ffmpeg', '-y', '-i', 'temp.amr', 'output.wav']) # 使用DeepSpeech STT引擎做预测分析... fs, audio = wavfile.read("output.wav") inference = model.stt(audio) return {"type": "text", "content": inference} except Exception as e: logging.error(str(e)) raise ``` 此部分代码展示了如何对接收到的语音内容实施自动化处理流程,包括但不限于下载远程资源、格式互转及智能语义理解等功能特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值