最近在接入腾讯智聆口语评测遇到了一些问题,完成demo分享:
/**
* Created by PhpStorm.
* User: Shu_Q_Gang
* Date: 2018/10/23
* Time: 15:33
*/
namespace App;
class SpeechAssessment
{
/**
* @var string
* 请求接口地址
*/
public $url= 'https://soe.tencentcloudapi.com';
/**
* @var string
* 密钥 申请地址:https://console.cloud.tencent.com/cam/capi
*/
protected $SecretId = '申请的id';
protected $SecretKey = '申请的key';
/**
* @var string
* 签名原文串的拼接规则为
*
* 请求方法 + 请求主机 +请求路径 + ? + 请求字符串
*/
public $signStr = 'POSTsoe.tencentcloudapi.com/?';
/**
* @var float
* 年龄范围 1.0-4.0
*/
public $ScoreCoeff = 1.0;
/**
* @var int
* 评估模式,0:词模式, 1:句子模式
*/
public $EvalMode = 0;
/**
* @var int
* 语音输入模式,0流式分片,1非流式一次性评估
*/
public $WorkMode = 1;
/**
* @var string
* 地域
*/
public $Region = 'ap-guangzhou';
/**
* @var int
* 文件格式
*/
public $VoiceFileType = 3;
/**
* @param $SessionId
* 语音段唯一标识,一段语音一个SessionId
* $RefText 英文文本
*/
public function speechInit($SessionId,$RefText)
{
$param['Action'] = 'InitOralProcess';
$param['SecretId'] = $this->SecretId;
$param['Timestamp'] = time();
$param['Nonce'] = rand(1000,9999);
$param['Region'] = $this->Region;
$param['Version'] = '2018-07-24';
$param['SessionId'] = $SessionId ;
$param['RefText'] = $RefText;
$param['WorkMode'] = $this->WorkMode;
$param['EvalMode'] = $this->EvalMode;
$param['ScoreCoeff'] = $this->ScoreCoeff;
//签名
$param['Signature'] = $this->sign($param);
//请求
return $this->_sendRequest($param);
}
/**
* @param $file
* 文件地址
* @param $SessionId
* 语音段唯一标识,一段语音一个SessionId
*/
public function speechSend($file,$SessionId)
{
$param["Nonce"] = rand();
$param["Timestamp"] = time();
$param["Region"] = $this->Region;
$param["SecretId"] = $this->SecretId;
$param["Action"] = "TransmitOralProcess";
$param["Version"] = "2018-07-24";
$param["SeqId"] = "0";
$param["IsEnd"] = "1";
$param["VoiceFileType"] = $this->VoiceFileType;
$param["VoiceEncodeType"] = "1";
//加密
$UserVoiceData = base64_encode(file_get_contents($file));
$param["UserVoiceData"] = $UserVoiceData;
$param["SessionId"] = $SessionId;
//签名
$param['Signature'] = $this->sign($param);
//请求
return $this->_sendRequest($param);
}
/**
* @param $url
* @param $paramArray
* @param string $method
* @return mixed
* curl post 请求
*/
public function _sendRequest($paramArray, $method = 'POST')
{
$post = '';
foreach ( $paramArray as $k=>$v )
{
$post.=$k.'='.urlencode($v).'&';
}
$post = substr($post, 0, -1);
$curl = curl_init ( $this->url );
curl_setopt ( $curl, CURLOPT_HEADER, 0 );
curl_setopt ( $curl, CURLOPT_POST, 1);
curl_setopt ( $curl, CURLOPT_POSTFIELDS, $post );
//不需要证书
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, false);
//不打印返回结果到页面
curl_setopt($curl,CURLOPT_RETURNTRANSFER, true);
$result = curl_exec ( $curl );
curl_close ( $curl );
return $result;
}
/**
* @param $param
* @return string
* 签名
*/
public function sign($param)
{
// 参数排序
ksort($param);
// 生成待签名字符串
$signStr = $this->signStr;
foreach ( $param as $key => $value ) {
$signStr = $signStr . $key . "=" . $value . "&";
}
$signStr = substr($signStr, 0, -1);
// 生成签名
$signature = base64_encode(hash_hmac("sha1", $signStr, $this->SecretKey, true));
return $signature;
}
}
调用:/**
* 测试调用
*/
public function test()
{
$SessionId = rand(1000000,9999999);
$obj = new SpeechAssessment();
//设置文件类型 mp3 avw
$obj->VoiceFileType = 2;
//初始化
$init = $obj->speechInit($SessionId,'action');
//发生语音 本地文件地址
$fileDir = public_path().'/video/action.wav';
$send = $obj->speechSend($fileDir,$SessionId);
dd($send);
}
注意语音格式必须是文档要求的格式PHP提供转码扩展安装地址参考: