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

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

目录

功能设计

模块划分

业务接口/功能示意图

服务实现流程思想

服务代码实现

编写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() {}


http://www.kler.cn/a/566649.html

相关文章:

  • 【Java】Spring Boot全量YAML配置说明
  • 爬虫获取 item_get 接口:获得VIP商品详情的完整指南
  • Java语言Leetcode中常用的一些基础语法
  • 性能测试测试策略制定|知名软件测评机构经验分享
  • 经典算法 统计数字问题(常数时间解决)
  • LeetCode 热门100题-除自身以外数组的乘积
  • 【原创】Ubuntu 24搭建Ollama+ DeepSeek局域网服务器
  • 不同Embedding模型与大语言模型(LLM)的交互主要通过语义向量传递实现
  • 对泰坦尼克号沉没事件幸存者数据分析和预测
  • 如何用python画一棵分形树
  • [C++] enum 以及 enum class 简单用法
  • 一文掌握Splash的详细使用
  • QT Creator添加延迟的方法
  • 爬取网易云歌单信息并分析
  • 有向图的拓扑排序-BFS求解
  • 如何选择DevOps平台?GitHub、GitLab、BitBucket、Jenkins对比与常见问题解答
  • javascript经典练习题-语法与特性
  • word转换为pdf后图片失真解决办法、高质量PDF转换方法
  • HTML 基础 (快速入门)详细步骤和示例
  • 编程小白冲Kaggle每日打卡(17)--kaggle学堂:<机器学习简介>随机森林