微信同声传译(语音转文字) Taro +vue3

 前言

微信同声传译插件是微信自研的语音输入,文本翻译等功能的插件封装,用于提供给第三方小程序调用。在使用过程中遇见某些问题,不知道是不是底层问题,希望有大佬能解惑。

1.准备工作

代码配置:

//app.json 或者app.config(taro)
{
  ...
   plugins: {
    WechatSI: {
      version: '0.3.6', // 插件版本号
      provider: 'wx069ba97219f66d99' // 插件提供方 ID
    }
  }
}

账号配置

 

微信同声传译 | 小程序插件 | 微信公众平台 https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx069ba97219f66d99&token=370941954&lang=zh_CN

 前往账号设置 -> 配置添加插件

点击详情可以查看最新版本。

同时微信开发者工具也需要添加插件(工程运行时,可以通过提示添加即可)

注意:该插件在微信环境下才可调用,如果项目还需要要其他平台运行,需要对运行环境进行判断。

2.核心代码

模板中:

 <view  @touchstart="handleTouchStart"  @touchend="handleTouchEnd" @touchmove="handleTouchMove">
   <view> 按住说话</view>
   <view  v-if="(!isCancelRecording) && isRecording">录音中...</view>
   <view  v-else-if="isCancelRecording && isRecording">取消录音</view>
</view>

js中: 

const isRecording = ref(false);  // 是否正在录音
const isCancelRecording = ref(false);  // 录音是否取消
const issuesVal = ref();  // 识别内容

// 录音
const recordStartTime = ref(null);  // 录音时间
// 对环境判断
const plugin = process.env.TARO_ENV === 'weapp' ? requirePlugin('WechatSI') : null;
const manager = process.env.TARO_ENV === 'weapp' ? plugin?.getRecordRecognitionManager() : null;
const touchStartY = ref(null);  // 上划距离


// 在开始录音前一定先给录音权限
const getRecordEvent = async () => {
  try {
    // 1. 检查是否已授权
    const { authSetting } = await Taro.getSetting();

    if (authSetting["scope.record"] === false) {
      await Taro.openSetting();
      return;
    }
    // 3. 发起授权请求
    const res = await Taro.authorize({ scope: "scope.record" });
  } catch (error) {
  }
}



// 录音-----------------------------------------------------------------
const initManager = () => {
  // 监听识别开始
  manager.onStart = (res) => {
    console.log('监听识别开始', res);
  };
  // 监听识别结束
  manager.onStop = (res) => {
    console.log('监听识别结束', res.result);
    handelRecordRes(res)
  };
  manager.onError = (res) => {
    console.log("error msg", res.msg)
    openNotification(res.msg);
  }
};


// 开始触摸事件
const handleTouchStart = async (event) => {
  initManager();
  recordStartTime.value = Date.now();
  isRecording.value = true;
  isCancelRecording.value = false;
  startRecord();
  touchStartY.value = event.touches[0].clientY;  // 记录开始触摸位置
};

// 触摸移动事件
const handleTouchMove = (event) => {
  if (!isRecording.value) return;
  const currentY = event.touches[0].clientY;  // 记录移动位置
  const deltaY = touchStartY.value - currentY;  
  const swipeThreshold = 100;
  if (deltaY > swipeThreshold) {
    isCancelRecording.value = true;
  } else {
    isCancelRecording.value = false;
  }
};

// 触摸结束事件
const handleTouchEnd = async () => {
  isRecording.value = false;
  const minDuration = 500; // 毫秒
  const recordTime = Date.now() - recordStartTime.value;
  if (recordTime < minDuration) {
    openNotification('录音时间过短');
  }
  stopRecord();
};

const startRecord = () => {
  manager.start({
    lang: 'zh_CN', // 语言类型
    success: (res) => {
      console.log('录音启动成功', res);
    }
  });
};

const stopRecord = () => {
  manager.stop();
};

// 事件处理
const handelRecordRes = (res) => {
  if (isCancelRecording.value) {
    isCancelRecording.value = false;
  } else {
    if (res.result == '' || res.result == null || res.result == undefined) {
      openNotification('请说点什么吧')
      return;
    }
    issuesVal.value = res.result;
  }
}

3.坑

在触摸开始后  startRecord ()每次触发,在manager有值的情况下,manager.start()有时候不会触发 ,startRecord ()监听不到开始,并且manager.start()里面的回调函数一直没触发。

可参考官网

插件服务 / 微信同声传译 https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/extended/translator.html后续更新taro.request(wx.request)来实现sse长连接实时对话的坑

 

<think>好的,用户想设计一款自动记录支出的微信小程序。首先,我需要明确用户的需求,可能用户希望有一个方便的工具来跟踪日常开销,自动记录可能是指通过拍照、语音文字识别来自动获取消费信息,而不是手动输入。 接下来,我应该考虑小程序的核心功能。自动记录支出可能涉及多个方面,比如OCR识别收据、语音输入、手动输入作为补充,还有分类管理和数据统计。用户可能还希望有预算提醒和报表生成,这些功能对财务管理很重要。 然后,技术选型方面,微信小程序前端可以用原生开发或者框架如Taro,后端可能需要云开发或者自建服务器。OCR识别可能需要第三方服务,比如腾讯云或百度AI的接口,语音识别同样需要集成现有的API。数据存储方面,云数据库或者本地存储都是选项,但自动同步的话,云数据库更合适。 系统设计方面,用户模块需要微信登录,消费记录模块要支持多种输入方式,分类管理要灵活,统计报表需要图表展示,预算模块要实时监控。安全性和隐私保护也很重要,得确保用户数据加密,遵守相关法律法规。 开发步骤的话,先市场调研,明确用户需求,然后设计原型,技术验证,比如测试OCR的准确率,接着分阶段开发,先做核心功能,再优化界面和性能,最后测试上线,收集反馈迭代更新。 可能遇到的难点是OCR识别准确率,不同收据格式差异大,需要大量训练数据。语音识别的场景适配也是个挑战,比如口音或背景噪音。数据同步和安全性也需要仔细处理,防止泄露。 最后,运营方面,初期可以免费使用,高级功能收费,或者广告合作。用户激励比如连续记录奖励,社区分享功能也能增加粘性。需要持续关注用户反馈,优化体验,确保小程序稳定可靠。 总之,设计这样的小程序需要综合考虑功能、技术、用户体验和运营,分步骤实施,逐步完善。</think>设计一款自动记录支出的微信小程序需要从用户需求、技术实现、功能设计等多方面综合考虑。以下是分步骤的设计思路和关键点: --- ### 一、需求分析 #### 核心痛点 1. **手动输入繁琐**:用户需逐条记录消费金额、类型、时间。 2. **分类统计困难**:缺乏自动化的支出分类和可视化报表。 3. **数据同步问题**:多设备场景下数据一致性难以保证。 #### 目标用户 - 个人或家庭财务管理者 - 学生、上班族等有日常记账需求的人群 --- ### 二、核心功能设计 #### 1. 自动记录支出 - **OCR文字识别**(需调用API) $$ \text{技术实现:调用腾讯云OCR接口} $$ - 用户拍摄收据/小票 → 自动提取金额、时间、商家名称。 - **语音输入文字** - 用户口述“午餐25元” → 自动解析金额和分类。 - **微信支付自动同步** - 通过微信支付账单API获取消费记录(需用户授权)。 #### 2. 分类管理 - **智能分类**:通过关键词匹配(如“咖啡”归入餐饮)。 - **自定义标签**:支持用户手动调整分类。 #### 3. 数据统计 - **可视化图表** - 饼图(支出占比)、折线图(时间趋势)。 $$ \text{技术方案:ECharts或F2图表库} $$ - **预算提醒** - 设置月度预算 → 超支时触发微信消息通知。 #### 4. 多端同步 - **云存储**:用户数据实时同步至云端。 --- ### 三、技术实现路径 #### 1. 技术选型 | 模块 | 技术方案 | |--------------|----------------------------------| | 前端框架 | 微信小程序原生开发或Taro框架 | | 后端服务 | 云开发(腾讯云)或Node.js + MySQL | | OCR识别 | 腾讯云/百度AI开放平台接口 | | 语音识别 | 微信同声传译插件 | #### 2. 关键代码逻辑 ```javascript // 示例:OCR识别后处理金额 function extractAmount(text) { const regex = /[\d]+\.?[\d]*/g; return text.match(regex)[0]; } ``` --- ### 四、隐私与合规 1. **用户授权**:明确告知数据用途,需用户同意访问支付记录。 2. **数据加密**:敏感信息(如金额)使用AES加密存储。 3. **合规要求**:遵守《个人信息保护法》和微信小程序审核规范。 --- ### 五、运营策略 1. **冷启动**:提供模板账本(如“学生党月度预算”)。 2. **用户激励**:连续记账7天赠送VIP权益(如高级报表)。 3. **商业化**:基础功能免费,高级功能(如多账户管理)付费订阅。 --- ### 六、潜在难点与优化 1. **OCR识别准确率** - 优化方案:增加用户手动修正功能。 2. **多平台数据同步延迟** - 优化方案:使用WebSocket实现实时更新。 3. **分类算法误判** - 优化方案:引入机器学习模型训练历史数据。 --- ### 七、扩展功能(二期) - **多人协作记账**:家庭/团队共享账本 - **发票管理**:自动关联电子发票 - **消费趋势预测**:基于历史数据的AI分析 通过以上设计,可打造一款轻量、智能的自动记账工具,降低用户操作成本,同时满足深度财务分析需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值