【c++中间件】语音识别SDK && 二次封装

文章目录

相关链接

使用前先查阅下面的使用文档:

Ⅰ. 安装使用

​ 第一步:登录百度云

​ 网址:https://login.bce.baidu.com/

​ 第二步: 搜索语音技术

​ 第三步:领取免费试用资源


​ 第四步:创建应用

​ 第五步:获取秘钥

​ 在创建完毕应用后,平台将会分配给您此应用的相关凭证,主要为 AppIDAPI KeySecret Key。以上三个信息是您应用实际开发的主要凭证,请您妥善保管。下图为示例内容:

​ 第六步:使用 sdk 调用服务

​ 下载地址:https://ai.baidu.com/sdk

​ 上述服务下载完解压放到服务器中即可!

​ 最后安装 sdk 所需依赖:

shell 复制代码
# 安装 jsoncpp
sudo apt install libjsoncpp-dev

# 安装 libcurl
sudo apt install curl

# 安装 openssl
# ubuntu 22.04 默认安装了

测试样例

​ 测试代码的目录如下所示,我们只需要用到里面的 speech.h 文件:

cpp 复制代码
#include "../aip-cpp-sdk/speech.h"  // 引入百度语音识别 SDK 头文件

// 语音识别函数
void asr(aip::Speech &client)
{
    // 创建一个字符串变量来存储音频文件的内容
    std::string file_content;

    // 读取本地的音频文件(16k.pcm),并将其内容存入 file_content
    aip::get_file_content("16k.pcm", &file_content);

    // 调用百度语音识别 SDK 中的 recognize 方法进行语音识别
    // file_content:传入音频数据
    // "pcm":音频格式,指示音频文件是 PCM 编码格式
    // 16000:音频采样率(16kHz)
    // aip::null:附加参数,通常为 null
    Json::Value result = client.recognize(file_content, "pcm", 16000, aip::null);

    // 检查识别结果的错误码,如果错误码不为 0,表示识别失败
    if (result["err_no"].asInt() != 0) {
        std::cout << result["err_msg"].asString() << std::endl;
        return;  
    }

    // 输出识别结果的第一个元素,通常是转录后的文本
    std::cout << result["result"][0].asString() << std::endl;
}

int main()
{
    // 设置应用的 APPID/AK/SK(需要从百度云获取)
    std::string app_id = "117644864";  
    std::string api_key = "5Bt1BCHIJcJIO2AoMbBsSqC9"; 
    std::string secret_key = "Y1gqrypoZHMWAoh6M20UH88wfbn89uRw";  

    // 初始化百度语音识别客户端对象,传入应用的 APPID、API 密钥和 Secret Key
    aip::Speech client(app_id, api_key, secret_key);

    asr(client); // 进行语音识别
    return 0;  
}

makefile 文件:

makefile 复制代码
main : main.cc
	g++ -std=c++17 $^ -o $@ -lcurl -lcrypto /usr/lib/x86_64-linux-gnu/libjsoncpp.so.1.8.4 # 版本问题特殊处理

​ 然后这里用到的 16k.pcm 文件的话,到码云上面下载即可!

Ⅱ. 二次封装

cpp 复制代码
#pragma once
#include "aip-cpp-sdk/speech.h"
#include "logger.hpp"

// ASRClient 类封装了百度语音识别 SDK 的接口
class ASRClient 
{
public:
    using ptr = std::shared_ptr<ASRClient>;
public: 
    ASRClient(const std::string &app_id,
            const std::string &api_key,
            const std::string &secret_key)
        : _client(app_id, api_key, secret_key) 
    {}

    std::string recognize(const std::string &speech_data, std::string &err)
    {
        Json::Value result = _client.recognize(speech_data, "pcm", 16000, aip::null);
        if (result["err_no"].asInt() != 0) {
            LOG_ERROR("语音识别失败:{}", result["err_msg"].asString());
            err = result["err_msg"].asString();
            return std::string();
        }
        return result["result"][0].asString();
    }
private:
    aip::Speech _client;
};

测试代码

cpp 复制代码
#include "../../../header/asr.hpp"
#include "gflags/gflags.h"

DEFINE_string(app_id, "117644864", "语音平台应用ID");
DEFINE_string(api_key, "5Bt1BCHIJcJIO2AoMbBsSqC9", "语音平台API密钥");
DEFINE_string(secret_key, "Y1gqrypoZHMWAoh6M20UH88wfbn89uRw", "语音平台加密密钥");

DEFINE_bool(run_mode, false, "程序的运行模式,false-调试; true-发布;");
DEFINE_string(log_file, "", "发布模式下,用于指定日志的输出文件");
DEFINE_int32(log_level, 0, "发布模式下,用于指定日志输出等级");

int main(int argc, char *argv[])
{
    google::ParseCommandLineFlags(&argc, &argv, true);
    init_logger(FLAGS_run_mode, FLAGS_log_file, FLAGS_log_level);

    ASRClient client(FLAGS_app_id, FLAGS_api_key, FLAGS_secret_key);

    std::string file_content, err;
    aip::get_file_content("16k.pcm", &file_content); // 读取本地的音频文件(16k.pcm),并将其内容存入 file_content

    std::string res = client.recognize(file_content, err); // 进行语音识别
    if (res.empty())
    {
        LOG_ERROR("识别失败:{}", err);
        return -1;
    }
    std::cout << res << std::endl;
    return 0;
}

makefile 文件:

makefile 复制代码
test : test.cc
	g++ -std=c++17 $^ -o $@ -lfmt -lspdlog -lgflags -lcurl -lcrypto /usr/lib/x86_64-linux-gnu/libjsoncpp.so.1.8.4
相关推荐
晨非辰2 小时前
C++ 波澜壮阔 40 年:从基础I/O到函数重载与引用的完整构建
运维·c++·人工智能·后端·python·深度学习·c++40周年
艾莉丝努力练剑5 小时前
【C++:C++11】C++11新特性深度解析:从可变参数模板到Lambda表达式
c++·stl·c++11·lambda·可变模版参数
同学小张7 小时前
【端侧AI 与 C++】1. llama.cpp源码编译与本地运行
开发语言·c++·aigc·llama·agi·ai-native
踢球的打工仔8 小时前
PHP面向对象(7)
android·开发语言·php
汤姆yu10 小时前
基于python的外卖配送及数据分析系统
开发语言·python·外卖分析
Yue丶越10 小时前
【C语言】字符函数和字符串函数
c语言·开发语言·算法
晚风吹人醒.10 小时前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件
翔云 OCR API10 小时前
人脸识别API开发者对接代码示例
开发语言·人工智能·python·计算机视觉·ocr
V***u45311 小时前
MS SQL Server partition by 函数实战二 编排考场人员
java·服务器·开发语言