前往小程序,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 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Security Oauth2 自定义 OAuth2 Exception
在使用Spring Security Oauth2登录和鉴权失败时,默认返回的异常信息如下
java干货
2021/02/19
1.4K0
Spring Security Oauth2 自定义 OAuth2 Exception
Spring Security 实战干货:自定义异常处理
最近实在比较忙,很难抽出时间来继续更 [Spring Security 实战干货系列](https://felord.cn/categories/spring-security/)。今天正好项目中 Spring Security 需要对认证授权异常的处理,就分享出来吧 。
码农小胖哥
2019/12/10
3K0
Spring Security 实战干货:自定义异常处理
Spring Security2
使用过滤器 .failureForwardUrl("/login/error");
P轴
2022/11/18
2240
一文搞定 Spring Security 异常处理机制!
松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程
江南一点雨
2020/07/02
1.8K0
Spring Security---ONE
我们可以通过浏览器进行登录验证,默认的用户名是user.(下面的登录框不是我们开发的,是HttpBasic模式自带的)
大忽悠爱学习
2021/12/07
1.9K0
Spring Security---ONE
木字楠后台管理系统开发(4):SpringSecurity引入并编写登陆接口
Spring Security可以在 Controller层、 Service层、Mapper层等以加注解的方式来保护应用程序的安全。 Spring Security提供了细粒度的权限控制,可以精细到每一个API接口、每一个业务的方法,或者每一个操作数据库的Mapper层的方法。 Spring Security提供的是应用程序层的安全解决方案,一个系统的安全还需要考虑传输层和系统层的安全,例如采用Htps协议、服务器部署防火墙等。
木字楠
2023/10/17
2560
木字楠后台管理系统开发(4):SpringSecurity引入并编写登陆接口
SpringBoot使用Security认证框架(1.加类)
本文章包含Security的认证和授权方法 并且在执行Security之前会执行自已编写的PowerFilter过滤器 而且登录信息会存入Redis,也会从Redis取
蚊子.
2023/08/10
3750
Spring Boot 3 集成 Spring Security + JWT
这里主要用到了Mybatis-plus、hutool 、knife4j ,其他依赖可以直接勾选
Harry技术
2025/01/13
2951
Spring Boot 3 集成 Spring Security + JWT
Spring Boot 3 集成 Spring Security + JWT
概述: 在本文中,我们将一步步学习如何使用 Spring Boot 3 和 Spring Security 来保护我们的应用程序。我们将从简单的入门开始,然后逐渐引入数据库,并最终使用 JWT 实现前后端分离。
Harry技术
2025/01/12
3320
Spring Boot 3 集成 Spring Security + JWT
spring cloud oauth2资源服务器自定义认证失败和拒绝访问错误消息
JAVA CONFIG @Configuration @EnableResourceServer public class ResourceServerConfig extends ResourceServerConfigurerAdapter { ... @Override public void configure(ResourceServerSecurityConfigurer resources) throws Exception { resources.resourceI
路过君
2020/06/19
1.3K0
Spring Security 实战干货: 401和403状态
最近几篇我对Spring Security中用户认证流程进行了分析,同时在分析的基础上我们实现了一个验证码登录认证的实战功能。当认证失败后交给了AuthenticationFailureHandler来进行失败后的逻辑处理。今天来谈谈两个和认证授权息息相关的两个状态401和403以及它们如何在Spring Security融入体系中的。
码农小胖哥
2020/07/29
3.7K0
Spring Security 实战干货: 401和403状态
Spring Security入门(二) 基于内存存储的表单登录实战
Spring Security 对Servlet的安全认证是基于包含一系列的过滤器对请求进行层层拦截处理实现的,多个过滤器组成过滤器链。处理单个http 请求的过滤链角色示意图如下所示:
用户3587585
2022/09/21
7770
Spring Security入门(二) 基于内存存储的表单登录实战
厉害!我带的实习生仅用四步就整合SpringSecurity+JWT实现登录认证!
小二是新来的实习生,作为技术 leader,我还是很负责任的,有什么锅都想甩给他,啊,不,一不小心怎么把心里话全说出来了呢?重来!
沉默王二
2022/04/14
4880
厉害!我带的实习生仅用四步就整合SpringSecurity+JWT实现登录认证!
Spring Security:安全访问控制
“ 在前面的两篇文章中,说了如何使用Spring Boot搭建Security项目以及实现自定义登录认证,今天就拿一个具体的前后端分离项目来看一下安全访问的控制”
每天学Java
2020/06/02
9890
教你做一个自己的App
最近我的一个朋友独立开发了一个小程序,他给我看了下后台数据,短短几天用户已经20w了,这个小程序不是专对女性,但女性用户却占了2/3,说实话确实有点羡慕。
用户6171967
2022/09/07
9680
教你做一个自己的App
SpringBoot整合Security安全框架、控制权限
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
宁在春
2022/10/31
9050
SpringBoot整合Security安全框架、控制权限
Spring Security详解 顶
2020-01-05 01:57:16.482 INFO 3932 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
算法之名
2020/01/15
2.5K0
Spring Security详解
                                                                            顶
SpringSecurity学习
其核心就是一组过滤器链,项目启动后将会自动配置。最核心的就是 Basic Authentication Filter 用来认证用户的身份,一个在spring security中一种过滤器处理一种认证方式
云边小卖部
2022/12/02
6820
【第十一篇】SpringSecurity基于JWT实现Token的处理
  前面介绍了手写单点登录和JWT的应用,本文结合SpringSecurity来介绍下在SpringBoot项目中基于SpringSecurity作为认证授权框架的情况下如何整合JWT来实现Token的处理。
用户4919348
2022/05/27
1.1K0
【第十一篇】SpringSecurity基于JWT实现Token的处理
【Kotlin Spring Boot 服务端开发: 问题集锦】 Spring Security : 自定义AccessDeniedHandler 处理 Ajax 请求
【Kotlin Spring Boot 服务端开发: 问题集锦】 Spring Security : 自定义AccessDeniedHandler 处理 Ajax 请求
一个会写诗的程序员
2018/08/17
1.5K0
推荐阅读
相关推荐
Spring Security Oauth2 自定义 OAuth2 Exception
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文