- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
日常办公中,我们经常要开会和写会议纪要。传统模式下,我们需要非常认真地听会议中每一句话,记下自己认为的核心的话,并在会后经过多次修改形成会议纪要。现在,聪明人已 经不那么干了,借助几百块的讯飞录音笔,我们可以一口气录下长达三小时的音频,讯飞还能免费给这些录音笔录制的音频转成文本,且识别率相当高,可谓非常方便.
不过,假如我们没买录音笔,没借到这样的录音笔或者刚好忘了带,最后只能借助用机来录音的时候,面对这样的音频,该怎么低价、快速转文本,方便我们最后写会议纪要之类的东东呢?
有钱有VIP的话,这不是问题。比如讯飞听见,报价是0.33元/分钟,差不多20块一个小时,其他厂商提供的To C端的服务,基本价格也是大差不差。如果小爬没有更省钱的方法,自然就不会有这篇博文了。接下来讲讲怎么用厂商API来实现大段的音频转文本.
这里以百度智能云提供的API接口为例,且看小爬如何写Python脚本,利用这些API,实现低价的音频转文本。看了下百度智能云的官网提供的服务,关于语音识别这块,大概的AI能力有这些:
基于上面提到的场景,我们需要借助的是【音频文件转写】的能力,我们再简单看下价格,如下图所示:
计价方式多样,但是总结就是两句话:用的越多价格越低,最高单价也就是1.56元/时。看上去比To C的那些语音转文本的价格实惠多了。那还等什么,赶紧把代码整起来呗?
写代码前,我们需要看看它的技术文档: 语音技术 (baidu.com) ,这里面不仅有接口API,还提供的python的Demo示例。但是你要指望这Demo能直接用,就太天真了.
简单点说,我们需要先在百度智能云上【音频文件转写】的详情页,点击【立即使用】,按照说明,新建一个应用,勾选上需要的AI能力,这样,我们就可以拿到百度给这个应用独有的API_KEY以及SECRET_KEY.
由于音频很长,所以转文本需要一定的时间,百度给的接口做成异步的了。也就是说我们需要两个脚本,其中一个用来创建转音频的任务,另一个脚本用来请求结果。先来魔改官方给的Demo示例来创建任务,每次的请求之前,我们需要向API接口拿到单次请求的Token,获取Access_token的代码大概如下:
import requests,json,time,ssl from urllib.request import urlopen,Request from urllib.error import URLError from urllib.parse import urlencode timer = time.perf_counter ssl._create_default_https_context = ssl._create_unverified_context # 填写百度控制台中相关开通了“音频文件转写”接口的应用的的API_KEY及SECRET_KEY API_KEY = ' Your API Key ' SECRET_KEY = 'Your Secret Key ' """ 获取请求TOKEN start 通过开通音频文件转写接口的百度应用的API_KEY及SECRET_KEY获取请求token """ class DemoError(Exception): pass TOKEN_URL = ' https://openapi.baidu.com/oauth/2.0/token ' # SCOPE = 'brain_bicc' # 有此scope表示有asr能力,没有请在网页里勾选 bicc SCOPE = ' brain_asr_async ' # 有此scope表示有asr能力,没有请在网页里勾选 # SCOPE = 'brain_enhanced_asr' # 有此scope表示有asr能力,没有请在网页里勾选 def fetch_token(): params = { ' grant_type ' : ' client_credentials ' , ' client_id ' : API_KEY, ' client_secret ' : SECRET_KEY} post_data = urlencode(params) post_data = post_data.encode( ' utf-8 ' ) req = Request(TOKEN_URL, post_data) try : f = urlopen(req) result_str = f.read() except URLError as err: print ( ' token http response http code : ' + str(err.code)) result_str = err.read() result_str = result_str.decode() # print(result_str) result = json.loads(result_str) # print(result) if ( ' access_token ' in result.keys() and ' scope ' in result.keys()): if not SCOPE in result[ ' scope ' ].split( ' ' ): raise DemoError( ' scope is not correct ' ) # print('SUCCESS WITH TOKEN: %s ; EXPIRES IN SECONDS: %s' % (result['access_token'], result['expires_in'])) return result[ ' access_token ' ] else : raise DemoError( ' MAYBE API_KEY or SECRET_KEY not correct: access_token or scope not found in token response ' ) """ 获取鉴权结束,TOKEN end """
。
拿到Access_Token后,我们就可以根据API创建任务了,示例代码如下:
""" 发送识别请求 """ # 待进行语音识别的音频文件url地址,需要可公开访问。建议使用百度云对象存储(https://cloud.baidu.com/product/bos.html) def create_task(speech_url): url = ' https://aip.baidubce.com/rpc/2.0/aasr/v1/create ' # 创建音频转写任务请求地址 body = { " speech_url " : speech_url, " format " : " wav " , # 音频格式,支持pcm,wav,mp3,音频格式转化可通过开源ffmpeg工具(https://ai.baidu.com/ai-doc/SPEECH/7k38lxpwf)或音频处理软件 " pid " : 1537, # 模型pid,1537为普通话输入法模型,1737为英语模型 " rate " : 16000 # 音频采样率,支持16000采样率,音频格式转化可通过开源ffmpeg工具(https://ai.baidu.com/ai-doc/SPEECH/7k38lxpwf)或音频处理软件 } token = { " access_token " :fetch_token()} headers = { ' content-type ' : " application/json " } response = requests.post(url,params=token,data = json.dumps(body), headers = headers) # 返回请求结果信息,获得task_id,通过识别结果查询接口,获取识别结果 textMsg= response.json() print (textMsg) return textMsg.get( " task_id " )
需要注意的是,该API不支持读本地的音频文件,而是要求提起将音频上传到公网上,要支持公开访问,这个方法中的Speech_url参数,它指的是待进行语音识别的音频文件url地址,官方建议使用百度云对象存储(https://cloud.baidu.com/product/bos.html),不过小爬在写这个例子的时候,这个官网莫名其妙加载非常慢,体验很差,具体原因不详,最好小爬只好选择了其他厂商的类似服务,比如七牛云。不用担心,对于普通用户,有10GB的免费的每月存储空间。另外,这个方法最终可以返回任务的Task_id,它的重要性不言而喻,我们就是通过它来得到最终的结果.
。
开通七牛云账号之后,我们按照提示,将待转的音频存储到七牛云存储服务器 公开路径。限于篇幅,小爬对具体的操作就不过多赘述了。这里必须是公开路径,否则百度的API没法访问私有的七牛云生成的存储音频的URL。你在担心信息暴露了对不对?哈哈,你的URL不到处分享,即使在公网上,也不会有人知道的。另外,如果实在担心,我们可以利用它创建完任务并成功转为文本后,再去账号上删除这段音频,这下顾虑可以打消了吧?
万事俱备后,我们需要结合查看结果的api来获取最终的文本,对了,获取结果的API,同样是需要事先申请Token的,您需要再次借助上面提到的fetch_token方法。当token和task_id都准备好之后,剩下的事儿就简单多了,示例如下:
""" 发送查询结果请求 """ # 转写任务id列表,task_id是通过创建音频转写任务时获取到的,每个音频任务对应的值 task_id_list = [ " task_id " , ] for task_id in task_id_list: url = ' https://aip.baidubce.com/rpc/2.0/aasr/v1/query ' # 查询音频任务转写结果请求地址 body = { " task_ids " : [task_id], } token = { " access_token " :fetch_token()} headers = { ' content-type ' : " application/json " } response = requests.post(url,params=token,data = json.dumps(body), headers = headers) print (json.dumps(response.json(), ensure_ascii=False))
赶紧学起来吧,可以帮您省下好多银子呢,这些银子用来干啥不香呢?如果您技术过硬,还可以利用大厂的这些api搭建自己的AI服务,创建自己的【语音转文本】To C产品,这差价不是挣得美滋滋?
快来关注本公众号 获取更多爬虫、数据分析的知识! 。
。
最后此篇关于怎么利用大厂的API将大段音频转成文本的文章就讲到这里了,如果你想了解更多关于怎么利用大厂的API将大段音频转成文本的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我一直在为实时流和静态文件(HTTP 上的 MP3)构建网络广播播放器。我选了Howler.js作为规范化 quirks 的后端的 HTML5 Audio (思考:自动播放、淡入/淡出、进度事件)。
vue移动端input上传视频、音频,供大家参考,具体内容如下 html部分 ?
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 7年前关闭。 Improve this questi
我想在我的程序中访问音频和视频。 MAC里面可以吗? 我们的程序在 Windows 上运行,我使用 directshow 进行音频/视频编程。但我想在 MAC 中开发相同的东西。 有没有像direct
我的应用程序(使用 Flutter 制作,但这应该无关紧要)具有类似于计时器的功能,可以定期(10 秒到 3 分钟)发出滴答声。我在我的 Info.plist 中激活了背景模式 Audio、AirPl
我是 ionic 2 的初学者 我使用了音频文件。 import { Component } from '@angular/core'; import {NavController, Alert
我有一个包含ListView和图片的数据库,我想在每个语音数据中包含它们。我已经尝试过,但是有很多错误。以下是我的java和xml。 数据库.java package com.example.data
我在zend framework 2上建立了一个音乐社交网络。您可以想象它与SoundCloud相同,用户上传歌曲,其他用户播放它们,这些是网站上的基本操作。 我知道将要托管该页面的服务器将需要大量带
我正在尝试在android应用中播放音频,但是在代码中AssetFileDescriptor asset1及其下一行存在错误。这是代码: MediaPlayer mp; @Override prote
我对 WordPress Audio Shortcode有问题。我这样使用它: 但是在前面,在HTML代码中我得到了: document.createElement('audio');
我正在做一项关于降低噪音的滤波技术的实验。我在数据集中的样本是音频文件(.wav),因此,我有:原始录制的音频文件,我将它们与噪声混合,因此变得混合(噪声信号),我将这些噪声信号通过滤波算法传递,输出
一个人会使用哪种类型的神经网络架构将声音映射到其他声音?神经网络擅长学习从序列到其他序列,因此声音增强/生成似乎是它们的一种非常流行的应用(但不幸的是,事实并非如此-我只能找到一个(相当古老的)洋红色
这个让我抓狂: 在专用于此声音播放/录制应用程序的 Vista+ 计算机上,我需要我的应用程序确保(默认)麦克风电平被推到最大。我该怎么做? 我找到了 Core Audio lib ,找到了如何将 I
{ "manifest_version": 2, "name": "Kitten Radio Extension", "description": "Listen while browsi
class Main { WaveFileReader reader; short[] sample; Complex[] tmpComplexArray; publi
我正在使用电话录音软件(android),该软件可以记录2个人在电话中的通话。每个电话的输出是一个音频文件,其中包含来自 call 者和被 call 者的声音。 但是,大多数情况下,运行此软件的电话发
我正在构建一个需要语音激活命令的Web应用程序。我正在使用getUserMedia作为音频输入。 对于语音激活命令,该过程是用户将需要通过记录其语音来“校准”命令。例如,对于“停止”命令,用户将说出“
我正在开发一个Cordova应用程序,并将PouchDB用作数据库,当连接可用时,它将所有信息复制到CouchDB。 我成功存储了简单的文本和图像。 我一直在尝试存储视频和音频,但是没有运气。 我存储
我正在开发web application,我必须在其中使用.MP3的地方使用播放声音,但是会发生问题。 声音为play good in chrome, Firefox,但为safari its not
如何减少音频文件的位深?是否忽略了MSB或LSB?两者混合吗? (旁问:这叫什么?) 最佳答案 TL / DR:将音频曲线高度变量右移至较低位深度 可以将音频视为幅度(Y轴)随时间(X轴)的模拟曲线。
我是一名优秀的程序员,十分优秀!