百度语音识别rest html,百度语音识别REST API使用方法(含C++代码)——不需要集成SDK的方法...

已经介绍了百度语音识别REST API的使用步骤和功能介绍,这篇文章主要通过一个实例代码来展示如何使用该API。

本文代码为C++版,可以用于C环境的应用开发中,下面介绍其中重要的代码。

下面代码是一个可以使用该方式进行语音识别功能的实例代码

#include

#include

#include "curl/include/curl/curl.h"

#include "curl/include/curl/easy.h"

#include "json-cpp/include/json.h"

#include "base64.h"

#define MAX_BUFFER_SIZE 512

#define MAX_BODY_SIZE 1000000

static size_t writefunc(void *ptr, size_t size, size_t nmemb, char **result)

{

size_t result_len = size * nmemb;

*result = (char *)realloc(*result, result_len + 1);

if (*result == NULL)

{

printf("realloc failure!\n");

return 1;

}

memcpy(*result, ptr, result_len);

(*result)[result_len] = '\0';

printf("%s\n", *result);

return result_len;

}

int main (int argc,char* argv[])

{

if (argc != 2)

{

printf("Usage: %s audiofile\n", argv[0]);

return -1;

}

FILE *fp = NULL;

fp = fopen(argv[1], "r");

if (NULL == fp)

{

return -1;

}

fseek(fp, 0, SEEK_END);

int content_len = ftell(fp);

fseek(fp, 0, SEEK_SET);

char *audiodata = (char *)malloc(content_len);

fread(audiodata, content_len, sizeof(char), fp);

//put your own params here

char *cuid = "";

char *apiKey = "";

char *secretKey = "";

std::string token;

char host[MAX_BUFFER_SIZE];

snprintf(host, sizeof(host),

"https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s",

apiKey, secretKey);

FILE* fpp = NULL;

char cmd[MAX_BUFFER_SIZE];

char* result = (char*)malloc(MAX_BUFFER_SIZE);

char* curl_cmd = "curl -s ";

char* yinhao = "\"";

strcpy(cmd, curl_cmd);

strcat(cmd, yinhao);

strcat(cmd, host);

strcat(cmd, yinhao);

fpp = popen(cmd, "r");

fgets(result, MAX_BUFFER_SIZE, fpp);

pclose(fpp);

if (result != NULL)

{

Json::Reader reader;

Json::Value root;

if (reader.parse(result, root, false))

{

token = root.get("access_token","").asString();

}

}

memset(host, 0, sizeof(host));

snprintf(host, sizeof(host), "%s", "http://vop.baidu.com/server_api");

#ifdef _METHOD_1_

//method 1

char tmp[MAX_BUFFER_SIZE];

memset(tmp, 0, sizeof(tmp));

char body[MAX_BODY_SIZE];

memset(body, 0, sizeof(body));

std::string decode_data = base64_encode((const unsigned char *)audiodata, content_len);

if (0 == decode_data.length())

{

printf("base64 encoded data is empty.\n");

return 1;

}

Json::Value buffer;

Json::FastWriter trans;

buffer["format"] = "pcm";

buffer["rate"] = 8000;

buffer["channel"] = 1;

buffer["token"] = token.c_str();

buffer["cuid"] = cuid;

buffer["speech"] = decode_data;

buffer["len"] = content_len;

// buffer["url"] = url;

// buffer["callback"] = callback;

content_len = trans.write(buffer).length();

memcpy(body, trans.write(buffer).c_str(), content_len);

CURL *curl;

CURLcode res;

char *resultBuf = NULL;

struct curl_slist *headerlist = NULL;

snprintf(tmp, sizeof(tmp), "%s", "Content-Type: application/json; charset=utf-8");

headerlist = curl_slist_append(headerlist, tmp);

snprintf(tmp, sizeof(tmp), "Content-Length: %d", content_len);

headerlist = curl_slist_append(headerlist, tmp);

curl = curl_easy_init();

curl_easy_setopt(curl, CURLOPT_URL, host);

curl_easy_setopt(curl, CURLOPT_POST, 1);

curl_easy_setopt(curl, CURLOPT_TIMEOUT, 30);

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body);

curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, content_len);

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc);

curl_easy_setopt(curl, CURLOPT_WRITEDATA, &resultBuf);

res = curl_easy_perform(curl);

if (res != CURLE_OK)

{

printf("perform curl error:%d.\n", res);

return 1;

}

curl_slist_free_all(headerlist);

curl_easy_cleanup(curl);

#endif

#ifdef _METHOD_2_

//second way, post raw data

char tmp[MAX_BUFFER_SIZE];

memset(tmp, 0, sizeof(tmp));

snprintf(tmp, sizeof(tmp), "?cuid=%s&token=%s", cuid, token.c_str());

strcat(host, tmp);

CURL *curl;

CURLcode res;

char *resultBuf = NULL;

struct curl_slist *headerlist = NULL;

snprintf(tmp, sizeof(tmp), "%s","Content-Type: audio/pcm; rate=8000");

headerlist = curl_slist_append(headerlist, tmp);

snprintf(tmp, sizeof(tmp), "Content-Length: %d", content_len);

headerlist = curl_slist_append(headerlist, tmp);

curl = curl_easy_init();

curl_easy_setopt(curl, CURLOPT_URL, host);

curl_easy_setopt(curl, CURLOPT_POST, 1);

curl_easy_setopt(curl, CURLOPT_TIMEOUT, 30);

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, audiodata);

curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, content_len);

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc);

curl_easy_setopt(curl, CURLOPT_WRITEDATA, &resultBuf);

res = curl_easy_perform(curl);

if (res != CURLE_OK)

{

printf("perform curl error:%d.\n", res);

return 1;

}

curl_slist_free_all(headerlist);

curl_easy_cleanup(curl);

#endif

fclose(fp);

free(audiodata);

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值