baidu_asr_example.cpp
Go to the documentation of this file.
1 #include "asr/baidu/asr_online.h"
2 #include <iostream>
3 #include <thread>
4 // base_path表示到xbot_talker的绝对或者相对路径.
5 const std::string base_path = "../../..";
6 const int ONE_CHANNEL = 1; // 单声道
7 const int TWO_CHANNEL = 2; // 双声道测试只能用于读取已有pcm文件识别
8 
9 typedef enum ASR_MODE {
12 
13 } ASR_MODE;
14 
15 void usage(int& asr_mode)
16 {
17  std::cout << "--------- baidu asr demo ------------" << std::endl;
18  std::cout << "这是百度在线语音识别的示例demo.\n你可以选择通过已录好的pcm文件或者实时录音进行测试." << std::endl;
19  std::cout << "0:选择已录好的pcm音频文件进行测试;" << std::endl;
20  std::cout << "1:通过实时录音进行测试." << std::endl;
21  std::cout << "请输入0或1选择不同方式:" << std::endl;
22  std::cout << "asr_mode :_\b";
23  std::cin >> asr_mode;
24 }
25 
26 // 选择已录好的pcm音频文件进行ASR
27 void fileToASR(const std::string pcm_file)
28 {
29  BaiduAsrOnline baidu_sr_online;
30  // 设置百度在线语音识别相关参数
31  baidu_sr_online.setAsrParams(base_path, pcm_file, ONE_CHANNEL);
32  // 百度语音识别模块的初始化,设置asr相关参数
33  baidu_sr_online.initAndConfigAsr();
34  // 获取百度在线语音识别的Token
35  baidu_sr_online.speechGetToken();
36  // 读取pcm文件里的音频数据
37  baidu_sr_online.getPcmFileData();
38  char* recog_result_online;
39  // 百度在线语音识别并获取识别结果
40  recog_result_online = baidu_sr_online.runAsrAndRecog();
41  // 从完整的json语音识别结果中解析出需要的字符串结果
42  std::string baidu_online_result = baidu_sr_online.resultFromJson();
43  std::cout << "Online asr result is :" << recog_result_online << std::endl;
44  std::cout << "Online asr finall result is :" << baidu_online_result << std::endl;
45  // 一次识别结束后释放资源
46  baidu_sr_online.uninitAsr();
47 }
48 
49 // 通过实时录音进行asr
50 void recordToASR(const std::string pcm_file)
51 {
52  BaiduAsrOnline baidu_sr_online;
53  // 设置百度在线语音识别相关参数
54  baidu_sr_online.setAsrParams(base_path, pcm_file, ONE_CHANNEL);
55  // 百度语音识别模块的初始化,设置asr相关参数
56  baidu_sr_online.initAndConfigAsr();
57  // 获取百度在线语音识别的Token
58  baidu_sr_online.speechGetToken();
59  // record_time 录音时长(s),可修改
60  float record_time = 3.5;
61  // enable_record_save是否将录音保存到pcm文件
62  bool enable_record_save = true;
63  struct DataBuff pcm_buff = { NULL, 0 };
64  // 录音
65  pcm_buff = baidu_sr_online.recordThroughMIC(record_time, enable_record_save);
66  // 获取pcm数据
67  baidu_sr_online.getPCMData(pcm_buff);
68  char* recog_result_online;
69  // 百度在线语音识别并获取识别结果
70  recog_result_online = baidu_sr_online.runAsrAndRecog();
71  // 从完整的json语音识别结果中解析出需要的字符串结果
72  std::string baidu_online_result = baidu_sr_online.resultFromJson();
73  std::cout << "Online asr result is :" << recog_result_online << std::endl;
74  std::cout << "Online asr finall result is :" << baidu_online_result << std::endl;
75  // 一次识别结束后释放资源
76  baidu_sr_online.uninitAsr();
77 }
78 int main(int argc, char** argv)
79 {
80  int asr_mode;
81  usage(asr_mode);
82  // pcm_file表示用于用于作为输入的音频文件,默认为xbot_talker/defaultconfig/audio/nihao_test.pcm.
83  const std::string default_pcm_file = base_path + "/defaultconfig/audio/nihao_test.pcm";
84  std::string pcm_file;
85  if (asr_mode == READ_PCM_FILE_TO_ASR)
86  {
87  /*** 选择已录好的pcm音频文件进行测试 ***/
88  std::cout << "请输入用于测试的pcm文件,若输入为d,则用默认的文件进行测试:";
89  std::cin >> pcm_file;
90  if (pcm_file == "d")
91  {
92  pcm_file = default_pcm_file;
93  }
94  fileToASR(pcm_file);
95  }
96  else if (asr_mode == RECORDE_TO_ASR)
97  {
98  /*** 通过实时录音进行测试 ***/
99  recordToASR(default_pcm_file);
100  }
101  else
102  {
103  std::cout << "无效的awaken_mode模式的选择!!!" << std::endl;
104  exit(1);
105  }
106 }
const int TWO_CHANNEL
void initAndConfigAsr()
百度语音识别模块的初始化,设置asr相关参数.
Definition: asr_online.cpp:34
void setAsrParams(const std::string base_path, const std::string pcm_file, const int channel)
设置语音模块需外部传入的路径等参数.
Definition: asr_online.cpp:28
int main(int argc, char **argv)
void uninitAsr()
一次识别结束后释放资源.
Definition: asr_online.cpp:268
百度语音识别模块接口头文件. TODO: 还需要添加版权、版本等信息
void fileToASR(const std::string pcm_file)
std::string resultFromJson()
从完整的json语音识别结果中解析出需要的字符串结果.
Definition: asr_online.cpp:241
char * runAsrAndRecog()
将pcm_data_结构体里存储的音频用于百度在线语音识别并获取识别结果.
Definition: asr_online.cpp:88
void recordToASR(const std::string pcm_file)
void speechGetToken()
获取百度在线语音识别的Token.
Definition: asr_online.cpp:55
const std::string base_path
struct DataBuff recordThroughMIC(const float record_time, bool enable_audio_save)
录音接口.
Definition: asr_online.cpp:187
void usage(int &asr_mode)
void getPcmFileData()
读取pcm文件里的音频数据,并将数据的内容和数据大小存入pcm_data_结构体.
Definition: asr_online.cpp:83
const int ONE_CHANNEL
void getPCMData(struct DataBuff pcm_buff)
获取pcm数据接口.
Definition: asr_online.cpp:158


xbot_talker
Author(s): wangxiaoyun
autogenerated on Sat Oct 10 2020 03:27:53