Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用云函数实现语音识别案例

使用云函数实现语音识别案例

原创
作者头像
haimingli
修改于 2021-01-04 12:38:43
修改于 2021-01-04 12:38:43
1.2K0
举报

背景

语音识别,也被称为自动语音识别 Automatic Speech Recognition,(ASR),其目标是将人类的语音中的词汇内容转换为计算机可读的输入,例如按键、二进制编码或者字符序列。与说话人识别及说话人确认不同,后者尝试识别或确认发出语音的说话人而非其中所包含的词汇内容。该技术已经广泛应用于我们平时的生活中,例如:

  • 语音输入法:智能语音输入,由实时语音识别实现,为用户节省输入时间、提升输入体验。
  • 语音消息转写:将用户的语音信息转成文字信息,由一句话识别服务实现,提升用户阅读效率。
  • 字幕生成:将直播和录播视频中的语音转换为文字,由录音文件识别服务实现,轻松便捷地生成字幕文件。
  • 会议纪要:将会议、庭审、采访等场景的音频信息转换为文字,由实时语音识别服务实现,降低人工记录成本、提升效率。
  • 电话质检:将坐席通话转成文字,由实语音识别服务或录音文件识别服务实现,全面覆盖质检内容、提升质检效率。

方案设计

可以使用腾讯云函数实现语音识别。主要分为三步:

1.创建生成请求任务的函数,使用 COS 触发器,设置第二步中生成的回调 URL,生成录音文件识别任务。

云函数代码:

代码语言:txt
AI代码解释
复制
# -*- coding: utf8 -*-
from qcloud_cos_v5 import CosS3Client
from qcloud_cos_v5 import CosServiceError
from qcloud_cos_v5 import CosClientError
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException 
from tencentcloud.asr.v20190614 import asr_client, models 
import base64
import os
import sys
import logging
import requests
import time
import hmac
import base64
import urllib
import json
import sys
import binascii
import hashlib
import random
import threading
from urllib.parse import urlencode

logging.basicConfig(level=logging.INFO, stream=sys.stdout)


region = u'ap-shanghai'  # 请替换为您 Bucket 所在的地域,需要与云函数地区一致
callback_url = 'xxxxx' # 请替换为您在创建接受回调的 API 网关触发器的回调 URL
logger = logging.getLogger()


def create_task(audio_url):
    secretId = os.environ.get('TENCENTCLOUD_SECRETID') #无需填写,云函数会自动帮您申请和管理临时密钥
    secretKey = os.environ.get('TENCENTCLOUD_SECRETKEY') #无需填写,云函数会自动帮您申请和管理临时密钥
    token = os.environ.get('TENCENTCLOUD_SESSIONTOKEN') #无需填写,云函数会自动帮您申请和管理临时密钥

    cred = credential.Credential(secretId, secretKey, token)
    httpProfile = HttpProfile()
    httpProfile.endpoint = "asr.tencentcloudapi.com"
    clientProfile = ClientProfile()
    clientProfile.httpProfile = httpProfile
    clientProfile.signMethod = "TC3-HMAC-SHA256"  
    client = asr_client.AsrClient(cred, region, clientProfile) 
    req = models.CreateRecTaskRequest()
    params = {"EngineModelType":"16k_zh","ChannelNum":1,"ResTextFormat":0,"SourceType":0,"Url":audio_url,"CallbackUrl":callback_url}
    req._deserialize(params)
    resp = client.CreateRecTask(req) 
    taskid = resp. Data.TaskId
    return taskid

def main_handler(event, context):
    logger.info("start main handler")
    for record in event['Records']:
        try:
            bucket = record['cos']['cosBucket']['name'] + '-' + record['cos']['cosBucket']['appid']
            key = record['cos']['cosObject']['key']
            key = key.replace('/' + record['cos']['cosBucket']['appid'] + '/' + record['cos']['cosBucket']['name'] + '/', '', 1)
            logger.info("Key is " + key)

            audio_url = record['cos']['cosObject']['url']
            logger.info("audio_url is [%s]" % audio_url)
            taskId = create_task(audio_url)
            logger.info("taskId [%s] Success" % taskId)

        except Exception as e:
            print(e)
            print('Error getting object {} from bucket {}. '.format(key, bucket))
            raise e
            return "Fail"

    return "Success"

2.创建接收回调结果的函数,使用 API 网关触发器,生成回调 URL,用于将录音文件识别结果写回 COS 。

云函数代码:

代码语言:txt
AI代码解释
复制
# -*- coding: utf-8 -*-
import sys
import logging
import os
import datetime
import json
import urllib
from qcloud_cos_v5 import CosConfig
from qcloud_cos_v5 import CosS3Client
from qcloud_cos_v5 import CosServiceError
from qcloud_cos_v5 import CosClientError


logging.basicConfig(level=logging.INFO, stream=sys.stdout)
logger = logging.getLogger()


def dataTranslate(body):
    body = body.split('&')
    data = {}
    for dataStr in body:
        keyValue = dataStr.split('=')
        data[keyValue[0]] = urllib.parse.unquote(keyValue[1])
    logger.info(data)
    return data



def main_handler(event, context):
    secretId = os.environ.get('TENCENTCLOUD_SECRETID')
    secretKey = os.environ.get('TENCENTCLOUD_SECRETKEY')
    token = os.environ.get('TENCENTCLOUD_SESSIONTOKEN')
    region = 'ap-shanghai'  # 请替换为您创建的 cos 的 Bucket 所在的地域
    result_bucket = 'asr-scf-result-xxxxx' # 请替换为您用于存放识别结果的 Bucket 名称

    config = CosConfig(Region=region, SecretId=secretId, SecretKey=secretKey, Token=token) # 获取配置对象
    client = CosS3Client(config)

    logger.info("start main handler")
    res = event['body']
    r = res.replace('+', '%20')
    data = dataTranslate(r)
    nowTime = str(datetime.datetime.now())
    upload_path = '/tmp/result-{}.json'.format(data['requestId'])
    file = open(upload_path,'w',encoding='utf-8')
    file.write(json.dumps(data, ensure_ascii=False))
    file.close()
    key = '{}.json'.format(data['requestId'])
    if data['code']!= "0": 
        key = '{}_failed.json'.format(data['requestId'])
    res = client.put_object_from_local_file(
    Bucket= result_bucket,
    LocalFilePath= upload_path,
    Key= key
    )
    response = {"code":0, "message":"success"}

    return response

3.所有配置完成后,您可以在 COS 中上传音频文件,进行测试和使用,并通过云函数里的运行日志查看任务状态。

至此,主要代码逻辑已经完成,可以在 COS 中上传音频文件,进行测试和使用。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
通过SCF回调COS上传对象信息到业务接口
腾讯云COS在应用端实践中,由于是客户端直传至COS,对于业务服务器并未得到请求,也不知道客户端实际上传的内容,所以这里就需要通过上传COS后回调的方式来告知业务服务器。
wainsun
2020/11/19
1.4K0
通过SCF回调COS上传对象信息到业务接口
Serverless 实现图片压缩与水印
上传图片是很常见的用户需求,无论是做一个相册系统,还是发布文章中带有图片,都有上传图片的场景,可以说图片和 Web 服务是紧密相连的了。但是图片大小等属性又参差不齐的,而且图片在上传之后,还可能会被其他平台采集并且盗用。这个时候,就需要进行图像压缩、标准化以及添加水印等操作,这一套流程下来很占用计算资源。那么在 Serverless 架构下,是否可以对图像的压缩与水印实现「一条龙」服务,而且不会因为用户量比较多,而影响整体体验呢? 一起试试! Serverless 与图像处理 传统的图像处理,会比较占用资
腾讯云serverless团队
2020/05/28
8450
基于腾讯云语音产品的最佳技术实践 | 如何助力 CRM 传统营销方式降本增效
CRM 客户关系管理系统 通常是企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与客户间在销售、营销和服务上的交互,从而通过不断的优化,提升企业管理方式,向客户提供创新式的个性化的客户交互和服务的过程。
六月的雨在Tencent
2024/06/26
3430
腾讯云语音识别.net-sdk使用笔记0818
github的地址:https://github.com/TencentCloud/tencentcloud-sdk-dotnet/tree/master/TencentCloud/Asr/V20190614
算法发
2020/08/18
1.8K0
腾讯云语音识别.net-sdk使用笔记0818
AI 语音合成+云开发,一个小时上线一款实用工具小程序
语音合成(Text To Speech,TTS)满足将文本转化成拟人化语音的需求,打通人机交互闭环。 提供多场景、多语言的音色选择,支持 SSML 标记语言,支持自定义音量、语速等参数,让发音更专业、更符合场景需求。语音合成广泛适用于智能客服、有声阅读、新闻播报、人机交互等业务场景,提升人机交互体验,提高语音类应用构建效率。
爱去西
2022/09/29
1.1K0
AI 语音合成+云开发,一个小时上线一款实用工具小程序
Serverless 架构下如何实现日志的实时输出?
Serverless 白皮书中曾描述过 Serverless 的一些缺点,例如难以调试、冷启动严重等等。其中难以调试是表现在多个方面的,有一个方面是日志输出。
深度学习与Python
2020/08/07
8380
COS结合SCF的数据复制实践
1.上传的数据目录不合适,但是现有代码调整需要发布,临时处理方法可以将A目录的数据复制一份到B目录。
wainsun
2020/12/19
1K0
COS结合SCF的数据复制实践
腾讯云语音识别(ASR)助力智慧园区落地
语音识别,也称为自动语言识别(Automatic Language Identification, ALI),是自然语言处理(NLP)领域的一个重要研究方向。它旨在让计算机能够自动地识别出给定文本所属的语言种类。这一技术对于跨语言交流、多语言信息处理、机器翻译等方面具有广泛的应用价值。
不惑
2024/05/25
4033
腾讯云语音识别(ASR)助力智慧园区落地
云函数 SCF 与对象存储实现 WordCount 算法
本文将尝试通过 MapReduce 模型实现一个简单的 WordCount 算法,区别于传统使用 Hadoop 等大数据框架,本文使用云函数 SCF 与对象存储 COS 来实现。 MapReduce 在维基百科中的解释如下: MapReduce 是 Google 提出的一个软件架构,用于大规模数据集(大于 1TB)的并行运算。概念「Map(映射)」和「Reduce(归纳)」,及他们的主要思想,都是从函数式编程语言借来的,还有从矢量编程语言借来的特性。 通过这段描述,我们知道,MapReduce 是面向大数
腾讯云serverless团队
2020/05/28
9200
Serverless-实现bing每日壁纸API(一)
serverless函数的开发方式很适合用来实现一些简单的小功能,比如接下来要做的这个,抓取bing搜索的每日壁纸图片,功能非常的简单:
Thor
2020/05/16
9120
使用 SCF 无服务器云函数定时备份数据库
最近有客户询问到使用云函数进行数据库导出备份时的一些问题,在此也进行一下总结,描述如何使用云函数来进行数据库备份。
腾讯云serverless团队
2018/07/10
10.2K0
最佳实践 | 用腾讯云智能语音打造智能对话机器人
在AI技术的推动下,智能对话机器人逐渐成为我们工作、生活中的重要效率工具,乃至是伙伴,特别是为企业带来最原始最直观的“降本增效”落地实现。
腾讯云AI
2023/04/06
5.1K0
最佳实践 | 用腾讯云智能语音打造智能对话机器人
不用写一行代码,deepseek结合腾讯云语音识别来批量转录Mp3音频
不用写一行代码,deepseek结合腾讯云语音识别来批量转录Mp3音频 首先,打开window系统中的cmd命令行工具,或者powershell,安装腾讯云t
AIGC部落
2024/06/23
2.3K0
不用写一行代码,deepseek结合腾讯云语音识别来批量转录Mp3音频
用云函数快速批量处理COS里面的日志
本来CLS日志服务可以直接触发云函数来快速处理的,不过这样触发次数就有点多了,比如说被处理的日志本来就是云函数生成的,那么函数触发次数就直接要翻番,如果日志不是需要及时处理的话,可以让它在CLS里面累计上几分钟,然后用定时器触发一个云函数,通过日志服务查询接口 SearchLog 来实现批量处理。
黄希彤
2022/02/27
6150
使用云函数更新TEO节点IP到安全组
TEO 的节点 IP 较多,手动更新不现实;TEO 提供的“源站保护”功能仅适用于部分套餐,其原理大概是只调度域名到固定的节点去回源,如果节点更新后,需要用户确认,才会调度到新的节点,不够灵活。
用户7950488
2024/07/07
1110
【玩转腾讯云】【腾讯云自然语言处理NLP】结合腾讯云生态打造词法分析系统
具备自然语言处理(NLP)能力是企业日趋紧迫的一个需求,例如电商网站需从用户评论中分析出产品偏好,金融企业需对产品进行舆论分析等。企业如果自研NLP相关能力,不仅需要投入专业的技术人员、收集或购买大量的语料,还必须经历漫长的技术周期,最终效果往往还达不到预期。
用户6339481
2020/04/30
4.9K0
【玩转腾讯云】【腾讯云自然语言处理NLP】结合腾讯云生态打造词法分析系统
【玩转 EdgeOne】加速COS静态网站并实现动态刷新
腾讯云有一款Serverless Framework产品,可以从本地把网站等框架快速部署到腾讯云产品上而无需复杂的服务器配置。
Ar-Sr-Na
2023/10/21
1.1K2
【玩转 EdgeOne】加速COS静态网站并实现动态刷新
基于 Serverless 与 Websocket 的聊天工具实现
传统业务实现 Websocket 并不难,然而函数计算基本上都是事件驱动,不支持长链接操作。如果将函数计算与 API 网关结合,是否可以有 Websocket 的实现方案呢? API 网关触发器实现 Websocket WebSocket 协议是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工 (full-duplex) 通信,即允许服务器主动发送信息给客户端。WebSocket 在服务端有数据推送需求时,可以主动发送数据至客户端。而原有 HTTP 协议的服务端对于需推送的数据,仅能通过轮询
腾讯云serverless团队
2020/05/28
3.1K1
Serverless实践系列(八):如何优雅地给网站图片加水印
前言 很多论坛、博客在进行图片上传之后,都会给自己的图像加上水印,这样可以证明这张图片「属于我」或者是「来自我的博客/网站」。 传统的加水印的方法,通常是在流程内进行,即: 这种做法虽然可行,但是无疑会增加单次请求,服务端的压力,如果是高并发的情况下,或者多人上传多张大图的时候,那么可能就会造成自身服务器资源效果过大。 如果在加水印过程中失败,就有可能导致图像存储失败,致使数据丢失,并不理智。所以后来有人做了如下改进: 这样做法的好处就是 —— 我们可以快速将图片存储,存储之后通过一个单独处理的线
腾讯云serverless团队
2019/09/06
1.2K1
Serverless实践系列(八):如何优雅地给网站图片加水印
手把手教学从0到1搭建人脸融合小程序(下)
由于本文主要介绍小程序端调用人脸融合云接口,所以前端这里简单设计,整个前端页面分为三个区域:
MIKADO
2019/12/26
1.7K0
手把手教学从0到1搭建人脸融合小程序(下)
推荐阅读
相关推荐
通过SCF回调COS上传对象信息到业务接口
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文