À l'avenir, l'intelligence artificielle occupera une position très importante sur le marché, et le langage Python est le meilleur langage de programmation pour étudier l'intelligence artificielle. Sentons maintenant son charme !
L'exemple de programme fourni par Baidu, qu'il soit en version C ou Java, est divisé en deux types : méthode1 et méthode2. La première est appelée implicite (la publication est une chaîne json et les données audio sont codées en json. ), et ce dernier est appelé explicite (le message est constitué de données audio). Cet article présente principalement les exemples d'utilisation de l'API de reconnaissance vocale Baidu implémentée en langage Python. J'espère que les amis dans le besoin pourront s'y référer. cela peut aider tout le monde.
Au début, je considérais que le package pythonwave traitait de "chaînes" et craignais d'être incohérent avec le tableau du langage C, j'ai donc choisi la méthode inefficace mais sûre1,
C'est-à-dire , d'abord en base64 l'encodage des données audio, plus le taux d'échantillonnage, le nombre de canaux et d'autres informations sont rassemblés dans un dict, et enfin codés dans une chaîne json
Le résultat est toujours rapporté :
3300 Les paramètres d'entrée sont incorrects
J'ai essayé successivement les packages urllib2 et pycurl, et ils sont tous dans la situation ci-dessus
J'ai dû passer à la méthode 2 et cela a réussi (il semble que le Le package wave ne stocke pas l'audio sous forme de "chaîne")
#encoding=utf-8 import wave import urllib, urllib2, pycurl import base64 import json ## get access token by api key & secret key def get_token(): apiKey = "xxxxxxxx" secretKey = "xxxxxxxxx" auth_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + apiKey + "&client_secret=" + secretKey; res = urllib2.urlopen(auth_url) json_data = res.read() return json.loads(json_data)['access_token'] def dump_res(buf): print buf ## post audio to server def use_cloud(token): fp = wave.open('vad_0.wav', 'rb') nf = fp.getnframes() f_len = nf * 2 audio_data = fp.readframes(nf) cuid = "xxxxxxxxxx" #my xiaomi phone MAC srv_url = 'http://vop.baidu.com/server_api' + '?cuid=' + cuid + '&token=' + token http_header = [ 'Content-Type: audio/pcm; rate=8000', 'Content-Length: %d' % f_len ] c = pycurl.Curl() c.setopt(pycurl.URL, str(srv_url)) #curl doesn't support unicode #c.setopt(c.RETURNTRANSFER, 1) c.setopt(c.HTTPHEADER, http_header) #must be list, not dict c.setopt(c.POST, 1) c.setopt(c.CONNECTTIMEOUT, 30) c.setopt(c.TIMEOUT, 30) c.setopt(c.WRITEFUNCTION, dump_res) c.setopt(c.POSTFIELDS, audio_data) c.setopt(c.POSTFIELDSIZE, f_len) c.perform() #pycurl.perform() has no return val if __name__ == "__main__": token = get_token() use_cloud(token)
Exécuter les résultats
{"corpus_no":"6150045491002357923","err_msg":"success.","err_no":0,"result":["播放小苹果,"],"sn":"243903724071431919050"}
Recommandations associées :
Une brève analyse de la façon de procéder. utiliser JavaScript pour la reconnaissance vocale
Écriture de balises de reconnaissance vocale HTML5 avec images_ compétences du didacticiel HTML5
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!