Speech.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. namespace app\service\api;
  3. use app\service\ConfServiceFacade;
  4. use laytp\traits\Error;
  5. use think\facade\Cache;
  6. use think\facade\Config;
  7. use think\facade\Request;
  8. require_once IA_ROOT_WK.'/extend/baiduai/AipSpeech.php';
  9. class Speech
  10. {
  11. use Error;
  12. /**
  13. * phpmailer对象
  14. */
  15. protected $client;
  16. protected $conf;
  17. /**
  18. * 构造函数
  19. */
  20. public function __construct()
  21. {
  22. $this->conf = ConfServiceFacade::groupGet('system.ai');
  23. $this->client = new \AipSpeech($this->conf['app_id2'],$this->conf['api_key2'],$this->conf['secret_key2']);
  24. }
  25. /**
  26. * 人脸检测
  27. * @param $image //图片链接
  28. */
  29. public function asr($speech, $format, $rate) {
  30. return $this->client->asr($speech, $format, $rate);
  31. }
  32. public function asr2($speech)
  33. {
  34. $curl = curl_init();
  35. if(!empty($speech)){
  36. $data['speech'] = base64_encode($speech);
  37. $data['len'] = strlen($speech);
  38. }
  39. curl_setopt_array($curl, array(
  40. CURLOPT_URL => "https://vop.baidu.com/server_api",
  41. CURLOPT_TIMEOUT => 30,
  42. CURLOPT_RETURNTRANSFER => true,
  43. CURLOPT_CUSTOMREQUEST => 'POST',
  44. // speech 可以通过 $this.getFileBase64Content("C:\fakepath\f39569cce93a12fdab8fd2645c30c925.wav") 方法获取
  45. CURLOPT_POSTFIELDS =>'{"format":"wav","rate":16000,"channel":1,"cuid":"3","token":"","speech":"'.$data['speech'].'","len":'.$data['len'].',"token":"'. $this->getAccessToken() .'"}',
  46. CURLOPT_HTTPHEADER => array(
  47. 'Content-Type: application/json',
  48. 'Accept: application/json'
  49. ),
  50. ));
  51. $response = curl_exec($curl);
  52. curl_close($curl);
  53. return $response;
  54. }
  55. /**
  56. * 文本转语音
  57. * @param $image //图片链接
  58. */
  59. public function synthesis2($text) {
  60. if(empty($this->conf['app_id2'])){
  61. return true;
  62. }
  63. $curl = curl_init();
  64. curl_setopt_array($curl, array(
  65. CURLOPT_URL => "https://aip.baidubce.com/rpc/2.0/tts/v1/create?access_token={$this->getAccessToken()}",
  66. CURLOPT_TIMEOUT => 30,
  67. CURLOPT_RETURNTRANSFER => true,
  68. CURLOPT_CUSTOMREQUEST => 'POST',
  69. CURLOPT_POSTFIELDS =>'{"text":"'.$text.'","lang":"zh"}',
  70. CURLOPT_HTTPHEADER => array(
  71. 'Content-Type: application/json',
  72. 'Accept: application/json'
  73. ),
  74. ));
  75. $response = curl_exec($curl);
  76. curl_close($curl);
  77. return json_decode($response);
  78. // print_r($response);
  79. }
  80. public function query($taskIds)
  81. {
  82. $curl = curl_init();
  83. curl_setopt_array($curl, array(
  84. CURLOPT_URL => "https://aip.baidubce.com/rpc/2.0/tts/v1/query?access_token={$this->getAccessToken()}",
  85. CURLOPT_TIMEOUT => 30,
  86. CURLOPT_RETURNTRANSFER => true,
  87. CURLOPT_CUSTOMREQUEST => 'POST',
  88. CURLOPT_POSTFIELDS =>'{"task_ids":["'.$taskIds.'"]}',
  89. CURLOPT_HTTPHEADER => array(
  90. 'Content-Type: application/json',
  91. 'Accept: application/json'
  92. ),
  93. ));
  94. $response = curl_exec($curl);
  95. curl_close($curl);
  96. $res = json_decode($response);
  97. return $res;
  98. }
  99. /**
  100. * 使用 AK,SK 生成鉴权签名(Access Token)
  101. * @return string 鉴权签名信息(Access Token)
  102. */
  103. private function getAccessToken(){
  104. $curl = curl_init();
  105. $postData = array(
  106. 'grant_type' => 'client_credentials',
  107. 'client_id' => $this->conf['api_key2'],
  108. 'client_secret' => $this->conf['secret_key2']
  109. );
  110. curl_setopt_array($curl, array(
  111. CURLOPT_URL => 'https://aip.baidubce.com/oauth/2.0/token',
  112. CURLOPT_CUSTOMREQUEST => 'POST',
  113. CURLOPT_RETURNTRANSFER => true,
  114. CURLOPT_POSTFIELDS => http_build_query($postData)
  115. ));
  116. $response = curl_exec($curl);
  117. curl_close($curl);
  118. $rtn = json_decode($response);
  119. return $rtn->access_token;
  120. }
  121. }