Maison  >  Article  >  développement back-end  >  Exemple d'implémentation de la fonction de reconnaissance vocale Baidu en langage Python

Exemple d'implémentation de la fonction de reconnaissance vocale Baidu en langage Python

小云云
小云云original
2017-12-14 11:29:172686parcourir

À 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 :

. Net a développé un exemple de reconnaissance vocale de la plate-forme publique WeChat, explication détaillée

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn