最近在接入腾讯智聆口语评测遇到了一些问题,完成demo分享:
<?PHP /** * 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, -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提供转码扩展安装地址参考:
http://www.xiaoshu168.com/linux/276.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。