语音识别
百度 官方文档
通过场景识别优化,为车载导航,智能家居和社交聊天等行业提供语音解决方案,准确率达到90%以上,让您的应用绘“声”绘色
基本说明:
接口地址:http://vop.baidu.com/server_api
返回格式:json
请求方式:post
请求示例:
请求参数说明:
名称 类型 必填 说明
format string 必填 语音文件的格式,pcm 或者 wav 或者 amr。不区分大小写。推荐pcm文件
rate int 必填 采样率,16000,固定值
channel int 必填 声道数,仅支持单声道,请填写固定值 1
cuid int 必填 用户唯一标识,用来区分用户,计算UV值。建议填写能区分用户的机器 MAC 地址或 IMEI 码,长度为60字符以内。
token string 必填 开放平台获取到的开发者[access_token]获取 Access Token "access_token") 扫码关注公众号
dev_pid int 选填 不填写lan参数生效,都不填写,默认1537(普通话 输入法模型),dev_pid参数见本节开头的表格
lan string 选填,废弃参数 历史兼容参数,请使用dev_pid。如果dev_pid填写,该参数会被覆盖。语种选择,输入法模型,默认中文(zh)。 中文=zh、粤语=ct、英文=en,不区分大小写。
speech string 选填 本地语音文件的的二进制语音数据 ,需要进行base64 编码。与len参数连一起使用。
len int 选填 本地语音文件的的字节数,单位字节
返回参数说明:
名称 类型 说明
err_no int 错误码
err_msg string 错误码描述
sn string 语音数据唯一标识,系统内部产生。如果反馈及debug请提供sn。
result array ( [string,string,…]) 识别结果数组,返回1个最优候选结果。utf-8 编码。
JSON返回示例:
{
	"corpus_no": "6433214037620997779",
	"err_msg": "success.",
	"err_no": 0,
	"result": ["北京科技馆,"],
	"sn": "371191073711497849365"
}
服务级错误码参照
错误码 说明
3300 用户输入错误
3301 用户输入错误
3302 用户输入错误
3303 服务端问题
3304 用户请求超限
3305 用户请求超限
3307 服务端问题
3308 用户输入错误
3309 用户输入错误
3310 用户输入错误
3311 用户输入错误
3312 用户输入错误
3313 服务端问题
3314 用户输入错误
3315 服务端问题
3316 用户输入错误
完整教学代码示例
<?php
/**
 * Created by PhpStorm.
 * User: FZS
 * Time: 2019/3/13 17:10
 */
//----------------------------------
// 百度语音识别调用类
//----------------------------------
class freeApi{
    private $apiKey = false; //百度应用AppID
    private $secretKey = false; //百度应用API Key
    private $tokenUrl = 'https://aip.baidubce.com/oauth/2.0/token';
    private $apiUrl = 'https://vop.baidu.com/server_api';
    public function __construct($apikey,$secretkey){
        $this->apiKey = $apikey;
        $this->secretKey = $secretkey;
    }
    /**
     * 获取token
     * @return array
     */
    public function getToken(){
        $params = [
            'grant_type' => 'client_credentials',
            'client_id'  => $this->apiKey,
            'client_secret' => $this->secretKey,
        ];
        $o = "";
        foreach ( $params as $k => $v )
        {
            $o.= "$k=" . urlencode( $v ). "&" ;
        }
        $params = substr($o,0,-1);
        return $this->returnArray($this->freeApiCurl($this->tokenUrl,$params,1));
    }
    /**
     * 将JSON内容转为数据,并返回
     * @param string $content [内容]
     * @return array
     */
    public function returnArray($content){
        return json_decode($content,true);
    }
    /**
     * 获取结果
     * @return array
     */
    public function getResult(){
        $speech = file_get_contents('http://speech-doc.gz.bcebos.com/rest-api-asr/public_audio/16k.pcm');
        $len = strlen($speech);
        $params = [
            'format' => 'pcm',
            'rate'  => 16000,
            'dev_pid' => 1536,
            'channel' => 1,
            'token' => $this->getToken()['access_token'],
            'cuid' => 'baidu_workshop',
            'len' => $len,
            'speech' => base64_encode($speech),
        ];
        $params = json_encode($params);
        return $this->returnArray($this->jsonPost($this->apiUrl,$params));

    }
    public function jsonPost($url,$data_json){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS,$data_json);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);
        curl_close($ch);
        return $response;
    }
    /**
     * 请求接口返回内容
     * @param  string $url [请求的URL地址]
     * @param  string $params [请求的参数]
     * @param  int $ipost [是否采用POST形式]
     * @return  string
     */
    public function freeApiCurl($url,$params=false,$ispost=0){
        $httpInfo = array();
        $ch = curl_init();
        curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
        curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
        curl_setopt( $ch, CURLOPT_USERAGENT , 'free-api' );
        curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );
        curl_setopt( $ch, CURLOPT_TIMEOUT , 60);
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
        if( $ispost )
        {
            curl_setopt( $ch , CURLOPT_POST , true );
            curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
            curl_setopt( $ch , CURLOPT_URL , $url );
        }
        else
        {
            if($params){
                curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );
            }else{
                curl_setopt( $ch , CURLOPT_URL , $url);
            }
        }
        $response = curl_exec( $ch );
        if ($response === FALSE) {
            return false;
        }
        $httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );
        $httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );
        curl_close( $ch );
        return $response;
    }
}