使用百度API实现语音识别——in python (2015-02-21 15:43:15)

标签: 

百度语音识别api

 

语音识别

 

python

 
 
前几天研究了一下在树莓派上使用麦克风,目的是实现树莓派上的语音识别。
现在要实现语音识别不需要自己实现算法,只要能把声音通过网络传给语音识别服务提供商就可以了,语音识别在服务提供商的服务器上完成,然后把结果返回过来。这种模式对于我这种不追求自主知识产权的人来说已经足够了。
目前语音识别服务主要有百度、科大讯飞、google。
百度提供ios、安卓、linux等的sdk,同时还提供基于http的访问接口,用户只要能实现http post method就可以了,可以说非常的方便。百度的开放平台审核效率还是很高的,我在大年初一申请语音识别API权限,他们初三就审核通过了!大年初三!通过了!!!用起来也很简单,半天时间就可以调通的了。
科大讯飞也提供各主流平台的sdk,另外有树莓派的sdk可供申请(还没拿到,不知道是不是基于http的)。讯飞能做到目前的程度,一定有其过人之处,希望有机会能试用一下。
google,呵呵,国内不要用了吧。

下面记录一下百度语音识别API的开发过程:
1. 在百度开放平台新建工程,申请到ID、API key、secret key以及开发文档等。
2. 用上面的数据到百度oauth获取access token。
3. 把要识别的语音数据按照百度文档中的格式传到其服务器上。我使用的是隐式上传,需要对语音数据做base64编码,和另外一些格式信息组成json数据,post到服务器端。
4. 服务器返回识别结果的json文本,对结果进行解析即可。

百度提供了c++、java等的例子工程,太复杂了。python 50行代码搞定的事儿,c++要一堆代码,还是不要看了。
   1 #! /usr/bin/env python3
   2
   3 import baidu_oauth
   4 import uuid
   5 import base64
   6 import json
   7 import urllib.request
   8 import sys
   9
  10 asr_server = 'http://vop.baidu.com/server_api'
  11 baidu_oauth_url = 'https://openapi.baidu.com/oauth/2.0/token/'
  12 client_id = 'xxx'
  13 client_secret = 'xxx'
  14 access_token = baidu_oauth.get_baidu_access_token(baidu_oauth_url, client_id, client_secret)
  15 mac_address=uuid.UUID(int=uuid.getnode()).hex[-12:]
  16
  17 def baidu_asr(speech_file):
  18                 with open(speech_file, 'rb') as f:
  19                                 speech_data = f.read()
  20                 speech_base64=base64.b64encode(speech_data).decode('utf-8')
  21                 speech_length=len(speech_data)
  22                 data_dict = {'format':'wav', 'rate':8000, 'channel':1, 'cuid':mac_address, 'token':access_token, 'lan':'zh', 'speech':speech_base64, 'len':speech_length}
  23                 json_data = json.dumps(data_dict).encode('utf-8')
  24                 json_length = len(json_data)
  25
  26                 request = urllib.request.Request(url=asr_server)
  27                 request.add_header("Content-Type", "application/json")
  28                 request.add_header("Content-Length", json_length)
  29                 fs = urllib.request.urlopen(url=request, data=json_data)
  30
  31                 result_str = fs.read().decode('utf-8')
  32                 json_resp = json.loads(result_str)
  33                 return json_resp
  34
  35 json_resp = baidu_asr(sys.argv[1])
  36 print(json_resp)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值