Der Inhalt, der in diesem Artikel mit Ihnen geteilt wird, handelt von PHP-Anrufen beim iFlytek-Sprachdienst. Er hat einen gewissen Referenzwert.
Vor Kurzem arbeite ich an einem WeChat-Applet und muss eine Spracherkennung durchführen. Deshalb habe ich mich für iFlytek entschieden, einen bekannten inländischen Spracherkennungsdienst.
Mein Hintergrund ist PHP und ich bin während des Zugriffsprozesses auf einige Fallstricke gestoßen. Ich teile es hier in der Hoffnung, dass es Freunden in Not helfen kann
Vorbereitungsarbeiten
Bewerben Sie sich für ein iFlytek-Konto http://www.xfyun.cn/
IP-Whitelist hinzufügen (wirksam in 5-10 Minuten)
Bereiten Sie eine Audiodatei vor (WAV- oder PCM-Format)
AppID und APPKEY abrufen ( jeder APPKEY jedes Dienstes ist unterschiedlich)
const APP_ID = 'xxxx';const APP_KEY_IAT = 'xxxx'; //语音听写APPKEYconst APP_KEY_ISE = 'xxxx'; //语音评测APPKEYconst APP_KEY_TTS = 'xxxx'; //语音合成APPKEY
public function voiceIat($file_path){ $param = [ 'engine_type' => 'sms16k', 'aue' => 'raw' ]; $cur_time = (string)time(); $x_param = base64_encode(json_encode($param)); $header_data = [ 'X-Appid:'.self::APP_ID, 'X-CurTime:'.$cur_time, 'X-Param:'.$x_param, 'X-CheckSum:'.md5(self::APP_KEY_IAT.$cur_time.$x_param), 'Content-Type:application/x-www-form-urlencoded; charset=utf-8' ]; //Body $file_path = $file_path; $file_content = file_get_contents($file_path); $body_data = 'audio='.urlencode(base64_encode($file_content)); //Request $url = "http://api.xfyun.cn/v1/service/v1/iat"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_HTTPHEADER, $header_data); curl_setopt($ch, CURLOPT_POSTFIELDS, $body_data); $result = curl_exec($ch); curl_close($ch); return $result; }
Beispiel für ein Sprachdiktat :
voiceIat('a.wav');
public function voiceIse($file_path, $content){ $param = [ 'language' => 'cn', 'aue' => 'raw', 'category' => 'read_sentence' ]; $cur_time = (string)time(); $x_param = base64_encode(json_encode($param)); $header_data = [ 'X-Appid:'.self::APP_ID, 'X-CurTime:'.$cur_time, 'X-Param:'.$x_param, 'X-CheckSum:'.md5(self::APP_KEY_ISE.$cur_time.$x_param), 'Content-Type:application/x-www-form-urlencoded; charset=utf-8' ]; //Body $file_path = $file_path; $file_content = file_get_contents($file_path); $body_data = 'audio='.urlencode(base64_encode($file_content)).'&text='.urlencode($content); $url = "http://api.xfyun.cn/v1/service/v1/ise"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_HTTPHEADER, $header_data); curl_setopt($ch, CURLOPT_POSTFIELDS, $body_data); $result = curl_exec($ch); curl_close($ch); return $result; }
Beispiel für Sprachbewertung:
echo voiceIse('a.wav', '科大讯飞真给力');
public function voiceTts($content, $output_path){ $param = [ 'engine_type' => 'intp65', 'auf' => 'audio/L16;rate=16000', 'aue' => 'raw', 'voice_name' => 'xiaoyan', 'speed' => '0' ]; $cur_time = (string)time(); $x_param = base64_encode(json_encode($param)); $header_data = [ 'X-Appid:'.self::APP_ID, 'X-CurTime:'.$cur_time, 'X-Param:'.$x_param, 'X-CheckSum:'.md5(self::APP_KEY_TTS.$cur_time.$x_param), 'Content-Type:application/x-www-form-urlencoded; charset=utf-8' ]; //Body $body_data = 'text='.urlencode($content); //Request $url = "http://api.xfyun.cn/v1/service/v1/tts"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, TRUE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_HTTPHEADER, $header_data); curl_setopt($ch, CURLOPT_POSTFIELDS, $body_data); $result = curl_exec($ch); $res_header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $res_header = substr($result, 0, $res_header_size); curl_close($ch); if(stripos($res_header, 'Content-Type: audio/mpeg') === FALSE){ //合成错误 return substr($result, $res_header_size); }else{ file_put_contents($output_path, substr($result, $res_header_size)); return '语音合成成功,请查看文件!'; } }
Beispiel für Sprachsynthese:
echo voiceTts('科大讯飞真给力', 'a.wav');
Verwandte Empfehlungen:
Verwenden Sie PHP, um den Code in so aufzurufen Bibliotheksdatei
PHP ruft JD Alliance Kepler- und Zeus-API-Vorlagen auf
Das obige ist der detaillierte Inhalt vonPHP ruft den iFlytek-Sprachdienst auf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!