摘要:闲着没事用多模态评测API做了一个测评英语口语的互动小游戏,居然成了一场10万人参与的刷屏级活动。

上一期故事说到,我成为了公司技术委员会副主席,上任后的第一件事是建立了一个云容器化的研发资料库,把每个研发硬盘里那点“好东西”都复用出来。(详情查看:《无法想象!大龄码农的硬盘里有这么多宝藏》)

自此以后,老大交给我的撸代码的活越来越少,让我专心把技术委员会做起来。人一闲下来吧,就容易生事儿,这不么,闲着没事做了一个互动小游戏,运营妹子从公众号上推了张海报,居然成了一场10万人参与的刷屏级活动。

咋回事呢?大概是7月25号,我看到一条新闻,北京2021年高考要增加英语口语考试。妈耶,这也太突然了,这不跟产品经理突然提需求、微博的运维赶上明星突然宣布结婚/分手一样让人猝不及防么。

很快,有孩子正上高中的家长都在朋友圈转发了这条消息,这事的关注度这么高啊?总听说运营擅长抓热点,那我是不是也可以做点什么抓住这次热点呢?

对于这个政策,家长和学生最关注最需要的是什么?考口语,首先得知道自己的口语水平怎么样,知道短板在哪才能有针对性地补习提高。那就是说需要口语测评!

我想起之前在华为云官网上看到过一个“多模态评测”API,能够根据朗读视频数据和试题文本,给朗读者的口语评测分数。我可以利用这个API做一个测评类的H5小游戏。

按照我的习惯,实现功能的过程会同步梳理成文档,便于后浪们学习。

《多模态英语口语评测》

内容来源

多模态口语现在还在公测阶段,所以我提前在华为云上申请了公测,当天就公测通过了~(公测链接:https://activity.huaweicloud.com/AI_free0.html?ggw_hd )

步骤一:数据准备

l 支持的video类型包括avi/mp4/webm/mkv/flv等封装格式,视频清晰度不低于240p,帧率不低于25fps,大小限制在10M

l 支持语言:英式英语

l 评测模式:单词评测、句子评测

l 需要把视频转化为对应的base64编码上传

转化举例(Python)

#!/usr/bin/env python
# encoding: utf- import base64
def ToBase64(file, txt):
with open(file, 'rb') as fileObj:
image_data = fileObj.read()
base64_data = base64.b64encode(image_data)
fout = open(txt, 'w')
fout.write(base64_data.decode())
fout.close()
ToBase64("./test.wav",'2.txt') # 音频文件转换为base64

步骤二:构建请求

华为云语音交互服务的通用请求方式如下图所示。

备注:

l 多模态评测API目前处于公测阶段,在华为-北京四可以调用,其Endpoint为“sis-ext.cn-north-4.myhuaweicloud.com”。

l 需要确认个人专有华为云项目ID和Token(身份认证)

项目ID获取方法Token查询方法

获取了身份认证后,就可以填写请求了。假设我现在有一个avi格式的文件,想用单词模式去判断口语质量,我要学习的口语是“sit down”。

请求示例是:

POST https://{endpoint}/v1/{project_id}/assessment/video

Request Header:
Content-Type: application/json
X-Auth-Token: MIINRwYJKoZIhvcNAQcCoIINODCCDTQCAQExDTALBglghkgBZQMEAgEwgguVBgkqhkiG... Request Body:
{
"config":{
"video_format": "avi",
"language": "en_gb",
"mode": "word"
},
"video_data": "/+MgxAAUeHpMAUkQAANhuRAC...",
"ref_text": "sit down"
}

步骤三:返回结果

{
"fluency": {
"score": 75.02139,
"rhythm": 50.042786,
"cohesion": 100.0
},
"pronunciation": {
"score": 36.817684,
"gop": 36.817684
},
"score": 22.09061,
"completeness": 0.0,
"duration": 2.46,
"words": [此后为音素、音标评价结果,其返回结果见下方]

从返回的结果可以看到:

(1)从流利度看:流利度评分75.02;连贯性是满分;韵律弱一点,只有50.04分

(2)从发音看:我的发音质量综合打分(score)是36.82分;发音好坏打分是36.82分

(3)最后的综合评分:22.09分…

哎,还挺准确,我从小英语口语就差…

还能进行英语口语练习,从发音嘴型、发音效果纠正口语。通过具体的单一单词、音素、音标打分,就能知道需要对哪个单词、音标加强练习了。

以“sit”发音评测为例,反馈结果如下:

"words": [
{
"fluency": {
"score": 68.29714,
"rhythm": 68.29714
},
"pronunciation": {
"score": 24.714167,
"gop": 24.714167
},
"out_of_vocabulary": false,
"text": "sit",
"text_original": "sit",
"text_normalised": [
"sit"
],
"score": 46.505653,
"start_time": 1.03,
"end_time": 1.06,
"phonemes": [
{
"fluency": {
"score": 31.643274,
"rhythm": 31.643274
},
"pronunciation": {
"score": 16.471563,
"gop": 16.471563
},
"start_time": 1.03,
"end_time": 1.04,
"arpa": "S",
"ipa": "s"
},
{
"fluency": {
"score": 87.00653,
"rhythm": 87.00653
},
"pronunciation": {
"score": 28.179922,
"gop": 28.179922
},
"start_time": 1.04,
"end_time": 1.05,
"arpa": "IH",
"ipa": "i"
},
{
"fluency": {
"score": 86.241615,
"rhythm": 86.241615
},
"pronunciation": {
"score": 29.491013,
"gop": 29.491013
},
"start_time": 1.05,
"end_time": 1.06,
"arpa": "T",
"ipa": "t"
}
]
},
],
}

很快我就把小游戏做完了,以口语能力测评为核心玩法,加入了邀请好友再玩一次的分享引导机制,没想到只是从公司公众号上推了一下,朋友圈里居然刷了屏,上线3天,游戏人数就超过了10万人!一次由研发主导的10W+刷屏活动就这样诞生了,谁说研发不懂运营?

据了解,目前API Explorer平台已开放EI企业智能、计算、应用服务、网络、软件开发平台、视频等70+云服务,共上线2000+个API、6000+个错误码。在前期试运行期间,华为云API Explorer平台上的API接口也已被多家企业成功接入。

点击查看详情:《华为云一站式API解决方案平台API Explorer上线》

华为云API Explorer平台在未来几个月会实现更多功能,比如支持SDK示例代码、CLI等特性,同时也会开放更多的云服务API接口,连接更多开发者实现创新、拓宽创新边界。

点击关注,第一时间了解华为云新鲜技术~

【API进阶之路】高考要考口语?我用多模态评测API做了一场10w+刷屏活动的更多相关文章

  1. 【API进阶之路】API带来的微创新,打动投资人鼓励我创业

    摘要:怎么帮助创作者提高视频的推荐量呢?我发现了:视频的封面图非常重要. 上回说到,老板一拍脑门,交代了一个新项目:小成本开发一款短视频剪辑工具([<[API进阶之路]人少钱少需求多的新项目该怎 ...

  2. 【API进阶之路】帮公司省下20万调研费!如何巧用情感分析API实现用户偏好调研

    摘要:自从学习API后,仿佛解锁了新技能,可别小看了一个小小的API接口,用好了都是能力无穷.这不,用情感分析API来做用户偏好调研,没想到这么一个小创意给公司省了20万调研费用. 上次借着高考热点整 ...

  3. 【API进阶之路】破圈,用一个API代替10人内容团队

    摘要:我用一个API代替10人内容团队,一年帮老板省了一百万. 自从学习API以后,我用技术手段相继帮助业务部.市场部解决了不少难题,算是从纯研发破圈发展到了业务端.老板召开业务讨论会的时候也会带上我 ...

  4. 【API进阶之路】无法想象!大龄码农的硬盘里有这么多宝藏

    摘要:通过把所需建立的工具库做成云容器化应用,用CCE引擎,通过API网关调用云容器引擎中的容器应用.不仅顺应了云原生的发展趋势,还能随时弹性扩容,满足公司规模化发展的需求. 公司开完年中会后,大家的 ...

  5. 【API进阶之路6】一个技术盲点,差点让整个项目翻车

    上次教了实习生一个方案之后,这小子跟运营妹子的关系是越走越近,时不时地撒把狗粮,在我司真正实现了研发运营一家亲~(上回你没看?戳上文剧情回顾:万万没想到,一个技术方案帮实习生追到了运营妹子) 这回想跟 ...

  6. 【API进阶之路】老板给我涨薪30%!如何通过SDK接口搞定千万级流量直播

    摘要:看我如何通过API Explorer 的SDK接口搞定千万级流量直播. 最近几个月,我的变化其实还蛮大的,从一个被实习生“无视”的“前浪”,转变成了不仅能够解决技术问题还能解决业务问题(顺手还能 ...

  7. 【API进阶之路】逆袭!用关键词抽取API搞定用户需求洞察

    摘要: 老大说,我这份用关键词抽取API搞定的用户需求洞察报告,简直比比市场调研的科班人士做得还好. 最近这半个月的午饭,那可是相当不错,市场老大天天请吃饭,不是外面下馆子,就是从家带饺子.说是感谢我 ...

  8. 【API进阶之路】用API打造一条自动化内容生产流水线

    摘要:搞定了内容审核之后,我又把抓取工具.内容审核API.文本摘要生成API串联在一起,从抓到审再到编,建立了一条自动化的内容生产流水线,编辑团队只需要做优质内容的推荐就可以了. 上周,运营部将官网上 ...

  9. 【API进阶之路】研发需求突增3倍,测试团队集体闹离职

    摘要:最近研发的需求量涨了3倍,开发团队拼命赶进度,可苦了测试团队. 本以为从一线研发转管理后会清闲一些,但是没想到,我还要充当救火队员的角色. 到了第四季度,各业务部门都在憋着劲儿冲业绩,毕竟这跟年 ...

随机推荐

  1. Guava的两种本地缓存策略

    Guava的两种缓存策略 缓存在很多场景下都需要使用,如果电商网站的商品类别的查询,订单查询,用户基本信息的查询等等,针对这种读多写少的业务,都可以考虑使用到缓存.在一般的缓存系统中,除了分布式缓存, ...

  2. Java常用API(ArrayList类)

    Java常用API(ArrayList类) 我们为什么要使用ArrayList类? 为了更加方便的储存对象,因为使用普通的数组来存储对象太过麻烦了,因为数组的一个很大的弱点就是长度从一开始就固定了,所 ...

  3. 仔细想想SpringAOP也不难嘛,面试没有必要慌

    文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star! 搜索关注微信公众号 码出Offer 领取各种学习资料! LOGO SpringAOP 一.什么是AOP AOP(As ...

  4. bootstrap样式:.clearfix

    我们知道,在静态页面的编写中,清除浮动是一件很繁琐的事情. 所以一般的CSS框架都会有用来清除浮动的样式. 在bootstrap中,这个样式叫 clearfix. 只要在需要清除浮动的元素的父元素加上 ...

  5. 2万字长文包教包会 JVM 内存结构 保姆级学习笔记

    写这篇的主要原因呢,就是为了能在简历上写个"熟悉JVM底层结构",另一个原因就是能让读我文章的大家也写上这句话,真是个助人为乐的帅小伙....嗯,不单单只是面向面试学习哈,更重要的 ...

  6. vue-cli 2.x和3.x配置移动端适配px自动转为rem

    移动端适配一直都是个大问题,现在也出现了各种各样的解决方案,比如 rem, vw 百分比等,但是比较成熟的切比较容易编写的还是 rem,他是相对于根元素的 font-size 进行等比例计算的. 但是 ...

  7. Puppeteer爬虫实战(三)

    本篇文章针对大家熟知的技术站点作为目标进行技术实践. 确定需求   访问目标网站并按照筛选条件(关键词.日期.作者)进行检索并获取返回数据中的目标数据.进行技术拆分如下: 打开目标网站 找到输入框元素 ...

  8. webpack的使用 一、webpack 和webpack的安装

    本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应用程序时, 它会递归地构建一个依赖关系图(dependen ...

  9. springboot文件上传 流的方式 后台计算上传进度

    //代码 public static void main(String[] args) throws Exception { String path = "f:/svn/t_dictiona ...

  10. 自动化不知如何参数化(二)?xlrd来帮你解决

    在昨天的博文中介绍了普通单元格数据的获取,以及单元格数据类型的转换,详细见博文:自动化不知如何参数化(一)?xlrd来帮你解决. 昨天的那篇博文中,还有个获取合并单元格数据的问题没解决,今天就专门来讲 ...