2018-03-12 python对接阿里云语音识别

最近公司在对接阿里云语音识别(一句话识别),阿里云文档提供的并不是很详细,python demo不全,修改后可直接执行,如有问题可简书联系我,大家一起讨论。

import hashlib
import hmac
import base64
import datetime
import ssl
import requests


class HttpProxy:
    """
    Http工具类,封装了鉴权
    """

    def __init__(self, ak_id, ak_secret, model):
        self.__ak_id = ak_id
        self.__ak_secret = ak_secret
        # 必填
        self.__version = "2.0"
        self.__model = model
        # 音频文件长度
        self.f_len = None

    def __current_gmt_time(self):
        return datetime.datetime.strftime(datetime.datetime.utcnow(), "%a, %d %b %Y %H:%M:%S GMT")

    def __md5_base64(self, body):
        hash = hashlib.md5()
        hash.update(body)
        return base64.b64encode(hash.digest()).decode('utf-8')

    def __sha1_base64(self, str_to_sign, secret):
        hmacsha1 = hmac.new(secret.encode('utf-8'), str_to_sign.encode('utf-8'), hashlib.sha1)
        return base64.b64encode(hmacsha1.digest()).decode('utf-8')

    def send_request(self, body, audio_format, sample_rate, url):
        gmtnow = self.__current_gmt_time()
        temp_body = self.__md5_base64(body)
        body_md5 = self.__md5_base64(temp_body.encode('utf8'))
        content_type = "audio/" + audio_format + ";samplerate=" + str(sample_rate)
        str_to_sign = "POST" + "\n" + "application/json" + "\n" + body_md5 + "\n" + content_type + "\n" + gmtnow
        signature = self.__sha1_base64(str_to_sign, self.__ak_secret)
        auth_header = "Dataplus " + self.__ak_id + ":" + signature
        ssl._create_default_https_context = ssl._create_unverified_context
        url = url + "model=" + self.__model + "&" + "version=" + self.__version
        headers = {
            "Accept": "application/json",
            "Content-Type": content_type,
            "Date": gmtnow,
            "Authorization": auth_header,
            "Content-Length": str(self.f_len)
        }
        r = requests.post(url, data=body, headers=headers)
        return r.json().get("result")

    def read_file(self, file_path):
        file = open(file_path, 'rb')
        sound_wav_rb = file.read()
        file.close()
        # 这里要转换成字节数组
        temp_byte = bytearray(sound_wav_rb)
        print(temp_byte)
        return temp_byte


if __name__ == '__main__':
    # chat可以根据自己的情景修改,这里阿里云文档已经标明
    http_proxy = HttpProxy("这里修改成你自己的ak_id", "这里修改成你自己的ak_secret", "chat")
    # 读取文档 
    sound_wav_rb = http_proxy.read_file("/Users/macbook/Desktop/test.speex")
    # 这里的参数详见文档
    response = http_proxy.send_request(sound_wav_rb, "speex", 16000, "https://nlsapi.aliyun.com/recognize?")
    print(response)

此脚本可直接执行,也可修改后对接前端进行语音识别,希望对大家有用~

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,926评论 25 709
  • 转载链接 注:本文转载知乎上的回答 作者:初雪 链接:https://www.zhihu.com/question...
    pengshuangta阅读 28,849评论 9 295
  • 还有三天,还有两天,还有一天,就到年了。 往年,我坚持上班上到放假前一天,今年终于坚持不住了。因为,今年的年,我要...
    素琴雅韵阅读 430评论 1 3
  • 整个年少是一部追求美的减肥史加一部追求爱的渴望史加一部不停向前的求学史,如此而已。没有用心的去武装自己的大脑,没有...
    笑逐颜开阅读 340评论 0 0
  • 记得小时候的梦想是当一名教师。每次看见我的老师拿着粉笔在讲台上边书写边讲课的样子,都令我羡慕不已。 时光飞逝,我终...
    樱花雨JK阅读 425评论 0 0