使用百度云AI C++SDK在windows上进行在线语音识别

前言

       本学期在上数字语音处理的课程,结课之后老师要求每人做一个语音识别或者合成的作业,需要使用kaldi等框架进行实现。了解到百度云提供了语音识别相关的SDK,同时也是为了对相关流程做一个初步的了解,因此这里先下载相关的SDK来体验一把。原本以为也就下几个SDK调用一下,最多个把钟的事情,不曾想在依赖库的编译上花费了好几个小时。

       整个SDK的使用方面其实非常简单,主要是需要安装相关的依赖库,而这些依赖库的编译等工作耗时较多,下面逐步介绍如何从零开始完成整个过程的搭建。

平台与相关工具

        windows、visual studio 2019、visual studio 2013、Cmake、Perl、Python

语音识别SDK

        搜索“百度语音识别”,点击进入百度AI云开放平台,之后根据相关提示注册账号并下载 “识别、合成RESTful API C++SDK”。 将下载完成的SDK包解压,并使用vs2019建立项目,将相关文件添加到项目目录中。

        

jsoncpp

        JSON: JavaScript Object Notation(JavaScript 对象表示法),是存储和交换文本信息的语法。它类似 XML,但比 XML 更小、更快,更易解析。

        由于SDK中进行了网络通信,且相关通信内容是通过json格式保存的,因此需要为SDK提供json依赖库。根据官方文档的要求,jsoncpp版本需大于1.6.2,且不支持0.X版本。

       下载地址:https://github.com/open-source-parsers/jsoncpp/releases/tag/1.9.4

        安装:将下载的压缩包解压出来,注意不要使用中文路径。同时在解压文件夹中建立build文件夹,用于存放后续生成的文件。

        

       使用CMake,在源与目标地址栏填写相关信息,如下图所示:

        

        接着点击Configure按钮,弹出选项卡,选择如图所示的visual studio 16 2019,然后点击finish。配置完成后,点击Generate生成vs2019解决方案,若无意外将提示生成完成。

        

       在目录下打开命令行窗口,然后运行命令 python .\ amalgamate.py, 将会生成 dist文件夹,里面包含jsoncpp相关的头文件。

        

       

       接着进入build文件夹,使用vs2019打开jsoncpp.sln解决方案,并点击重新生成解决方案,最终在build\lib和build\bin中生成相关的lib文件与dll文件。

        

 

OpenSSL

        OpenSSL是一个开放源代码软件包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。这里的openssl是百度云SDK的另一个依赖库,主要用于对其libcurl库的网络加密功能支撑。

       下载地址:https://www.openssl.org/source/

        下载1.1.1k版本并解压,注意不要存在中文路径。查看解压文件中的INSTALL文档,该文档将指导我们如何进行openssl库的编译工作。

        

        通过Quick Start部分的介绍,发现在windows上编译基本只需要四条命令,前提是需要先安装Perl软件。

        

       使用管理员权限打开vs2013 X86本机工具命令行提示窗口,并切换到openssl所在目录,依此输入如下几条命令:

       1、perl Configure VC-WIN32 no-asm --prefix=E:\openssl

        

       2、nmake。

       3、nmake test。此步骤主要测试第二步中生成的文件是否正确,耗时很长。

       4、nmake install。此步骤将生成的文件移动到第一步中prefix指定的路径

       至此,openssl的编译工作完成,生成文件存放在prefix指定的路径中。

 

libcurl

       libcurl主要功能就是用不同的协议连接和沟通不同的服务器~也就是相当封装了的sockPHP 支持libcurl(允许你用不同的协议连接和沟通不同的服务器)。

       下载地址:https://github.com/curl/curl

       将文件解压出来,注意不要包含中文路径。然后找到projects/windows/VC12文件夹,使用vs2013打开curl-all.sln解决方案,根据自己的需要选择对应的配置项进行配置。比如我需要编译debug+openssl版本的库,则选择DLL Debug  DLL-Openssl版本

      

      配置openssl相关文件路径,之后重新编译,最终得到libcurl库。生成的文件存放在.\build\Win32\VC12\DLL Debug - DLL OpenSSL文件夹中

      

      

      

      

 

demo编写

      完成依赖库的编译之后,接下来的工作就简单许多了。我们打开先前建立的项目目录,并建立include和lib文件夹。分别将curl解压文件夹中的include\cur、openssl解压文件夹中的include\openssl和jsoncpp解压文件夹中dist\json复制到新创建的include文件夹中,接着将之前生成的各个依赖库文件复制到新创建的lib文件夹中。

       

      

      

       在demo项目中,修改项目属性,添加依赖文件路径。

      

      

      最后将jsoncpp\dist文件夹中的jsoncpp.cpp文件复制到项目目录下,并导入到项目源文件中。

      

      

      编写代码如下:

#include "aip-cpp-sdk-4.15.4/speech.h"

#include <iostream>
#include <vector>
#include <string>


using namespace std;
using namespace aip;
using namespace Json;

inline std::string Utf8ToGbk(const std::string& strUtf8)//传入的strUtf8是UTF-8编码
{
	//UTF-8转unicode
	int len = MultiByteToWideChar(CP_UTF8, 0, strUtf8.c_str(), -1, NULL, 0);
	wchar_t* strUnicode = new wchar_t[len];//len = 2
	wmemset(strUnicode, 0, len);
	MultiByteToWideChar(CP_UTF8, 0, strUtf8.c_str(), -1, strUnicode, len);

	//unicode转gbk
	len = WideCharToMultiByte(936, 0, strUnicode, -1, NULL, 0, NULL, NULL);
	char* strGbk = new char[len];//len=3 本来为2,但是char*后面自动加上了\0
	memset(strGbk, 0, len);
	WideCharToMultiByte(936, 0, strUnicode, -1, strGbk, len, NULL, NULL);

	std::string strTemp(strGbk);//此时的strTemp是GBK编码
	delete[]strUnicode;
	delete[]strGbk;
	strUnicode = NULL;
	strGbk = NULL;
	return strTemp;
}

int main()
{
    //相关用户参数,请按照自己的实际情况填写
	string app_id = "";
	string api_key = "";
	string secret_key = "";

	aip::Speech client(app_id, api_key, secret_key);
	string file_content;
	aip::get_file_content("16k.pcm", &file_content);
	Json::Value result = client.recognize(file_content, "pcm", 16000, aip::null);

	//返回结果是一个列表,因此输出所有可能的识别结果
	for (int i = 0; i < result["result"].size(); i++)
	{
		cout << Utf8ToGbk(result["result"][0].asString()) << endl;
	}
	return 0;
}

       编译完成后,需要在Debug文件夹中添加之前依赖库生成的相关dll文件才能运行。

       

       

结束

       以上工作只是基于自己实践过程的相关记录,并不保证能够完全适用于所有人的情况。

      

 

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值