# API-finalproject **Repository Path**: xie_zhi_qi/api-finalproject ## Basic Information - **Project Name**: API-finalproject - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-01-22 - **Last Updated**: 2025-03-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # API-finalproject # 记&录 APP | 发布日期 | 2021-01-24 | | -- | -- | | 项目名称 | 记&录 | | 项目现状 | 进行中 | | 项目拥有者 | 谢芷祺| | 项目的主人 | 谢芷祺| ## 一、价值主张设计 ### 1、加值宣言 #### 市面上目前还没有像以课堂和会议记录为主要目标的把语音、录音转成文本的软件,且大多数语音转文字的功能只是针对短语音或者是作为聊天软件的附属功能,而把长语音转为文本的软件多数使用于专业领域且大多需要收取费用。 #### 功能优先级说明 | 录音识别api | 文本纠错api | | -- | -- | | 运用腾讯云AI中的录音识别API,将语音或者录音转化成为文本| 运用百度AI中的文本纠错API,将语音或者录音识别出的文本错误纠正增加转换的正确率| ### 2、核心价值 #### 本产品旨在帮助学生党或是上班族记录课程和会议,是基于录音识别和文本纠错研发的会议记录工具,适用于学生党和上班族对课堂和会议的记录,将录音准确地转换成为文本,来便利人们对会议和课堂的记录让工作和学习更加简单快捷。 ### 3、项目目的 #### 通过使用录音识别来让会议和课堂的记录变得简单方便。 ### 4、核心价值与用户痛点 | 核心价值 | 用户痛点说明 | | -- | -- | | **方便性** | 学生课程较多无法每一堂课都可以集中精力做课堂笔记 | | **全面性** | 工作会议的内容繁琐复杂无法很详细的把全部记录下来 | | **实用性** | 会议和课堂上总是会有开小差的人,需要让他们在会议或课程过后也能够通过其他方式详细了解会议和课程的内容 | ### 5、人工智能概率性与用户痛点 * #### 人工智能概率性系统 >- (1)录音清晰 背景没有噪音——文本转换正确率十分高 >- (2)录音清晰 背景有噪音——文本转换正确率降低,文本内会出现非录音内容的字 >- (3)录音不清晰 背景没有噪音——文本转换正确率较高,但会出现部分不清晰的录音缺失或是有歧义 >- (4)录音不清晰 背景有噪音——文本转换正确率低,会出现部分不清晰的录音缺失或是有歧义以及会有非录音内容的字出现 * #### ·用户痛点 >- (1)学生课程较多时无法每一堂课都可以集中精力做课堂笔记。 >- (2)工作会议的内容繁琐复杂时人们无法很详细的把全部记录下来。 >- (3)会议和课堂上总是会有开小差的人,需要让他们在会议或课程过后也能够通过其他方式详细了解会议和课程的内容。 | 用户需求 | API接口 | 重要程度 | | ---- | ---- | ---- | | 对录音进行文本转换 | 录音识别API | 重要 | | 对转换的文本进行纠错 | 文本纠错API | 重要 | #### 具体应用场景 ##### 1、学生小兜昨晚由于做项目熬到很晚才睡,但今天早上八点有一节很重要的课,碍于精神状态不佳,他怎么努力都没有办法集中精神听课做笔记,于是他打开“记&录”APP,把老师讲课的内容录下来,然后回到宿舍休息过后直接将录音转化成文字版记录下来,很好的跟上了课程的进度。 ##### 2、社畜小花今天要参加一个领导主持的重要会议,会议内容十分的复杂并且紧凑,小花需要在认真理解的同时将要点整理出来,这对他来说具有一定的难度,而“记&录”APP可以帮他很好的解决这个问题,他在会议中只需要认真听领导指导并且给予回应就好。 ##### 3、学生小青在上课,前半段课非常的集中且认真,人们注意力集中的时间是有限的,这堂课又非常的漫长,于是小青中间走神了一会,下课后他想好好回顾一下老师讲的内容却发现有一段空缺了,“记&录”APP可以帮助他轻松地回归课堂。 #### ESG考量 ##### 利用电子笔记能够有效减少纸张与笔墨的使用率,大大减少了木材的消耗;利用云秘整理笔记能够高效的提高工作效率,提高社会必要劳动率。 ## 二、产品设计原型 ### 1、交互及界面设计 #### 首页界面 ![主页](https://images.gitee.com/uploads/images/2021/0123/143129_88ac4b74_5329172.png "主页.png") #### 语音转换界面 ![语音转换](https://images.gitee.com/uploads/images/2021/0123/143301_e8d71794_5329172.png "语音转换.png") #### 文字修正界面 ![文本修正](https://images.gitee.com/uploads/images/2021/0123/143439_0772ac6c_5329172.png "文本修正.png") #### 录音界面 ![录音](https://images.gitee.com/uploads/images/2021/0123/143607_4b55e757_5329172.png "录音界面.png") ### 2、信息设计 ![导图](https://images.gitee.com/uploads/images/2021/0124/185534_087acbf5_5329172.png "导图.png") ### 3、产品架构图 - ![1](https://images.gitee.com/uploads/images/2021/0123/145528_a2708cea_5329172.png "原型图1.png") - ![2](https://images.gitee.com/uploads/images/2021/0123/145555_3a22db6d_5329172.png "原型图2.png") - ![3](https://images.gitee.com/uploads/images/2021/0123/145612_fbf873ee_5329172.png "原型图3.png") - ![4](https://images.gitee.com/uploads/images/2021/0123/145624_49467a21_5329172.png "原型图4.png") - ![5](https://images.gitee.com/uploads/images/2021/0123/145636_7316212a_5329172.png "原型图5.png") ### 4、原型文档 #### 展示页面连接: - [记&录APP的原型](https://modao.cc/app/8ebfba94b40eb55758158aa6c3bee75437fcd9fb#screen=skk966shawjhqmk) ### 5、口头操作说明 大家好!今天为大家介绍一款语音记录产品,此产品使用了两个API,分别是腾讯云录音识别API和百度文本纠错API。主要的功能为通过用户使用APP进行录音生成录音文件或是选择使用本地录音对录音进行录音识别。通过录音识别API将录音转换为文本输出到APP的文本框内再保存到用户的手机储存内或是APP的云端内。辅助功能为选择云端内或本地的文本文件。通过文本纠错API对转换的文本内的病句、口误、停顿进行修改输出一份错误较少的文本文件再保存到用户的手机储存内或是APP的云端内供用户使用。 ## 三、API 产品使用及输出展示 ### 1、API展示说明及输出 ##### (1)语音识别(使用腾讯云API) * 录音、语音文件识别——语音识别API * 接口描述:语音识别(Automatic Speech Recognition,ASR)为开发者提供语音转文字服务的最佳体验,开放实时语音识别、一句话识别和录音文件识别三种服务形式,满足不同类型开发者需求,具备识别准确率高、接入便捷、性能稳定等特点。 * 接口地址: [腾讯云语音识别API](https://cloud.tencent.com/document/product/1093/52097) * 请求方式:POST(推荐)或 GET * 请求URL: https://asr.cloud.tencent.com/asr/flash/v1/?{请求参数} * 输入代码示例 ``` # -*- coding: utf-8 -*- from tencentcloud.common import credential from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException from tencentcloud.cvm.v20170312 import cvm_client, models try: cred = credential.Credential("AKID5YkhOqx4qMcdOtb7xXqseDWZM3UehEWY", "0SmqdARTFlHguvfAOgkZAgwvhEXdSIrI") client = cvm_client.CvmClient(cred, "ap-guangzhou") req = models.DescribeZonesRequest() resp = client.DescribeZones(req) print(resp.to_json_string()) except TencentCloudSDKException as err: print(err) ``` * 输出结果 ``` {"TotalCount":7,"ZoneSet":[{"Zone":"ap-guangzhou-1","ZoneName":"广州一区","ZoneId":"200001","ZoneState":"UNAVAILABLE"},{"Zone":"ap-guangzhou-2","ZoneName":"广州二区","ZoneId":"200002","ZoneState":"AVAILABLE"},{"Zone":"ap-guangzhou-3","ZoneName":"广州三区","ZoneId":"200003","ZoneState":"AVAILABLE"},{"Zone":"ap-guangzhou-4","ZoneName":"广州四区","ZoneId":"200004","ZoneState":"AVAILABLE"},{"Zone":"ap-guangzhou-5","ZoneName":"广州五区","ZoneId":"200005","ZoneState":"UNAVAILABLE"},{"Zone":"ap-guangzhou-6","ZoneName":"广州六区","ZoneId":"200006","ZoneState":"UNAVAILABLE"},{"Zone":"ap-guangzhou-7","ZoneName":"广州七区","ZoneId":"200007","ZoneState":"UNAVAILABLE"}],"RequestId":"58d2c758-48f8-49ce-808b-a7856776475d"} ``` * 使用token获取taskid ``` # -*- coding: utf-8 -*- 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 #音频 本地 方式 try: #此处需要替换成客户自己的账号信息 cred = credential.Credential("AKIDtd4JsFVYS8ctypqwAByc2HNI0UmqdiR6", "c2JrAE7pOjrkQt7C4oJchZDhz65rQmvr") httpProfile = HttpProfile() httpProfile.endpoint = "asr.tencentcloudapi.com" clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile clientProfile.signMethod = "TC3-HMAC-SHA256" client = asr_client.AsrClient(cred, "ap-guangzhou", clientProfile) req = models.CreateRecTaskRequest() params = {"EngineModelType":"16k_0","ChannelNum":1,"ResTextFormat":0,"SourceType":0,"Url":"http://ttsgz-1255628450.cos.ap-guangzhou.myqcloud.com/20200715/cbf318cd-273e-4b7c-bab0-50a1885c9b96.wav"} req._deserialize(params) resp = client.CreateRecTask(req) print(resp.to_json_string()) #windows 系统使用下面一行替换上面一行 #print(resp.to_json_string().decode('UTF-8').encode('GBK') ) except TencentCloudSDKException as err: print(err) ``` * 输出结果 ``` {"Data":{"TadkId":607078030},"RequestId":"133e3c8a9-2d95-4d4b-800c-a477ba2083e4"} ``` * 通过taskid调用腾讯录音识别API ``` 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 try: #此处需要替换成客户自己的账号信息 cred = credential.Credential("AKIDtd4JsFVYS8ctypqwAByc2HNI0UmqdiR6", "c2JrAE7pOjrkQt7C4oJchZDhz65rQmvr") httpProfile = HttpProfile() httpProfile.endpoint = "asr.tencentcloudapi.com" clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile client = asr_client.AsrClient(cred, "ap-guangzhou", clientProfile) req = models.DescribeTaskStatusRequest() params = '{"TaskId":607078030}' req.from_json_string(params) resp = client.DescribeTaskStatus(req) print(resp.to_json_string()) except TencentCloudSDKException as err: print(err) ``` * 输出结果 ``` {'Data':{'TaskId':60707830, 'Status':2, 'StatusStr':'success', 'Result':['0:0.361,0:1.289,0'] 你猜猜看。['0:1.289,0:7.810,1'] 啥啊,我要是猜得到就不会问你了。['0:8.210,0:11.190,1'] 那我还是告诉你吧。\n','ErrorMsg':''},'RequestId':'c426e6b4-79dc-7935-3825-8dce67e47c9a'} ``` ##### (2)语言处理技术-文本纠错(使用百度API) * 接口描述:识别输入文本中有错误的片段,提示错误并给出正确的文本结果。支持短文本、长文本、语音等内容的错误识别,纠错是搜索引擎、语音识别、内容审查等功能更好运行的基础模块之一。 * 接口地址: [百度API之文本纠错识别](https://ai.baidu.com/ai-doc/NLP/Ik6z52gp8) * 请求方式:POST * 请求URL:https://aip.baidubce.com/rpc/2.0/nlp/v1/ecnet * 输入代码获取access_token ``` import urllib.request import urllib,sys import ssl host = 'https://aip.baidubce.com/oauth/2.0/token?' \ 'grant_type=client_credentials&client_id=xoawcbnRv7p83QDKwKvLDeva&client_secret=aukP5tGVRqjE5uvoFItUaKF6QpjW9TUm' request = urllib.request.Request(host) request.add_header('Content-Type', 'application/json; charset=UTF-8') response = urllib.request.urlopen(request) content = response.read() if (content): print(content) ``` * 输出结果 ![1](https://images.gitee.com/uploads/images/2021/0122/170750_6ca1822b_5329172.png "文本纠错获取access_token.png") * 通过assess_token调用百度文本纠错API ``` # -*- coding: utf-8 -*- #!/usr/bin/env python import urllib import json #Access Token的有效期为30天(以秒为单位),请您集成时注意在程序中定期请求新的token #client_id 为官网获取的AK, client_secret 为官网获取的SK client_id ='xoawcbnRv7p83QDKwKvLDeva' client_secret ='aukP5tGVRqjE5uvoFItUaKF6QpjW9TUm' #获取token def get_token(): host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret request = urllib.request.Request(host) request.add_header('Content-Type', 'application/json; charset=UTF-8') response = urllib.request.urlopen(request) token_content = response.read() if token_content: token_info = json.loads(token_content) token_key = token_info['access_token'] return token_key def txt_correction(content): print('原文:', content) token = get_token() url = 'https://aip.baidubce.com/rpc/2.0/nlp/v1/ecnet' params = dict() params['text'] = content params = json.dumps(params).encode('utf-8') access_token = token url = url + "?access_token=" + access_token request = urllib.request.Request(url=url, data=params) request.add_header('Content-Type', 'application/json') response = urllib.request.urlopen(request) content = response.read() if content: content = content.decode('GB2312') data = json.loads(content) item = data['item'] print('纠错后:', item['correct_query']) print('Score:', item['score']) txt_correction('就是八个人') ``` * 输出结果 ``` 原文:就是八个人 纠错后:九十八个人 Score: 0.982835 ``` ### 各平台API使用及其定价表对比 #### 腾讯AI中的录音文件识别 * 开放平台使用链接:[腾讯AI中的录音文件识别](https://cloud.tencent.com/document/product/1093/37823) ![腾讯](https://images.gitee.com/uploads/images/2021/0122/170839_b59239b1_5329172.png "腾讯AI.png") #### 百度AI的短语音识别 * 开放平台使用链接:[百度AI的短语音识别](https://ai.baidu.com/tech/speech/asr) ![百度](https://images.gitee.com/uploads/images/2021/0122/170858_8ba36c29_5329172.png "百度产品定价.png") #### 阿里云的语音识别检测 * 开放平台使用链接:[阿里云的语音识别检测](https://help.aliyun.com/document_detail/141736.html?spm=5176.13910061.sslink.7.63d27a75sXPcOb) ![阿里云](https://images.gitee.com/uploads/images/2021/0122/171031_b5c6865d_5329172.png "阿里云.png") #### 腾讯AI与百度AI还有阿里云的输出结果比较 ##### (1)百度AI的录音识别只支持短录音,而腾讯和阿里家的录音识别也支持长录音。 ##### (2)三个平台的API的价格对比,百度AI的价格最便宜但是不支持长录音,此外腾讯AI的录音识别的价格最便宜为0.7一小时,而阿里云则是0.9一小时,所以相对来说腾讯家的相对便宜。 ##### (3)腾讯AI的录音识别速度是要比阿里家的快很多的,同样的音频腾讯家用了20秒不到而阿里家用了要1分多钟。 ### 总结 >- 价格上:百度<腾讯<阿里,但因为百度只能识别短语音所以选择腾讯家的录音识别更有优势。 >- 正确率上:腾讯>阿里(因为测试的是长语音百度无法比较就将其排除),腾讯在正确率上是高于阿里的以选择腾讯家的录音识别更有优势。 >- 速度上:腾讯>阿里(因为测试的是长语音百度无法比较就将其排除),腾讯在输出用的时间是阿里的四分之一以选择腾讯家的录音识别更有优势。 ### 3、使用后风险报告 ##### (1)录音识别 * 输入文件都是以wav或是mp3格式为主的,输入的文件格式还是有一定的限制的。 * 腾讯AI的录音识别受录音内的噪音影响较大会出现有非录音内容的文本。 * 目前基本上国内的开放平台都有录音识别这个API接口,可以说竞争是很大的。 * 录音识别API可以使用在会议总结、庭审录入、医院病历录入等多方面,还是有一定发展前景的。 ##### (2)文本纠错 * 目前国内只有百度一家有比较成熟的文本纠错API接口,竞争不是太大。 * 文本纠错API可以使用在搜索纠错和写作辅助等方面,有一定发展前景。 ### 学习/实践心得及感谢 #### 本学期通过对《API、机器学习与人工智能》的学习,我学习到了很多,比如如何在各AI平台中调用api文档等,在学习这门课程的过程中也会遇到许多困难和收获,课程内容很难也很紧凑,且每周只有一次课,这就需要我们课下多多练习和操作,在听下次课才不会感到吃力,很好的培养自己独立思考的能力。同时感谢本课程老师给予我们认真负责的教学,这门课对于拓展专业及相关知识面、解决问题的能力让我受益匪浅。在完成本文档时,我参考了许多资源,在此真心对[百度AI](https://ai.baidu.com/?track=cp:aipinzhuan|pf:pc|pp:AIpingtai|pu:title|ci:|kw:10005792)、[腾讯AI](https://ai.qq.com/)、[阿里云AI](https://ai.aliyun.com/)表示感谢,能让我学习到许多关于API的相关知识;感谢[墨刀](https://www.modao.cc/),提供了一个很棒的制作APP原型图工具;感谢[百度脑图](https://naotu.baidu.com/),提供了一个很方便的制作导图的工具,感谢!