当前位置: 首页 > news >正文

微服务即时通信系统---(六)语音识别子服务

目录

功能设计

模块划分

业务接口/功能示意图

服务实现流程思想

服务代码实现

编写proto文件

服务端创建子类(SpeechRecognitionServiceImpl)完成RPC服务调用函数重写

SpeechRecognize(语音识别)

服务端完成语音识别子服务类(SpeechRecognitionServer)

注意 

实例化服务类对象,启动服务

工程系统构建配置文件(CMakeLists.txt)

服务测试


本章节,主要对项目中语音识别子服务模块进行分析、开发与测试。

功能设计

语音识别子服务,通过调用语音识别SDK,进行语音识别,将识别后的文字返还给入口网关子服务即可,因此,提供的功能性接口只有一个:

语音消息的文字转换:客户端进行语音消息的文字转换。

模块划分

参数/配置文件解析模块基于gflags框架直接使用,进行参数/配置文件的解析。
日志模块基于spdlog封装的logger 直接进行日志输出。
服务注册模块基于etcd框架封装的注册模块 直接进行语音识别子服务模块的服务注册。
RPC服务模块基于brpc框架 搭建语音识别子服务的RPC服务器。
语音识别SDK基于百度云的语音识别SDK框架封装的识别模块,进行语音识别文字。

业务接口/功能示意图

服务实现流程思想

1、编写服务所需的proto文件,利用protoc工具生成RPC服务器所需的.pb.h 和 .pb.cc 项目文件。
2、服务端 创建子类,继承于proto文件中RPC调用类,并进行功能性接口函数重写。
3、服务端 完成语音识别子服务类。
4、实例化 服务类对象,启动服务。

服务代码实现

编写proto文件

speech请求(SpeechRecognitionReq)包含成员:

1、请求ID:用于标识该请求的唯一性。

2、语音数据:存放语音文件数据(以byte的方式存放)。

3、用户ID:标识用户,便于后续网关服务器响应用户。

4、用户登陆会话ID:用于网关进行用户身份鉴权,识别用户是否登陆。(此处用不上,为了代码大一统,添上)

speech应答(SpeechRecognitionResp)包含成员:

1、请求ID:对应请求中的请求ID,标识请求唯一性。

2、成功标识:标识该次请求的处理结果。

3、错误信息(optional):如果处理出错,记录出错信息。

4、语音文字数据(optional):如果处理成功,存放转换后的文字数据。

RPC服务器(SpeechRecognitionService)提供接口:

1、SpeechRecognition (SpeechRecognitionReq) returns (SpeechRecognitionResp)。

proto文件(speechRecognition.proto):

syntax="proto3";
package yangz;option cc_generic_services = true;// SpeechRecognitionReq
message SpeechRecognitionReq
{string req_id = 1;bytes speech_data = 2;string user_id = 3;optional string login_session_id = 4;
};// SpeechRecognitionResp
message SpeechRecognitionResp
{string req_id = 1;bool success = 2;optional string err_msg = 3;optional string speech_character_data = 4;
};// SpeechRecognitionService
service SpeechRecognitionService
{rpc SpeechRecognize(SpeechRecognitionReq) returns (SpeechRecognitionResp);
};

服务端创建子类(SpeechRecognitionServiceImpl)完成RPC服务调用函数重写

SpeechRecognize(语音识别)

实现流程:

1、接收请求,获取语音数据。

2、调用基于语音识别SDK封装的框架,获取识别后的文本内容。

3、组织响应进行返回。

speechRecognitionServer.hpp:

    // 创建子类, 继承于SpeechRecognitionService, 完成功能性接口的实现class SpeechRecognitionServiceImpl : public yangz::SpeechRecognitionService{public:SpeechRecognitionServiceImpl(const yangz::SpeechRecognitionClient::ptr &src_client): _src_client(src_client){}~SpeechRecognitionServiceImpl() {}

相关文章:

微服务即时通信系统---(六)语音识别子服务

目录 功能设计 模块划分 业务接口/功能示意图 服务实现流程思想 服务代码实现 编写proto文件 服务端创建子类(SpeechRecognitionServiceImpl)完成RPC服务调用函数重写 SpeechRecognize(语音识别) 服务端完成语音识别子服务类(SpeechRecognitionServer) 注意 …...

JavaWeb基础专项复习5——请求对象和响应对象request and response

系列文章目录 1、JavaWeb基础专项复习1——XML文件-CSDN博客 2、JavaWeb基础专项复习2——JSP文件-CSDN博客 3、JavaWeb基础专项复习2——Servlet相关知识-CSDN博客 4、JavaWeb基础专项复习4——会话对象Session and Cookie-CSDN博客 文章目录 系列文章目录文章目录1、Tom…...

mac下载MAMP6.8.1;解决mac使用小皮面板安装php7.4

因为mac的小皮面板没有php7.4了 链接:c9cc270e6961c17c.dmg官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘 鹅选一 附上大佬写的教程:MAMP PRO教程 - 牛奔 - 博客园 更新一下,2-27 昨天已经可以使用php7.4了,我就在想能…...

大模型WebUI:Gradio全解12——LangChain原理、架构和组件(3)

大模型WebUI:Gradio全解12——LangChain原理、架构和组件(3) 前言本篇摘要12. LangChain原理及agents构建Gradio UI12.3 LangChain架构12.3.1 LangChain12.3.2 Integration Packages1. 概念2. 示例12.3.3 LangGraph1. 概念2. 示例12.3.4 LangGraph Platform1. 概览2. 优势分…...

redis --- 相关基础知识整理

目录 一、基本1、数据结构2、有序集合的编码1. 压缩列表(Ziplist)2. 跳跃列表(SkipList)3. 动态转换机制 二、应用场景三、持久化1、 RDB 持久化2、 AOF 持久化3、 混合持久化(RDB AOF)4、 RDB和AOF的对比…...

如何用 Python 进行机器学习

文章目录 前言1. 环境准备Python安装选择Python开发环境安装必要库 2. 数据收集与加载3. 数据探索与可视化4. 数据预处理5. 模型选择与训练6. 模型评估7. 模型调优8. 模型部署 前言 使用 Python 进行机器学习一般可以按照以下步骤进行,下面将详细介绍每个步骤及对应…...

《Effective Objective-C》阅读笔记(下)

目录 内存管理 理解引用计数 引用计数工作原理 自动释放池 保留环 以ARC简化引用计数 使用ARC时必须遵循的方法命名规则 变量的内存管理语义 ARC如何清理实例变量 在dealloc方法中只释放引用并解除监听 编写“异常安全代码”时留意内存管理问题 以弱引用避免保留环 …...

解释Promise的工作原理及其状态

Promise的工作原理及其状态 1. 什么是Promise? Promise是JavaScript中的一种用于处理异步操作的对象。它代表一个可能在未来某个时间点完成的操作,并且可以有三种状态:待定(pending)、已解决(fulfilled&a…...

SHELL32!ILCombine函数分析之连接两个idl

SHELL32!ILCombine函数分析之连接两个idl 第一部分: STDAPI_(LPITEMIDLIST) ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) { // Let me pass in NULL pointers if (!pidl1) { if (!pidl2) { return NULL; …...

es 生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片?

Elasticsearch 生产集群部署架构及面试解析 在后端面试中,Elasticsearch(ES)是一个经常被问到的技术点,尤其是涉及到 生产环境的部署架构。面试官往往希望通过这个问题来验证你是否有真正的生产经验,而不仅仅是玩过一…...

Qt跨线程信号槽调用:为什么信号不能像普通函数那样调用

1. 信号与槽机制的基本原理 在 Qt 中,信号与槽机制是一种事件驱动的通信方式,用于对象之间的解耦交互。其关键特点如下: 信号不能直接调用 信号只是一个声明,并没有实际的函数实现。它们通过 emit 关键字在对象内部被触发&…...

ollama和open-webui部署ds

博客地址: ollama和open-webui部署ds 引言 最近,deepseek是越来越火,我也趁着这个机会做了下私有化部署,我这边使用的ollama和 open-webui实现的web版本 ollama 简介 Ollama 是一个开源的工具,专门用于简化机器学…...

泛微Ecode新增Button调用服务器中的JSP页面里的方法

前言 前端Ecode调用 后端接口编写 JSP文件方法 总结 前言 因为我们是从之前E8版本升级到E9的,所以会有一些接口是通过jsp文件来实现前后端调用的,这里介绍的就是如果你有接口是写在jsp文件里面调用的,但是你又想在Ecode中调用的对应的接…...

LVS+Keepalived高可用群集配置案例

以下是一个 LVSKeepalived 高可用群集配置案例: 1、环境准备 LVS 主调度器(lvs1):IP 地址为 192.168.8.101,心跳 IP 为 192.168.4.101LVS 备调度器(lvs2):IP 地址为 192.168.8.102…...

杰发科技AC7801——滴答定时器获取时间戳

1. 滴答定时器 杰发科技7801内部有一个滴答定时器,该定时器是M0核自带的,因此可以直接用该定时器来获取时间戳。 同样,7803也可以使用该方式获取时间戳。 2. 滴答定时器原理 SysTick是一个24位的递减计数器,它从预设的重装载值…...

Pycharm使用matplotlib出现的问题(1、不能弹出图表 2、图表标题中文不显示)

Pycharm使用matplotlib出现的问题 问题1:Pycharm调试时出现:AttributeError: module backend_interagg has no attribute FigureCanvas. Did you mean: FigureCanvasAgg? 排查原因:可能是由于matplotlib后端设置不正确或与运行环境不兼容引…...

Cursor+pycharm接入Codeuim(免费版),Tab自动补全功能平替

如题,笔者在Cursor中使用pycharm写python程序,试用期到了Tab自动补全功能就不能用了,安装Codeuim插件可以代替这个功能。步骤如下: 1. 在应用商店中搜索扩展Codeuim,下载安装 2. 安装完成后左下角会弹出提示框&#x…...

spring--ApplicationContext和BeanFactory的区别(源码)

ApplicationContext 和 BeanFactory 是 Spring 框架中两个核心的接口,它们都用于管理和访问 Spring 容器中的 Bean,但在功能和使用场景上有显著的区别。以下是它们的详细对比,并结合源码进行讲解。 一、 功能对比 特性BeanFactoryApplicati…...

HTMLS基本结构及标签

HTML5是目前制作网页的核心技术&#xff0c;有叫超文本标记语言。 基本结构 声明部分位于文档的最前面&#xff0c;用于向浏览器说明当前文档使用HTML标准规范。 根部标签位于声明部分后&#xff0c;用于告知浏览器这是一个HTML文档。< html>表示文档开始&#xff0c;&l…...

【蓝桥杯嵌入式】各模块学习总结

系列文章目录 留空 文章目录 系列文章目录前言一、LED模块1.1 赛题要求1.2 模块原理图1.3 编写代码1.4 赛题实战 二、LCD模块2.1 赛题要求2.2 模块原理图2.3 编写代码2.4 赛题实战 三、按键模块3.1 赛题要求3.2 模块原理图3.3 编写代码3.4 赛题实战 四、串口模块4.1 赛题要求4…...

游戏鼠标优化工具:让普通鼠标在macOS上实现专业级体验

游戏鼠标优化工具&#xff1a;让普通鼠标在macOS上实现专业级体验 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 当你在Final Cut Pro中精准剪…...

利用快马平台与ccswitch快速构建可切换功能模块的web应用原型

今天想和大家分享一个快速验证前端功能模块切换方案的小技巧。最近在做一个需要动态切换不同功能模块的项目&#xff0c;尝试了用ccswitch工具配合InsCode(快马)平台来搭建原型&#xff0c;效果出乎意料地好。 为什么选择ccswitch ccswitch是一个轻量级的JavaScript工具&…...

颠覆式角色定制:开源工具Diablo Edit2如何重塑暗黑破坏神2游戏体验

颠覆式角色定制&#xff1a;开源工具Diablo Edit2如何重塑暗黑破坏神2游戏体验 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 在暗黑破坏神2的冒险旅程中&#xff0c;每位玩家都曾面临存档管理的…...

三步解决华硕笔记本性能优化难题:G-Helper全方位调控指南

三步解决华硕笔记本性能优化难题&#xff1a;G-Helper全方位调控指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix,…...

gte-base-zh效果惊艳:中文歌词风格迁移与语义相似度混合推荐

gte-base-zh效果惊艳&#xff1a;中文歌词风格迁移与语义相似度混合推荐 重要提示&#xff1a;本文所有内容仅供技术学习交流&#xff0c;严禁用于任何商业用途或违法活动。使用即表示同意自行承担所有责任。 1. 快速了解gte-base-zh模型 gte-base-zh是阿里巴巴达摩院训练的中…...

Java开发者福音:SpringBoot集成RexUniNLU,5分钟搞定零样本意图识别

Java开发者福音&#xff1a;SpringBoot集成RexUniNLU&#xff0c;5分钟搞定零样本意图识别 1. 为什么Java开发者需要关注RexUniNLU 在开发智能客服系统时&#xff0c;我们经常遇到这样的问题&#xff1a;用户会用各种不同的表达方式询问同一件事。"快递怎么还没到"…...

Multi-Agent在金融投研中的应用:从信息整合到报告生成实战

Multi-Agent在金融投研中的应用:从信息整合到报告生成实战 摘要/引言 开门见山 各位金融界的朋友、AI领域的探索者们,不知道你们有没有注意到一个现象:2023年以来,全球顶尖资管机构(如贝莱德、桥水、摩根大通)的投研团队中,“AI Agent协作小组”的曝光率突然暴涨——…...

千问3.5-9B多模态扩展:OpenClaw处理图片与文本混合任务

千问3.5-9B多模态扩展&#xff1a;OpenClaw处理图片与文本混合任务 1. 为什么需要本地多模态自动化 去年夏天&#xff0c;我电脑里堆积了上千张混杂着文字说明的截图——有技术文档片段、会议纪要、临时灵感记录。手动整理这些内容时&#xff0c;我突然意识到&#xff1a;如果…...

Win11+Ubuntu22.04双系统避坑指南:如何正确分配分区空间(含CUDA安装建议)

Win11Ubuntu 22.04双系统分区策略与CUDA开发环境配置实战 作为一名长期在深度学习领域工作的开发者&#xff0c;我经历过无数次双系统安装的"血泪史"。特别是当项目 deadline 临近&#xff0c;却因为分区不当导致 CUDA 无法安装时&#xff0c;那种绝望感至今难忘。本…...

基于51单片机的蓝牙+PM2.5+DHT11温湿度上下限报警系统设计

一、系统概述 设计以STC89C52RC单片机&#xff08;11.0592MHz晶振&#xff09;为核心&#xff0c;集成蓝牙通信&#xff08;HC-05&#xff09;、PM2.5空气质量检测&#xff08;GP2Y1010AU0F&#xff09;、DHT11温湿度检测三大模块&#xff0c;实现环境参数的实时采集、上下限报…...